]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
TSTRAT test
[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 .visual-privacy .private-data {
6870 display: none;
6871 }
6872 </style>
6873 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
6874 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
6875 <meta content="bitcoin mnemonic converter" name="description" />
6876 <meta content="Ian Coleman" name="author" />
6877 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
6878 </head>
6879 <body>
6880 <div class="container">
6881
6882 <h1 class="text-center">Mnemonic Code Converter</h1>
6883 <p class="version">v0.3.7</p>
6884 <hr>
6885 <div class="row">
6886 <div class="col-md-12">
6887 <h2>Mnemonic</h2>
6888 <form class="form-horizontal" role="form">
6889 <div class="form-group">
6890 <div class="col-sm-2"></div>
6891 <div class="col-sm-10">
6892 <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>
6893 <p>
6894 For more info see the
6895 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
6896 </p>
6897 </div>
6898 </div>
6899 <div class="form-group generate-container">
6900 <label class="col-sm-2 control-label"></label>
6901 <div class="col-sm-10">
6902 <div class="form-inline">
6903 <div class="input-group-inline">
6904 <span>Generate a random mnemonic, or enter your own below</span>:
6905 <button class="btn generate">Generate</button>
6906 <select id="strength" class="strength form-control">
6907 <option value="3">3</option>
6908 <option value="6">6</option>
6909 <option value="9">9</option>
6910 <option value="12">12</option>
6911 <option value="15" selected>15</option>
6912 <option value="18">18</option>
6913 <option value="21">21</option>
6914 <option value="24">24</option>
6915 </select>
6916 <span>words</span>.
6917 <p class="warning help-block hidden">
6918 <span class="text-danger">
6919 Mnemonics with less than 12 words have low entropy and may be guessed by an attacker.
6920 </span>
6921 </p>
6922 </div>
6923 </div>
6924 </div>
6925 </div>
6926 <div class="entropy-container hidden">
6927 <div class="form-group text-danger">
6928 <label class="col-sm-2 control-label">Warning</label>
6929 <div class="col-sm-10 form-control-static">
6930 <span>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
6931 <a href="#entropy-notes">Read more</a>
6932 </div>
6933 </div>
6934 <div class="form-group">
6935 <label for="entropy" class="col-sm-2 control-label">Entropy</label>
6936 <div class="col-sm-7">
6937 <textarea id="entropy" rows="2" class="entropy private-data form-control" placeholder="Accepts either binary, base 6, 6-sided dice, base 10, hexadecimal or cards"></textarea>
6938 <div class="row filter-warning text-danger hidden">
6939 <p class="col-sm-12">
6940 <strong>
6941 Some characters have been discarded
6942 </strong>
6943 </p>
6944 </div>
6945 <div class="row">
6946 <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>
6947 <div class="crack-time col-sm-3 form-control-static"></div>
6948 <label class="col-sm-3 control-label">Event Count</label>
6949 <div class="event-count col-sm-3 form-control-static"></div>
6950 </div>
6951 <div class="row">
6952 <label class="col-sm-3 control-label">Entropy Type</label>
6953 <div class="type col-sm-3 form-control-static"></div>
6954 <label class="col-sm-3 control-label">Bits Per Event</label>
6955 <div class="bits-per-event col-sm-3 form-control-static"></div>
6956 </div>
6957 <div class="row">
6958 <label class="col-sm-3 control-label">Raw Entropy Words</label>
6959 <div class="word-count col-sm-3 form-control-static"></div>
6960 <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>
6961 <div class="bits col-sm-3 form-control-static"></div>
6962 </div>
6963 <label class="col-sm-3 control-label">Filtered Entropy</label>
6964 <div class="filtered private-data col-sm-9 form-control-static"></div>
6965 <label class="col-sm-3 control-label">Raw Binary</label>
6966 <div class="binary private-data col-sm-9 form-control-static"></div>
6967 <label class="col-sm-3 control-label">Binary Checksum</label>
6968 <div class="checksum private-data col-sm-9 form-control-static">&nbsp;</div>
6969 <label class="col-sm-3 control-label">Word Indexes</label>
6970 <div class="word-indexes private-data col-sm-9 form-control-static">&nbsp;</div>
6971 <label class="col-sm-3 control-label">Mnemonic Length</label>
6972 <div class="col-sm-9">
6973 <select class="mnemonic-length form-control">
6974 <option value="raw" selected>Use Raw Entropy (3 words per 32 bits)</option>
6975 <option value="12">12 <span>Words</span></option>
6976 <option value="15">15 <span>Words</span></option>
6977 <option value="18">18 <span>Words</span></option>
6978 <option value="21">21 <span>Words</span></option>
6979 <option value="24">24 <span>Words</span></option>
6980 </select>
6981 <p class="weak-entropy-override-warning hidden">
6982 <span class="text-danger">
6983 The mnemonic will appear more secure than it really is.
6984 </span>
6985 </p>
6986 </div>
6987 </div>
6988 <div class="col-sm-3">
6989 <p>Valid entropy values include:</p>
6990 <ul>
6991 <li><strong>Binary</strong> [0-1]<br>101010011</li>
6992 <li><strong>Base 6</strong> [0-5]<br>123434014</li>
6993 <li><strong>Dice</strong> [1-6]<br>62535634</li>
6994 <li><strong>Base 10</strong> [0-9]<br>90834528</li>
6995 <li><strong>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
6996 <li><strong>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
6997 </ul>
6998 </div>
6999 </div>
7000 </div>
7001 <div class="form-group">
7002 <div class="col-sm-2"></div>
7003 <div class="col-sm-10 checkbox">
7004 <label>
7005 <input type="checkbox" class="use-entropy">
7006 <span>Show entropy details</span>
7007 </label>
7008 </div>
7009 </div>
7010 <div class="form-group">
7011 <div class="col-sm-2"></div>
7012 <div class="col-sm-10 checkbox">
7013 <label>
7014 <input type="checkbox" class="privacy-screen-toggle">
7015 <span>Hide all private info</span>
7016 </label>
7017 </div>
7018 </div>
7019 <div class="form-group">
7020 <label class="col-sm-2 control-label">Mnemonic Language</label>
7021 <div class="col-sm-10 languages">
7022 <div class="form-control no-border">
7023 <a href="#english">English</a>
7024 <a href="#japanese" title="Japanese">日本語</a>
7025 <a href="#spanish" title="Spanish">Español</a>
7026 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
7027 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
7028 <a href="#french" title="French">Français</a>
7029 <a href="#italian" title="Italian">Italiano</a>
7030 <a href="#korean" title="Korean">한국어</a>
7031 </div>
7032 </div>
7033 </div>
7034 <div class="form-group">
7035 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
7036 <div class="col-sm-10">
7037 <textarea id="phrase" class="phrase private-data form-control" data-show-qr></textarea>
7038 </div>
7039 </div>
7040 <div class="form-group">
7041 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
7042 <div class="col-sm-10">
7043 <textarea id="passphrase" class="passphrase private-data form-control"></textarea>
7044 </div>
7045 </div>
7046 <div class="form-group">
7047 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
7048 <div class="col-sm-10">
7049 <textarea id="seed" class="seed private-data form-control" readonly="readonly" data-show-qr></textarea>
7050 </div>
7051 </div>
7052 <div class="form-group">
7053 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
7054 <div class="col-sm-10">
7055 <select id="network-phrase" class="network form-control">
7056 <!-- populated by javascript -->
7057 </select>
7058 </div>
7059 </div>
7060 <div class="form-group">
7061 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
7062 <div class="col-sm-10">
7063 <textarea id="root-key" class="root-key private-data form-control" data-show-qr></textarea>
7064 </div>
7065 </div>
7066 <div class="form-group litecoin-ltub-container hidden">
7067 <label for="litecoin-use-ltub" class="col-sm-2 control-label">Prefixes</label>
7068 <div class="col-sm-10 checkbox">
7069 <label>
7070 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub" checked="checked">
7071 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
7072 </label>
7073 </div>
7074 </div>
7075 </form>
7076 </div>
7077 </div>
7078
7079 <hr>
7080
7081 <div class="row">
7082 <div class="col-md-12">
7083 <h2>Derivation Path</h2>
7084 <ul class="derivation-type nav nav-tabs" role="tablist">
7085 <li id="bip32-tab">
7086 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
7087 </li>
7088 <li id="bip44-tab" class="active">
7089 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
7090 </li>
7091 <li id="bip49-tab">
7092 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
7093 </li>
7094 <li id="bip84-tab">
7095 <a href="#bip84" role="tab" data-toggle="tab">BIP84</a>
7096 </li>
7097 <li id="bip141-tab">
7098 <a href="#bip141" role="tab" data-toggle="tab">BIP141</a>
7099 </li>
7100 </ul>
7101 <div class="derivation-type tab-content">
7102 <div id="bip44" class="tab-pane active">
7103 <form class="form-horizontal" role="form">
7104 <br>
7105 <div class="col-sm-2"></div>
7106 <div class="col-sm-10">
7107 <p>
7108 For more info see the
7109 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
7110 </p>
7111 </div>
7112 <div class="form-group">
7113 <label for="purpose" class="col-sm-2 control-label">
7114 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7115 </label>
7116 <div class="col-sm-10">
7117 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
7118 </div>
7119 </div>
7120 <div class="form-group">
7121 <label for="coin" class="col-sm-2 control-label">
7122 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7123 </label>
7124 <div class="col-sm-10">
7125 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7126 </div>
7127 </div>
7128 <div class="form-group">
7129 <label for="account" class="col-sm-2 control-label">
7130 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7131 </label>
7132 <div class="col-sm-10">
7133 <input id="account" type="text" class="account form-control" value="0">
7134 </div>
7135 </div>
7136 <div class="form-group">
7137 <label for="change" class="col-sm-2 control-label">
7138 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7139 </label>
7140 <div class="col-sm-10">
7141 <input id="change" type="text" class="change form-control" value="0">
7142 </div>
7143 </div>
7144 <div class="form-group">
7145 <label class="col-sm-2 control-label">
7146 </label>
7147 <div class="col-sm-10">
7148 <p>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
7149 </div>
7150 </div>
7151 <div class="form-group">
7152 <label for="account-xprv" class="col-sm-2 control-label">
7153 <span>Account Extended Private Key</span>
7154 </label>
7155 <div class="col-sm-10">
7156 <textarea id="account-xprv" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
7157 </div>
7158 </div>
7159 <div class="form-group">
7160 <label for="account-xpub" class="col-sm-2 control-label">
7161 <span>Account Extended Public Key</span>
7162 </label>
7163 <div class="col-sm-10">
7164 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7165 </div>
7166 </div>
7167 <div class="form-group">
7168 <label class="col-sm-2 control-label">
7169 </label>
7170 <div class="col-sm-10">
7171 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7172 </div>
7173 </div>
7174 <div class="form-group">
7175 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7176 <div class="col-sm-10">
7177 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
7178 </div>
7179 </div>
7180 </form>
7181 </div>
7182 <div id="bip32" class="tab-pane">
7183 <form class="form-horizontal" role="form">
7184 <br>
7185 <div class="col-sm-2"></div>
7186 <div class="col-sm-10">
7187 <p>
7188 For more info see the
7189 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
7190 </p>
7191 </div>
7192 <div class="form-group">
7193 <label for="bip32-client" class="col-sm-2 control-label">Client</label>
7194 <div class="col-sm-10">
7195 <select id="bip32-client" class="client form-control">
7196 <option value="custom">Custom derivation path</option>
7197 <!-- populated by javascript -->
7198 </select>
7199 </div>
7200 </div>
7201 <div class="form-group">
7202 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7203 <div class="col-sm-10">
7204 <input id="bip32-path" type="text" class="path form-control" value="m/0">
7205 </div>
7206 </div>
7207 <div class="form-group">
7208 <div class="col-sm-2"></div>
7209 <label class="col-sm-10">
7210 <input class="hardened-addresses" type="checkbox">
7211 <span>Use hardened addresses</span>
7212 </label>
7213 </div>
7214 <div class="form-group">
7215 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
7216 <div class="col-sm-10">
7217 <p class="form-control no-border">
7218 Use path <code>m/0'/0'</code> with hardened addresses.
7219 </p>
7220 <p class="form-control no-border">
7221 For more info see the
7222 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
7223 </p>
7224 </div>
7225 </div>
7226 <div class="form-group">
7227 <label for="core-path" class="col-sm-2 control-label">Multibit</label>
7228 <div class="col-sm-10">
7229 <p class="form-control no-border">
7230 <span>Use path <code>m/0'/0</code>.</span>
7231 </p>
7232 <p class="form-control no-border">
7233 <span>For more info see</span>
7234 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
7235 </p>
7236 </div>
7237 </div>
7238 <div class="form-group">
7239 <label class="col-sm-2 control-label">Block Explorers</label>
7240 <div class="col-sm-10">
7241 <p class="form-control no-border">
7242 <span>Use path <code>m/44'/0'/0'</code>.</span>
7243 <span>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
7244 </p>
7245 <p class="form-control no-border">
7246 <span>Can be used with</span>:
7247 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
7248 </p>
7249 </div>
7250 </div>
7251 </form>
7252 </div>
7253 <div id="bip49" class="tab-pane">
7254 <form class="form-horizontal" role="form">
7255 <br>
7256 <div class="unavailable hidden">
7257 <div class="form-group">
7258 <div class="col-sm-2"></div>
7259 <div class="col-sm-10">
7260 <p>BIP49 is unavailable for this coin.</p>
7261 </div>
7262 </div>
7263 </div>
7264 <div class="available">
7265 <div class="col-sm-2"></div>
7266 <div class="col-sm-10">
7267 <p>
7268 For more info see the
7269 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
7270 </p>
7271 </div>
7272 <div class="form-group">
7273 <label for="purpose" class="col-sm-2 control-label">
7274 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
7275 </label>
7276 <div class="col-sm-10">
7277 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
7278 </div>
7279 </div>
7280 <div class="form-group">
7281 <label for="coin" class="col-sm-2 control-label">
7282 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
7283 </label>
7284 <div class="col-sm-10">
7285 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7286 </div>
7287 </div>
7288 <div class="form-group">
7289 <label for="account" class="col-sm-2 control-label">
7290 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
7291 </label>
7292 <div class="col-sm-10">
7293 <input id="account" type="text" class="account form-control" value="0">
7294 </div>
7295 </div>
7296 <div class="form-group">
7297 <label for="change" class="col-sm-2 control-label">
7298 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
7299 </label>
7300 <div class="col-sm-10">
7301 <input id="change" type="text" class="change form-control" value="0">
7302 </div>
7303 </div>
7304 <div class="form-group">
7305 <label class="col-sm-2 control-label">
7306 </label>
7307 <div class="col-sm-10">
7308 <p>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
7309 </div>
7310 </div>
7311 <div class="form-group">
7312 <label for="account-xprv" class="col-sm-2 control-label">
7313 <span>Account Extended Private Key</span>
7314 </label>
7315 <div class="col-sm-10">
7316 <textarea id="account-xprv" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
7317 </div>
7318 </div>
7319 <div class="form-group">
7320 <label for="account-xpub" class="col-sm-2 control-label">
7321 <span>Account Extended Public Key</span>
7322 </label>
7323 <div class="col-sm-10">
7324 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7325 </div>
7326 </div>
7327 <div class="form-group">
7328 <label class="col-sm-2 control-label">
7329 </label>
7330 <div class="col-sm-10">
7331 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7332 </div>
7333 </div>
7334 <div class="form-group">
7335 <label for="bip49-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7336 <div class="col-sm-10">
7337 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
7338 </div>
7339 </div>
7340 </div>
7341 </form>
7342 </div>
7343 <div id="bip141" class="tab-pane">
7344 <form class="form-horizontal" role="form">
7345 <br>
7346 <div class="unavailable hidden">
7347 <div class="form-group">
7348 <div class="col-sm-2"></div>
7349 <div class="col-sm-10">
7350 <p>BIP141 is unavailable for this coin.</p>
7351 </div>
7352 </div>
7353 </div>
7354 <div class="available">
7355 <div class="col-sm-2"></div>
7356 <div class="col-sm-10">
7357 <p>
7358 For more info see the
7359 <a href="https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki" target="_blank">BIP141 spec</a>
7360 </p>
7361 </div>
7362 <div class="form-group">
7363 <label for="bip141-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7364 <div class="col-sm-10">
7365 <input id="bip141-path" type="text" class="bip141-path form-control" value="m/0">
7366 </div>
7367 </div>
7368 <div class="form-group">
7369 <label class="col-sm-2 control-label">Script Semantics</label>
7370 <div class="col-sm-10">
7371 <select class="form-control bip141-semantics">
7372 <option value="p2wpkh">P2WPKH</option>
7373 <option value="p2wpkh-p2sh" selected>P2WPKH nested in P2SH</option>
7374 </select>
7375 </div>
7376 </div>
7377 </div>
7378 </form>
7379 </div>
7380 <div id="bip84" class="tab-pane">
7381 <form class="form-horizontal" role="form">
7382 <br>
7383 <div class="unavailable hidden">
7384 <div class="form-group">
7385 <div class="col-sm-2"></div>
7386 <div class="col-sm-10">
7387 <p>BIP84 is unavailable for this coin.</p>
7388 </div>
7389 </div>
7390 </div>
7391 <div class="available">
7392 <div class="col-sm-2"></div>
7393 <div class="col-sm-10">
7394 <p>
7395 For more info see the
7396 <a href="https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki" target="_blank">BIP84 spec</a>.
7397 </p>
7398 </div>
7399 <div class="form-group">
7400 <label for="purpose" class="col-sm-2 control-label">
7401 Purpose
7402 </label>
7403 <div class="col-sm-10">
7404 <input id="purpose" type="text" class="purpose form-control" value="84" readonly>
7405 </div>
7406 </div>
7407 <div class="form-group">
7408 <label for="coin" class="col-sm-2 control-label">
7409 Coin
7410 </label>
7411 <div class="col-sm-10">
7412 <input id="coin" type="text" class="coin form-control" value="0" readonly>
7413 </div>
7414 </div>
7415 <div class="form-group">
7416 <label for="account" class="col-sm-2 control-label">
7417 Account
7418 </label>
7419 <div class="col-sm-10">
7420 <input id="account" type="text" class="account form-control" value="0">
7421 </div>
7422 </div>
7423 <div class="form-group">
7424 <label for="change" class="col-sm-2 control-label">
7425 External / Internal
7426 </label>
7427 <div class="col-sm-10">
7428 <input id="change" type="text" class="change form-control" value="0">
7429 </div>
7430 </div>
7431 <div class="form-group">
7432 <label class="col-sm-2 control-label">
7433 </label>
7434 <div class="col-sm-10">
7435 <p>The account extended keys can be used for importing to most BIP84 compatible wallets.</p>
7436 </div>
7437 </div>
7438 <div class="form-group">
7439 <label for="account-xprv" class="col-sm-2 control-label">
7440 <span>Account Extended Private Key</span>
7441 </label>
7442 <div class="col-sm-10">
7443 <textarea id="account-xprv" type="text" class="account-xprv private-data form-control" readonly data-show-qr></textarea>
7444 </div>
7445 </div>
7446 <div class="form-group">
7447 <label for="account-xpub" class="col-sm-2 control-label">
7448 <span>Account Extended Public Key</span>
7449 </label>
7450 <div class="col-sm-10">
7451 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
7452 </div>
7453 </div>
7454 <div class="form-group">
7455 <label class="col-sm-2 control-label">
7456 </label>
7457 <div class="col-sm-10">
7458 <p>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
7459 </div>
7460 </div>
7461 <div class="form-group">
7462 <label for="bip84-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
7463 <div class="col-sm-10">
7464 <input id="bip84-path" type="text" class="path form-control" value="m/84'/0'/0'/0" readonly="readonly">
7465 </div>
7466 </div>
7467 </div>
7468 </form>
7469 </div>
7470 </div>
7471 <form class="form-horizontal" role="form">
7472 <div class="form-group">
7473 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Private Key</label>
7474 <div class="col-sm-10">
7475 <textarea id="extended-priv-key" class="extended-priv-key private-data form-control" readonly="readonly" data-show-qr></textarea>
7476 </div>
7477 </div>
7478 <div class="form-group">
7479 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Public Key</label>
7480 <div class="col-sm-10">
7481 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
7482 </div>
7483 </div>
7484 </form>
7485 </div>
7486 </div>
7487
7488 <hr>
7489
7490 <div class="row">
7491 <div class="col-md-12">
7492 <h2>Derived Addresses</h2>
7493 <p>Note these addresses are derived from the BIP32 Extended Key</p>
7494 </div>
7495 <div class="col-md-12 bch-addr-type-container hidden">
7496 <div class="radio">
7497 <label>
7498 <input type="radio" value="cashaddr" name="bch-addr-type" class="use-bch-cashaddr-addresses" checked="checked">
7499 <span>Use CashAddr addresses for Bitcoin Cash (ie starting with 'q' instead of '1')</span>
7500 </label>
7501 </div>
7502 <div class="radio">
7503 <label>
7504 <input type="radio" value="bitpay" name="bch-addr-type" class="use-bch-bitpay-addresses">
7505 <span>Use BitPay-style addresses for Bitcoin Cash (ie starting with 'C' instead of '1')</span>
7506 </label>
7507 </div>
7508 <div class="radio">
7509 <label>
7510 <input type="radio" value="legacy" name="bch-addr-type" class="use-bch-legacy-addresses">
7511 <span>Use legacy addresses for Bitcoin Cash (ie starting with '1')</span>
7512 </label>
7513 </div>
7514 </div>
7515 <div class="col-md-12">
7516 <div class="checkbox">
7517 <label>
7518 <input type="checkbox" class="use-bip38">
7519 <span>Encrypt private keys using BIP38 and this password:</span>
7520 </label>
7521 <input class="bip38-password private-data">
7522 <span>Enabling BIP38 means each key will take several minutes to generate.</span>
7523 </div>
7524 </div>
7525 <ul class="addresses-type nav nav-tabs" role="tablist">
7526 <li id="table-tab" class="active">
7527 <a href="#table" role="tab" data-toggle="tab">Table</a>
7528 </li>
7529 <li id="csv-tab">
7530 <a href="#csv" role="tab" data-toggle="tab">CSV</a>
7531 </li>
7532 </ul>
7533 <div class="addresses-type tab-content">
7534 <div id="table" class="tab-pane active">
7535 <div class="col-md-12">
7536 <table class="table table-striped">
7537 <thead>
7538 <th>
7539 <div class="input-group">
7540 <span>Path</span>&nbsp;&nbsp;
7541 <button class="index-toggle">Toggle</button>
7542 </div>
7543 </th>
7544 <th>
7545 <div class="input-group">
7546 <span>Address</span>&nbsp;&nbsp;
7547 <button class="address-toggle">Toggle</button>
7548 </div>
7549 </th>
7550 <th>
7551 <div class="input-group">
7552 <span>Public Key</span>&nbsp;&nbsp;
7553 <button class="public-key-toggle">Toggle</button>
7554 </div>
7555 </th>
7556 <th>
7557 <div class="input-group">
7558 <span>Private Key</span>&nbsp;&nbsp;
7559 <button class="private-key-toggle">Toggle</button>
7560 </div>
7561 </th>
7562 </thead>
7563 <tbody class="addresses monospace">
7564 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7565 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7566 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7567 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7568 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
7569 </tbody>
7570 </table>
7571 </div>
7572 </div>
7573 <div id="csv" class="tab-pane">
7574 <div class="col-md-12">
7575 <textarea class="csv form-control" rows="25" readonly></textarea>
7576 </div>
7577 </div>
7578 </div>
7579 </div>
7580 <span>Show</span>
7581 <input type="number" class="rows-to-add" value="20">
7582 <button class="more">more rows</button>
7583 <span>starting from index</span>
7584 <input type="number" class="more-rows-start-index">
7585 <span>(leave blank to generate from next index)</span>
7586
7587 <hr>
7588
7589 <div class="row">
7590 <div class="col-md-12">
7591 <h2>More info</h2>
7592 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
7593 <p>
7594 Read more at the
7595 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
7596 </p>
7597 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
7598 <p>
7599 Read more at the
7600 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
7601 </p>
7602 <p>
7603 See the demo at
7604 <a href="http://bip32.org/" target="_blank">bip32.org</a>
7605 </p>
7606 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
7607 <p>
7608 Read more at the
7609 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
7610 </p>
7611 <h3>BIP49 <span class="small">Derivation scheme for P2WPKH-nested-in-P2SH based accounts</span></h3>
7612 <p>
7613 Read more at the
7614 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">official BIP49 spec</a>
7615 </p>
7616 <h3>Private Keys</h3>
7617 <p>
7618 <span>
7619 Use private keys at
7620 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
7621 </span>
7622 <span>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
7623 </p>
7624 <h3 id="entropy-notes">Entropy</h3>
7625 <p>
7626 <span>Entropy values should not include the BIP39 checksum. This is automatically added by the tool.</span>
7627 </p>
7628 <p>
7629 <span>
7630 Entropy values must be sourced from a
7631 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
7632 </span>
7633 <span>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
7634 <span>
7635 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or street address,
7636 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
7637 random enough for the needs of this tool.
7638 </span>
7639 </p>
7640 <p>
7641 <strong><span>Do not store entropy.</span></strong>
7642 </p>
7643 <p>
7644 <span>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
7645 <span>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
7646 <span><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
7647 </p>
7648 <p>
7649 <span>
7650 The random mnemonic generator on this page uses a
7651 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
7652 </span>
7653 <span>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
7654 <span>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
7655 <span>In that case you might choose to use your own source of entropy.</span>
7656 </p>
7657 <p>
7658 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank">You are not a good source of entropy.</a>
7659 </p>
7660 <h3>License</h3>
7661 <p>
7662 <span>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
7663 </span>
7664 </p>
7665 <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>
7666 </div>
7667 </div>
7668
7669 <hr>
7670
7671 <div class="row">
7672 <div class="col-md-12">
7673 <h2>Alternative Tools</h2>
7674 <p>This tool is interoperable with any BIP39 wallet.</p>
7675 <p>Some similar tools to this one (ie not consumer wallets) are</p>
7676 <p>
7677 <a href="https://bip32jp.github.io/english/">
7678 https://bip32jp.github.io/english/
7679 </a>
7680 </p>
7681 </div>
7682 </div>
7683
7684 <hr>
7685
7686 <div class="row">
7687 <div class="col-md-12">
7688
7689 <h2>Offline Usage</h2>
7690
7691 <p>
7692 You can use this tool without having to be online.
7693 </p>
7694 <p>
7695 In your browser, select file save-as, and save this page
7696 as a file.
7697 </p>
7698 <p>
7699 Double-click that file to open it in a browser
7700 on any offline computer.
7701 </p>
7702 <p>
7703 <span>Alternatively, download the file from the repository</span>
7704 -
7705 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
7706 </p>
7707
7708 </div>
7709 </div>
7710
7711 <hr>
7712
7713 <div class="row">
7714 <div class="col-md-12">
7715
7716 <h2>This project is 100% open-source code</h2>
7717
7718 <p>
7719 <span>Get the source code from the repository</span>
7720 -
7721 <a href="https://github.com/iancoleman/bip39" target="_blank">
7722 https://github.com/iancoleman/bip39
7723 </a>
7724 </p>
7725
7726 <h3>Libraries</h3>
7727
7728 <p>
7729 <span>BitcoinJS - </span>
7730 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
7731 https://github.com/bitcoinjs/bitcoinjs-lib
7732 </a>
7733 </p>
7734
7735 <p>
7736 <span>jsBIP39 - </span>
7737 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
7738 https://github.com/iancoleman/jsbip39
7739 </a>
7740 </p>
7741
7742 <p>
7743 <span>sjcl - </span>
7744 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
7745 https://github.com/bitwiseshiftleft/sjcl
7746 </a>
7747 </p>
7748
7749 <p>
7750 <span>jQuery - </span>
7751 <a href="https://jquery.com/" target="_blank">
7752 https://jquery.com/
7753 </a>
7754 </p>
7755
7756 <p>
7757 <span>Twitter Bootstrap - </span>
7758 <a href="http://getbootstrap.com/" target="_blank">
7759 http://getbootstrap.com/
7760 </a>
7761 </p>
7762
7763 </div>
7764 </div>
7765
7766 </div>
7767
7768 <div class="qr-container hidden">
7769 <div class="qr-hint bg-primary hidden">Click field to hide QR</div>
7770 <div class="qr-hint bg-primary">Click field to show QR</div>
7771 <div class="qr-hider hidden">
7772 <div class="qr-image"></div>
7773 <div class="qr-warning bg-primary">Caution: Scanner may keep history</div>
7774 </div>
7775 </div>
7776
7777 <div class="feedback-container">
7778 <div class="feedback">Loading...</div>
7779 </div>
7780
7781 <script type="text/template" id="address-row-template">
7782 <tr>
7783 <td class="index"><span></span></td>
7784 <td class="address"><span data-show-qr></span></td>
7785 <td class="pubkey"><span data-show-qr></span></td>
7786 <td class="privkey private-data"><span data-show-qr></span></td>
7787 </tr>
7788 </script>
7789 <script>// From
7790 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
7791 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
7792 // but is not required in any modern browsers.
7793 // For more information, see
7794 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
7795
7796 //----------------------------------------------------------------------
7797 //
7798 // ECMAScript 2015 Polyfills
7799 //
7800 //----------------------------------------------------------------------
7801
7802 (function (global) {
7803 "use strict";
7804
7805 // Set this to always override native implementations, for testing
7806 // the polyfill in browsers with partial/full ES2015 support.
7807 var OVERRIDE_NATIVE_FOR_TESTING = false;
7808
7809 var undefined = (void 0); // Paranoia
7810
7811 // Helpers
7812
7813 function strict(o) {
7814 return o === global ? undefined : o;
7815 }
7816
7817 function hook(o, p, f) {
7818 var op = o[p];
7819 console.assert(typeof op === 'function', 'Hooking a non-function');
7820 o[p] = function() {
7821 var o = strict(this);
7822 var r = f.apply(o, arguments);
7823 return r !== undefined ? r : op.apply(o, arguments);
7824 };
7825 }
7826
7827 function isSymbol(s) {
7828 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
7829 }
7830
7831 function getPropertyDescriptor(target, name) {
7832 var desc = Object.getOwnPropertyDescriptor(target, name);
7833 var proto = Object.getPrototypeOf(target);
7834 while (!desc && proto) {
7835 desc = Object.getOwnPropertyDescriptor(proto, name);
7836 proto = Object.getPrototypeOf(proto);
7837 }
7838 return desc;
7839 }
7840
7841 var enqueue = (function(nativePromise, nativeSetImmediate) {
7842 if (nativePromise)
7843 return function(job) { nativePromise.resolve().then(function() { job(); }); };
7844 if (nativeSetImmediate)
7845 return function(job) { nativeSetImmediate(job); };
7846 return function(job) { setTimeout(job, 0); };
7847 }(global['Promise'], global['setImmediate']));
7848
7849 function define(o, p, v, override) {
7850 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
7851 return;
7852
7853 if (typeof v === 'function') {
7854 // Sanity check that functions are appropriately named (where possible)
7855 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
7856 Object.defineProperty(o, p, {
7857 value: v,
7858 configurable: true,
7859 enumerable: false,
7860 writable: true
7861 });
7862 } else {
7863 Object.defineProperty(o, p, {
7864 value: v,
7865 configurable: false,
7866 enumerable: false,
7867 writable: false
7868 });
7869 }
7870 }
7871
7872 function set_internal(o, p, v) {
7873 Object.defineProperty(o, p, {
7874 value: v,
7875 configurable: false,
7876 enumerable: false,
7877 writable: true
7878 });
7879 }
7880
7881 // Snapshot intrinsic functions
7882 var $isNaN = global.isNaN,
7883 $parseInt = global.parseInt,
7884 $parseFloat = global.parseFloat;
7885
7886 var E = Math.E,
7887 LOG10E = Math.LOG10E,
7888 LOG2E = Math.LOG2E,
7889 abs = Math.abs,
7890 ceil = Math.ceil,
7891 exp = Math.exp,
7892 floor = Math.floor,
7893 log = Math.log,
7894 max = Math.max,
7895 min = Math.min,
7896 pow = Math.pow,
7897 random = Math.random,
7898 sqrt = Math.sqrt;
7899
7900 var orig_match = String.prototype.match,
7901 orig_replace = String.prototype.replace,
7902 orig_search = String.prototype.search,
7903 orig_split = String.prototype.split;
7904
7905 // These are used for implementing the polyfills, but not exported.
7906
7907 // Inspired by https://gist.github.com/1638059
7908 /** @constructor */
7909 function EphemeronTable() {
7910 var secretKey = ObjectCreate(null);
7911
7912 function conceal(o) {
7913 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
7914 Object.defineProperty(o, 'valueOf', {
7915 value: (function(secretKey) {
7916 return function (k) {
7917 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
7918 };
7919 }(secretKey)),
7920 configurable: true,
7921 writeable: true,
7922 enumerable: false
7923 });
7924 return secrets;
7925 }
7926
7927 function reveal(o) {
7928 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
7929 return v === o ? null : v;
7930 }
7931
7932 return {
7933 clear: function() {
7934 secretKey = ObjectCreate(null);
7935 },
7936 remove: function(key) {
7937 var secrets = reveal(key);
7938 if (secrets && HasOwnProperty(secrets, 'value')) {
7939 delete secrets.value;
7940 return true;
7941 }
7942 return false;
7943 },
7944 get: function(key, defaultValue) {
7945 var secrets = reveal(key);
7946 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
7947 },
7948 has: function(key) {
7949 var secrets = reveal(key);
7950 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
7951 },
7952 set: function(key, value) {
7953 var secrets = reveal(key) || conceal(key);
7954 secrets.value = value;
7955 }
7956 };
7957 }
7958
7959 var empty = Object.create(null);
7960
7961 //----------------------------------------------------------------------
7962 //
7963 // ECMAScript 2015
7964 // http://www.ecma-international.org/ecma-262/6.0/
7965 //
7966 //----------------------------------------------------------------------
7967
7968 // ---------------------------------------
7969 // 19.4 Symbol Objects
7970 // ---------------------------------------
7971
7972 // NOTE: Symbols are defined here - out of spec order - since we need the
7973 // properties and prototype to be populated for other polyfills.
7974
7975 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
7976
7977 var symbolForKey;
7978 (function() {
7979 var secret = Object.create(null);
7980 var symbolMap = {};
7981 symbolForKey = function(k) {
7982 return symbolMap[k];
7983 };
7984
7985 var GlobalSymbolRegistry = [];
7986
7987 function unique(bits) {
7988 return Array(bits + 1).join('x').replace(/x/g, function() {
7989 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
7990 });
7991 }
7992
7993 // 19.4.1 The Symbol Constructor
7994 // 19.4.1.1 Symbol ( description=undefined )
7995 function Symbol(description) {
7996 if (!(this instanceof Symbol)) return new Symbol(description, secret);
7997 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
7998
7999 var descString = description === undefined ? undefined : String(description);
8000
8001 set_internal(this, '[[SymbolData]]', unique(128));
8002 set_internal(this, '[[Description]]', descString);
8003
8004 symbolMap[this] = this;
8005 return this;
8006 }
8007
8008 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
8009 global.Symbol = Symbol;
8010
8011 // 19.4.2 Properties of the Symbol Constructor
8012
8013 // 19.4.2.1 Symbol.for (key)
8014 define(Symbol, 'for', function for_(key) {
8015 var stringKey = String(key);
8016 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
8017 var e = GlobalSymbolRegistry[i];
8018 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
8019 }
8020 var newSymbol = Symbol(key);
8021 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
8022 return newSymbol;
8023 });
8024
8025 // 19.4.2.2 Symbol.hasInstance
8026 // 19.4.2.3 Symbol.isConcatSpreadable
8027
8028 // 19.4.2.4 Symbol.iterator
8029 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
8030
8031 // 19.4.2.5 Symbol.keyFor (sym)
8032 define(Symbol, 'keyFor', function keyFor(sym) {
8033 if (!(sym instanceof Symbol)) throw TypeError();
8034 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
8035 var e = GlobalSymbolRegistry[i];
8036 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
8037 }
8038 return undefined;
8039 });
8040
8041 // 19.4.2.6 Symbol.match
8042 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
8043
8044 // 19.4.2.7 Symbol.prototype
8045
8046 // 19.4.2.8 Symbol.replace
8047 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
8048
8049 // 19.4.2.9 Symbol.search
8050 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
8051
8052 // 19.4.2.10 Symbol.species
8053
8054 // 19.4.2.11 Symbol.search
8055 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
8056
8057 // 19.4.2.12 Symbol.toPrimitive
8058
8059 // 19.4.2.13 Symbol.toStringTag
8060 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
8061
8062 // 19.4.2.14 Symbol.unscopables
8063
8064 // 19.4.3 Properties of the Symbol Prototype Object
8065 // 19.4.3.1 Symbol.prototype.constructor
8066
8067 // 19.4.3.2 Symbol.prototype.toString ( )
8068 Object.defineProperty(Symbol.prototype, 'toString', {
8069 value: function toString() {
8070 var s = strict(this);
8071 var desc = s['[[Description]]'];
8072 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
8073 },
8074 configurable: true, writeable: true, enumerable: false });
8075
8076 // 19.4.3.3 Symbol.prototype.valueOf ( )
8077 Object.defineProperty(Symbol.prototype, 'valueOf', {
8078 value: function valueOf() {
8079 // To prevent automatic string conversion:
8080 throw TypeError();
8081
8082 // Spec has approximately the following:
8083 //var s = strict(this);
8084 //if (Type(s) === 'symbol') return s;
8085 //if (Type(s) !== 'object') throw TypeError();
8086 //if (!('[[SymbolData]]' in s)) throw TypeError();
8087 //return s['[[SymbolData]]'];
8088 },
8089 configurable: true, writeable: true, enumerable: false });
8090
8091 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8092 // (Done later to polyfill partial implementations)
8093
8094 // 19.4.4 Properties of Symbol Instances
8095 }());
8096
8097 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
8098
8099 // Defined here so that other prototypes can reference it
8100 // 25.1.2 The %IteratorPrototype% Object
8101 var $IteratorPrototype$ = {};
8102
8103 //----------------------------------------
8104 // 6 ECMAScript Data Types and Values
8105 //----------------------------------------
8106
8107 // 6.1 ECMAScript Language Types
8108
8109 // "Type(x)" is used as shorthand for "the type of x"...
8110 function Type(v) {
8111 switch (typeof v) {
8112 case 'undefined': return 'undefined';
8113 case 'boolean': return 'boolean';
8114 case 'number': return 'number';
8115 case 'string': return 'string';
8116 case 'symbol': return 'symbol';
8117 default:
8118 if (v === null) return 'null';
8119 if (v instanceof global.Symbol) return 'symbol';
8120 return 'object';
8121 }
8122 }
8123
8124 // 6.1.5.1 Well-Known Symbols
8125 var $$iterator = global.Symbol.iterator,
8126 $$match = global.Symbol.match,
8127 $$replace = global.Symbol.replace,
8128 $$search = global.Symbol.search,
8129 $$split = global.Symbol.split,
8130 $$toStringTag = global.Symbol.toStringTag;
8131
8132 //----------------------------------------
8133 // 7 Abstract Operations
8134 //----------------------------------------
8135
8136 //----------------------------------------
8137 // 7.1 Type Conversion
8138 //----------------------------------------
8139
8140 // 7.1.1 ToPrimitive ( input [, PreferredType] )
8141 // just use valueOf()
8142
8143 // 7.1.2 ToBoolean ( argument )
8144 // just use Boolean()
8145
8146 // 7.1.3 ToNumber ( argument )
8147 // just use Number()
8148
8149 // 7.1.4 ToInteger ( argument )
8150 function ToInteger(n) {
8151 n = Number(n);
8152 if ($isNaN(n)) return 0;
8153 if (n === 0 || n === Infinity || n === -Infinity) return n;
8154 return ((n < 0) ? -1 : 1) * floor(abs(n));
8155 }
8156
8157 // 7.1.5 ToInt32 ( argument )
8158 function ToInt32(v) { return v >> 0; }
8159
8160 // 7.1.6 ToUint32 ( argument )
8161 function ToUint32(v) { return v >>> 0; }
8162
8163 // 7.1.7 ToInt16 ( argument )
8164 function ToInt16(v) { return (v << 16) >> 16; }
8165
8166 // 7.1.8 ToUint16 ( argument )
8167 function ToUint16(v) { return v & 0xFFFF; }
8168
8169 // 7.1.9 ToInt8 ( argument )
8170 function ToInt8(v) { return (v << 24) >> 24; }
8171
8172 // 7.1.10 ToUint8 ( argument )
8173 function ToUint8(v) { return v & 0xFF; }
8174
8175 // 7.1.11 ToUint8Clamp ( argument )
8176 function ToUint8Clamp(argument) {
8177 var number = Number(argument);
8178 if ($isNaN(number)) return 0;
8179 if (number <= 0) return 0;
8180 if (number >= 255) return 255;
8181 var f = floor(number);
8182 if ((f + 0.5) < number) return f + 1;
8183 if (number < (f + 0.5)) return f;
8184 if (f % 2) return f + 1;
8185 return f;
8186 }
8187
8188 // 7.1.12 ToString ( argument )
8189 // just use String()
8190
8191 // 7.1.13 ToObject ( argument )
8192 function ToObject(v) {
8193 if (v === null || v === undefined) throw TypeError();
8194 return Object(v);
8195 }
8196
8197 // 7.1.14 ToPropertyKey ( argument )
8198 function ToPropertyKey(v) {
8199 return String(v);
8200 }
8201
8202 // 7.1.15 ToLength ( argument )
8203 function ToLength(v) {
8204 var len = ToInteger(v);
8205 if (len <= 0) return 0;
8206 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
8207 return min(len, 0x20000000000000 - 1); // 2^53-1
8208 }
8209
8210 // 7.1.16 CanonicalNumericIndexString ( argument )
8211
8212 //----------------------------------------
8213 // 7.2 Testing and Comparison Operations
8214 //----------------------------------------
8215
8216 // 7.2.1 RequireObjectCoercible ( argument )
8217 // 7.2.2 IsArray ( argument )
8218
8219 // 7.2.3 IsCallable ( argument )
8220 function IsCallable(o) { return typeof o === 'function'; }
8221
8222 // 7.2.4 IsConstructor ( argument )
8223 function IsConstructor(o) {
8224 // Hacks for Safari 7 TypedArray XXXConstructor objects
8225 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
8226 if (/Function/.test(Object.prototype.toString.call(o))) return true;
8227 // TODO: Can this be improved on?
8228 return typeof o === 'function';
8229 }
8230
8231 // 7.2.5 IsExtensible (O)
8232 // 7.2.6 IsInteger ( argument )
8233
8234 // 7.2.7 IsPropertyKey ( argument )
8235 function IsPropertyKey(argument) {
8236 if (Type(argument) === 'string') return true;
8237 if (Type(argument) === 'symbol') return true;
8238 return false;
8239 }
8240
8241 // 7.2.8 IsRegExp ( argument )
8242 // 7.2.5 IsConstructor ( argument )
8243
8244 // 7.2.9 SameValue(x, y)
8245 function SameValue(x, y) {
8246 if (typeof x !== typeof y) return false;
8247 switch (typeof x) {
8248 case 'undefined':
8249 return true;
8250 case 'number':
8251 if (x !== x && y !== y) return true;
8252 if (x === 0 && y === 0) return 1/x === 1/y;
8253 return x === y;
8254 case 'boolean':
8255 case 'string':
8256 case 'object':
8257 default:
8258 return x === y;
8259 }
8260 }
8261
8262 // 7.2.10 SameValueZero(x, y)
8263 function SameValueZero(x, y) {
8264 if (typeof x !== typeof y) return false;
8265 switch (typeof x) {
8266 case 'undefined':
8267 return true;
8268 case 'number':
8269 if (x !== x && y !== y) return true;
8270 return x === y;
8271 case 'boolean':
8272 case 'string':
8273 case 'object':
8274 default:
8275 return x === y;
8276 }
8277 }
8278
8279 //----------------------------------------
8280 // 7.3 Operations on Objects
8281 //----------------------------------------
8282
8283 // 7.3.1 Get (O, P)
8284 // - just use o.p or o[p]
8285
8286 // 7.3.2 GetV (V, P)
8287 function GetV(v, p) {
8288 var o = ToObject(v);
8289 return o[p];
8290 }
8291
8292 // 7.3.3 Set (O, P, V, Throw)
8293 // - just use o.p = v or o[p] = v
8294
8295
8296
8297
8298 // 7.3.9 GetMethod (O, P)
8299 function GetMethod(o, p) {
8300 var func = GetV(o, p);
8301 if (func === undefined || func === null) return undefined;
8302 if (!IsCallable(func)) throw TypeError();
8303 return func;
8304 }
8305
8306 // 7.3.10 HasProperty (O, P)
8307 function HasProperty(o, p) {
8308 while (o) {
8309 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
8310 if (Type(o) !== 'object') return false;
8311 o = Object.getPrototypeOf(o);
8312 }
8313 return false;
8314 }
8315
8316 // 7.3.11 HasOwnProperty (O, P)
8317 function HasOwnProperty(o, p) {
8318 return Object.prototype.hasOwnProperty.call(o, p);
8319 }
8320
8321 //----------------------------------------
8322 // 7.4 Operations on Iterator Objects
8323 //----------------------------------------
8324
8325 // 7.4.1 GetIterator ( obj, method )
8326 function GetIterator(obj, method) {
8327 if (arguments.length < 2)
8328 method = GetMethod(obj, $$iterator);
8329 var iterator = method.call(obj);
8330 if (Type(iterator) !== 'object') throw TypeError();
8331 return iterator;
8332 }
8333
8334 // 7.4.2 IteratorNext ( iterator, value )
8335 function IteratorNext(iterator, value) {
8336 if (arguments.length < 2)
8337 var result = iterator.next();
8338 else
8339 result = iterator.next(value);
8340 if (Type(result) !== 'object') throw TypeError();
8341 return result;
8342 }
8343
8344 // 7.4.3 IteratorComplete ( iterResult )
8345 function IteratorComplete(iterResult) {
8346 console.assert(Type(iterResult) === 'object');
8347 return Boolean(iterResult.done);
8348 }
8349
8350 // 7.4.4 IteratorValue ( iterResult )
8351 function IteratorValue(iterResult) {
8352 console.assert(Type(iterResult) === 'object');
8353 return iterResult.value;
8354 }
8355
8356 // 7.4.5 IteratorStep ( iterator )
8357 function IteratorStep( iterator, value ) {
8358 var result = IteratorNext(iterator, value);
8359 var done = result['done'];
8360 if (Boolean(done) === true) return false;
8361 return result;
8362 }
8363
8364 // 7.4.6 IteratorClose( iterator, completion )
8365 function IteratorClose( iterator, completion ) {
8366 console.assert(Type(iterator) === 'object');
8367 var _return = GetMethod(iterator, 'return');
8368 if (_return === undefined) return completion;
8369 try {
8370 var innerResult = _return[iterator]();
8371 } catch (result) {
8372 // TODO: If completion.[[type]] is throw, return completion
8373 return result;
8374 }
8375 if (Type(innerResult) !== 'object') throw TypeError();
8376 return completion;
8377 }
8378
8379 // 7.4.7 CreateIterResultObject (value, done)
8380 function CreateIterResultObject(value, done) {
8381 console.assert(Type(done) === 'boolean');
8382 var obj = {};
8383 obj["value"] = value;
8384 obj["done"] = done;
8385 return obj;
8386 }
8387
8388 // 7.4.8 CreateListIterator (list)
8389 // 7.4.8.1 ListIterator next( )
8390 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
8391 // 7.4.9.1 CompoundIterator next( )
8392
8393 //----------------------------------------
8394 // 8 Executable Code and Execution Contexts
8395 //----------------------------------------
8396
8397 //----------------------------------------
8398 // 8.4 Jobs and Job Queues
8399 //----------------------------------------
8400
8401 // 8.4.1 EnqueueJob ( queueName, job, arguments)
8402 function EnqueueJob(queueName, job, args) {
8403 var fn = function() { job.apply(undefined, args); };
8404 enqueue(fn);
8405 }
8406
8407 // 8.4.2 NextJob result
8408 function NextJob(result) {
8409 // no-op
8410 }
8411
8412 //----------------------------------------
8413 // 9 Ordinary and Exotic Objects Behaviors
8414 //----------------------------------------
8415
8416 // 9.1.11 [[Enumerate]] ()
8417 function Enumerate(obj) {
8418 var e = [];
8419 if (Object(obj) !== obj) return e;
8420 var visited = new Set;
8421 while (obj !== null) {
8422 Object.getOwnPropertyNames(obj).forEach(function(name) {
8423 if (!visited.has(name)) {
8424 var desc = Object.getOwnPropertyDescriptor(obj, name);
8425 if (desc) {
8426 visited.add(name);
8427 if (desc.enumerable) e.push(name);
8428 }
8429 }
8430 });
8431 obj = Object.getPrototypeOf(obj);
8432 }
8433 return e[$$iterator]();
8434 }
8435
8436 // 9.1.12 [[OwnPropertyKeys]] ( )
8437 function OwnPropertyKeys(o) {
8438 return Object.getOwnPropertyNames(o);
8439 }
8440
8441 // 9.1.13 ObjectCreate(proto, internalSlotsList)
8442 function ObjectCreate(proto, internalSlotsList) {
8443 return Object.create(proto, internalSlotsList);
8444 }
8445
8446 // ---------------------------------------
8447 // 19 Fundamental Objects
8448 // ---------------------------------------
8449
8450 // ---------------------------------------
8451 // 19.1 Object Objects
8452 // ---------------------------------------
8453
8454 // 19.1.1 The Object Constructor
8455 // 19.1.1.1 Object ( [ value ] )
8456 // 19.1.2 Properties of the Object Constructor
8457 // 19.1.2.1 Object.assign ( target, ...sources )
8458 define(
8459 Object, 'assign',
8460 function assign(target, /*...*/sources) {
8461 var to = ToObject(target);
8462 if (arguments.length < 2) return to;
8463
8464 var sourcesIndex = 1;
8465 while (sourcesIndex < arguments.length) {
8466 var nextSource = arguments[sourcesIndex++];
8467 if (nextSource === undefined || nextSource === null) {
8468 var keys = [];
8469 } else {
8470 var from = ToObject(nextSource);
8471 keys = OwnPropertyKeys(from);
8472 }
8473 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
8474 var nextKey = keys[keysIndex];
8475 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
8476 if (desc !== undefined && desc.enumerable) {
8477 var propValue = from[nextKey];
8478 to[nextKey] = propValue;
8479 }
8480 }
8481 }
8482 return to;
8483 });
8484
8485 // 19.1.2.2 Object.create ( O [ , Properties ] )
8486 // 19.1.2.3 Object.defineProperties ( O, Properties )
8487 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
8488 // 19.1.2.5 Object.freeze ( O )
8489 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
8490
8491 (function() {
8492 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
8493 $getOwnPropertyNames = Object.getOwnPropertyNames,
8494 $keys = Object.keys,
8495 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
8496
8497 function isStringKey(k) { return !symbolForKey(k); }
8498
8499 // 19.1.2.7 Object.getOwnPropertyNames ( O )
8500 define(
8501 Object, 'getOwnPropertyNames',
8502 function getOwnPropertyNames(o) {
8503 if (Object.prototype.toString.call(o) === '[object Window]') {
8504 // Workaround for cross-realm calling by IE itself.
8505 // https://github.com/inexorabletash/polyfill/issues/96
8506 try {
8507 return $getOwnPropertyNames(o).filter(isStringKey);
8508 } catch (_) {
8509 return $window_names.slice();
8510 }
8511 }
8512 return $getOwnPropertyNames(o).filter(isStringKey);
8513 }, !nativeSymbols);
8514
8515 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
8516 define(
8517 Object, 'getOwnPropertySymbols',
8518 function getOwnPropertySymbols(o) {
8519 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
8520 }, !nativeSymbols);
8521
8522 // 19.1.2.14 Object.keys ( O )
8523 define(
8524 Object, 'keys',
8525 function keys(o) {
8526 return $keys(o).filter(isStringKey);
8527 }, !nativeSymbols);
8528 }());
8529
8530 // 19.1.2.9 Object.getPrototypeOf ( O )
8531 // 19.1.2.10 Object.is ( value1, value2 )
8532 define(
8533 Object, 'is',
8534 function is(value1, value2) {
8535 return SameValue(value1, value2);
8536 });
8537
8538 // 19.1.2.11 Object.isExtensible ( O )
8539 // 19.1.2.12 Object.isFrozen ( O )
8540 // 19.1.2.13 Object.isSealed ( O )
8541
8542 // 19.1.2.14 Object.keys ( O )
8543 // see above
8544
8545 // 19.1.2.15 Object.preventExtensions ( O )
8546 // 19.1.2.16 Object.prototype
8547 // 19.1.2.17 Object.seal ( O )
8548
8549 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
8550 define(
8551 Object, 'setPrototypeOf',
8552 function setPrototypeOf(o, proto) {
8553 if (Type(o) !== 'object') throw TypeError();
8554 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
8555 o.__proto__ = proto;
8556 return o;
8557 }
8558 );
8559
8560 // 19.1.3 Properties of the Object Prototype Object
8561 // 19.1.3.1 Object.prototype.constructor
8562 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
8563 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
8564 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
8565 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
8566 // 19.1.3.6 Object.prototype.toString ( )
8567 hook(Object.prototype, 'toString',
8568 function() {
8569 var o = strict(this);
8570 if (o === Object(o) && $$toStringTag in o) {
8571 return '[object ' + o[$$toStringTag] + ']';
8572 }
8573 return undefined;
8574 });
8575
8576 // 19.1.3.7 Object.prototype.valueOf ( )
8577 // 19.1.4 Properties of Object Instances
8578
8579 // ---------------------------------------
8580 // 19.2 Function Objects
8581 // ---------------------------------------
8582
8583 // 19.2.1 The Function Constructor
8584 // 19.2.1.1 Function ( p1, p2, … , pn, body )
8585 // 19.2.2 Properties of the Function Constructor
8586 // 19.2.2.1 Function.length
8587 // 19.2.2.2 Function.prototype
8588 // 19.2.3 Properties of the Function Prototype Object
8589 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
8590 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
8591 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
8592 // 19.2.3.4 Function.prototype.constructor
8593 // 19.2.3.5 Function.prototype.toString ( )
8594 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
8595 // 19.2.4 Function Instances
8596 // 19.2.4.1 length
8597 // 19.2.4.2 name
8598 // 19.2.4.3 prototype
8599
8600 // (No polyfillable changes from ES5)
8601
8602 // ---------------------------------------
8603 // 19.3 Boolean Objects
8604 // ---------------------------------------
8605
8606 // 19.3.1 The Boolean Constructor
8607 // 19.3.1.1 Boolean ( value )
8608 // 19.3.2 Properties of the Boolean Constructor
8609 // 19.3.2.1 Boolean.prototype
8610 // 19.3.3 Properties of the Boolean Prototype Object
8611 // 19.3.3.1 Boolean.prototype.constructor
8612 // 19.3.3.2 Boolean.prototype.toString ( )
8613 // 19.3.3.3 Boolean.prototype.valueOf ( )
8614 // 19.3.4 Properties of Boolean Instances
8615
8616 // (No polyfillable changes from ES5)
8617
8618 // ---------------------------------------
8619 // 19.4 Symbol Objects
8620 // ---------------------------------------
8621
8622 // Moved earlier in this script, so that other polyfills can depend on them.
8623
8624 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
8625 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
8626
8627 // ---------------------------------------
8628 // 19.5 Error Objects
8629 // ---------------------------------------
8630
8631 // 19.5.1 The Error Constructor
8632 // 19.5.1.1 Error ( message )
8633 // 19.5.1.2 new Error( ...argumentsList )
8634 // 19.5.2 Properties of the Error Constructor
8635 // 19.5.2.1 Error.prototype
8636 // 19.5.3 Properties of the Error Prototype Object
8637 // 19.5.3.1 Error.prototype.constructor
8638 // 19.5.3.2 Error.prototype.message
8639 // 19.5.3.3 Error.prototype.name
8640 // 19.5.3.4 Error.prototype.toString ( )
8641 // 19.5.4 Properties of Error Instances
8642 // 19.5.5 Native Error Types Used in This Standard
8643 // 19.5.5.1 EvalError
8644 // 19.5.5.2 RangeError
8645 // 19.5.5.3 ReferenceError
8646 // 19.5.5.4 SyntaxError
8647 // 19.5.5.5 TypeError
8648 // 19.5.5.6 URIError
8649 // 19.5.6 NativeError Object Structure
8650 // 19.5.6.1 NativeError Constructors
8651 // 19.5.6.1.1 NativeError ( message )
8652 // 19.5.6.1.2 new NativeError ( ...argumentsList )
8653 // 19.5.6.2 Properties of the NativeError Constructors
8654 // 19.5.6.2.1 NativeError.prototype
8655 // 19.5.6.3 Properties of the NativeError Prototype Objects
8656 // 19.5.6.4 Properties of NativeError Instances
8657
8658 // (No polyfillable changes from ES5)
8659
8660 // ---------------------------------------
8661 // 20 Numbers and Dates
8662 // ---------------------------------------
8663
8664 // ---------------------------------------
8665 // 20.1 Number Objects
8666 // ---------------------------------------
8667
8668 // 20.1.1 The Number Constructor
8669 // 20.1.1.1 Number ( [ value ] )
8670 // 20.1.1.2 new Number ( ...argumentsList )
8671 // 20.1.2 Properties of the Number Constructor
8672
8673 // 20.1.2.1 Number.EPSILON
8674 define(
8675 Number, 'EPSILON',
8676 (function () {
8677 var next, result;
8678 for (next = 1; 1 + next !== 1; next = next / 2)
8679 result = next;
8680 return result;
8681 }()));
8682
8683 // 20.1.2.2 Number.isFinite ( number )
8684 define(
8685 Number, 'isFinite',
8686 function isFinite(number) {
8687 if (Type(number) !== 'number') return false;
8688 if (number !== number || number === +Infinity || number === -Infinity) return false;
8689 return true;
8690 });
8691
8692 // 20.1.2.3 Number.isInteger ( number )
8693 define(
8694 Number, 'isInteger',
8695 function isInteger(number) {
8696 if (Type(number) !== 'number') return false;
8697 if (number !== number || number === +Infinity || number === -Infinity) return false;
8698 var integer = ToInteger(number);
8699 if (integer !== number) return false;
8700 return true;
8701 });
8702
8703 // 20.1.2.4 Number.isNaN ( number )
8704 define(
8705 Number, 'isNaN',
8706 function isNaN(number) {
8707 if (Type(number) !== 'number') return false;
8708 if (number !== number) return true;
8709 return false;
8710 });
8711
8712 // 20.1.2.5 Number.isSafeInteger ( number )
8713 define(
8714 Number, 'isSafeInteger',
8715 function isSafeInteger(number) {
8716 if (Type(number) !== 'number') return false;
8717 if (number !== number || number === +Infinity || number === -Infinity) return false;
8718 var integer = ToInteger(number);
8719 if (integer !== number) return false;
8720 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
8721 return true;
8722 return false;
8723 });
8724
8725 // 20.1.2.6 Number.MAX_SAFE_INTEGER
8726 define(
8727 Number, 'MAX_SAFE_INTEGER',
8728 9007199254740991); // 2^53-1
8729
8730 // 20.1.2.7 Number.MAX_VALUE
8731
8732 // 20.1.2.8 Number.MIN_SAFE_INTEGER
8733 define(
8734 Number, 'MIN_SAFE_INTEGER',
8735 -9007199254740991); // -2^53+1
8736
8737 // 20.1.2.9 Number.MIN_VALUE
8738 // 20.1.2.10 Number.NaN
8739 // 20.1.2.11 Number.NEGATIVE_INFINITY
8740
8741 // 20.1.2.12 Number.parseFloat ( string )
8742 define(Number, 'parseFloat', $parseFloat);
8743
8744 // 20.1.2.13 Number.parseInt ( string, radix )
8745 define(Number, 'parseInt', $parseInt);
8746
8747 // 20.1.2.14 Number.POSITIVE_INFINITY
8748 // 20.1.2.15 Number.prototype
8749
8750 // 20.1.3 Properties of the Number Prototype Object
8751 // 20.1.3.1 Number.prototype.constructor
8752 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
8753 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
8754 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
8755 // 20.1.3.5 Number.prototype.toPrecision ( precision )
8756 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
8757 // 20.1.3.7 Number.prototype.valueOf ( )
8758 // 20.1.4 Properties of Number Instances
8759
8760 // ---------------------------------------
8761 // 20.2 The Math Object
8762 // ---------------------------------------
8763
8764 // 20.2.1 Value Properties of the Math Object
8765 // 20.2.1.1 Math.E
8766 // 20.2.1.2 Math.LN10
8767 // 20.2.1.3 Math.LN2
8768 // 20.2.1.4 Math.LOG10E
8769 // 20.2.1.5 Math.LOG2E
8770 // 20.2.1.6 Math.PI
8771 // 20.2.1.7 Math.SQRT1_2
8772 // 20.2.1.8 Math.SQRT2
8773
8774 // 20.2.1.9 Math [ @@toStringTag ]
8775 define(Math, $$toStringTag, 'Math');
8776
8777 // 20.2.2 Function Properties of the Math Object
8778 // 20.2.2.1 Math.abs ( x )
8779 // 20.2.2.2 Math.acos ( x )
8780
8781 // 20.2.2.3 Math.acosh(x)
8782 define(
8783 Math, 'acosh',
8784 function acosh(x) {
8785 x = Number(x);
8786 return log(x + sqrt(x * x - 1));
8787 });
8788
8789 // 20.2.2.4 Math.asin ( x )
8790
8791 // 20.2.2.5 Math.asinh( x )
8792 define(
8793 Math, 'asinh',
8794 function asinh(x) {
8795 x = Number(x);
8796 if (SameValue(x, -0)) {
8797 return x;
8798 }
8799 var s = sqrt(x * x + 1);
8800 return (s === -x) ? log(0) : log(x + s);
8801 });
8802
8803 // 20.2.2.6 Math.atan ( x )
8804
8805 // 20.2.2.7 Math.atanh( x )
8806 define(
8807 Math, 'atanh',
8808 function atanh(x) {
8809 x = Number(x);
8810 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
8811 });
8812
8813 // 20.2.2.8 Math.atan2 ( y, x )
8814
8815 // 20.2.2.9 Math.cbrt ( x )
8816 define(
8817 Math, 'cbrt',
8818 function cbrt(x) {
8819 x = Number(x);
8820 if ($isNaN(x/x)) {
8821 return x;
8822 }
8823 var r = pow(abs(x), 1/3);
8824 var t = x/r/r;
8825 return r + (r * (t-r) / (2*r + t));
8826 });
8827
8828 // 20.2.2.10 Math.ceil ( x )
8829
8830 // 20.2.2.11 Math.clz32 ( x )
8831 define(
8832 Math, 'clz32',
8833 function clz32(x) {
8834 function clz8(x) {
8835 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
8836 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
8837 }
8838 x = ToUint32(x);
8839 return x & 0xff000000 ? clz8(x >> 24) :
8840 x & 0xff0000 ? clz8(x >> 16) + 8 :
8841 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
8842 });
8843
8844
8845
8846 // 20.2.2.12 Math.cos ( x )
8847
8848 // 20.2.2.13 Math.cosh ( x )
8849 define(
8850 Math, 'cosh',
8851 function cosh(x) {
8852 x = Number(x);
8853 return (pow(E, x) + pow(E, -x)) / 2;
8854 });
8855
8856 // 20.2.2.14 Math.exp ( x )
8857
8858 // 20.2.2.15 Math.expm1 ( x )
8859 define(
8860 Math, 'expm1',
8861 function expm1(x) {
8862 x = Number(x);
8863 // from: http://www.johndcook.com/cpp_log1p.html
8864 if (SameValue(x, -0)) {
8865 return -0;
8866 } else if (abs(x) < 1e-5) {
8867 return x + 0.5 * x * x; // two terms of Taylor expansion
8868 } else {
8869 return exp(x) - 1;
8870 }
8871 });
8872
8873 // 20.2.2.16 Math.floor ( x )
8874
8875 // 20.2.2.17 Math.fround ( x )
8876 define(
8877 Math, 'fround',
8878 function fround(x) {
8879 if ($isNaN(x)) {
8880 return NaN;
8881 }
8882 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
8883 return x;
8884 }
8885 return (new Float32Array([x]))[0];
8886 });
8887
8888 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
8889 define(
8890 Math, 'hypot',
8891 function hypot() {
8892 var values = [];
8893 var m = 0, sawNaN = false;
8894 for (var i = 0; i < arguments.length; ++i) {
8895 var n = abs(Number(arguments[i]));
8896 if (n === Infinity) return n;
8897 if (n !== n) sawNaN = true;
8898 if (n > m) m = n;
8899 values[i] = n;
8900 }
8901 if (sawNaN) return NaN;
8902 if (m === 0) return +0;
8903 var sum = +0;
8904 for (i = 0; i < values.length; ++i) {
8905 var r = values[i] / m;
8906 sum = sum + r * r;
8907 }
8908 return m * sqrt(sum);
8909 });
8910
8911 // 20.2.2.19 Math.imul ( x, y )
8912 define(
8913 Math, 'imul',
8914 function imul(x, y) {
8915 var a = ToUint32(x);
8916 var b = ToUint32(y);
8917 // (slow but accurate)
8918 var ah = (a >>> 16) & 0xffff;
8919 var al = a & 0xffff;
8920 var bh = (b >>> 16) & 0xffff;
8921 var bl = b & 0xffff;
8922 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
8923 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
8924 );
8925
8926 // 20.2.2.20 Math.log ( x )
8927
8928 // 20.2.2.21 Math.log1p ( x )
8929 define(
8930 Math, 'log1p',
8931 function log1p(x) {
8932 x = Number(x);
8933 // from: http://www.johndcook.com/cpp_expm1.html
8934 if (x < -1) {
8935 return NaN;
8936 } else if (SameValue(x, -0)) {
8937 return -0;
8938 } else if (abs(x) > 1e-4) {
8939 return log(1 + x);
8940 } else {
8941 return (-0.5 * x + 1) * x;
8942 }
8943 });
8944
8945 // 20.2.2.22 Math.log10 ( x )
8946 define(
8947 Math, 'log10',
8948 function log10(x) {
8949 x = Number(x);
8950 return log(x) * LOG10E;
8951 });
8952
8953 // 20.2.2.23 Math.log2 ( x )
8954 define(
8955 Math, 'log2',
8956 function log2(x) {
8957 x = Number(x);
8958 return log(x) * LOG2E;
8959 });
8960
8961 // 20.2.2.24 Math.max ( value1, value2 , ...values )
8962 // 20.2.2.25 Math.min ( value1, value2 , ...values )
8963 // 20.2.2.26 Math.pow ( x, y )
8964 // 20.2.2.27 Math.random ( )
8965 // 20.2.2.28 Math.round ( x )
8966
8967 // 20.2.2.29 Math.sign(x)
8968 define(
8969 Math, 'sign',
8970 function sign(x) {
8971 x = Number(x);
8972 return x < 0 ? -1 : x > 0 ? 1 : x;
8973 });
8974
8975 // 20.2.2.30 Math.sin ( x )
8976
8977 // 20.2.2.31 Math.sinh( x )
8978 define(
8979 Math, 'sinh',
8980 function sinh(x) {
8981 x = Number(x);
8982 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
8983 });
8984
8985 // 20.2.2.32 Math.sqrt ( x )
8986 // 20.2.2.33 Math.tan ( x )
8987
8988 // 20.2.2.34 Math.tanh ( x )
8989 define(
8990 Math, 'tanh',
8991 function tanh(x) {
8992 x = Number(x);
8993 var n = pow(E, 2 * x) - 1,
8994 d = pow(E, 2 * x) + 1;
8995 if (SameValue(x, -0))
8996 return x;
8997 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
8998 });
8999
9000 // 20.2.2.35 Math.trunc ( x )
9001 define(
9002 Math, 'trunc',
9003 function trunc(x) {
9004 x = Number(x);
9005 return $isNaN(x) ? NaN :
9006 x < 0 ? ceil(x) : floor(x);
9007 });
9008
9009 // ---------------------------------------
9010 // 20.3 Date Objects
9011 // ---------------------------------------
9012
9013 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
9014 // 20.3.1.1 Time Values and Time Range
9015 // 20.3.1.2 Day Number and Time within Day
9016 // 20.3.1.3 Year Number
9017 // 20.3.1.4 Month Number
9018 // 20.3.1.5 Date Number
9019 // 20.3.1.6 Week Day
9020 // 20.3.1.7 Local Time Zone Adjustment
9021 // 20.3.1.8 Daylight Saving Time Adjustment
9022 // 20.3.1.9 Local Time
9023 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
9024 // 20.3.1.11 MakeTime (hour, min, sec, ms)
9025 // 20.3.1.12 MakeDay (year, month, date)
9026 // 20.3.1.13 MakeDate (day, time)
9027 // 20.3.1.14 TimeClip (time)
9028 // 20.3.1.15 Date Time String Format
9029 // 20.3.1.15.1 Extended years
9030 // 20.3.2 The Date Constructor
9031 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
9032 // 20.3.2.2 Date ( value )
9033 // 20.3.2.3 Date ( )
9034 // 20.3.3 Properties of the Date Constructor
9035 // 20.3.3.1 Date.now ( )
9036 // 20.3.3.2 Date.parse (string)
9037 // 20.3.3.3 Date.prototype
9038 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
9039 // 20.3.4 Properties of the Date Prototype Object
9040 // 20.3.4.1 Date.prototype.constructor
9041 // 20.3.4.2 Date.prototype.getDate ( )
9042 // 20.3.4.3 Date.prototype.getDay ( )
9043 // 20.3.4.4 Date.prototype.getFullYear ( )
9044 // 20.3.4.5 Date.prototype.getHours ( )
9045 // 20.3.4.6 Date.prototype.getMilliseconds ( )
9046 // 20.3.4.7 Date.prototype.getMinutes ( )
9047 // 20.3.4.8 Date.prototype.getMonth ( )
9048 // 20.3.4.9 Date.prototype.getSeconds ( )
9049 // 20.3.4.10 Date.prototype.getTime ( )
9050 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
9051 // 20.3.4.12 Date.prototype.getUTCDate ( )
9052 // 20.3.4.13 Date.prototype.getUTCDay ( )
9053 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
9054 // 20.3.4.15 Date.prototype.getUTCHours ( )
9055 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
9056 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
9057 // 20.3.4.18 Date.prototype.getUTCMonth ( )
9058 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
9059 // 20.3.4.20 Date.prototype.setDate ( date )
9060 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
9061 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
9062 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
9063 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
9064 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
9065 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
9066 // 20.3.4.27 Date.prototype.setTime ( time )
9067 // 20.3.4.28 Date.prototype.setUTCDate ( date )
9068 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
9069 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
9070 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
9071 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
9072 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
9073 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
9074 // 20.3.4.35 Date.prototype.toDateString ( )
9075 // 20.3.4.36 Date.prototype.toISOString ( )
9076 // 20.3.4.37 Date.prototype.toJSON ( key )
9077 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
9078 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9079 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
9080 // 20.3.4.41 Date.prototype.toString ( )
9081 // 20.3.4.42 Date.prototype.toTimeString ( )
9082 // 20.3.4.43 Date.prototype.toUTCString ( )
9083 // 20.3.4.44 Date.prototype.valueOf ( )
9084 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
9085 // 20.3.5 Properties of Date Instances
9086
9087 // (No polyfillable changes from ES5)
9088
9089 // ---------------------------------------
9090 // 21 Text Processing
9091 // ---------------------------------------
9092
9093 var string_regexp_dispatch = (function() {
9094 var faux = {}, secret = Symbol();
9095 faux[Symbol.match] = function() { return secret; };
9096 return ("").match(faux) === secret;
9097 }());
9098
9099 // 21.1 String Objects
9100 // 21.1.1 The String Constructor
9101 // 21.1.1.1 String ( value )
9102 // 21.1.2 Properties of the String Constructor
9103 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
9104
9105 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
9106 define(
9107 String, 'fromCodePoint',
9108 function fromCodePoint(/*...codePoints*/) {
9109 var codePoints = arguments,
9110 length = codePoints.length,
9111 elements = [],
9112 nextIndex = 0;
9113 while (nextIndex < length) {
9114 var next = codePoints[nextIndex];
9115 var nextCP = Number(next);
9116 if (!SameValue(nextCP, ToInteger(nextCP)) ||
9117 nextCP < 0 || nextCP > 0x10FFFF) {
9118 throw RangeError('Invalid code point ' + nextCP);
9119 }
9120 if (nextCP < 0x10000) {
9121 elements.push(String.fromCharCode(nextCP));
9122 } else {
9123 nextCP -= 0x10000;
9124 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
9125 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
9126 }
9127 nextIndex += 1;
9128 }
9129 return elements.join('');
9130 });
9131
9132 // 21.1.2.3 String.prototype
9133
9134 // 21.1.2.4 String.raw ( template , ...substitutions )
9135 define(
9136 String, 'raw',
9137 function raw(template /*, ...substitutions*/) {
9138 var substitutions = [].slice.call(arguments, 1);
9139
9140 var cooked = Object(template);
9141 var rawValue = cooked['raw'];
9142 var raw = Object(rawValue);
9143 var len = raw['length'];
9144 var literalSegments = ToLength(len);
9145 if (literalSegments <= 0) return '';
9146 var stringElements = [];
9147 var nextIndex = 0;
9148 while (true) {
9149 var next = raw[nextIndex];
9150 var nextSeg = String(next);
9151 stringElements.push(nextSeg);
9152 if (nextIndex + 1 === literalSegments)
9153 return stringElements.join('');
9154 next = substitutions[nextIndex];
9155 var nextSub = String(next);
9156 stringElements.push(nextSub);
9157 nextIndex = nextIndex + 1;
9158 }
9159 });
9160
9161 // See https://githib.com/inexorabletash/uate for a more useful version.
9162
9163 // 21.1.3 Properties of the String Prototype Object
9164 // 21.1.3.1 String.prototype.charAt ( pos )
9165 // 21.1.3.2 String.prototype.charCodeAt ( pos )
9166
9167 // 21.1.3.3 String.prototype.codePointAt ( pos )
9168 define(
9169 String.prototype, 'codePointAt',
9170 function codePointAt(pos) {
9171 var o = strict(this);
9172 var s = String(o);
9173 var position = ToInteger(pos);
9174 var size = s.length;
9175 if (position < 0 || position >= size) return undefined;
9176 var first = s.charCodeAt(position);
9177 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
9178 var second = s.charCodeAt(position + 1);
9179 if (second < 0xDC00 || second > 0xDFFF) return first;
9180 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
9181 });
9182
9183 // 21.1.3.4 String.prototype.concat ( ...args )
9184 // 21.1.3.5 String.prototype.constructor
9185
9186 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
9187 define(
9188 String.prototype, 'endsWith',
9189 function endsWith(searchString) {
9190 var endPosition = arguments[1];
9191
9192 var o = strict(this);
9193 var s = String(o);
9194 var searchStr = String(searchString);
9195 var len = s.length;
9196 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
9197 var end = min(max(pos, 0), len);
9198 var searchLength = searchStr.length;
9199 var start = end - searchLength;
9200 if (start < 0) return false;
9201 if (s.substring(start, start + searchLength) === searchStr) return true;
9202 return false;
9203 });
9204
9205 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
9206 define(
9207 String.prototype, 'includes',
9208 function includes(searchString) {
9209 var position = arguments[1];
9210
9211 var o = strict(this);
9212 var s = String(o);
9213 var searchStr = String(searchString);
9214 var pos = ToInteger(position);
9215 var len = s.length;
9216 var start = min(max(pos, 0), len);
9217 return s.indexOf(searchStr, start) !== -1;
9218 });
9219
9220 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
9221 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
9222 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
9223 // 21.1.3.11 String.prototype.match ( regexp )
9224 define(
9225 String.prototype, 'match',
9226 function match(regexp) {
9227 var o = strict(this);
9228 var s = String(o);
9229 if (HasProperty(regexp, $$match)) var rx = regexp;
9230 else rx = new RegExp(regexp);
9231 return rx[$$match](s);
9232 }, !string_regexp_dispatch);
9233
9234 // 21.1.3.12 String.prototype.normalize ( [ form ] )
9235
9236 // Not practical due to table sizes; if needed, pull in:
9237 // https://github.com/walling/unorm/
9238
9239 // 21.1.3.13 String.prototype.repeat ( count )
9240 define(
9241 String.prototype, 'repeat',
9242 function repeat(count) {
9243 var o = strict(this);
9244 var s = String(o);
9245 var n = ToInteger(count);
9246 if (n < 0) throw RangeError();
9247 if (n === Infinity) throw RangeError();
9248 var t = new Array(n + 1).join(s);
9249 return t;
9250 });
9251
9252 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
9253 define(
9254 String.prototype, 'replace',
9255 function replace(searchValue, replaceValue) {
9256 var o = strict(this);
9257 if (HasProperty(searchValue, $$replace))
9258 return searchValue[$$replace](o, replaceValue);
9259 return orig_replace.call(o, searchValue, replaceValue);
9260 }, !string_regexp_dispatch);
9261
9262 // 21.1.3.15 String.prototype.search ( regexp )
9263 define(
9264 String.prototype, 'search',
9265 function search(regexp) {
9266 var o = strict(this);
9267 var string = String(o);
9268 if (HasProperty(regexp, $$search)) var rx = regexp;
9269 else rx = new RegExp(regexp);
9270 return rx[$$search](string);
9271 }, !string_regexp_dispatch);
9272
9273 // 21.1.3.16 String.prototype.slice ( start, end )
9274 // 21.1.3.17 String.prototype.split ( separator, limit )
9275 define(
9276 String.prototype, 'split',
9277 function split(separator, limit) {
9278 var o = strict(this);
9279 if (HasProperty(separator, $$split))
9280 return separator[$$split](o, limit);
9281 return orig_split.call(o, separator, limit);
9282 }, !string_regexp_dispatch);
9283
9284 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
9285 define(
9286 String.prototype, 'startsWith',
9287 function startsWith(searchString) {
9288 var position = arguments[1];
9289
9290 var o = strict(this);
9291 var s = String(o);
9292 var searchStr = String(searchString);
9293 var pos = ToInteger(position);
9294 var len = s.length;
9295 var start = min(max(pos, 0), len);
9296 var searchLength = searchStr.length;
9297 if (searchLength + start > len) return false;
9298 if (s.substring(start, start + searchLength) === searchStr) return true;
9299 return false;
9300 });
9301
9302 // 21.1.3.19 String.prototype.substring ( start, end )
9303 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
9304 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
9305 // 21.1.3.22 String.prototype.toLowerCase ( )
9306 // 21.1.3.23 String.prototype.toString ( )
9307 // 21.1.3.24 String.prototype.toUpperCase ( )
9308 // 21.1.3.25 String.prototype.trim ( )
9309 // 21.1.3.26 String.prototype.valueOf ( )
9310
9311 // 21.1.3.27 String.prototype [ @@iterator ]( )
9312 define(
9313 String.prototype, $$iterator,
9314 function entries() {
9315 return CreateStringIterator(this, 'value');
9316 });
9317
9318 // 21.1.4 Properties of String Instances
9319 // 21.1.4.1 length
9320
9321 // 21.1.5 String Iterator Objects
9322 /** @constructor */
9323 function StringIterator() {}
9324
9325 // 21.1.5.1 CreateStringIterator Abstract Operation
9326 function CreateStringIterator(string, kind) {
9327 var s = String(string);
9328 var iterator = new StringIterator;
9329 set_internal(iterator, '[[IteratedString]]', s);
9330 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
9331 set_internal(iterator, '[[StringIterationKind]]', kind);
9332 return iterator;
9333 }
9334
9335 // 21.1.5.2 The %StringIteratorPrototype% Object
9336 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
9337 StringIterator.prototype = $StringIteratorPrototype$;
9338
9339 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
9340 define(
9341 $StringIteratorPrototype$, 'next',
9342 function next() {
9343 var o = ToObject(this);
9344 var s = String(o['[[IteratedString]]']),
9345 index = o['[[StringIteratorNextIndex]]'],
9346 len = s.length;
9347 if (index >= len) {
9348 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
9349 return CreateIterResultObject(undefined, true);
9350 }
9351 var cp = s.codePointAt(index);
9352 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
9353 return CreateIterResultObject(String.fromCodePoint(cp), false);
9354 });
9355
9356 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
9357 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
9358
9359 // 21.1.5.3 Properties of String Iterator Instances
9360
9361 // ---------------------------------------
9362 // 21.2 RegExp (Regular Expression) Objects
9363 // ---------------------------------------
9364
9365 // 21.2.1 Patterns
9366 // 21.2.2 Pattern Semantics
9367 // 21.2.2.1 Notation
9368 // 21.2.2.2 Pattern
9369 // 21.2.2.3 Disjunction
9370 // 21.2.2.4 Alternative
9371 // 21.2.2.5 Term
9372 // 21.2.2.6 Assertion
9373 // 21.2.2.7 Quantifier
9374 // 21.2.2.8 Atom
9375 // 21.2.2.9 AtomEscape
9376 // 21.2.2.10 CharacterEscape
9377 // 21.2.2.11 DecimalEscape
9378 // 21.2.2.12 CharacterClassEscape
9379 // 21.2.2.13 CharacterClass
9380 // 21.2.2.14 ClassRanges
9381 // 21.2.2.15 NonemptyClassRanges
9382 // 21.2.2.16 NonemptyClassRangesNoDash
9383 // 21.2.2.17 ClassAtom
9384 // 21.2.2.18 ClassAtomNoDash
9385 // 21.2.2.19 ClassEscape
9386 // 21.2.3 The RegExp Constructor
9387 // 21.2.3.1 RegExp ( pattern, flags )
9388 // 21.2.3.2 new RegExp( ...argumentsList )
9389 // 21.2.3.3 Abstract Operations for the RegExp Constructor
9390 // 21.2.4 Properties of the RegExp Constructor
9391 // 21.2.4.1 RegExp.prototype
9392 // 21.2.5 Properties of the RegExp Prototype Object
9393 // 21.2.5.1 RegExp.prototype.constructor
9394 // 21.2.5.2 RegExp.prototype.exec ( string )
9395
9396 // 21.2.5.3 get RegExp.prototype.flags
9397 if (!('flags' in RegExp.prototype)) {
9398 Object.defineProperty(
9399 RegExp.prototype, 'flags', {
9400 get: function() {
9401 var s = String(this);
9402 return s.substring(s.lastIndexOf('/') + 1);
9403 }
9404 });
9405 }
9406
9407 // 21.2.5.4 get RegExp.prototype.global
9408 // 21.2.5.5 get RegExp.prototype.ignoreCase
9409
9410 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
9411 define(RegExp.prototype, $$match, function(string) {
9412 var o = strict(this);
9413 return orig_match.call(string, o);
9414 });
9415
9416 // 21.2.5.7 get RegExp.prototype.multiline
9417
9418 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
9419 define(RegExp.prototype, $$replace, function(string, replaceValue) {
9420 var o = strict(this);
9421 return orig_replace.call(string, o, replaceValue);
9422 });
9423
9424 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
9425 define(RegExp.prototype, $$search, function(string) {
9426 var o = strict(this);
9427 return orig_search.call(string, o);
9428 });
9429
9430 // 21.2.5.10 get RegExp.prototype.source
9431
9432 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
9433 define(RegExp.prototype, $$split, function(string, limit) {
9434 var o = strict(this);
9435 return orig_split.call(string, o, limit);
9436 });
9437
9438 // 21.2.5.12 get RegExp.prototype.sticky
9439 // 21.2.5.13 RegExp.prototype.test( S )
9440 // 21.2.5.14 RegExp.prototype.toString ( )
9441 // 21.2.5.15 get RegExp.prototype.unicode
9442
9443 // 21.2.6 Properties of RegExp Instances
9444 // 21.2.6.1 lastIndex
9445
9446 // (No polyfillable changes from ES5)
9447
9448 // ---------------------------------------
9449 // 22 Indexed Collections
9450 // ---------------------------------------
9451
9452 // ---------------------------------------
9453 // 22.1 Array Objects
9454 // ---------------------------------------
9455
9456 // 22.1.1 The Array Constructor
9457 // 22.1.1.1 Array ( )
9458 // 22.1.1.2 Array (len)
9459 // 22.1.1.3 Array (...items )
9460
9461 // 22.1.2 Properties of the Array Constructor
9462
9463 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
9464 define(
9465 Array, 'from',
9466 function from(items) {
9467 var mapfn = arguments[1];
9468 var thisArg = arguments[2];
9469
9470 var c = strict(this);
9471 if (mapfn === undefined) {
9472 var mapping = false;
9473 } else {
9474 if (!IsCallable(mapfn)) throw TypeError();
9475 var t = thisArg;
9476 mapping = true;
9477 }
9478 var usingIterator = GetMethod(items, $$iterator);
9479 if (usingIterator !== undefined) {
9480 if (IsConstructor(c)) {
9481 var a = new c();
9482 } else {
9483 a = new Array(0);
9484 }
9485 var iterator = GetIterator(items, usingIterator);
9486 var k = 0;
9487 while (true) {
9488 var next = IteratorStep(iterator);
9489 if (next === false) {
9490 a.length = k;
9491 return a;
9492 }
9493 var nextValue = IteratorValue(next);
9494 if (mapping)
9495 var mappedValue = mapfn.call(t, nextValue);
9496 else
9497 mappedValue = nextValue;
9498 a[k] = mappedValue;
9499 k += 1;
9500 }
9501 }
9502 var arrayLike = ToObject(items);
9503 var lenValue = arrayLike.length;
9504 var len = ToLength(lenValue);
9505 if (IsConstructor(c)) {
9506 a = new c(len);
9507 } else {
9508 a = new Array(len);
9509 }
9510 k = 0;
9511 while (k < len) {
9512 var kValue = arrayLike[k];
9513 if (mapping)
9514 mappedValue = mapfn.call(t, kValue, k);
9515 else
9516 mappedValue = kValue;
9517 a[k] = mappedValue;
9518 k += 1;
9519 }
9520 a.length = len;
9521 return a;
9522 });
9523
9524 // 22.1.2.2 Array.isArray ( arg )
9525
9526 // 22.1.2.3 Array.of ( ...items )
9527 define(
9528 Array, 'of',
9529 function of() {
9530 var items = arguments;
9531
9532 var lenValue = items.length;
9533 var len = ToUint32(lenValue);
9534 var c = strict(this), a;
9535 if (IsConstructor(c)) {
9536 a = new c(len);
9537 a = ToObject(a);
9538 } else {
9539 a = new Array(len);
9540 }
9541 var k = 0;
9542 while (k < len) {
9543 a[k] = items[k];
9544 k += 1;
9545 }
9546 a.length = len;
9547 return a;
9548 });
9549
9550 // 22.1.2.4 Array.prototype
9551 // 22.1.2.5 get Array [ @@species ]
9552 // 22.1.3 Properties of the Array Prototype Object
9553 // 22.1.3.1 Array.prototype.concat ( ...arguments )
9554 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
9555 // 22.1.3.2 Array.prototype.constructor
9556 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
9557 define(
9558 Array.prototype, 'copyWithin',
9559 function copyWithin(target, start/*, end*/) {
9560 var end = arguments[2];
9561
9562 var o = ToObject(this);
9563 var lenVal = o.length;
9564 var len = ToLength(lenVal);
9565 len = max(len, 0);
9566 var relativeTarget = ToInteger(target);
9567 var to;
9568 if (relativeTarget < 0)
9569 to = max(len + relativeTarget, 0);
9570 else
9571 to = min(relativeTarget, len);
9572 var relativeStart = ToInteger(start);
9573 var from;
9574 if (relativeStart < 0)
9575 from = max(len + relativeStart, 0);
9576 else
9577 from = min(relativeStart, len);
9578 var relativeEnd;
9579 if (end === undefined)
9580 relativeEnd = len;
9581 else
9582 relativeEnd = ToInteger(end);
9583 var final;
9584 if (relativeEnd < 0)
9585 final = max(len + relativeEnd, 0);
9586 else
9587 final = min(relativeEnd, len);
9588 var count = min(final - from, len - to);
9589 var direction;
9590 if (from < to && to < from + count) {
9591 direction = -1;
9592 from = from + count - 1;
9593 to = to + count - 1;
9594 } else {
9595 direction = 1;
9596 }
9597 while (count > 0) {
9598 var fromKey = String(from);
9599 var toKey = String(to);
9600 var fromPresent = HasProperty(o, fromKey);
9601 if (fromPresent) {
9602 var fromVal = o[fromKey];
9603 o[toKey] = fromVal;
9604 } else {
9605 delete o[toKey];
9606 }
9607 from = from + direction;
9608 to = to + direction;
9609 count = count - 1;
9610 }
9611 return o;
9612 });
9613
9614 // 22.1.3.4 Array.prototype.entries ( )
9615 var nativeArrayIteratorMethods =
9616 ('entries' in Array.prototype && 'next' in [].entries());
9617
9618 define(
9619 Array.prototype, 'entries',
9620 function entries() {
9621 return CreateArrayIterator(this, 'key+value');
9622 }, !nativeArrayIteratorMethods);
9623
9624 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
9625
9626 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
9627 define(
9628 Array.prototype, 'fill',
9629 function fill(value/*, start, end*/) {
9630 var start = arguments[1],
9631 end = arguments[2];
9632
9633 var o = ToObject(this);
9634 var lenVal = o.length;
9635 var len = ToLength(lenVal);
9636 len = max(len, 0);
9637 var relativeStart = ToInteger(start);
9638 var k;
9639 if (relativeStart < 0)
9640 k = max((len + relativeStart), 0);
9641 else
9642 k = min(relativeStart, len);
9643 var relativeEnd;
9644 if (end === undefined)
9645 relativeEnd = len;
9646 else
9647 relativeEnd = ToInteger(end);
9648 var final;
9649 if (relativeEnd < 0)
9650 final = max((len + relativeEnd), 0);
9651 else
9652 final = min(relativeEnd, len);
9653 while (k < final) {
9654 var pk = String(k);
9655 o[pk] = value;
9656 k += 1;
9657 }
9658 return o;
9659 });
9660
9661 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
9662
9663 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
9664 define(
9665 Array.prototype, 'find',
9666 function find(predicate) {
9667 var o = ToObject(this);
9668 var lenValue = o.length;
9669 var len = ToInteger(lenValue);
9670 if (!IsCallable(predicate)) throw TypeError();
9671 var t = arguments.length > 1 ? arguments[1] : undefined;
9672 var k = 0;
9673 while (k < len) {
9674 var pk = String(k);
9675 var kPresent = HasProperty(o, pk);
9676 if (kPresent) {
9677 var kValue = o[pk];
9678 var testResult = predicate.call(t, kValue, k, o);
9679 if (Boolean(testResult)) {
9680 return kValue;
9681 }
9682 }
9683 ++k;
9684 }
9685 return undefined;
9686 });
9687
9688 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
9689 define(
9690 Array.prototype, 'findIndex',
9691 function findIndex(predicate) {
9692 var o = ToObject(this);
9693 var lenValue = o.length;
9694 var len = ToLength(lenValue);
9695 if (!IsCallable(predicate)) throw TypeError();
9696 var t = arguments.length > 1 ? arguments[1] : undefined;
9697 var k = 0;
9698 while (k < len) {
9699 var pk = String(k);
9700 var kPresent = HasProperty(o, pk);
9701 if (kPresent) {
9702 var kValue = o[pk];
9703 var testResult = predicate.call(t, kValue, k, o);
9704 if (Boolean(testResult)) {
9705 return k;
9706 }
9707 }
9708 ++k;
9709 }
9710 return -1;
9711 });
9712
9713 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
9714 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
9715 // 22.1.3.12 Array.prototype.join (separator)
9716
9717 // 22.1.3.13 Array.prototype.keys ( )
9718 define(
9719 Array.prototype, 'keys',
9720 function keys() {
9721 return CreateArrayIterator(this, 'key');
9722 }, !nativeArrayIteratorMethods);
9723
9724 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
9725 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
9726 // 22.1.3.16 Array.prototype.pop ( )
9727 // 22.1.3.17 Array.prototype.push ( ...items )
9728 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
9729 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
9730 // 22.1.3.20 Array.prototype.reverse ( )
9731 // 22.1.3.21 Array.prototype.shift ( )
9732 // 22.1.3.22 Array.prototype.slice (start, end)
9733 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
9734 // 22.1.3.24 Array.prototype.sort (comparefn)
9735 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
9736 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
9737 // 22.1.3.27 Array.prototype.toString ( )
9738 // 22.1.3.28 Array.prototype.unshift ( ...items )
9739
9740 // 22.1.3.29 Array.prototype.values ( )
9741 define(
9742 Array.prototype, 'values',
9743 function values() {
9744 return CreateArrayIterator(this, 'value');
9745 }, !nativeArrayIteratorMethods);
9746
9747 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
9748 define(
9749 Array.prototype, $$iterator,
9750 Array.prototype.values
9751 );
9752
9753 // 22.1.3.31 Array.prototype [ @@unscopables ]
9754 // 22.1.4 Properties of Array Instances
9755 // 22.1.4.1 length
9756
9757 // 22.1.5 Array Iterator Objects
9758 function ArrayIterator() {}
9759
9760 // 22.1.5.1 CreateArrayIterator Abstract Operation
9761 function CreateArrayIterator(array, kind) {
9762 var o = ToObject(array);
9763 var iterator = new ArrayIterator;
9764 set_internal(iterator, '[[IteratedObject]]', o);
9765 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
9766 set_internal(iterator, '[[ArrayIterationKind]]', kind);
9767 return iterator;
9768 }
9769
9770 // 22.1.5.2 The %ArrayIteratorPrototype% Object
9771 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
9772 ArrayIterator.prototype = $ArrayIteratorPrototype$;
9773
9774 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
9775 define(
9776 $ArrayIteratorPrototype$, 'next',
9777 function next() {
9778 var o = strict(this);
9779 if (Type(o) !== 'object') throw TypeError();
9780 var a = o['[[IteratedObject]]'],
9781 index = o['[[ArrayIteratorNextIndex]]'],
9782 itemKind = o['[[ArrayIterationKind]]'],
9783 lenValue = a.length,
9784 len = ToUint32(lenValue),
9785 elementKey,
9786 elementValue;
9787 if (itemKind.indexOf('sparse') !== -1) {
9788 var found = false;
9789 while (!found && index < len) {
9790 elementKey = String(index);
9791 found = HasProperty(a, elementKey);
9792 if (!found) {
9793 index += 1;
9794 }
9795 }
9796 }
9797 if (index >= len) {
9798 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
9799 return CreateIterResultObject(undefined, true);
9800 }
9801 elementKey = index;
9802 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
9803 if (itemKind.indexOf('value') !== -1)
9804 elementValue = a[elementKey];
9805 if (itemKind.indexOf('key+value') !== -1)
9806 return CreateIterResultObject([elementKey, elementValue], false);
9807 if (itemKind.indexOf('key') !== -1)
9808 return CreateIterResultObject(elementKey, false);
9809 if (itemKind === 'value')
9810 return CreateIterResultObject(elementValue, false);
9811 throw Error('Internal error');
9812 });
9813
9814 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
9815 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
9816
9817 // 22.1.5.3 Properties of Array Iterator Instances
9818
9819
9820 // ---------------------------------------
9821 // 22.2 TypedArray Objects
9822 // ---------------------------------------
9823
9824 // See typedarray.js for TypedArray polyfill
9825
9826 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
9827 'Int16Array', 'Uint16Array',
9828 'Int32Array', 'Uint32Array',
9829 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
9830 if (!($TypedArrayName$ in global))
9831 return;
9832 var $TypedArray$ = global[$TypedArrayName$];
9833
9834 // 22.2.1 The %TypedArray% Intrinsic Object
9835 // 22.2.1.1 %TypedArray% ( length )
9836 // 22.2.1.2 %TypedArray% ( typedArray )
9837 // 22.2.1.3 %TypedArray% ( object )
9838 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
9839 // 22.2.1.5 %TypedArray% ( all other argument combinations )
9840 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
9841
9842 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
9843 define(
9844 $TypedArray$, 'from',
9845 function from(source) {
9846 var mapfn = arguments[1];
9847 var thisArg = arguments[2];
9848
9849 var c = strict(this);
9850 if (!IsConstructor(c)) throw TypeError();
9851 if (mapfn === undefined) {
9852 var mapping = false;
9853 } else {
9854 if (IsCallable(mapfn)) throw TypeError();
9855 var t = thisArg;
9856 mapping = true;
9857 }
9858 var usingIterator = GetMethod(source, $$iterator);
9859 if (usingIterator !== undefined) {
9860 var iterator = GetIterator(source, usingIterator);
9861 var values = [];
9862 var next = true;
9863 while (next !== false) {
9864 next = IteratorStep(iterator);
9865 if (next !== false) {
9866 var nextValue = IteratorValue(next);
9867 values.push(nextValue);
9868 }
9869 }
9870 var len = values.length;
9871 var newObj = new c(len);
9872 var k = 0;
9873 while (k < len) {
9874 var kValue = values.shift();
9875 if (mapping) {
9876 var mappedValue = mapfn.call(t, kValue);
9877 } else {
9878 mappedValue = kValue;
9879 }
9880 newObj[k] = mappedValue;
9881 ++k;
9882 }
9883 console.assert(values.length === 0);
9884 return newObj;
9885 }
9886 var arrayLike = ToObject(source);
9887 var lenValue = arrayLike.length;
9888 len = ToLength(lenValue);
9889 newObj = new c(len);
9890 k = 0;
9891 while (k < len) {
9892 kValue = arrayLike[k];
9893 if (mapping) {
9894 mappedValue = mapfn.call(t, kValue, k);
9895 } else {
9896 mappedValue = kValue;
9897 }
9898 newObj[k] = mappedValue;
9899 ++k;
9900 }
9901 return newObj;
9902 });
9903
9904 // 22.2.2.2 %TypedArray%.of ( ...items )
9905 define(
9906 $TypedArray$, 'of',
9907 function of() {
9908 var items = arguments;
9909
9910 var len = items.length;
9911 var c = strict(this);
9912 var newObj = new c(len);
9913 var k = 0;
9914 while (k < len) {
9915 newObj[k] = items[k];
9916 ++k;
9917 }
9918 return newObj;
9919 });
9920
9921 // 22.2.2.3 %TypedArray%.prototype
9922 // 22.2.2.4 get %TypedArray% [ @@species ]
9923 // 22.2.3 Properties of the %TypedArrayPrototype% Object
9924 // 22.2.3.1 get %TypedArray%.prototype.buffer
9925 // 22.2.3.2 get %TypedArray%.prototype.byteLength
9926 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
9927 // 22.2.3.4 %TypedArray%.prototype.constructor
9928
9929 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
9930 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
9931
9932 // 22.2.3.6 %TypedArray%.prototype.entries ( )
9933 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
9934
9935 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
9936 define($TypedArray$.prototype, 'every', Array.prototype.every);
9937
9938 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
9939 define(
9940 $TypedArray$.prototype, 'fill',
9941 //Array.prototype.fill // Doesn't work in Safari 7
9942 function fill(value/*, start, end*/) {
9943 var start = arguments[1],
9944 end = arguments[2];
9945
9946 var o = ToObject(this);
9947 var lenVal = o.length;
9948 var len = ToLength(lenVal);
9949 len = max(len, 0);
9950 var relativeStart = ToInteger(start);
9951 var k;
9952 if (relativeStart < 0) k = max((len + relativeStart), 0);
9953 else k = min(relativeStart, len);
9954 var relativeEnd;
9955 if (end === undefined) relativeEnd = len;
9956 else relativeEnd = ToInteger(end);
9957 var final;
9958 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
9959 else final = min(relativeEnd, len);
9960 while (k < final) {
9961 var pk = String(k);
9962 o[pk] = value;
9963 k += 1;
9964 }
9965 return o;
9966 });
9967
9968 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
9969 define(
9970 $TypedArray$.prototype, 'filter',
9971 function filter(callbackfn) {
9972 var thisArg = arguments[1];
9973
9974 var o = ToObject(this);
9975 var lenVal = o.length;
9976 var len = ToLength(lenVal);
9977 if (!IsCallable(callbackfn)) throw TypeError();
9978 var t = thisArg;
9979 var c = o.constructor;
9980 var kept = [];
9981 var k = 0;
9982 var captured = 0;
9983 while (k < len) {
9984 var kValue = o[k];
9985 var selected = callbackfn.call(t, kValue, k, o);
9986 if (selected) {
9987 kept.push(kValue);
9988 ++captured;
9989 }
9990 ++k;
9991 }
9992 var a = new c(captured);
9993 var n = 0;
9994 for (var i = 0; i < kept.length; ++i) {
9995 var e = kept[i];
9996 a[n] = e;
9997 ++n;
9998 }
9999 return a;
10000 });
10001
10002 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
10003 define($TypedArray$.prototype, 'find', Array.prototype.find);
10004
10005 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
10006 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
10007
10008 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
10009 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
10010
10011 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
10012 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
10013
10014 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
10015 define($TypedArray$.prototype, 'join', Array.prototype.join);
10016
10017 // 22.2.3.15 %TypedArray%.prototype.keys ( )
10018 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
10019
10020 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
10021 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
10022
10023 // 22.2.3.17 get %TypedArray%.prototype.length
10024
10025 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
10026 define(
10027 $TypedArray$.prototype, 'map',
10028 function map(callbackfn) {
10029 var thisArg = arguments[1];
10030
10031 var o = ToObject(this);
10032 var lenValue = o.length;
10033 var len = ToLength(lenValue);
10034 if (!IsCallable(callbackfn)) throw TypeError();
10035 var t = thisArg;
10036 var a = undefined;
10037 var c = o.constructor;
10038 if (IsConstructor(c))
10039 a = new c(len);
10040 if (a === undefined)
10041 a = new Array(len);
10042 var k = 0;
10043 while (k < len) {
10044 var kPresent = HasProperty(o, k);
10045 if (kPresent) {
10046 var kValue = o[k];
10047 var mappedValue = callbackfn.call(t, kValue, k, o);
10048 a[k] = mappedValue;
10049 }
10050 ++k;
10051 }
10052 return a;
10053 });
10054
10055 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
10056 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
10057
10058 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
10059 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
10060
10061 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
10062 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
10063
10064 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
10065 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
10066 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
10067
10068 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
10069 define(
10070 $TypedArray$.prototype, 'slice',
10071 function slice(start, end) {
10072 var o = ToObject(this);
10073 var lenVal = o.length;
10074 var len = ToLength(lenVal);
10075 var relativeStart = ToInteger(start);
10076 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
10077 var relativeEnd = (end === undefined) ? len : ToInteger(end);
10078 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
10079 var count = final - k;
10080 var c = o.constructor;
10081 if (IsConstructor(c)) {
10082 var a = new c(count);
10083 } else {
10084 throw TypeError();
10085 }
10086 var n = 0;
10087 while (k < final) {
10088 var kValue = o[k];
10089 a[n] = kValue;
10090 ++k;
10091 ++n;
10092 }
10093 return a;
10094 });
10095
10096 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
10097 define($TypedArray$.prototype, 'some', Array.prototype.some);
10098
10099 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
10100 define(
10101 $TypedArray$.prototype, 'sort',
10102 function sort() {
10103 var comparefn = arguments[0];
10104
10105 function sortCompare(x, y) {
10106 console.assert(Type(x) === 'number' && Type(y) === 'number');
10107 if (x !== x && y !== y) return +0;
10108 if (x !== x) return 1;
10109 if (y !== y) return -1;
10110 if (comparefn !== undefined) {
10111 return comparefn(x, y);
10112 }
10113 if (x < y) return -1;
10114 if (x > y) return 1;
10115 return +0;
10116 }
10117 return Array.prototype.sort.call(this, sortCompare);
10118 });
10119
10120 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
10121 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
10122 // 22.2.3.28 %TypedArray%.prototype.toString ( )
10123
10124 // 22.2.3.29 %TypedArray%.prototype.values ( )
10125 define($TypedArray$.prototype, 'values', Array.prototype.values);
10126
10127 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
10128 define(
10129 $TypedArray$.prototype, $$iterator,
10130 $TypedArray$.prototype.values
10131 );
10132
10133 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
10134 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
10135
10136 // 22.2.4 The TypedArray Constructors
10137 // 22.2.4.1TypedArray( ... argumentsList)
10138 // 22.2.5 Properties of the TypedArray Constructors
10139 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
10140 // 22.2.5.2 TypedArray.prototype
10141 // 22.2.6 Properties of TypedArray Prototype Objects
10142 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
10143 // 22.2.6.2 TypedArray.prototype.constructor
10144 // 22.2.7 Properties of TypedArray Instances
10145 });
10146
10147 // ---------------------------------------
10148 // 23 Keyed Collection
10149 // ---------------------------------------
10150
10151 // ---------------------------------------
10152 // 23.1 Map Objects
10153 // ---------------------------------------
10154
10155 (function() {
10156 // 23.1.1 The Map Constructor
10157
10158 // 23.1.1.1 Map ( [ iterable ] )
10159 /** @constructor */
10160 function Map(/*iterable*/) {
10161 var map = strict(this);
10162 var iterable = arguments[0];
10163
10164 if (Type(map) !== 'object') throw TypeError();
10165 if ('[[MapData]]' in map) throw TypeError();
10166
10167 if (iterable !== undefined) {
10168 var adder = map['set'];
10169 if (!IsCallable(adder)) throw TypeError();
10170 var iter = GetIterator(ToObject(iterable));
10171 }
10172 set_internal(map, '[[MapData]]', { keys: [], values: [] });
10173 if (iter === undefined) return map;
10174 while (true) {
10175 var next = IteratorStep(iter);
10176 if (next === false)
10177 return map;
10178 var nextItem = IteratorValue(next);
10179 if (Type(nextItem) !== 'object') throw TypeError();
10180 var k = nextItem[0];
10181 var v = nextItem[1];
10182 adder.call(map, k, v);
10183 }
10184
10185 return map;
10186 }
10187
10188 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10189 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
10190 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
10191 (new global.Map([['a', 1]]).size !== 1))
10192 global.Map = Map;
10193
10194
10195 function MapDataIndexOf(mapData, key) {
10196 var i;
10197 if (key === key) return mapData.keys.indexOf(key);
10198 // Slow case for NaN
10199 for (i = 0; i < mapData.keys.length; i += 1)
10200 if (SameValueZero(mapData.keys[i], key)) return i;
10201 return -1;
10202 }
10203
10204 // 23.1.1.2 new Map ( ... argumentsList )
10205 // 23.1.2 Properties of the Map Constructor
10206 // 23.1.2.1 Map.prototype
10207 var $MapPrototype$ = {};
10208 Map.prototype = $MapPrototype$;
10209
10210 // 23.1.2.2 get Map [ @@species ]
10211
10212 // 23.1.3 Properties of the Map Prototype Object
10213 // 23.1.3.1 Map.prototype.clear ()
10214 define(
10215 Map.prototype, 'clear',
10216 function clear() {
10217 var m = strict(this);
10218 if (Type(m) !== 'object') throw TypeError();
10219 if (!('[[MapData]]' in m)) throw TypeError();
10220 if (m['[[MapData]]'] === undefined) throw TypeError();
10221 var entries = m['[[MapData]]'];
10222 entries.keys.length = 0;
10223 entries.values.length = 0;
10224 return undefined;
10225 });
10226
10227 // 23.1.3.2 Map.prototype.constructor
10228
10229 // 23.1.3.3 Map.prototype.delete ( key )
10230 define(
10231 Map.prototype, 'delete',
10232 function delete_(key) {
10233 var m = strict(this);
10234 if (Type(m) !== 'object') throw TypeError();
10235 if (!('[[MapData]]' in m)) throw TypeError();
10236 if (m['[[MapData]]'] === undefined) throw TypeError();
10237 var entries = m['[[MapData]]'];
10238 var i = MapDataIndexOf(entries, key);
10239 if (i < 0) return false;
10240 entries.keys[i] = empty;
10241 entries.values[i] = empty;
10242 return true;
10243 });
10244
10245 // 23.1.3.4 Map.prototype.entries ( )
10246 define(
10247 Map.prototype, 'entries',
10248 function entries() {
10249 var m = strict(this);
10250 if (Type(m) !== 'object') throw TypeError();
10251 return CreateMapIterator(m, 'key+value');
10252 });
10253
10254 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
10255 define(
10256 Map.prototype, 'forEach',
10257 function forEach(callbackfn /*, thisArg*/) {
10258 var thisArg = arguments[1];
10259
10260 var m = strict(this);
10261 if (Type(m) !== 'object') throw TypeError();
10262 if (!('[[MapData]]' in m)) throw TypeError();
10263 if (m['[[MapData]]'] === undefined) throw TypeError();
10264 var entries = m['[[MapData]]'];
10265
10266 if (!IsCallable(callbackfn)) {
10267 throw TypeError('First argument to forEach is not callable.');
10268 }
10269 for (var i = 0; i < entries.keys.length; ++i) {
10270 if (entries.keys[i] !== empty) {
10271 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
10272 }
10273 }
10274 return undefined;
10275 });
10276
10277 // 23.1.3.6 Map.prototype.get ( key )
10278 define(
10279 Map.prototype, 'get',
10280 function get(key) {
10281 var m = strict(this);
10282 if (Type(m) !== 'object') throw TypeError();
10283 if (!('[[MapData]]' in m)) throw TypeError();
10284 if (m['[[MapData]]'] === undefined) throw TypeError();
10285 var entries = m['[[MapData]]'];
10286 var i = MapDataIndexOf(entries, key);
10287 if (i >= 0) return entries.values[i];
10288 return undefined;
10289 });
10290
10291 // 23.1.3.7 Map.prototype.has ( key )
10292 define(
10293 Map.prototype, 'has',
10294 function has(key) {
10295 var m = strict(this);
10296 if (Type(m) !== 'object') throw TypeError();
10297 if (!('[[MapData]]' in m)) throw TypeError();
10298 if (m['[[MapData]]'] === undefined) throw TypeError();
10299 var entries = m['[[MapData]]'];
10300 if (MapDataIndexOf(entries, key) >= 0) return true;
10301 return false;
10302 });
10303
10304 // 23.1.3.8 Map.prototype.keys ( )
10305 define(
10306 Map.prototype, 'keys',
10307 function keys() {
10308 var m = strict(this);
10309 if (Type(m) !== 'object') throw TypeError();
10310 return CreateMapIterator(m, 'key');
10311 });
10312
10313 // 23.1.3.9 Map.prototype.set ( key , value )
10314 define(
10315 Map.prototype, 'set',
10316 function set(key, value) {
10317 var m = strict(this);
10318 if (Type(m) !== 'object') throw TypeError();
10319 if (!('[[MapData]]' in m)) throw TypeError();
10320 if (m['[[MapData]]'] === undefined) throw TypeError();
10321 var entries = m['[[MapData]]'];
10322 var i = MapDataIndexOf(entries, key);
10323 if (i < 0) i = entries.keys.length;
10324 if (SameValue(key, -0)) key = 0;
10325 entries.keys[i] = key;
10326 entries.values[i] = value;
10327 return m;
10328 });
10329
10330 // 23.1.3.10 get Map.prototype.size
10331 Object.defineProperty(
10332 Map.prototype, 'size', {
10333 get: function() {
10334 var m = strict(this);
10335 if (Type(m) !== 'object') throw TypeError();
10336 if (!('[[MapData]]' in m)) throw TypeError();
10337 if (m['[[MapData]]'] === undefined) throw TypeError();
10338 var entries = m['[[MapData]]'];
10339 var count = 0;
10340 for (var i = 0; i < entries.keys.length; ++i) {
10341 if (entries.keys[i] !== empty)
10342 count = count + 1;
10343 }
10344 return count;
10345 }
10346 });
10347
10348 // 23.1.3.11 Map.prototype.values ( )
10349 define(
10350 Map.prototype, 'values',
10351 function values() {
10352 var m = strict(this);
10353 if (Type(m) !== 'object') throw TypeError();
10354 return CreateMapIterator(m, 'value');
10355 });
10356
10357 // 23.1.3.12 Map.prototype [ @@iterator ]( )
10358 define(
10359 Map.prototype, $$iterator,
10360 function() {
10361 var m = strict(this);
10362 if (Type(m) !== 'object') throw TypeError();
10363 return CreateMapIterator(m, 'key+value');
10364 });
10365
10366 // 23.1.3.13 Map.prototype [ @@toStringTag ]
10367 define(global.Map.prototype, $$toStringTag, 'Map');
10368
10369 // 23.1.4 Properties of Map Instances
10370 // 23.1.5 Map Iterator Objects
10371
10372 /** @constructor */
10373 function MapIterator() {}
10374
10375 // 23.1.5.1 CreateMapIterator Abstract Operation
10376 function CreateMapIterator(map, kind) {
10377 if (Type(map) !== 'object') throw TypeError();
10378 if (!('[[MapData]]' in map)) throw TypeError();
10379 if (map['[[MapData]]'] === undefined) throw TypeError();
10380 var iterator = new MapIterator;
10381 set_internal(iterator, '[[Map]]', map);
10382 set_internal(iterator, '[[MapNextIndex]]', 0);
10383 set_internal(iterator, '[[MapIterationKind]]', kind);
10384 return iterator;
10385 }
10386
10387 // 23.1.5.2 The %MapIteratorPrototype% Object
10388 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
10389 MapIterator.prototype = $MapIteratorPrototype$;
10390
10391 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
10392 define(
10393 $MapIteratorPrototype$, 'next',
10394 function next() {
10395 var o = strict(this);
10396 if (Type(o) !== 'object') throw TypeError();
10397 var m = o['[[Map]]'],
10398 index = o['[[MapNextIndex]]'],
10399 itemKind = o['[[MapIterationKind]]'],
10400 entries = m['[[MapData]]'];
10401 while (index < entries.keys.length) {
10402 var e = {key: entries.keys[index], value: entries.values[index]};
10403 index = index += 1;
10404 set_internal(o, '[[MapNextIndex]]', index);
10405 if (e.key !== empty) {
10406 if (itemKind === 'key') {
10407 return CreateIterResultObject(e.key, false);
10408 } else if (itemKind === 'value') {
10409 return CreateIterResultObject(e.value, false);
10410 } else {
10411 return CreateIterResultObject([e.key, e.value], false);
10412 }
10413 }
10414 }
10415 return CreateIterResultObject(undefined, true);
10416 });
10417
10418 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
10419 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
10420
10421 // 23.1.5.3 Properties of Map Iterator Instances
10422 }());
10423
10424 // ---------------------------------------
10425 // 23.2 Set Objects
10426 // ---------------------------------------
10427
10428 (function() {
10429 // 23.2.1 The Set Constructor
10430 // 23.2.1.1 Set ( [ iterable ] )
10431
10432 /** @constructor */
10433 function Set(/*iterable*/) {
10434 var set = strict(this);
10435 var iterable = arguments[0];
10436
10437 if (Type(set) !== 'object') throw TypeError();
10438 if ('[[SetData]]' in set) throw TypeError();
10439
10440 if (iterable !== undefined) {
10441 var adder = set['add'];
10442 if (!IsCallable(adder)) throw TypeError();
10443 var iter = GetIterator(ToObject(iterable));
10444 }
10445 set_internal(set, '[[SetData]]', []);
10446 if (iter === undefined) return set;
10447 while (true) {
10448 var next = IteratorStep(iter);
10449 if (next === false)
10450 return set;
10451 var nextValue = IteratorValue(next);
10452 adder.call(set, nextValue);
10453 }
10454
10455 return set;
10456 }
10457
10458 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
10459 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
10460 (new global.Set([1]).size !== 1))
10461 global.Set = Set;
10462
10463 function SetDataIndexOf(setData, key) {
10464 var i;
10465 if (key === key)
10466 return setData.indexOf(key);
10467 // Slow case for NaN
10468 for (i = 0; i < setData.length; i += 1)
10469 if (SameValueZero(setData[i], key)) return i;
10470 return -1;
10471 }
10472
10473 // 23.2.1.2 new Set ( ...argumentsList )
10474 // 23.2.2 Properties of the Set Constructor
10475
10476 // 23.2.2.1 Set.prototype
10477 var $SetPrototype$ = {};
10478 Set.prototype = $SetPrototype$;
10479
10480 // 23.2.2.2 get Set [ @@species ]
10481 // 23.2.3 Properties of the Set Prototype Object
10482
10483 // 23.2.3.1 Set.prototype.add (value )
10484 define(
10485 Set.prototype, 'add',
10486 function add(value) {
10487 var s = strict(this);
10488 if (Type(s) !== 'object') throw TypeError();
10489 if (!('[[SetData]]' in s)) throw TypeError();
10490 if (s['[[SetData]]'] === undefined) throw TypeError();
10491 if (SameValue(value, -0)) value = 0;
10492 var entries = s['[[SetData]]'];
10493 var i = SetDataIndexOf(entries, value);
10494 if (i < 0) i = s['[[SetData]]'].length;
10495 s['[[SetData]]'][i] = value;
10496
10497 return s;
10498 });
10499
10500 // 23.2.3.2 Set.prototype.clear ()
10501 define(
10502 Set.prototype, 'clear',
10503 function clear() {
10504 var s = strict(this);
10505 if (Type(s) !== 'object') throw TypeError();
10506 if (!('[[SetData]]' in s)) throw TypeError();
10507 if (s['[[SetData]]'] === undefined) throw TypeError();
10508 var entries = s['[[SetData]]'];
10509 entries.length = 0;
10510 return undefined;
10511 });
10512
10513 // 23.2.3.3 Set.prototype.constructor
10514 // 23.2.3.4 Set.prototype.delete ( value )
10515 define(
10516 Set.prototype, 'delete',
10517 function delete_(value) {
10518 var s = strict(this);
10519 if (Type(s) !== 'object') throw TypeError();
10520 if (!('[[SetData]]' in s)) throw TypeError();
10521 if (s['[[SetData]]'] === undefined) throw TypeError();
10522 var entries = s['[[SetData]]'];
10523 var i = SetDataIndexOf(entries, value);
10524 if (i < 0) return false;
10525 entries[i] = empty;
10526 return true;
10527 });
10528
10529 // 23.2.3.5 Set.prototype.entries ( )
10530 define(
10531 Set.prototype, 'entries',
10532 function entries() {
10533 var s = strict(this);
10534 if (Type(s) !== 'object') throw TypeError();
10535 return CreateSetIterator(s, 'key+value');
10536 });
10537
10538 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
10539 define(
10540 Set.prototype, 'forEach',
10541 function forEach(callbackfn/*, thisArg*/) {
10542 var thisArg = arguments[1];
10543
10544 var s = strict(this);
10545 if (Type(s) !== 'object') throw TypeError();
10546 if (!('[[SetData]]' in s)) throw TypeError();
10547 if (s['[[SetData]]'] === undefined) throw TypeError();
10548 var entries = s['[[SetData]]'];
10549
10550 if (!IsCallable(callbackfn)) {
10551 throw TypeError('First argument to forEach is not callable.');
10552 }
10553 for (var i = 0; i < entries.length; ++i) {
10554 if (entries[i] !== empty) {
10555 callbackfn.call(thisArg, entries[i], entries[i], s);
10556 }
10557 }
10558 });
10559
10560 // 23.2.3.7 Set.prototype.has ( value )
10561 define(
10562 Set.prototype, 'has',
10563 function has(key) {
10564 var s = strict(this);
10565 if (Type(s) !== 'object') throw TypeError();
10566 if (!('[[SetData]]' in s)) throw TypeError();
10567 if (s['[[SetData]]'] === undefined) throw TypeError();
10568 var entries = s['[[SetData]]'];
10569 return SetDataIndexOf(entries, key) !== -1;
10570 });
10571
10572 // 23.2.3.8 Set.prototype.keys ( )
10573 // See Set.prototype.values
10574
10575 // 23.2.3.9 get Set.prototype.size
10576 Object.defineProperty(
10577 Set.prototype, 'size', {
10578 get: function() {
10579 var s = strict(this);
10580 if (Type(s) !== 'object') throw TypeError();
10581 if (!('[[SetData]]' in s)) throw TypeError();
10582 if (s['[[SetData]]'] === undefined) throw TypeError();
10583 var entries = s['[[SetData]]'];
10584 var count = 0;
10585 for (var i = 0; i < entries.length; ++i) {
10586 if (entries[i] !== empty)
10587 count = count + 1;
10588 }
10589 return count;
10590 }
10591 });
10592
10593 // 23.2.3.10 Set.prototype.values ( )
10594 define(
10595 Set.prototype, 'values',
10596 function values() {
10597 var s = strict(this);
10598 if (Type(s) !== 'object') throw TypeError();
10599 return CreateSetIterator(s, 'value');
10600 });
10601 // NOTE: function name is still 'values':
10602 Set.prototype.keys = Set.prototype.values;
10603
10604 // 23.2.3.11 Set.prototype [@@iterator ] ( )
10605 define(
10606 Set.prototype, $$iterator,
10607 function() {
10608 var s = strict(this);
10609 if (Type(s) !== 'object') throw TypeError();
10610 return CreateSetIterator(s);
10611 });
10612
10613 // 23.2.3.12 Set.prototype [ @@toStringTag ]
10614 define(global.Set.prototype, $$toStringTag, 'Set');
10615
10616 // 23.2.4 Properties of Set Instances
10617 // 23.2.5 Set Iterator Objects
10618 /** @constructor */
10619 function SetIterator() {}
10620
10621 // 23.2.5.1 CreateSetIterator Abstract Operation
10622 function CreateSetIterator(set, kind) {
10623 if (Type(set) !== 'object') throw TypeError();
10624 if (!('[[SetData]]' in set)) throw TypeError();
10625 if (set['[[SetData]]'] === undefined) throw TypeError();
10626 var iterator = new SetIterator;
10627 set_internal(iterator, '[[IteratedSet]]', set);
10628 set_internal(iterator, '[[SetNextIndex]]', 0);
10629 set_internal(iterator, '[[SetIterationKind]]', kind);
10630 return iterator;
10631 }
10632
10633 // 23.2.5.2 The %SetIteratorPrototype% Object
10634 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
10635 SetIterator.prototype = $SetIteratorPrototype$;
10636
10637 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
10638 define(
10639 $SetIteratorPrototype$, 'next',
10640 function next() {
10641 var o = strict(this);
10642 if (Type(o) !== 'object') throw TypeError();
10643 var s = o['[[IteratedSet]]'],
10644 index = o['[[SetNextIndex]]'],
10645 itemKind = o['[[SetIterationKind]]'],
10646 entries = s['[[SetData]]'];
10647 while (index < entries.length) {
10648 var e = entries[index];
10649 index = index += 1;
10650 set_internal(o, '[[SetNextIndex]]', index);
10651 if (e !== empty) {
10652 if (itemKind === 'key+value')
10653 return CreateIterResultObject([e, e], false);
10654 return CreateIterResultObject(e, false);
10655 }
10656 }
10657 return CreateIterResultObject(undefined, true);
10658 });
10659
10660 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
10661 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
10662
10663 // 23.2.5.3 Properties of Set Iterator Instances
10664
10665 }());
10666
10667 // ---------------------------------------
10668 // 23.3 WeakMap Objects
10669 // ---------------------------------------
10670
10671 (function() {
10672 // 23.3.1 The WeakMap Constructor
10673 // 23.3.1.1 WeakMap ( [ iterable ] )
10674 /** @constructor */
10675 function WeakMap(/*iterable*/) {
10676 var map = strict(this);
10677 var iterable = arguments[0];
10678
10679 if (Type(map) !== 'object') throw TypeError();
10680 if ('[[WeakMapData]]' in map) throw TypeError();
10681
10682 if (iterable !== undefined) {
10683 var adder = map['set'];
10684 if (!IsCallable(adder)) throw TypeError();
10685 var iter = GetIterator(ToObject(iterable));
10686 }
10687 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
10688 if (iter === undefined) return map;
10689 while (true) {
10690 var next = IteratorStep(iter);
10691 if (next === false)
10692 return map;
10693 var nextValue = IteratorValue(next);
10694 if (Type(nextValue) !== 'object') throw TypeError();
10695 var k = nextValue[0];
10696 var v = nextValue[1];
10697 adder.call(map, k, v);
10698 }
10699
10700 return map;
10701 }
10702
10703 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10704 global.WeakMap = WeakMap;
10705
10706 // 23.3.2 Properties of the WeakMap Constructor
10707 // 23.3.2.1 WeakMap.prototype
10708 var $WeakMapPrototype$ = {};
10709 WeakMap.prototype = $WeakMapPrototype$;
10710
10711
10712
10713 // 23.3.2.2 WeakMap[ @@create ] ( )
10714 // 23.3.3 Properties of the WeakMap Prototype Object
10715
10716 // 23.3.3.1 WeakMap.prototype.constructor
10717
10718 // 23.3.3.2 WeakMap.prototype.delete ( key )
10719 define(
10720 WeakMap.prototype, 'delete',
10721 function delete_(key) {
10722 var M = strict(this);
10723 if (Type(M) !== 'object') throw TypeError();
10724 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10725 if (Type(key) !== 'object') throw TypeError('Expected object');
10726 return M['[[WeakMapData]]'].remove(key);
10727 });
10728
10729 // 23.3.3.3 WeakMap.prototype.get ( key )
10730 define(
10731 WeakMap.prototype, 'get',
10732 function get(key, defaultValue) {
10733 var M = strict(this);
10734 if (Type(M) !== 'object') throw TypeError();
10735 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10736 if (Type(key) !== 'object') throw TypeError('Expected object');
10737 return M['[[WeakMapData]]'].get(key, defaultValue);
10738 });
10739
10740 // 23.3.3.4 WeakMap.prototype.has ( key )
10741 define(
10742 WeakMap.prototype, 'has',
10743 function has(key) {
10744 var M = strict(this);
10745 if (Type(M) !== 'object') throw TypeError();
10746 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10747 if (Type(key) !== 'object') throw TypeError('Expected object');
10748 return M['[[WeakMapData]]'].has(key);
10749 });
10750
10751 // 23.3.3.5 WeakMap.prototype.set ( key , value )
10752 define(
10753 WeakMap.prototype, 'set',
10754 function set(key, value) {
10755 var M = strict(this);
10756 if (Type(M) !== 'object') throw TypeError();
10757 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
10758 if (Type(key) !== 'object') throw TypeError('Expected object');
10759 M['[[WeakMapData]]'].set(key, value);
10760 return M;
10761 });
10762
10763 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
10764 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
10765
10766 // 23.3.4 Properties of WeakMap Instances
10767
10768 // Polyfills for incomplete native implementations:
10769 (function() {
10770 var wm = new global.WeakMap();
10771 var orig = global.WeakMap.prototype.set;
10772 define(global.WeakMap.prototype, 'set', function set() {
10773 orig.apply(this, arguments);
10774 return this;
10775 }, wm.set({}, 0) !== wm);
10776 }());
10777 }());
10778
10779 // ---------------------------------------
10780 // 23.4 WeakSet Objects
10781 // ---------------------------------------
10782
10783 (function() {
10784 // 23.4.1 The WeakSet Constructor
10785 // 23.4.1.1 WeakSet ( [ iterable ] )
10786 /** @constructor */
10787 function WeakSet(/*iterable*/) {
10788 var set = strict(this);
10789 var iterable = arguments[0];
10790
10791 if (Type(set) !== 'object') throw TypeError();
10792 if ('[[WeakSetData]]' in set) throw TypeError();
10793
10794 if (iterable !== undefined) {
10795 var adder = set['add'];
10796 if (!IsCallable(adder)) throw TypeError();
10797 var iter = GetIterator(ToObject(iterable));
10798 }
10799 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
10800 if (iter === undefined) return set;
10801 while (true) {
10802 var next = IteratorStep(iter);
10803 if (next === false)
10804 return set;
10805 var nextValue = IteratorValue(next);
10806 adder.call(set, nextValue);
10807 }
10808
10809 return set;
10810 }
10811
10812 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
10813 global.WeakSet = WeakSet;
10814
10815 // 23.4.2 Properties of the WeakSet Constructor
10816 // 23.4.2.1 WeakSet.prototype
10817 var $WeakSetPrototype$ = {};
10818 WeakSet.prototype = $WeakSetPrototype$;
10819
10820 // 23.4.3 Properties of the WeakSet Prototype Object
10821 // 23.4.3.1 WeakSet.prototype.add (value )
10822 define(
10823 WeakSet.prototype, 'add',
10824 function add(value) {
10825 var S = strict(this);
10826 if (Type(S) !== 'object') throw TypeError();
10827 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10828 if (Type(value) !== 'object') throw TypeError('Expected object');
10829 S['[[WeakSetData]]'].set(value, true);
10830 return S;
10831 });
10832
10833 // 23.4.3.2 WeakSet.prototype.constructor
10834 // 23.4.3.3 WeakSet.prototype.delete ( value )
10835 define(
10836 WeakSet.prototype, 'delete',
10837 function delete_(value) {
10838 var S = strict(this);
10839 if (Type(S) !== 'object') throw TypeError();
10840 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10841 if (Type(value) !== 'object') throw TypeError('Expected object');
10842 return S['[[WeakSetData]]'].remove(value);
10843 });
10844
10845 // 23.4.3.4 WeakSet.prototype.has ( value )
10846 define(
10847 WeakSet.prototype, 'has',
10848 function has(key) {
10849 var S = strict(this);
10850 if (Type(S) !== 'object') throw TypeError();
10851 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
10852 if (Type(key) !== 'object') throw TypeError('Expected object');
10853 return S['[[WeakSetData]]'].has(key);
10854 });
10855
10856 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
10857 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
10858
10859 // 23.4.4 Properties of WeakSet Instances
10860
10861 // Polyfills for incomplete native implementations:
10862 (function() {
10863 var ws = new global.WeakSet();
10864 var orig = global.WeakSet.prototype.add;
10865 define(global.WeakSet.prototype, 'add', function add() {
10866 orig.apply(this, arguments);
10867 return this;
10868 }, ws.add({}) !== ws);
10869 }());
10870 }());
10871
10872 // ---------------------------------------
10873 // 24 Structured Data
10874 // ---------------------------------------
10875
10876 // ---------------------------------------
10877 // 24.1 ArrayBuffer Objects
10878 // ---------------------------------------
10879
10880 // See typedarray.js for TypedArray polyfill
10881
10882 (function() {
10883 if (!('ArrayBuffer' in global))
10884 return;
10885
10886 // 24.1.1 Abstract Operations For ArrayBuffer Objects
10887 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
10888 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
10889 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
10890 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
10891 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
10892 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
10893 // 24.1.2 The ArrayBuffer Constructor
10894 // 24.1.2.1 ArrayBuffer( length )
10895 // 24.1.3 Properties of the ArrayBuffer Constructor
10896
10897 // 24.1.3.1 ArrayBuffer.isView ( arg )
10898 define(
10899 ArrayBuffer, 'isView',
10900 function isView(arg) {
10901 if (Type(arg) !== 'object') return false;
10902 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
10903 return false;
10904 });
10905
10906 // 24.1.3.2 ArrayBuffer.prototype
10907 // 24.1.3.3 get ArrayBuffer [ @@species ]
10908 // 24.1.4 Properties of the ArrayBuffer Prototype Object
10909 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
10910 // 24.1.4.2 ArrayBuffer.prototype.constructor
10911 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
10912
10913 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
10914 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
10915
10916 // 24.1.5 Properties of the ArrayBuffer Instances
10917 }());
10918
10919 // ---------------------------------------
10920 // 24.2 DataView Objects
10921 // ---------------------------------------
10922
10923 // See typedarray.js for TypedArray polyfill
10924
10925 (function() {
10926 if (!('DataView' in global))
10927 return;
10928
10929 // 24.2.1 Abstract Operations For DataView Objects
10930 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
10931 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
10932 // 24.2.2 The DataView Constructor
10933 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
10934 // 24.2.3 Properties of the DataView Constructor
10935 // 24.2.3.1 DataView.prototype
10936 // 24.2.4 Properties of the DataView Prototype Object
10937 // 24.2.4.1 get DataView.prototype.buffer
10938 // 24.2.4.2 get DataView.prototype.byteLength
10939 // 24.2.4.3 get DataView.prototype.byteOffset
10940 // 24.2.4.4 DataView.prototype.constructor
10941 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
10942 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
10943 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
10944 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
10945 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
10946 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
10947 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
10948 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
10949 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
10950 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
10951 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
10952 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
10953 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
10954 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
10955 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
10956 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
10957
10958 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
10959 define(DataView.prototype, $$toStringTag, 'DataView');
10960
10961 // 24.2.5 Properties of DataView Instances
10962 }());
10963
10964 // ---------------------------------------
10965 // 24.3 The JSON Object
10966 // ---------------------------------------
10967
10968 // 24.3.1 JSON.parse ( text [ , reviver ] )
10969 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
10970 // 24.3.3 JSON [ @@toStringTag ]
10971 define(JSON, $$toStringTag, 'JSON');
10972
10973 // ---------------------------------------
10974 // 25.1 Iteration
10975 // ---------------------------------------
10976
10977 // 25.1.1 Common Iteration Interfaces
10978 // 25.1.1.1 The Iterable Interface
10979 // 25.1.1.2 The Iterator Interface
10980 // 25.1.1.3 The IteratorResult Interface
10981
10982 // 25.1.2 The %IteratorPrototype% Object
10983 // Defined earlier, so other prototypes can reference it.
10984 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
10985 define($IteratorPrototype$, $$iterator, function() {
10986 return this;
10987 });
10988
10989
10990 // ---------------------------------------
10991 // 25.4 Promise Objects
10992 // ---------------------------------------
10993
10994 (function() {
10995 // 25.4 Promise Objects
10996
10997 // 25.4.1 Promise Abstract Operations
10998
10999 // 25.4.1.1 PromiseCapability Records
11000 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
11001
11002 function IfAbruptRejectPromise(value, capability) {
11003 var rejectResult = capability['[[Reject]]'].call(undefined, value);
11004 return capability['[[Promise]]'];
11005 }
11006
11007 // 25.4.1.2 PromiseReaction Records
11008
11009 // 25.4.1.3 CreateResolvingFunctions ( promise )
11010
11011 function CreateResolvingFunctions(promise) {
11012 var alreadyResolved = {'[[value]]': false};
11013 var resolve = PromiseResolveFunction();
11014 set_internal(resolve, '[[Promise]]', promise);
11015 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
11016 var reject = PromiseRejectFunction();
11017 set_internal(reject, '[[Promise]]', promise);
11018 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
11019 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
11020 }
11021
11022 // 25.4.1.3.1 Promise Reject Functions
11023
11024 function PromiseRejectFunction() {
11025 var F = function(reason) {
11026 console.assert(Type(F['[[Promise]]']) === 'object');
11027 var promise = F['[[Promise]]'];
11028 var alreadyResolved = F['[[AlreadyResolved]]'];
11029 if (alreadyResolved['[[value]]']) return undefined;
11030 set_internal(alreadyResolved, '[[value]]', true);
11031 return RejectPromise(promise, reason);
11032 };
11033 return F;
11034 }
11035
11036 // 25.4.1.3.2 Promise Resolve Functions
11037
11038 function PromiseResolveFunction() {
11039 var F = function(resolution) {
11040 console.assert(Type(F['[[Promise]]']) === 'object');
11041 var promise = F['[[Promise]]'];
11042 var alreadyResolved = F['[[AlreadyResolved]]'];
11043 if (alreadyResolved['[[value]]']) return undefined;
11044 set_internal(alreadyResolved, '[[value]]', true);
11045
11046 if (SameValue(resolution, promise)) {
11047 var selfResolutionError = TypeError();
11048 return RejectPromise(promise, selfResolutionError);
11049 }
11050 if (Type(resolution) !== 'object')
11051 return FulfillPromise(promise, resolution);
11052 try {
11053 var then = resolution['then'];
11054 } catch(then) {
11055 return RejectPromise(promise, then);
11056 }
11057 if (!IsCallable(then))
11058 return FulfillPromise(promise, resolution);
11059 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
11060 return undefined;
11061 };
11062 return F;
11063 }
11064
11065 // 25.4.1.4 FulfillPromise ( promise, value )
11066
11067 function FulfillPromise(promise, value) {
11068 console.assert(promise['[[PromiseState]]'] === 'pending');
11069 var reactions = promise['[[PromiseFulfillReactions]]'];
11070 set_internal(promise, '[[PromiseResult]]', value);
11071 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11072 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11073 set_internal(promise, '[[PromiseState]]', 'fulfilled');
11074 return TriggerPromiseReactions(reactions, value);
11075 }
11076
11077 // 25.4.1.5 NewPromiseCapability ( C )
11078
11079 function NewPromiseCapability(c) {
11080 // To keep Promise hermetic, this doesn't look much like the spec.
11081 return CreatePromiseCapabilityRecord(undefined, c);
11082 }
11083
11084 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
11085
11086 function CreatePromiseCapabilityRecord(promise, constructor) {
11087 // To keep Promise hermetic, this doesn't look much like the spec.
11088 console.assert(IsConstructor(constructor));
11089 var promiseCapability = {};
11090 set_internal(promiseCapability, '[[Promise]]', promise);
11091 set_internal(promiseCapability, '[[Resolve]]', undefined);
11092 set_internal(promiseCapability, '[[Reject]]', undefined);
11093 var executor = GetCapabilitiesExecutor();
11094 set_internal(executor, '[[Capability]]', promiseCapability);
11095
11096 // NOTE: Differs from spec; object is constructed here
11097 var constructorResult = promise = new constructor(executor);
11098 set_internal(promiseCapability, '[[Promise]]', promise);
11099
11100 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
11101 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
11102 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
11103 return promiseCapability;
11104 }
11105
11106 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
11107
11108 function GetCapabilitiesExecutor() {
11109 var F = function(resolve, reject) {
11110 console.assert(F['[[Capability]]']);
11111 var promiseCapability = F['[[Capability]]'];
11112 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
11113 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
11114 set_internal(promiseCapability, '[[Resolve]]', resolve);
11115 set_internal(promiseCapability, '[[Reject]]', reject);
11116 return undefined;
11117 };
11118 return F;
11119 }
11120
11121 // 25.4.1.6 IsPromise ( x )
11122
11123 function IsPromise(x) {
11124 if (Type(x) !== 'object') return false;
11125 if (!('[[PromiseState]]' in x)) return false;
11126 if (x['[[PromiseState]]'] === undefined) return false;
11127 return true;
11128 }
11129
11130 // 25.4.1.7 RejectPromise ( promise, reason )
11131
11132 function RejectPromise(promise, reason) {
11133 console.assert(promise['[[PromiseState]]'] === 'pending');
11134 var reactions = promise['[[PromiseRejectReactions]]'];
11135 set_internal(promise, '[[PromiseResult]]', reason);
11136 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
11137 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
11138 set_internal(promise, '[[PromiseState]]', 'rejected');
11139 return TriggerPromiseReactions(reactions, reason);
11140 }
11141
11142 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
11143
11144 function TriggerPromiseReactions(reactions, argument) {
11145 for (var i = 0, len = reactions.length; i < len; ++i)
11146 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
11147 return undefined;
11148 }
11149
11150 // 25.4.2 Promise Jobs
11151
11152 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
11153
11154 function PromiseReactionJob(reaction, argument) {
11155 var promiseCapability = reaction['[[Capabilities]]'];
11156 var handler = reaction['[[Handler]]'];
11157 var handlerResult, status;
11158 try {
11159 if (handler === 'Identity') handlerResult = argument;
11160 else if (handler === 'Thrower') throw argument;
11161 else handlerResult = handler.call(undefined, argument);
11162 } catch (handlerResult) {
11163 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
11164 NextJob(status); return;
11165 }
11166 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
11167 NextJob(status);
11168 }
11169
11170 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
11171
11172 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
11173 // SPEC BUG: promise vs. promiseToResolve
11174 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
11175 try {
11176 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
11177 resolvingFunctions['[[Reject]]']);
11178 } catch (thenCallResult) {
11179 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
11180 NextJob(status); return;
11181 }
11182 NextJob(thenCallResult);
11183 }
11184
11185 // 25.4.3 The Promise Constructor
11186
11187 // 25.4.3.1 Promise ( executor )
11188
11189 function Promise(executor) {
11190 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
11191 Object.defineProperty(this, '[[PromiseState]]', config);
11192 Object.defineProperty(this, '[[PromiseConstructor]]', config);
11193 Object.defineProperty(this, '[[PromiseResult]]', config);
11194 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
11195 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
11196
11197 var promise = this;
11198 if (Type(promise) !== 'object') throw new TypeError();
11199 if (!('[[PromiseState]]' in promise)) throw TypeError();
11200 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
11201 if (!IsCallable(executor)) throw TypeError();
11202
11203 set_internal(promise, '[[PromiseConstructor]]', Promise);
11204
11205 return InitializePromise(promise, executor);
11206 }
11207
11208 // 25.4.3.1.1 InitializePromise ( promise, executor )
11209
11210 function InitializePromise(promise, executor) {
11211 console.assert('[[PromiseState]]' in promise);
11212 console.assert(IsCallable(executor));
11213 set_internal(promise, '[[PromiseState]]', 'pending');
11214 set_internal(promise, '[[PromiseFulfillReactions]]', []);
11215 set_internal(promise, '[[PromiseRejectReactions]]', []);
11216 var resolvingFunctions = CreateResolvingFunctions(promise);
11217 try {
11218 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
11219 resolvingFunctions['[[Reject]]']);
11220 } catch (completion) {
11221 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
11222 }
11223 return promise;
11224 }
11225
11226 // 25.4.4 Properties of the Promise Constructor
11227 // 25.4.4.1 Promise.all ( iterable )
11228
11229 define(Promise, 'all', function all(iterable) {
11230 var c = strict(this);
11231 var promiseCapability = NewPromiseCapability(c);
11232 try {
11233 var iterator = GetIterator(iterable);
11234 } catch (value) {
11235 promiseCapability['[[Reject]]'].call(undefined, value);
11236 return promiseCapability['[[Promise]]'];
11237 }
11238 var values = [];
11239 var remainingElementsCount = { value: 1 };
11240 var index = 0;
11241 while (true) {
11242 try {
11243 var next = IteratorStep(iterator);
11244 } catch (value) {
11245 promiseCapability['[[Reject]]'].call(undefined, value);
11246 return promiseCapability['[[Promise]]'];
11247 }
11248 if (!next) {
11249 remainingElementsCount.value -= 1;
11250 if (remainingElementsCount.value === 0) {
11251 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
11252
11253
11254 }
11255 return promiseCapability['[[Promise]]'];
11256 }
11257 try {
11258 var nextValue = IteratorValue(next);
11259 } catch (value) {
11260 promiseCapability['[[Reject]]'].call(undefined, value);
11261 return promiseCapability['[[Promise]]'];
11262 }
11263 try {
11264 var nextPromise = c.resolve(nextValue);
11265 } catch (value) {
11266 promiseCapability['[[Reject]]'].call(undefined, value);
11267 return promiseCapability['[[Promise]]'];
11268 }
11269 var resolveElement = PromiseAllResolveElementFunction();
11270 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
11271 set_internal(resolveElement, '[[Index]]', index);
11272 set_internal(resolveElement, '[[Values]]', values);
11273 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
11274 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
11275 remainingElementsCount.value += 1;
11276 try {
11277 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
11278 } catch (value) {
11279 promiseCapability['[[Reject]]'].call(undefined, value);
11280 return promiseCapability['[[Promise]]'];
11281 }
11282 index += 1;
11283 }
11284 });
11285
11286 // 25.4.4.1.1 Promise.all Resolve Element Functions
11287
11288 function PromiseAllResolveElementFunction() {
11289 var F = function(x) {
11290 var alreadyCalled = F['[[AlreadyCalled]]'];
11291 if (alreadyCalled.value) return undefined;
11292 alreadyCalled.value = true;
11293 var index = F['[[Index]]'];
11294 var values = F['[[Values]]'];
11295 var promiseCapability = F['[[Capabilities]]'];
11296 var remainingElementsCount = F['[[RemainingElements]]'];
11297 try {
11298 values[index] = x;
11299 } catch (result) {
11300 promiseCapability['[[Reject]]'].call(undefined, result);
11301 return promiseCapability['[[Promise]]'];
11302 }
11303 remainingElementsCount.value -= 1;
11304 if (remainingElementsCount.value === 0)
11305 return promiseCapability['[[Resolve]]'].call(undefined, values);
11306 return undefined;
11307 };
11308 return F;
11309 }
11310
11311 // 25.4.4.2 Promise.prototype
11312
11313 Promise.prototype = {};
11314
11315 // 25.4.4.3 Promise.race ( iterable )
11316
11317 define(Promise, 'race', function race(iterable) {
11318 var c = strict(this);
11319 var promiseCapability = NewPromiseCapability(c);
11320 try {
11321 var iterator = GetIterator(iterable);
11322 } catch (value) {
11323 promiseCapability['[[Reject]]'].call(undefined, value);
11324 return promiseCapability['[[Promise]]'];
11325 }
11326 while (true) {
11327 try {
11328 var next = IteratorStep(iterator);
11329 } catch (value) {
11330 promiseCapability['[[Reject]]'].call(undefined, value);
11331 return promiseCapability['[[Promise]]'];
11332 }
11333 if (!next) return promiseCapability['[[Promise]]'];
11334 try {
11335 var nextValue = IteratorValue(next);
11336 } catch (value) {
11337 promiseCapability['[[Reject]]'].call(undefined, value);
11338 return promiseCapability['[[Promise]]'];
11339 }
11340 try {
11341 var nextPromise = c.resolve(nextValue);
11342 } catch (value) {
11343 promiseCapability['[[Reject]]'].call(undefined, value);
11344 return promiseCapability['[[Promise]]'];
11345 }
11346 try {
11347 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
11348 } catch (value) {
11349 promiseCapability['[[Reject]]'].call(undefined, value);
11350 return promiseCapability['[[Promise]]'];
11351 }
11352 }
11353 });
11354
11355 // 25.4.4.4 Promise.reject ( r )
11356
11357 define(Promise, 'reject', function reject(r) {
11358 var c = strict(this);
11359 var promiseCapability = NewPromiseCapability(c);
11360 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
11361 return promiseCapability['[[Promise]]'];
11362 });
11363
11364 // 25.4.4.5 Promise.resolve ( x )
11365
11366 define(Promise, 'resolve', function resolve(x) {
11367 var c = strict(this);
11368 if (IsPromise(x)) {
11369 var constructor = x['[[PromiseConstructor]]'];
11370 if (SameValue(constructor, c)) return x;
11371 }
11372 var promiseCapability = NewPromiseCapability(c);
11373 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
11374 return promiseCapability['[[Promise]]'];
11375 });
11376
11377 // 25.4.4.6 Promise [ @@create ] ( )
11378 // 25.4.4.6.1 AllocatePromise ( constructor )
11379 // 25.4.5 Properties of the Promise Prototype Object
11380 // 25.4.5.1 Promise.prototype.catch ( onRejected )
11381
11382 define(Promise.prototype, 'catch', function catch_(onRejected) {
11383 var promise = this;
11384 return promise.then(undefined, onRejected);
11385 });
11386
11387 // 25.4.5.2 Promise.prototype.constructor
11388
11389 Promise.prototype.constructor = Promise;
11390
11391 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
11392
11393 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
11394 var promise = this;
11395 if (!IsPromise(promise)) throw TypeError();
11396 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
11397 if (!IsCallable(onRejected)) onRejected = 'Thrower';
11398 var c = promise.constructor;
11399 var promiseCapability = NewPromiseCapability(c);
11400 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
11401 '[[Handler]]': onFulfilled };
11402 var rejectReaction = { '[[Capabilities]]': promiseCapability,
11403 '[[Handler]]': onRejected };
11404 if (promise['[[PromiseState]]'] === 'pending') {
11405 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
11406 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
11407 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
11408 var value = promise['[[PromiseResult]]'];
11409 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
11410 } else if (promise['[[PromiseState]]'] === 'rejected') {
11411 var reason = promise['[[PromiseResult]]'];
11412 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
11413 }
11414 return promiseCapability['[[Promise]]'];
11415 });
11416
11417 // 25.4.6 Properties of Promise Instances
11418
11419 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11420 global.Promise = Promise;
11421
11422 // Patch early Promise.cast vs. Promise.resolve implementations
11423 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
11424 }());
11425
11426 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
11427 define(Promise.prototype, $$toStringTag, 'Promise');
11428
11429 // ---------------------------------------
11430 // 26 Reflection
11431 // ---------------------------------------
11432
11433 (function() {
11434 // 26.1 The Reflect Object
11435 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
11436 global.Reflect = {};
11437
11438 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
11439 define(
11440 Reflect, 'apply',
11441 function apply(target, thisArgument, argumentsList) {
11442 if (!IsCallable(target)) throw TypeError();
11443 return Function.prototype.apply.call(target, thisArgument, argumentsList);
11444 });
11445
11446 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
11447 define(
11448 Reflect, 'construct',
11449 function construct(target, argumentsList) {
11450 return __cons(target, argumentsList);
11451 });
11452
11453 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
11454 define(
11455 Reflect, 'defineProperty',
11456 function defineProperty(target, propertyKey, attributes) {
11457 try {
11458 Object.defineProperty(target, propertyKey, attributes);
11459 return true;
11460 } catch (_) {
11461 return false;
11462 }
11463 });
11464
11465 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
11466 define(
11467 Reflect, 'deleteProperty',
11468 function deleteProperty(target,name) {
11469 try {
11470 delete target[name];
11471 return !HasOwnProperty(target, name);
11472 } catch (_) {
11473 return false;
11474 }
11475 });
11476
11477 // 26.1.5 Reflect.enumerate ( target )
11478 define(
11479 Reflect, 'enumerate',
11480 function enumerate(target) {
11481 target = ToObject(target);
11482 var iterator = Enumerate(target);
11483 return iterator;
11484 });
11485
11486 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
11487 define(
11488 Reflect, 'get',
11489 function get(target, name, receiver) {
11490 target = ToObject(target);
11491 name = String(name);
11492 receiver = (receiver === undefined) ? target : ToObject(receiver);
11493 var desc = getPropertyDescriptor(target, name);
11494 if (desc && 'get' in desc)
11495 return Function.prototype.call.call(desc['get'], receiver);
11496 return target[name];
11497 });
11498
11499 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
11500 define(
11501 Reflect, 'getOwnPropertyDescriptor',
11502 Object.getOwnPropertyDescriptor);
11503
11504 // 26.1.8 Reflect.getPrototypeOf ( target )
11505 define(
11506 Reflect, 'getPrototypeOf',
11507 Object.getPrototypeOf);
11508
11509 // 26.1.9 Reflect.has ( target, propertyKey )
11510 define(
11511 Reflect, 'has',
11512 function has(target,name) {
11513 return String(name) in ToObject(target);
11514 });
11515
11516 // 26.1.10 Reflect.isExtensible (target)
11517 define(
11518 Reflect, 'isExtensible',
11519 Object.isExtensible);
11520
11521 // 26.1.11 Reflect.ownKeys ( target )
11522 define(
11523 Reflect, 'ownKeys',
11524 function ownKeys(target) {
11525 var obj = ToObject(target);
11526 return Object.getOwnPropertyNames(obj);
11527 });
11528
11529 // 26.1.12 Reflect.preventExtensions ( target )
11530 define(
11531 Reflect, 'preventExtensions',
11532 function preventExtensions(target) {
11533 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
11534 });
11535
11536 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
11537 define(
11538 Reflect, 'set',
11539 function set(target, name, value, receiver) {
11540 target = ToObject(target);
11541 name = String(name);
11542 receiver = (receiver === undefined) ? target : ToObject(receiver);
11543 var desc = getPropertyDescriptor(target, name);
11544 try {
11545 if (desc && 'set' in desc)
11546 Function.prototype.call.call(desc['set'], receiver, value);
11547 else
11548 target[name] = value;
11549 return true;
11550 } catch (_) {
11551 return false;
11552 }
11553 });
11554
11555 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
11556 define(
11557 Reflect, 'setPrototypeOf',
11558 function setPrototypeOf(target, proto) {
11559 try {
11560 target.__proto__ = proto;
11561 return Reflect.getPrototypeOf(target) === proto;
11562 } catch(_) {
11563 return false;
11564 }
11565 });
11566
11567 }());
11568
11569 // ---------------------------------------
11570 // 26.2 Proxy Objects
11571 // ---------------------------------------
11572
11573 // Not polyfillable.
11574
11575 }(self));
11576
11577 // This helper is defined outside the main scope so that the use of
11578 // 'eval' does not taint the scope for minifiers.
11579 function __cons(t, a) {
11580 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
11581 }
11582 </script>
11583 <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){
11584 'use strict'
11585
11586 exports.byteLength = byteLength
11587 exports.toByteArray = toByteArray
11588 exports.fromByteArray = fromByteArray
11589
11590 var lookup = []
11591 var revLookup = []
11592 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
11593
11594 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
11595 for (var i = 0, len = code.length; i < len; ++i) {
11596 lookup[i] = code[i]
11597 revLookup[code.charCodeAt(i)] = i
11598 }
11599
11600 revLookup['-'.charCodeAt(0)] = 62
11601 revLookup['_'.charCodeAt(0)] = 63
11602
11603 function placeHoldersCount (b64) {
11604 var len = b64.length
11605 if (len % 4 > 0) {
11606 throw new Error('Invalid string. Length must be a multiple of 4')
11607 }
11608
11609 // the number of equal signs (place holders)
11610 // if there are two placeholders, than the two characters before it
11611 // represent one byte
11612 // if there is only one, then the three characters before it represent 2 bytes
11613 // this is just a cheap hack to not do indexOf twice
11614 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
11615 }
11616
11617 function byteLength (b64) {
11618 // base64 is 4/3 + up to two characters of the original data
11619 return b64.length * 3 / 4 - placeHoldersCount(b64)
11620 }
11621
11622 function toByteArray (b64) {
11623 var i, j, l, tmp, placeHolders, arr
11624 var len = b64.length
11625 placeHolders = placeHoldersCount(b64)
11626
11627 arr = new Arr(len * 3 / 4 - placeHolders)
11628
11629 // if there are placeholders, only get up to the last complete 4 chars
11630 l = placeHolders > 0 ? len - 4 : len
11631
11632 var L = 0
11633
11634 for (i = 0, j = 0; i < l; i += 4, j += 3) {
11635 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
11636 arr[L++] = (tmp >> 16) & 0xFF
11637 arr[L++] = (tmp >> 8) & 0xFF
11638 arr[L++] = tmp & 0xFF
11639 }
11640
11641 if (placeHolders === 2) {
11642 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
11643 arr[L++] = tmp & 0xFF
11644 } else if (placeHolders === 1) {
11645 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
11646 arr[L++] = (tmp >> 8) & 0xFF
11647 arr[L++] = tmp & 0xFF
11648 }
11649
11650 return arr
11651 }
11652
11653 function tripletToBase64 (num) {
11654 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
11655 }
11656
11657 function encodeChunk (uint8, start, end) {
11658 var tmp
11659 var output = []
11660 for (var i = start; i < end; i += 3) {
11661 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
11662 output.push(tripletToBase64(tmp))
11663 }
11664 return output.join('')
11665 }
11666
11667 function fromByteArray (uint8) {
11668 var tmp
11669 var len = uint8.length
11670 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
11671 var output = ''
11672 var parts = []
11673 var maxChunkLength = 16383 // must be multiple of 3
11674
11675 // go through the array every three bytes, we'll deal with trailing stuff later
11676 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
11677 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
11678 }
11679
11680 // pad the end with zeros, but make sure to not forget the extra bytes
11681 if (extraBytes === 1) {
11682 tmp = uint8[len - 1]
11683 output += lookup[tmp >> 2]
11684 output += lookup[(tmp << 4) & 0x3F]
11685 output += '=='
11686 } else if (extraBytes === 2) {
11687 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
11688 output += lookup[tmp >> 10]
11689 output += lookup[(tmp >> 4) & 0x3F]
11690 output += lookup[(tmp << 2) & 0x3F]
11691 output += '='
11692 }
11693
11694 parts.push(output)
11695
11696 return parts.join('')
11697 }
11698
11699 },{}],2:[function(require,module,exports){
11700 /*!
11701 * The buffer module from node.js, for the browser.
11702 *
11703 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
11704 * @license MIT
11705 */
11706 /* eslint-disable no-proto */
11707
11708 'use strict'
11709
11710 var base64 = require('base64-js')
11711 var ieee754 = require('ieee754')
11712
11713 exports.Buffer = Buffer
11714 exports.SlowBuffer = SlowBuffer
11715 exports.INSPECT_MAX_BYTES = 50
11716
11717 var K_MAX_LENGTH = 0x7fffffff
11718 exports.kMaxLength = K_MAX_LENGTH
11719
11720 /**
11721 * If `Buffer.TYPED_ARRAY_SUPPORT`:
11722 * === true Use Uint8Array implementation (fastest)
11723 * === false Print warning and recommend using `buffer` v4.x which has an Object
11724 * implementation (most compatible, even IE6)
11725 *
11726 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
11727 * Opera 11.6+, iOS 4.2+.
11728 *
11729 * We report that the browser does not support typed arrays if the are not subclassable
11730 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
11731 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
11732 * for __proto__ and has a buggy typed array implementation.
11733 */
11734 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
11735
11736 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
11737 typeof console.error === 'function') {
11738 console.error(
11739 'This browser lacks typed array (Uint8Array) support which is required by ' +
11740 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
11741 )
11742 }
11743
11744 function typedArraySupport () {
11745 // Can typed array instances can be augmented?
11746 try {
11747 var arr = new Uint8Array(1)
11748 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
11749 return arr.foo() === 42
11750 } catch (e) {
11751 return false
11752 }
11753 }
11754
11755 function createBuffer (length) {
11756 if (length > K_MAX_LENGTH) {
11757 throw new RangeError('Invalid typed array length')
11758 }
11759 // Return an augmented `Uint8Array` instance
11760 var buf = new Uint8Array(length)
11761 buf.__proto__ = Buffer.prototype
11762 return buf
11763 }
11764
11765 /**
11766 * The Buffer constructor returns instances of `Uint8Array` that have their
11767 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
11768 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
11769 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
11770 * returns a single octet.
11771 *
11772 * The `Uint8Array` prototype remains unmodified.
11773 */
11774
11775 function Buffer (arg, encodingOrOffset, length) {
11776 // Common case.
11777 if (typeof arg === 'number') {
11778 if (typeof encodingOrOffset === 'string') {
11779 throw new Error(
11780 'If encoding is specified then the first argument must be a string'
11781 )
11782 }
11783 return allocUnsafe(arg)
11784 }
11785 return from(arg, encodingOrOffset, length)
11786 }
11787
11788 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
11789 if (typeof Symbol !== 'undefined' && Symbol.species &&
11790 Buffer[Symbol.species] === Buffer) {
11791 Object.defineProperty(Buffer, Symbol.species, {
11792 value: null,
11793 configurable: true,
11794 enumerable: false,
11795 writable: false
11796 })
11797 }
11798
11799 Buffer.poolSize = 8192 // not used by this implementation
11800
11801 function from (value, encodingOrOffset, length) {
11802 if (typeof value === 'number') {
11803 throw new TypeError('"value" argument must not be a number')
11804 }
11805
11806 if (value instanceof ArrayBuffer) {
11807 return fromArrayBuffer(value, encodingOrOffset, length)
11808 }
11809
11810 if (typeof value === 'string') {
11811 return fromString(value, encodingOrOffset)
11812 }
11813
11814 return fromObject(value)
11815 }
11816
11817 /**
11818 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
11819 * if value is a number.
11820 * Buffer.from(str[, encoding])
11821 * Buffer.from(array)
11822 * Buffer.from(buffer)
11823 * Buffer.from(arrayBuffer[, byteOffset[, length]])
11824 **/
11825 Buffer.from = function (value, encodingOrOffset, length) {
11826 return from(value, encodingOrOffset, length)
11827 }
11828
11829 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
11830 // https://github.com/feross/buffer/pull/148
11831 Buffer.prototype.__proto__ = Uint8Array.prototype
11832 Buffer.__proto__ = Uint8Array
11833
11834 function assertSize (size) {
11835 if (typeof size !== 'number') {
11836 throw new TypeError('"size" argument must be a number')
11837 } else if (size < 0) {
11838 throw new RangeError('"size" argument must not be negative')
11839 }
11840 }
11841
11842 function alloc (size, fill, encoding) {
11843 assertSize(size)
11844 if (size <= 0) {
11845 return createBuffer(size)
11846 }
11847 if (fill !== undefined) {
11848 // Only pay attention to encoding if it's a string. This
11849 // prevents accidentally sending in a number that would
11850 // be interpretted as a start offset.
11851 return typeof encoding === 'string'
11852 ? createBuffer(size).fill(fill, encoding)
11853 : createBuffer(size).fill(fill)
11854 }
11855 return createBuffer(size)
11856 }
11857
11858 /**
11859 * Creates a new filled Buffer instance.
11860 * alloc(size[, fill[, encoding]])
11861 **/
11862 Buffer.alloc = function (size, fill, encoding) {
11863 return alloc(size, fill, encoding)
11864 }
11865
11866 function allocUnsafe (size) {
11867 assertSize(size)
11868 return createBuffer(size < 0 ? 0 : checked(size) | 0)
11869 }
11870
11871 /**
11872 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
11873 * */
11874 Buffer.allocUnsafe = function (size) {
11875 return allocUnsafe(size)
11876 }
11877 /**
11878 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
11879 */
11880 Buffer.allocUnsafeSlow = function (size) {
11881 return allocUnsafe(size)
11882 }
11883
11884 function fromString (string, encoding) {
11885 if (typeof encoding !== 'string' || encoding === '') {
11886 encoding = 'utf8'
11887 }
11888
11889 if (!Buffer.isEncoding(encoding)) {
11890 throw new TypeError('"encoding" must be a valid string encoding')
11891 }
11892
11893 var length = byteLength(string, encoding) | 0
11894 var buf = createBuffer(length)
11895
11896 var actual = buf.write(string, encoding)
11897
11898 if (actual !== length) {
11899 // Writing a hex string, for example, that contains invalid characters will
11900 // cause everything after the first invalid character to be ignored. (e.g.
11901 // 'abxxcd' will be treated as 'ab')
11902 buf = buf.slice(0, actual)
11903 }
11904
11905 return buf
11906 }
11907
11908 function fromArrayLike (array) {
11909 var length = array.length < 0 ? 0 : checked(array.length) | 0
11910 var buf = createBuffer(length)
11911 for (var i = 0; i < length; i += 1) {
11912 buf[i] = array[i] & 255
11913 }
11914 return buf
11915 }
11916
11917 function fromArrayBuffer (array, byteOffset, length) {
11918 if (byteOffset < 0 || array.byteLength < byteOffset) {
11919 throw new RangeError('\'offset\' is out of bounds')
11920 }
11921
11922 if (array.byteLength < byteOffset + (length || 0)) {
11923 throw new RangeError('\'length\' is out of bounds')
11924 }
11925
11926 var buf
11927 if (byteOffset === undefined && length === undefined) {
11928 buf = new Uint8Array(array)
11929 } else if (length === undefined) {
11930 buf = new Uint8Array(array, byteOffset)
11931 } else {
11932 buf = new Uint8Array(array, byteOffset, length)
11933 }
11934
11935 // Return an augmented `Uint8Array` instance
11936 buf.__proto__ = Buffer.prototype
11937 return buf
11938 }
11939
11940 function fromObject (obj) {
11941 if (Buffer.isBuffer(obj)) {
11942 var len = checked(obj.length) | 0
11943 var buf = createBuffer(len)
11944
11945 if (buf.length === 0) {
11946 return buf
11947 }
11948
11949 obj.copy(buf, 0, 0, len)
11950 return buf
11951 }
11952
11953 if (obj) {
11954 if (isArrayBufferView(obj) || 'length' in obj) {
11955 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
11956 return createBuffer(0)
11957 }
11958 return fromArrayLike(obj)
11959 }
11960
11961 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
11962 return fromArrayLike(obj.data)
11963 }
11964 }
11965
11966 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
11967 }
11968
11969 function checked (length) {
11970 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
11971 // length is NaN (which is otherwise coerced to zero.)
11972 if (length >= K_MAX_LENGTH) {
11973 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
11974 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
11975 }
11976 return length | 0
11977 }
11978
11979 function SlowBuffer (length) {
11980 if (+length != length) { // eslint-disable-line eqeqeq
11981 length = 0
11982 }
11983 return Buffer.alloc(+length)
11984 }
11985
11986 Buffer.isBuffer = function isBuffer (b) {
11987 return b != null && b._isBuffer === true
11988 }
11989
11990 Buffer.compare = function compare (a, b) {
11991 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
11992 throw new TypeError('Arguments must be Buffers')
11993 }
11994
11995 if (a === b) return 0
11996
11997 var x = a.length
11998 var y = b.length
11999
12000 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
12001 if (a[i] !== b[i]) {
12002 x = a[i]
12003 y = b[i]
12004 break
12005 }
12006 }
12007
12008 if (x < y) return -1
12009 if (y < x) return 1
12010 return 0
12011 }
12012
12013 Buffer.isEncoding = function isEncoding (encoding) {
12014 switch (String(encoding).toLowerCase()) {
12015 case 'hex':
12016 case 'utf8':
12017 case 'utf-8':
12018 case 'ascii':
12019 case 'latin1':
12020 case 'binary':
12021 case 'base64':
12022 case 'ucs2':
12023 case 'ucs-2':
12024 case 'utf16le':
12025 case 'utf-16le':
12026 return true
12027 default:
12028 return false
12029 }
12030 }
12031
12032 Buffer.concat = function concat (list, length) {
12033 if (!Array.isArray(list)) {
12034 throw new TypeError('"list" argument must be an Array of Buffers')
12035 }
12036
12037 if (list.length === 0) {
12038 return Buffer.alloc(0)
12039 }
12040
12041 var i
12042 if (length === undefined) {
12043 length = 0
12044 for (i = 0; i < list.length; ++i) {
12045 length += list[i].length
12046 }
12047 }
12048
12049 var buffer = Buffer.allocUnsafe(length)
12050 var pos = 0
12051 for (i = 0; i < list.length; ++i) {
12052 var buf = list[i]
12053 if (!Buffer.isBuffer(buf)) {
12054 throw new TypeError('"list" argument must be an Array of Buffers')
12055 }
12056 buf.copy(buffer, pos)
12057 pos += buf.length
12058 }
12059 return buffer
12060 }
12061
12062 function byteLength (string, encoding) {
12063 if (Buffer.isBuffer(string)) {
12064 return string.length
12065 }
12066 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
12067 return string.byteLength
12068 }
12069 if (typeof string !== 'string') {
12070 string = '' + string
12071 }
12072
12073 var len = string.length
12074 if (len === 0) return 0
12075
12076 // Use a for loop to avoid recursion
12077 var loweredCase = false
12078 for (;;) {
12079 switch (encoding) {
12080 case 'ascii':
12081 case 'latin1':
12082 case 'binary':
12083 return len
12084 case 'utf8':
12085 case 'utf-8':
12086 case undefined:
12087 return utf8ToBytes(string).length
12088 case 'ucs2':
12089 case 'ucs-2':
12090 case 'utf16le':
12091 case 'utf-16le':
12092 return len * 2
12093 case 'hex':
12094 return len >>> 1
12095 case 'base64':
12096 return base64ToBytes(string).length
12097 default:
12098 if (loweredCase) return utf8ToBytes(string).length // assume utf8
12099 encoding = ('' + encoding).toLowerCase()
12100 loweredCase = true
12101 }
12102 }
12103 }
12104 Buffer.byteLength = byteLength
12105
12106 function slowToString (encoding, start, end) {
12107 var loweredCase = false
12108
12109 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
12110 // property of a typed array.
12111
12112 // This behaves neither like String nor Uint8Array in that we set start/end
12113 // to their upper/lower bounds if the value passed is out of range.
12114 // undefined is handled specially as per ECMA-262 6th Edition,
12115 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
12116 if (start === undefined || start < 0) {
12117 start = 0
12118 }
12119 // Return early if start > this.length. Done here to prevent potential uint32
12120 // coercion fail below.
12121 if (start > this.length) {
12122 return ''
12123 }
12124
12125 if (end === undefined || end > this.length) {
12126 end = this.length
12127 }
12128
12129 if (end <= 0) {
12130 return ''
12131 }
12132
12133 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
12134 end >>>= 0
12135 start >>>= 0
12136
12137 if (end <= start) {
12138 return ''
12139 }
12140
12141 if (!encoding) encoding = 'utf8'
12142
12143 while (true) {
12144 switch (encoding) {
12145 case 'hex':
12146 return hexSlice(this, start, end)
12147
12148 case 'utf8':
12149 case 'utf-8':
12150 return utf8Slice(this, start, end)
12151
12152 case 'ascii':
12153 return asciiSlice(this, start, end)
12154
12155 case 'latin1':
12156 case 'binary':
12157 return latin1Slice(this, start, end)
12158
12159 case 'base64':
12160 return base64Slice(this, start, end)
12161
12162 case 'ucs2':
12163 case 'ucs-2':
12164 case 'utf16le':
12165 case 'utf-16le':
12166 return utf16leSlice(this, start, end)
12167
12168 default:
12169 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12170 encoding = (encoding + '').toLowerCase()
12171 loweredCase = true
12172 }
12173 }
12174 }
12175
12176 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
12177 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
12178 // reliably in a browserify context because there could be multiple different
12179 // copies of the 'buffer' package in use. This method works even for Buffer
12180 // instances that were created from another copy of the `buffer` package.
12181 // See: https://github.com/feross/buffer/issues/154
12182 Buffer.prototype._isBuffer = true
12183
12184 function swap (b, n, m) {
12185 var i = b[n]
12186 b[n] = b[m]
12187 b[m] = i
12188 }
12189
12190 Buffer.prototype.swap16 = function swap16 () {
12191 var len = this.length
12192 if (len % 2 !== 0) {
12193 throw new RangeError('Buffer size must be a multiple of 16-bits')
12194 }
12195 for (var i = 0; i < len; i += 2) {
12196 swap(this, i, i + 1)
12197 }
12198 return this
12199 }
12200
12201 Buffer.prototype.swap32 = function swap32 () {
12202 var len = this.length
12203 if (len % 4 !== 0) {
12204 throw new RangeError('Buffer size must be a multiple of 32-bits')
12205 }
12206 for (var i = 0; i < len; i += 4) {
12207 swap(this, i, i + 3)
12208 swap(this, i + 1, i + 2)
12209 }
12210 return this
12211 }
12212
12213 Buffer.prototype.swap64 = function swap64 () {
12214 var len = this.length
12215 if (len % 8 !== 0) {
12216 throw new RangeError('Buffer size must be a multiple of 64-bits')
12217 }
12218 for (var i = 0; i < len; i += 8) {
12219 swap(this, i, i + 7)
12220 swap(this, i + 1, i + 6)
12221 swap(this, i + 2, i + 5)
12222 swap(this, i + 3, i + 4)
12223 }
12224 return this
12225 }
12226
12227 Buffer.prototype.toString = function toString () {
12228 var length = this.length
12229 if (length === 0) return ''
12230 if (arguments.length === 0) return utf8Slice(this, 0, length)
12231 return slowToString.apply(this, arguments)
12232 }
12233
12234 Buffer.prototype.equals = function equals (b) {
12235 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
12236 if (this === b) return true
12237 return Buffer.compare(this, b) === 0
12238 }
12239
12240 Buffer.prototype.inspect = function inspect () {
12241 var str = ''
12242 var max = exports.INSPECT_MAX_BYTES
12243 if (this.length > 0) {
12244 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
12245 if (this.length > max) str += ' ... '
12246 }
12247 return '<Buffer ' + str + '>'
12248 }
12249
12250 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
12251 if (!Buffer.isBuffer(target)) {
12252 throw new TypeError('Argument must be a Buffer')
12253 }
12254
12255 if (start === undefined) {
12256 start = 0
12257 }
12258 if (end === undefined) {
12259 end = target ? target.length : 0
12260 }
12261 if (thisStart === undefined) {
12262 thisStart = 0
12263 }
12264 if (thisEnd === undefined) {
12265 thisEnd = this.length
12266 }
12267
12268 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
12269 throw new RangeError('out of range index')
12270 }
12271
12272 if (thisStart >= thisEnd && start >= end) {
12273 return 0
12274 }
12275 if (thisStart >= thisEnd) {
12276 return -1
12277 }
12278 if (start >= end) {
12279 return 1
12280 }
12281
12282 start >>>= 0
12283 end >>>= 0
12284 thisStart >>>= 0
12285 thisEnd >>>= 0
12286
12287 if (this === target) return 0
12288
12289 var x = thisEnd - thisStart
12290 var y = end - start
12291 var len = Math.min(x, y)
12292
12293 var thisCopy = this.slice(thisStart, thisEnd)
12294 var targetCopy = target.slice(start, end)
12295
12296 for (var i = 0; i < len; ++i) {
12297 if (thisCopy[i] !== targetCopy[i]) {
12298 x = thisCopy[i]
12299 y = targetCopy[i]
12300 break
12301 }
12302 }
12303
12304 if (x < y) return -1
12305 if (y < x) return 1
12306 return 0
12307 }
12308
12309 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
12310 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
12311 //
12312 // Arguments:
12313 // - buffer - a Buffer to search
12314 // - val - a string, Buffer, or number
12315 // - byteOffset - an index into `buffer`; will be clamped to an int32
12316 // - encoding - an optional encoding, relevant is val is a string
12317 // - dir - true for indexOf, false for lastIndexOf
12318 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
12319 // Empty buffer means no match
12320 if (buffer.length === 0) return -1
12321
12322 // Normalize byteOffset
12323 if (typeof byteOffset === 'string') {
12324 encoding = byteOffset
12325 byteOffset = 0
12326 } else if (byteOffset > 0x7fffffff) {
12327 byteOffset = 0x7fffffff
12328 } else if (byteOffset < -0x80000000) {
12329 byteOffset = -0x80000000
12330 }
12331 byteOffset = +byteOffset // Coerce to Number.
12332 if (numberIsNaN(byteOffset)) {
12333 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
12334 byteOffset = dir ? 0 : (buffer.length - 1)
12335 }
12336
12337 // Normalize byteOffset: negative offsets start from the end of the buffer
12338 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
12339 if (byteOffset >= buffer.length) {
12340 if (dir) return -1
12341 else byteOffset = buffer.length - 1
12342 } else if (byteOffset < 0) {
12343 if (dir) byteOffset = 0
12344 else return -1
12345 }
12346
12347 // Normalize val
12348 if (typeof val === 'string') {
12349 val = Buffer.from(val, encoding)
12350 }
12351
12352 // Finally, search either indexOf (if dir is true) or lastIndexOf
12353 if (Buffer.isBuffer(val)) {
12354 // Special case: looking for empty string/buffer always fails
12355 if (val.length === 0) {
12356 return -1
12357 }
12358 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
12359 } else if (typeof val === 'number') {
12360 val = val & 0xFF // Search for a byte value [0-255]
12361 if (typeof Uint8Array.prototype.indexOf === 'function') {
12362 if (dir) {
12363 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
12364 } else {
12365 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
12366 }
12367 }
12368 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
12369 }
12370
12371 throw new TypeError('val must be string, number or Buffer')
12372 }
12373
12374 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
12375 var indexSize = 1
12376 var arrLength = arr.length
12377 var valLength = val.length
12378
12379 if (encoding !== undefined) {
12380 encoding = String(encoding).toLowerCase()
12381 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
12382 encoding === 'utf16le' || encoding === 'utf-16le') {
12383 if (arr.length < 2 || val.length < 2) {
12384 return -1
12385 }
12386 indexSize = 2
12387 arrLength /= 2
12388 valLength /= 2
12389 byteOffset /= 2
12390 }
12391 }
12392
12393 function read (buf, i) {
12394 if (indexSize === 1) {
12395 return buf[i]
12396 } else {
12397 return buf.readUInt16BE(i * indexSize)
12398 }
12399 }
12400
12401 var i
12402 if (dir) {
12403 var foundIndex = -1
12404 for (i = byteOffset; i < arrLength; i++) {
12405 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
12406 if (foundIndex === -1) foundIndex = i
12407 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
12408 } else {
12409 if (foundIndex !== -1) i -= i - foundIndex
12410 foundIndex = -1
12411 }
12412 }
12413 } else {
12414 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
12415 for (i = byteOffset; i >= 0; i--) {
12416 var found = true
12417 for (var j = 0; j < valLength; j++) {
12418 if (read(arr, i + j) !== read(val, j)) {
12419 found = false
12420 break
12421 }
12422 }
12423 if (found) return i
12424 }
12425 }
12426
12427 return -1
12428 }
12429
12430 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
12431 return this.indexOf(val, byteOffset, encoding) !== -1
12432 }
12433
12434 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
12435 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
12436 }
12437
12438 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
12439 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
12440 }
12441
12442 function hexWrite (buf, string, offset, length) {
12443 offset = Number(offset) || 0
12444 var remaining = buf.length - offset
12445 if (!length) {
12446 length = remaining
12447 } else {
12448 length = Number(length)
12449 if (length > remaining) {
12450 length = remaining
12451 }
12452 }
12453
12454 // must be an even number of digits
12455 var strLen = string.length
12456 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
12457
12458 if (length > strLen / 2) {
12459 length = strLen / 2
12460 }
12461 for (var i = 0; i < length; ++i) {
12462 var parsed = parseInt(string.substr(i * 2, 2), 16)
12463 if (numberIsNaN(parsed)) return i
12464 buf[offset + i] = parsed
12465 }
12466 return i
12467 }
12468
12469 function utf8Write (buf, string, offset, length) {
12470 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
12471 }
12472
12473 function asciiWrite (buf, string, offset, length) {
12474 return blitBuffer(asciiToBytes(string), buf, offset, length)
12475 }
12476
12477 function latin1Write (buf, string, offset, length) {
12478 return asciiWrite(buf, string, offset, length)
12479 }
12480
12481 function base64Write (buf, string, offset, length) {
12482 return blitBuffer(base64ToBytes(string), buf, offset, length)
12483 }
12484
12485 function ucs2Write (buf, string, offset, length) {
12486 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
12487 }
12488
12489 Buffer.prototype.write = function write (string, offset, length, encoding) {
12490 // Buffer#write(string)
12491 if (offset === undefined) {
12492 encoding = 'utf8'
12493 length = this.length
12494 offset = 0
12495 // Buffer#write(string, encoding)
12496 } else if (length === undefined && typeof offset === 'string') {
12497 encoding = offset
12498 length = this.length
12499 offset = 0
12500 // Buffer#write(string, offset[, length][, encoding])
12501 } else if (isFinite(offset)) {
12502 offset = offset >>> 0
12503 if (isFinite(length)) {
12504 length = length >>> 0
12505 if (encoding === undefined) encoding = 'utf8'
12506 } else {
12507 encoding = length
12508 length = undefined
12509 }
12510 } else {
12511 throw new Error(
12512 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
12513 )
12514 }
12515
12516 var remaining = this.length - offset
12517 if (length === undefined || length > remaining) length = remaining
12518
12519 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
12520 throw new RangeError('Attempt to write outside buffer bounds')
12521 }
12522
12523 if (!encoding) encoding = 'utf8'
12524
12525 var loweredCase = false
12526 for (;;) {
12527 switch (encoding) {
12528 case 'hex':
12529 return hexWrite(this, string, offset, length)
12530
12531 case 'utf8':
12532 case 'utf-8':
12533 return utf8Write(this, string, offset, length)
12534
12535 case 'ascii':
12536 return asciiWrite(this, string, offset, length)
12537
12538 case 'latin1':
12539 case 'binary':
12540 return latin1Write(this, string, offset, length)
12541
12542 case 'base64':
12543 // Warning: maxLength not taken into account in base64Write
12544 return base64Write(this, string, offset, length)
12545
12546 case 'ucs2':
12547 case 'ucs-2':
12548 case 'utf16le':
12549 case 'utf-16le':
12550 return ucs2Write(this, string, offset, length)
12551
12552 default:
12553 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
12554 encoding = ('' + encoding).toLowerCase()
12555 loweredCase = true
12556 }
12557 }
12558 }
12559
12560 Buffer.prototype.toJSON = function toJSON () {
12561 return {
12562 type: 'Buffer',
12563 data: Array.prototype.slice.call(this._arr || this, 0)
12564 }
12565 }
12566
12567 function base64Slice (buf, start, end) {
12568 if (start === 0 && end === buf.length) {
12569 return base64.fromByteArray(buf)
12570 } else {
12571 return base64.fromByteArray(buf.slice(start, end))
12572 }
12573 }
12574
12575 function utf8Slice (buf, start, end) {
12576 end = Math.min(buf.length, end)
12577 var res = []
12578
12579 var i = start
12580 while (i < end) {
12581 var firstByte = buf[i]
12582 var codePoint = null
12583 var bytesPerSequence = (firstByte > 0xEF) ? 4
12584 : (firstByte > 0xDF) ? 3
12585 : (firstByte > 0xBF) ? 2
12586 : 1
12587
12588 if (i + bytesPerSequence <= end) {
12589 var secondByte, thirdByte, fourthByte, tempCodePoint
12590
12591 switch (bytesPerSequence) {
12592 case 1:
12593 if (firstByte < 0x80) {
12594 codePoint = firstByte
12595 }
12596 break
12597 case 2:
12598 secondByte = buf[i + 1]
12599 if ((secondByte & 0xC0) === 0x80) {
12600 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
12601 if (tempCodePoint > 0x7F) {
12602 codePoint = tempCodePoint
12603 }
12604 }
12605 break
12606 case 3:
12607 secondByte = buf[i + 1]
12608 thirdByte = buf[i + 2]
12609 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
12610 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
12611 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
12612 codePoint = tempCodePoint
12613 }
12614 }
12615 break
12616 case 4:
12617 secondByte = buf[i + 1]
12618 thirdByte = buf[i + 2]
12619 fourthByte = buf[i + 3]
12620 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
12621 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
12622 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
12623 codePoint = tempCodePoint
12624 }
12625 }
12626 }
12627 }
12628
12629 if (codePoint === null) {
12630 // we did not generate a valid codePoint so insert a
12631 // replacement char (U+FFFD) and advance only 1 byte
12632 codePoint = 0xFFFD
12633 bytesPerSequence = 1
12634 } else if (codePoint > 0xFFFF) {
12635 // encode to utf16 (surrogate pair dance)
12636 codePoint -= 0x10000
12637 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
12638 codePoint = 0xDC00 | codePoint & 0x3FF
12639 }
12640
12641 res.push(codePoint)
12642 i += bytesPerSequence
12643 }
12644
12645 return decodeCodePointsArray(res)
12646 }
12647
12648 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
12649 // the lowest limit is Chrome, with 0x10000 args.
12650 // We go 1 magnitude less, for safety
12651 var MAX_ARGUMENTS_LENGTH = 0x1000
12652
12653 function decodeCodePointsArray (codePoints) {
12654 var len = codePoints.length
12655 if (len <= MAX_ARGUMENTS_LENGTH) {
12656 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
12657 }
12658
12659 // Decode in chunks to avoid "call stack size exceeded".
12660 var res = ''
12661 var i = 0
12662 while (i < len) {
12663 res += String.fromCharCode.apply(
12664 String,
12665 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
12666 )
12667 }
12668 return res
12669 }
12670
12671 function asciiSlice (buf, start, end) {
12672 var ret = ''
12673 end = Math.min(buf.length, end)
12674
12675 for (var i = start; i < end; ++i) {
12676 ret += String.fromCharCode(buf[i] & 0x7F)
12677 }
12678 return ret
12679 }
12680
12681 function latin1Slice (buf, start, end) {
12682 var ret = ''
12683 end = Math.min(buf.length, end)
12684
12685 for (var i = start; i < end; ++i) {
12686 ret += String.fromCharCode(buf[i])
12687 }
12688 return ret
12689 }
12690
12691 function hexSlice (buf, start, end) {
12692 var len = buf.length
12693
12694 if (!start || start < 0) start = 0
12695 if (!end || end < 0 || end > len) end = len
12696
12697 var out = ''
12698 for (var i = start; i < end; ++i) {
12699 out += toHex(buf[i])
12700 }
12701 return out
12702 }
12703
12704 function utf16leSlice (buf, start, end) {
12705 var bytes = buf.slice(start, end)
12706 var res = ''
12707 for (var i = 0; i < bytes.length; i += 2) {
12708 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
12709 }
12710 return res
12711 }
12712
12713 Buffer.prototype.slice = function slice (start, end) {
12714 var len = this.length
12715 start = ~~start
12716 end = end === undefined ? len : ~~end
12717
12718 if (start < 0) {
12719 start += len
12720 if (start < 0) start = 0
12721 } else if (start > len) {
12722 start = len
12723 }
12724
12725 if (end < 0) {
12726 end += len
12727 if (end < 0) end = 0
12728 } else if (end > len) {
12729 end = len
12730 }
12731
12732 if (end < start) end = start
12733
12734 var newBuf = this.subarray(start, end)
12735 // Return an augmented `Uint8Array` instance
12736 newBuf.__proto__ = Buffer.prototype
12737 return newBuf
12738 }
12739
12740 /*
12741 * Need to make sure that buffer isn't trying to write out of bounds.
12742 */
12743 function checkOffset (offset, ext, length) {
12744 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
12745 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
12746 }
12747
12748 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
12749 offset = offset >>> 0
12750 byteLength = byteLength >>> 0
12751 if (!noAssert) checkOffset(offset, byteLength, this.length)
12752
12753 var val = this[offset]
12754 var mul = 1
12755 var i = 0
12756 while (++i < byteLength && (mul *= 0x100)) {
12757 val += this[offset + i] * mul
12758 }
12759
12760 return val
12761 }
12762
12763 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
12764 offset = offset >>> 0
12765 byteLength = byteLength >>> 0
12766 if (!noAssert) {
12767 checkOffset(offset, byteLength, this.length)
12768 }
12769
12770 var val = this[offset + --byteLength]
12771 var mul = 1
12772 while (byteLength > 0 && (mul *= 0x100)) {
12773 val += this[offset + --byteLength] * mul
12774 }
12775
12776 return val
12777 }
12778
12779 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
12780 offset = offset >>> 0
12781 if (!noAssert) checkOffset(offset, 1, this.length)
12782 return this[offset]
12783 }
12784
12785 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
12786 offset = offset >>> 0
12787 if (!noAssert) checkOffset(offset, 2, this.length)
12788 return this[offset] | (this[offset + 1] << 8)
12789 }
12790
12791 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
12792 offset = offset >>> 0
12793 if (!noAssert) checkOffset(offset, 2, this.length)
12794 return (this[offset] << 8) | this[offset + 1]
12795 }
12796
12797 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
12798 offset = offset >>> 0
12799 if (!noAssert) checkOffset(offset, 4, this.length)
12800
12801 return ((this[offset]) |
12802 (this[offset + 1] << 8) |
12803 (this[offset + 2] << 16)) +
12804 (this[offset + 3] * 0x1000000)
12805 }
12806
12807 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
12808 offset = offset >>> 0
12809 if (!noAssert) checkOffset(offset, 4, this.length)
12810
12811 return (this[offset] * 0x1000000) +
12812 ((this[offset + 1] << 16) |
12813 (this[offset + 2] << 8) |
12814 this[offset + 3])
12815 }
12816
12817 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
12818 offset = offset >>> 0
12819 byteLength = byteLength >>> 0
12820 if (!noAssert) checkOffset(offset, byteLength, this.length)
12821
12822 var val = this[offset]
12823 var mul = 1
12824 var i = 0
12825 while (++i < byteLength && (mul *= 0x100)) {
12826 val += this[offset + i] * mul
12827 }
12828 mul *= 0x80
12829
12830 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12831
12832 return val
12833 }
12834
12835 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
12836 offset = offset >>> 0
12837 byteLength = byteLength >>> 0
12838 if (!noAssert) checkOffset(offset, byteLength, this.length)
12839
12840 var i = byteLength
12841 var mul = 1
12842 var val = this[offset + --i]
12843 while (i > 0 && (mul *= 0x100)) {
12844 val += this[offset + --i] * mul
12845 }
12846 mul *= 0x80
12847
12848 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
12849
12850 return val
12851 }
12852
12853 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
12854 offset = offset >>> 0
12855 if (!noAssert) checkOffset(offset, 1, this.length)
12856 if (!(this[offset] & 0x80)) return (this[offset])
12857 return ((0xff - this[offset] + 1) * -1)
12858 }
12859
12860 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
12861 offset = offset >>> 0
12862 if (!noAssert) checkOffset(offset, 2, this.length)
12863 var val = this[offset] | (this[offset + 1] << 8)
12864 return (val & 0x8000) ? val | 0xFFFF0000 : val
12865 }
12866
12867 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
12868 offset = offset >>> 0
12869 if (!noAssert) checkOffset(offset, 2, this.length)
12870 var val = this[offset + 1] | (this[offset] << 8)
12871 return (val & 0x8000) ? val | 0xFFFF0000 : val
12872 }
12873
12874 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
12875 offset = offset >>> 0
12876 if (!noAssert) checkOffset(offset, 4, this.length)
12877
12878 return (this[offset]) |
12879 (this[offset + 1] << 8) |
12880 (this[offset + 2] << 16) |
12881 (this[offset + 3] << 24)
12882 }
12883
12884 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
12885 offset = offset >>> 0
12886 if (!noAssert) checkOffset(offset, 4, this.length)
12887
12888 return (this[offset] << 24) |
12889 (this[offset + 1] << 16) |
12890 (this[offset + 2] << 8) |
12891 (this[offset + 3])
12892 }
12893
12894 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
12895 offset = offset >>> 0
12896 if (!noAssert) checkOffset(offset, 4, this.length)
12897 return ieee754.read(this, offset, true, 23, 4)
12898 }
12899
12900 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
12901 offset = offset >>> 0
12902 if (!noAssert) checkOffset(offset, 4, this.length)
12903 return ieee754.read(this, offset, false, 23, 4)
12904 }
12905
12906 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
12907 offset = offset >>> 0
12908 if (!noAssert) checkOffset(offset, 8, this.length)
12909 return ieee754.read(this, offset, true, 52, 8)
12910 }
12911
12912 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
12913 offset = offset >>> 0
12914 if (!noAssert) checkOffset(offset, 8, this.length)
12915 return ieee754.read(this, offset, false, 52, 8)
12916 }
12917
12918 function checkInt (buf, value, offset, ext, max, min) {
12919 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
12920 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
12921 if (offset + ext > buf.length) throw new RangeError('Index out of range')
12922 }
12923
12924 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
12925 value = +value
12926 offset = offset >>> 0
12927 byteLength = byteLength >>> 0
12928 if (!noAssert) {
12929 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12930 checkInt(this, value, offset, byteLength, maxBytes, 0)
12931 }
12932
12933 var mul = 1
12934 var i = 0
12935 this[offset] = value & 0xFF
12936 while (++i < byteLength && (mul *= 0x100)) {
12937 this[offset + i] = (value / mul) & 0xFF
12938 }
12939
12940 return offset + byteLength
12941 }
12942
12943 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
12944 value = +value
12945 offset = offset >>> 0
12946 byteLength = byteLength >>> 0
12947 if (!noAssert) {
12948 var maxBytes = Math.pow(2, 8 * byteLength) - 1
12949 checkInt(this, value, offset, byteLength, maxBytes, 0)
12950 }
12951
12952 var i = byteLength - 1
12953 var mul = 1
12954 this[offset + i] = value & 0xFF
12955 while (--i >= 0 && (mul *= 0x100)) {
12956 this[offset + i] = (value / mul) & 0xFF
12957 }
12958
12959 return offset + byteLength
12960 }
12961
12962 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
12963 value = +value
12964 offset = offset >>> 0
12965 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
12966 this[offset] = (value & 0xff)
12967 return offset + 1
12968 }
12969
12970 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
12971 value = +value
12972 offset = offset >>> 0
12973 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12974 this[offset] = (value & 0xff)
12975 this[offset + 1] = (value >>> 8)
12976 return offset + 2
12977 }
12978
12979 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
12980 value = +value
12981 offset = offset >>> 0
12982 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
12983 this[offset] = (value >>> 8)
12984 this[offset + 1] = (value & 0xff)
12985 return offset + 2
12986 }
12987
12988 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
12989 value = +value
12990 offset = offset >>> 0
12991 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
12992 this[offset + 3] = (value >>> 24)
12993 this[offset + 2] = (value >>> 16)
12994 this[offset + 1] = (value >>> 8)
12995 this[offset] = (value & 0xff)
12996 return offset + 4
12997 }
12998
12999 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
13000 value = +value
13001 offset = offset >>> 0
13002 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
13003 this[offset] = (value >>> 24)
13004 this[offset + 1] = (value >>> 16)
13005 this[offset + 2] = (value >>> 8)
13006 this[offset + 3] = (value & 0xff)
13007 return offset + 4
13008 }
13009
13010 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
13011 value = +value
13012 offset = offset >>> 0
13013 if (!noAssert) {
13014 var limit = Math.pow(2, (8 * byteLength) - 1)
13015
13016 checkInt(this, value, offset, byteLength, limit - 1, -limit)
13017 }
13018
13019 var i = 0
13020 var mul = 1
13021 var sub = 0
13022 this[offset] = value & 0xFF
13023 while (++i < byteLength && (mul *= 0x100)) {
13024 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
13025 sub = 1
13026 }
13027 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13028 }
13029
13030 return offset + byteLength
13031 }
13032
13033 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
13034 value = +value
13035 offset = offset >>> 0
13036 if (!noAssert) {
13037 var limit = Math.pow(2, (8 * byteLength) - 1)
13038
13039 checkInt(this, value, offset, byteLength, limit - 1, -limit)
13040 }
13041
13042 var i = byteLength - 1
13043 var mul = 1
13044 var sub = 0
13045 this[offset + i] = value & 0xFF
13046 while (--i >= 0 && (mul *= 0x100)) {
13047 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
13048 sub = 1
13049 }
13050 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
13051 }
13052
13053 return offset + byteLength
13054 }
13055
13056 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
13057 value = +value
13058 offset = offset >>> 0
13059 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
13060 if (value < 0) value = 0xff + value + 1
13061 this[offset] = (value & 0xff)
13062 return offset + 1
13063 }
13064
13065 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
13066 value = +value
13067 offset = offset >>> 0
13068 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13069 this[offset] = (value & 0xff)
13070 this[offset + 1] = (value >>> 8)
13071 return offset + 2
13072 }
13073
13074 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
13075 value = +value
13076 offset = offset >>> 0
13077 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
13078 this[offset] = (value >>> 8)
13079 this[offset + 1] = (value & 0xff)
13080 return offset + 2
13081 }
13082
13083 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
13084 value = +value
13085 offset = offset >>> 0
13086 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13087 this[offset] = (value & 0xff)
13088 this[offset + 1] = (value >>> 8)
13089 this[offset + 2] = (value >>> 16)
13090 this[offset + 3] = (value >>> 24)
13091 return offset + 4
13092 }
13093
13094 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
13095 value = +value
13096 offset = offset >>> 0
13097 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
13098 if (value < 0) value = 0xffffffff + value + 1
13099 this[offset] = (value >>> 24)
13100 this[offset + 1] = (value >>> 16)
13101 this[offset + 2] = (value >>> 8)
13102 this[offset + 3] = (value & 0xff)
13103 return offset + 4
13104 }
13105
13106 function checkIEEE754 (buf, value, offset, ext, max, min) {
13107 if (offset + ext > buf.length) throw new RangeError('Index out of range')
13108 if (offset < 0) throw new RangeError('Index out of range')
13109 }
13110
13111 function writeFloat (buf, value, offset, littleEndian, noAssert) {
13112 value = +value
13113 offset = offset >>> 0
13114 if (!noAssert) {
13115 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
13116 }
13117 ieee754.write(buf, value, offset, littleEndian, 23, 4)
13118 return offset + 4
13119 }
13120
13121 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
13122 return writeFloat(this, value, offset, true, noAssert)
13123 }
13124
13125 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
13126 return writeFloat(this, value, offset, false, noAssert)
13127 }
13128
13129 function writeDouble (buf, value, offset, littleEndian, noAssert) {
13130 value = +value
13131 offset = offset >>> 0
13132 if (!noAssert) {
13133 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
13134 }
13135 ieee754.write(buf, value, offset, littleEndian, 52, 8)
13136 return offset + 8
13137 }
13138
13139 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
13140 return writeDouble(this, value, offset, true, noAssert)
13141 }
13142
13143 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
13144 return writeDouble(this, value, offset, false, noAssert)
13145 }
13146
13147 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
13148 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
13149 if (!start) start = 0
13150 if (!end && end !== 0) end = this.length
13151 if (targetStart >= target.length) targetStart = target.length
13152 if (!targetStart) targetStart = 0
13153 if (end > 0 && end < start) end = start
13154
13155 // Copy 0 bytes; we're done
13156 if (end === start) return 0
13157 if (target.length === 0 || this.length === 0) return 0
13158
13159 // Fatal error conditions
13160 if (targetStart < 0) {
13161 throw new RangeError('targetStart out of bounds')
13162 }
13163 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
13164 if (end < 0) throw new RangeError('sourceEnd out of bounds')
13165
13166 // Are we oob?
13167 if (end > this.length) end = this.length
13168 if (target.length - targetStart < end - start) {
13169 end = target.length - targetStart + start
13170 }
13171
13172 var len = end - start
13173 var i
13174
13175 if (this === target && start < targetStart && targetStart < end) {
13176 // descending copy from end
13177 for (i = len - 1; i >= 0; --i) {
13178 target[i + targetStart] = this[i + start]
13179 }
13180 } else if (len < 1000) {
13181 // ascending copy from start
13182 for (i = 0; i < len; ++i) {
13183 target[i + targetStart] = this[i + start]
13184 }
13185 } else {
13186 Uint8Array.prototype.set.call(
13187 target,
13188 this.subarray(start, start + len),
13189 targetStart
13190 )
13191 }
13192
13193 return len
13194 }
13195
13196 // Usage:
13197 // buffer.fill(number[, offset[, end]])
13198 // buffer.fill(buffer[, offset[, end]])
13199 // buffer.fill(string[, offset[, end]][, encoding])
13200 Buffer.prototype.fill = function fill (val, start, end, encoding) {
13201 // Handle string cases:
13202 if (typeof val === 'string') {
13203 if (typeof start === 'string') {
13204 encoding = start
13205 start = 0
13206 end = this.length
13207 } else if (typeof end === 'string') {
13208 encoding = end
13209 end = this.length
13210 }
13211 if (val.length === 1) {
13212 var code = val.charCodeAt(0)
13213 if (code < 256) {
13214 val = code
13215 }
13216 }
13217 if (encoding !== undefined && typeof encoding !== 'string') {
13218 throw new TypeError('encoding must be a string')
13219 }
13220 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
13221 throw new TypeError('Unknown encoding: ' + encoding)
13222 }
13223 } else if (typeof val === 'number') {
13224 val = val & 255
13225 }
13226
13227 // Invalid ranges are not set to a default, so can range check early.
13228 if (start < 0 || this.length < start || this.length < end) {
13229 throw new RangeError('Out of range index')
13230 }
13231
13232 if (end <= start) {
13233 return this
13234 }
13235
13236 start = start >>> 0
13237 end = end === undefined ? this.length : end >>> 0
13238
13239 if (!val) val = 0
13240
13241 var i
13242 if (typeof val === 'number') {
13243 for (i = start; i < end; ++i) {
13244 this[i] = val
13245 }
13246 } else {
13247 var bytes = Buffer.isBuffer(val)
13248 ? val
13249 : new Buffer(val, encoding)
13250 var len = bytes.length
13251 for (i = 0; i < end - start; ++i) {
13252 this[i + start] = bytes[i % len]
13253 }
13254 }
13255
13256 return this
13257 }
13258
13259 // HELPER FUNCTIONS
13260 // ================
13261
13262 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
13263
13264 function base64clean (str) {
13265 // Node strips out invalid characters like \n and \t from the string, base64-js does not
13266 str = str.trim().replace(INVALID_BASE64_RE, '')
13267 // Node converts strings with length < 2 to ''
13268 if (str.length < 2) return ''
13269 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
13270 while (str.length % 4 !== 0) {
13271 str = str + '='
13272 }
13273 return str
13274 }
13275
13276 function toHex (n) {
13277 if (n < 16) return '0' + n.toString(16)
13278 return n.toString(16)
13279 }
13280
13281 function utf8ToBytes (string, units) {
13282 units = units || Infinity
13283 var codePoint
13284 var length = string.length
13285 var leadSurrogate = null
13286 var bytes = []
13287
13288 for (var i = 0; i < length; ++i) {
13289 codePoint = string.charCodeAt(i)
13290
13291 // is surrogate component
13292 if (codePoint > 0xD7FF && codePoint < 0xE000) {
13293 // last char was a lead
13294 if (!leadSurrogate) {
13295 // no lead yet
13296 if (codePoint > 0xDBFF) {
13297 // unexpected trail
13298 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13299 continue
13300 } else if (i + 1 === length) {
13301 // unpaired lead
13302 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13303 continue
13304 }
13305
13306 // valid lead
13307 leadSurrogate = codePoint
13308
13309 continue
13310 }
13311
13312 // 2 leads in a row
13313 if (codePoint < 0xDC00) {
13314 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13315 leadSurrogate = codePoint
13316 continue
13317 }
13318
13319 // valid surrogate pair
13320 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
13321 } else if (leadSurrogate) {
13322 // valid bmp char, but last char was a lead
13323 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
13324 }
13325
13326 leadSurrogate = null
13327
13328 // encode utf8
13329 if (codePoint < 0x80) {
13330 if ((units -= 1) < 0) break
13331 bytes.push(codePoint)
13332 } else if (codePoint < 0x800) {
13333 if ((units -= 2) < 0) break
13334 bytes.push(
13335 codePoint >> 0x6 | 0xC0,
13336 codePoint & 0x3F | 0x80
13337 )
13338 } else if (codePoint < 0x10000) {
13339 if ((units -= 3) < 0) break
13340 bytes.push(
13341 codePoint >> 0xC | 0xE0,
13342 codePoint >> 0x6 & 0x3F | 0x80,
13343 codePoint & 0x3F | 0x80
13344 )
13345 } else if (codePoint < 0x110000) {
13346 if ((units -= 4) < 0) break
13347 bytes.push(
13348 codePoint >> 0x12 | 0xF0,
13349 codePoint >> 0xC & 0x3F | 0x80,
13350 codePoint >> 0x6 & 0x3F | 0x80,
13351 codePoint & 0x3F | 0x80
13352 )
13353 } else {
13354 throw new Error('Invalid code point')
13355 }
13356 }
13357
13358 return bytes
13359 }
13360
13361 function asciiToBytes (str) {
13362 var byteArray = []
13363 for (var i = 0; i < str.length; ++i) {
13364 // Node's code seems to be doing this and not & 0x7F..
13365 byteArray.push(str.charCodeAt(i) & 0xFF)
13366 }
13367 return byteArray
13368 }
13369
13370 function utf16leToBytes (str, units) {
13371 var c, hi, lo
13372 var byteArray = []
13373 for (var i = 0; i < str.length; ++i) {
13374 if ((units -= 2) < 0) break
13375
13376 c = str.charCodeAt(i)
13377 hi = c >> 8
13378 lo = c % 256
13379 byteArray.push(lo)
13380 byteArray.push(hi)
13381 }
13382
13383 return byteArray
13384 }
13385
13386 function base64ToBytes (str) {
13387 return base64.toByteArray(base64clean(str))
13388 }
13389
13390 function blitBuffer (src, dst, offset, length) {
13391 for (var i = 0; i < length; ++i) {
13392 if ((i + offset >= dst.length) || (i >= src.length)) break
13393 dst[i + offset] = src[i]
13394 }
13395 return i
13396 }
13397
13398 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
13399 function isArrayBufferView (obj) {
13400 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
13401 }
13402
13403 function numberIsNaN (obj) {
13404 return obj !== obj // eslint-disable-line no-self-compare
13405 }
13406
13407 },{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
13408 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
13409 var e, m
13410 var eLen = nBytes * 8 - mLen - 1
13411 var eMax = (1 << eLen) - 1
13412 var eBias = eMax >> 1
13413 var nBits = -7
13414 var i = isLE ? (nBytes - 1) : 0
13415 var d = isLE ? -1 : 1
13416 var s = buffer[offset + i]
13417
13418 i += d
13419
13420 e = s & ((1 << (-nBits)) - 1)
13421 s >>= (-nBits)
13422 nBits += eLen
13423 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13424
13425 m = e & ((1 << (-nBits)) - 1)
13426 e >>= (-nBits)
13427 nBits += mLen
13428 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
13429
13430 if (e === 0) {
13431 e = 1 - eBias
13432 } else if (e === eMax) {
13433 return m ? NaN : ((s ? -1 : 1) * Infinity)
13434 } else {
13435 m = m + Math.pow(2, mLen)
13436 e = e - eBias
13437 }
13438 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
13439 }
13440
13441 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
13442 var e, m, c
13443 var eLen = nBytes * 8 - mLen - 1
13444 var eMax = (1 << eLen) - 1
13445 var eBias = eMax >> 1
13446 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
13447 var i = isLE ? 0 : (nBytes - 1)
13448 var d = isLE ? 1 : -1
13449 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
13450
13451 value = Math.abs(value)
13452
13453 if (isNaN(value) || value === Infinity) {
13454 m = isNaN(value) ? 1 : 0
13455 e = eMax
13456 } else {
13457 e = Math.floor(Math.log(value) / Math.LN2)
13458 if (value * (c = Math.pow(2, -e)) < 1) {
13459 e--
13460 c *= 2
13461 }
13462 if (e + eBias >= 1) {
13463 value += rt / c
13464 } else {
13465 value += rt * Math.pow(2, 1 - eBias)
13466 }
13467 if (value * c >= 2) {
13468 e++
13469 c /= 2
13470 }
13471
13472 if (e + eBias >= eMax) {
13473 m = 0
13474 e = eMax
13475 } else if (e + eBias >= 1) {
13476 m = (value * c - 1) * Math.pow(2, mLen)
13477 e = e + eBias
13478 } else {
13479 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
13480 e = 0
13481 }
13482 }
13483
13484 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
13485
13486 e = (e << mLen) | m
13487 eLen += mLen
13488 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
13489
13490 buffer[offset + i - d] |= s * 128
13491 }
13492
13493 },{}],4:[function(require,module,exports){
13494 window.basex = require('base-x')
13495 },{"base-x":5}],5:[function(require,module,exports){
13496 // base-x encoding
13497 // Forked from https://github.com/cryptocoinjs/bs58
13498 // Originally written by Mike Hearn for BitcoinJ
13499 // Copyright (c) 2011 Google Inc
13500 // Ported to JavaScript by Stefan Thomas
13501 // Merged Buffer refactorings from base58-native by Stephen Pair
13502 // Copyright (c) 2013 BitPay Inc
13503
13504 var Buffer = require('safe-buffer').Buffer
13505
13506 module.exports = function base (ALPHABET) {
13507 var ALPHABET_MAP = {}
13508 var BASE = ALPHABET.length
13509 var LEADER = ALPHABET.charAt(0)
13510
13511 // pre-compute lookup table
13512 for (var z = 0; z < ALPHABET.length; z++) {
13513 var x = ALPHABET.charAt(z)
13514
13515 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13516 ALPHABET_MAP[x] = z
13517 }
13518
13519 function encode (source) {
13520 if (source.length === 0) return ''
13521
13522 var digits = [0]
13523 for (var i = 0; i < source.length; ++i) {
13524 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13525 carry += digits[j] << 8
13526 digits[j] = carry % BASE
13527 carry = (carry / BASE) | 0
13528 }
13529
13530 while (carry > 0) {
13531 digits.push(carry % BASE)
13532 carry = (carry / BASE) | 0
13533 }
13534 }
13535
13536 var string = ''
13537
13538 // deal with leading zeros
13539 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13540 // convert digits to a string
13541 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
13542
13543 return string
13544 }
13545
13546 function decodeUnsafe (string) {
13547 if (string.length === 0) return Buffer.allocUnsafe(0)
13548
13549 var bytes = [0]
13550 for (var i = 0; i < string.length; i++) {
13551 var value = ALPHABET_MAP[string[i]]
13552 if (value === undefined) return
13553
13554 for (var j = 0, carry = value; j < bytes.length; ++j) {
13555 carry += bytes[j] * BASE
13556 bytes[j] = carry & 0xff
13557 carry >>= 8
13558 }
13559
13560 while (carry > 0) {
13561 bytes.push(carry & 0xff)
13562 carry >>= 8
13563 }
13564 }
13565
13566 // deal with leading zeros
13567 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13568 bytes.push(0)
13569 }
13570
13571 return Buffer.from(bytes.reverse())
13572 }
13573
13574 function decode (string) {
13575 var buffer = decodeUnsafe(string)
13576 if (buffer) return buffer
13577
13578 throw new Error('Non-base' + BASE + ' character')
13579 }
13580
13581 return {
13582 encode: encode,
13583 decodeUnsafe: decodeUnsafe,
13584 decode: decode
13585 }
13586 }
13587
13588 },{"safe-buffer":6}],6:[function(require,module,exports){
13589 module.exports = require('buffer')
13590
13591 },{"buffer":2}]},{},[4])(4)
13592 });</script>
13593 <script>// Polyfill for NFKD normalization
13594 // See https://github.com/walling/unorm
13595
13596 (function (root) {
13597 "use strict";
13598
13599 /***** unorm.js *****/
13600
13601 /*
13602 * UnicodeNormalizer 1.0.0
13603 * Copyright (c) 2008 Matsuza
13604 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
13605 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
13606 * $Rev: 13309 $
13607 */
13608
13609 var DEFAULT_FEATURE = [null, 0, {}];
13610 var CACHE_THRESHOLD = 10;
13611 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
13612 var NCount = VCount * TCount; // 588
13613 var SCount = LCount * NCount; // 11172
13614
13615 var UChar = function(cp, feature){
13616 this.codepoint = cp;
13617 this.feature = feature;
13618 };
13619
13620 // Strategies
13621 var cache = {};
13622 var cacheCounter = [];
13623 for (var i = 0; i <= 0xFF; ++i){
13624 cacheCounter[i] = 0;
13625 }
13626
13627 function fromCache(next, cp, needFeature){
13628 var ret = cache[cp];
13629 if(!ret){
13630 ret = next(cp, needFeature);
13631 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
13632 cache[cp] = ret;
13633 }
13634 }
13635 return ret;
13636 }
13637
13638 function fromData(next, cp, needFeature){
13639 var hash = cp & 0xFF00;
13640 var dunit = UChar.udata[hash] || {};
13641 var f = dunit[cp];
13642 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
13643 }
13644 function fromCpOnly(next, cp, needFeature){
13645 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
13646 }
13647 function fromRuleBasedJamo(next, cp, needFeature){
13648 var j;
13649 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
13650 return next(cp, needFeature);
13651 }
13652 if(LBase <= cp && cp < LBase + LCount){
13653 var c = {};
13654 var base = (cp - LBase) * VCount;
13655 for (j = 0; j < VCount; ++j){
13656 c[VBase + j] = SBase + TCount * (j + base);
13657 }
13658 return new UChar(cp, [,,c]);
13659 }
13660
13661 var SIndex = cp - SBase;
13662 var TIndex = SIndex % TCount;
13663 var feature = [];
13664 if(TIndex !== 0){
13665 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
13666 } else {
13667 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
13668 feature[2] = {};
13669 for (j = 1; j < TCount; ++j){
13670 feature[2][TBase + j] = cp + j;
13671 }
13672 }
13673 return new UChar(cp, feature);
13674 }
13675 function fromCpFilter(next, cp, needFeature){
13676 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
13677 }
13678
13679 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
13680
13681 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
13682 return function (cp, needFeature) {
13683 return strategy(next, cp, needFeature);
13684 };
13685 }, null);
13686
13687 UChar.isHighSurrogate = function(cp){
13688 return cp >= 0xD800 && cp <= 0xDBFF;
13689 };
13690 UChar.isLowSurrogate = function(cp){
13691 return cp >= 0xDC00 && cp <= 0xDFFF;
13692 };
13693
13694 UChar.prototype.prepFeature = function(){
13695 if(!this.feature){
13696 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
13697 }
13698 };
13699
13700 UChar.prototype.toString = function(){
13701 if(this.codepoint < 0x10000){
13702 return String.fromCharCode(this.codepoint);
13703 } else {
13704 var x = this.codepoint - 0x10000;
13705 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
13706 }
13707 };
13708
13709 UChar.prototype.getDecomp = function(){
13710 this.prepFeature();
13711 return this.feature[0] || null;
13712 };
13713
13714 UChar.prototype.isCompatibility = function(){
13715 this.prepFeature();
13716 return !!this.feature[1] && (this.feature[1] & (1 << 8));
13717 };
13718 UChar.prototype.isExclude = function(){
13719 this.prepFeature();
13720 return !!this.feature[1] && (this.feature[1] & (1 << 9));
13721 };
13722 UChar.prototype.getCanonicalClass = function(){
13723 this.prepFeature();
13724 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
13725 };
13726 UChar.prototype.getComposite = function(following){
13727 this.prepFeature();
13728 if(!this.feature[2]){
13729 return null;
13730 }
13731 var cp = this.feature[2][following.codepoint];
13732 return cp ? UChar.fromCharCode(cp) : null;
13733 };
13734
13735 var UCharIterator = function(str){
13736 this.str = str;
13737 this.cursor = 0;
13738 };
13739 UCharIterator.prototype.next = function(){
13740 if(!!this.str && this.cursor < this.str.length){
13741 var cp = this.str.charCodeAt(this.cursor++);
13742 var d;
13743 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
13744 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
13745 ++this.cursor;
13746 }
13747 return UChar.fromCharCode(cp);
13748 } else {
13749 this.str = null;
13750 return null;
13751 }
13752 };
13753
13754 var RecursDecompIterator = function(it, cano){
13755 this.it = it;
13756 this.canonical = cano;
13757 this.resBuf = [];
13758 };
13759
13760 RecursDecompIterator.prototype.next = function(){
13761 function recursiveDecomp(cano, uchar){
13762 var decomp = uchar.getDecomp();
13763 if(!!decomp && !(cano && uchar.isCompatibility())){
13764 var ret = [];
13765 for(var i = 0; i < decomp.length; ++i){
13766 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
13767 ret = ret.concat(a);
13768 }
13769 return ret;
13770 } else {
13771 return [uchar];
13772 }
13773 }
13774 if(this.resBuf.length === 0){
13775 var uchar = this.it.next();
13776 if(!uchar){
13777 return null;
13778 }
13779 this.resBuf = recursiveDecomp(this.canonical, uchar);
13780 }
13781 return this.resBuf.shift();
13782 };
13783
13784 var DecompIterator = function(it){
13785 this.it = it;
13786 this.resBuf = [];
13787 };
13788
13789 DecompIterator.prototype.next = function(){
13790 var cc;
13791 if(this.resBuf.length === 0){
13792 do{
13793 var uchar = this.it.next();
13794 if(!uchar){
13795 break;
13796 }
13797 cc = uchar.getCanonicalClass();
13798 var inspt = this.resBuf.length;
13799 if(cc !== 0){
13800 for(; inspt > 0; --inspt){
13801 var uchar2 = this.resBuf[inspt - 1];
13802 var cc2 = uchar2.getCanonicalClass();
13803 if(cc2 <= cc){
13804 break;
13805 }
13806 }
13807 }
13808 this.resBuf.splice(inspt, 0, uchar);
13809 } while(cc !== 0);
13810 }
13811 return this.resBuf.shift();
13812 };
13813
13814 var CompIterator = function(it){
13815 this.it = it;
13816 this.procBuf = [];
13817 this.resBuf = [];
13818 this.lastClass = null;
13819 };
13820
13821 CompIterator.prototype.next = function(){
13822 while(this.resBuf.length === 0){
13823 var uchar = this.it.next();
13824 if(!uchar){
13825 this.resBuf = this.procBuf;
13826 this.procBuf = [];
13827 break;
13828 }
13829 if(this.procBuf.length === 0){
13830 this.lastClass = uchar.getCanonicalClass();
13831 this.procBuf.push(uchar);
13832 } else {
13833 var starter = this.procBuf[0];
13834 var composite = starter.getComposite(uchar);
13835 var cc = uchar.getCanonicalClass();
13836 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
13837 this.procBuf[0] = composite;
13838 } else {
13839 if(cc === 0){
13840 this.resBuf = this.procBuf;
13841 this.procBuf = [];
13842 }
13843 this.lastClass = cc;
13844 this.procBuf.push(uchar);
13845 }
13846 }
13847 }
13848 return this.resBuf.shift();
13849 };
13850
13851 var createIterator = function(mode, str){
13852 switch(mode){
13853 case "NFD":
13854 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
13855 case "NFKD":
13856 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
13857 case "NFC":
13858 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
13859 case "NFKC":
13860 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
13861 }
13862 throw mode + " is invalid";
13863 };
13864 var normalize = function(mode, str){
13865 var it = createIterator(mode, str);
13866 var ret = "";
13867 var uchar;
13868 while(!!(uchar = it.next())){
13869 ret += uchar.toString();
13870 }
13871 return ret;
13872 };
13873
13874 /* API functions */
13875 function nfd(str){
13876 return normalize("NFD", str);
13877 }
13878
13879 function nfkd(str){
13880 return normalize("NFKD", str);
13881 }
13882
13883 function nfc(str){
13884 return normalize("NFC", str);
13885 }
13886
13887 function nfkc(str){
13888 return normalize("NFKC", str);
13889 }
13890
13891 /* Unicode data */
13892 UChar.udata={
13893 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]]},
13894 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]},
13895 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]},
13896 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]},
13897 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]]},
13898 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]},
13899 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]},
13900 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]},
13901 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]},
13902 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]},
13903 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]},
13904 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]},
13905 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]},
13906 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]]},
13907 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]},
13908 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]},
13909 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]},
13910 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]},
13911 4608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
13912 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]},
13913 5120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
13914 5376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
13915 5632:{71231:[,9],71350:[,9],71351:[,7]},
13916 5888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
13917 6144:{6313:[,228]},
13918 6400:{6457:[,222],6458:[,230],6459:[,220]},
13919 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]},
13920 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]},
13921 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]},
13922 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]},
13923 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]]},
13924 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}]},
13925 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]},
13926 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}]},
13927 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]]},
13928 8960:{9001:[[12296]],9002:[[12297]]},
13929 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]},
13930 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]},
13931 11264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
13932 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]},
13933 11776:{11935:[[27597],256],12019:[[40863],256]},
13934 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]},
13935 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]},
13936 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]},
13937 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]},
13938 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]},
13939 27136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
13940 27392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
13941 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]},
13942 42752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
13943 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]},
13944 43264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
13945 43520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
13946 43776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
13947 48128:{113822:[,1]},
13948 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]},
13949 53760:{119362:[,230],119363:[,230],119364:[,230]},
13950 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]},
13951 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]},
13952 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]},
13953 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]},
13954 59392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
13955 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]},
13956 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]},
13957 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]},
13958 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]]},
13959 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]]},
13960 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]]},
13961 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]},
13962 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]},
13963 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]},
13964 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]},
13965 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]}
13966
13967 };
13968
13969 /***** Module to export */
13970 var unorm = {
13971 nfc: nfc,
13972 nfd: nfd,
13973 nfkc: nfkc,
13974 nfkd: nfkd
13975 };
13976
13977 /*globals module:true,define:true*/
13978
13979 // CommonJS
13980 if (typeof module === "object") {
13981 module.exports = unorm;
13982
13983 // AMD
13984 } else if (typeof define === "function" && define.amd) {
13985 define("unorm", function () {
13986 return unorm;
13987 });
13988
13989 // Global
13990 } else {
13991 root.unorm = unorm;
13992 }
13993
13994 /***** Export as shim for String::normalize method *****/
13995 /*
13996 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
13997
13998 21.1.3.12 String.prototype.normalize(form="NFC")
13999 When the normalize method is called with one argument form, the following steps are taken:
14000
14001 1. Let O be CheckObjectCoercible(this value).
14002 2. Let S be ToString(O).
14003 3. ReturnIfAbrupt(S).
14004 4. If form is not provided or undefined let form be "NFC".
14005 5. Let f be ToString(form).
14006 6. ReturnIfAbrupt(f).
14007 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
14008 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.
14009 9. Return ns.
14010
14011 The length property of the normalize method is 0.
14012
14013 *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.
14014 */
14015 unorm.shimApplied = false;
14016
14017 if (!String.prototype.normalize) {
14018 String.prototype.normalize = function(form) {
14019 var str = "" + this;
14020 form = form === undefined ? "NFC" : form;
14021
14022 if (form === "NFC") {
14023 return unorm.nfc(str);
14024 } else if (form === "NFD") {
14025 return unorm.nfd(str);
14026 } else if (form === "NFKC") {
14027 return unorm.nfkc(str);
14028 } else if (form === "NFKD") {
14029 return unorm.nfkd(str);
14030 } else {
14031 throw new RangeError("Invalid normalization form: " + form);
14032 }
14033 };
14034
14035 unorm.shimApplied = true;
14036 }
14037 }(this));
14038 </script>
14039 <script>/*!
14040 * jQuery JavaScript Library v3.2.1
14041 * https://jquery.com/
14042 *
14043 * Includes Sizzle.js
14044 * https://sizzlejs.com/
14045 *
14046 * Copyright JS Foundation and other contributors
14047 * Released under the MIT license
14048 * https://jquery.org/license
14049 *
14050 * Date: 2017-03-20T18:59Z
14051 */
14052 ( function( global, factory ) {
14053
14054 "use strict";
14055
14056 if ( typeof module === "object" && typeof module.exports === "object" ) {
14057
14058 // For CommonJS and CommonJS-like environments where a proper `window`
14059 // is present, execute the factory and get jQuery.
14060 // For environments that do not have a `window` with a `document`
14061 // (such as Node.js), expose a factory as module.exports.
14062 // This accentuates the need for the creation of a real `window`.
14063 // e.g. var jQuery = require("jquery")(window);
14064 // See ticket #14549 for more info.
14065 module.exports = global.document ?
14066 factory( global, true ) :
14067 function( w ) {
14068 if ( !w.document ) {
14069 throw new Error( "jQuery requires a window with a document" );
14070 }
14071 return factory( w );
14072 };
14073 } else {
14074 factory( global );
14075 }
14076
14077 // Pass this if window is not defined yet
14078 } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
14079
14080 // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
14081 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
14082 // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
14083 // enough that all such attempts are guarded in a try block.
14084 "use strict";
14085
14086 var arr = [];
14087
14088 var document = window.document;
14089
14090 var getProto = Object.getPrototypeOf;
14091
14092 var slice = arr.slice;
14093
14094 var concat = arr.concat;
14095
14096 var push = arr.push;
14097
14098 var indexOf = arr.indexOf;
14099
14100 var class2type = {};
14101
14102 var toString = class2type.toString;
14103
14104 var hasOwn = class2type.hasOwnProperty;
14105
14106 var fnToString = hasOwn.toString;
14107
14108 var ObjectFunctionString = fnToString.call( Object );
14109
14110 var support = {};
14111
14112
14113
14114 function DOMEval( code, doc ) {
14115 doc = doc || document;
14116
14117 var script = doc.createElement( "script" );
14118
14119 script.text = code;
14120 doc.head.appendChild( script ).parentNode.removeChild( script );
14121 }
14122 /* global Symbol */
14123 // Defining this global in .eslintrc.json would create a danger of using the global
14124 // unguarded in another place, it seems safer to define global only for this module
14125
14126
14127
14128 var
14129 version = "3.2.1",
14130
14131 // Define a local copy of jQuery
14132 jQuery = function( selector, context ) {
14133
14134 // The jQuery object is actually just the init constructor 'enhanced'
14135 // Need init if jQuery is called (just allow error to be thrown if not included)
14136 return new jQuery.fn.init( selector, context );
14137 },
14138
14139 // Support: Android <=4.0 only
14140 // Make sure we trim BOM and NBSP
14141 rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
14142
14143 // Matches dashed string for camelizing
14144 rmsPrefix = /^-ms-/,
14145 rdashAlpha = /-([a-z])/g,
14146
14147 // Used by jQuery.camelCase as callback to replace()
14148 fcamelCase = function( all, letter ) {
14149 return letter.toUpperCase();
14150 };
14151
14152 jQuery.fn = jQuery.prototype = {
14153
14154 // The current version of jQuery being used
14155 jquery: version,
14156
14157 constructor: jQuery,
14158
14159 // The default length of a jQuery object is 0
14160 length: 0,
14161
14162 toArray: function() {
14163 return slice.call( this );
14164 },
14165
14166 // Get the Nth element in the matched element set OR
14167 // Get the whole matched element set as a clean array
14168 get: function( num ) {
14169
14170 // Return all the elements in a clean array
14171 if ( num == null ) {
14172 return slice.call( this );
14173 }
14174
14175 // Return just the one element from the set
14176 return num < 0 ? this[ num + this.length ] : this[ num ];
14177 },
14178
14179 // Take an array of elements and push it onto the stack
14180 // (returning the new matched element set)
14181 pushStack: function( elems ) {
14182
14183 // Build a new jQuery matched element set
14184 var ret = jQuery.merge( this.constructor(), elems );
14185
14186 // Add the old object onto the stack (as a reference)
14187 ret.prevObject = this;
14188
14189 // Return the newly-formed element set
14190 return ret;
14191 },
14192
14193 // Execute a callback for every element in the matched set.
14194 each: function( callback ) {
14195 return jQuery.each( this, callback );
14196 },
14197
14198 map: function( callback ) {
14199 return this.pushStack( jQuery.map( this, function( elem, i ) {
14200 return callback.call( elem, i, elem );
14201 } ) );
14202 },
14203
14204 slice: function() {
14205 return this.pushStack( slice.apply( this, arguments ) );
14206 },
14207
14208 first: function() {
14209 return this.eq( 0 );
14210 },
14211
14212 last: function() {
14213 return this.eq( -1 );
14214 },
14215
14216 eq: function( i ) {
14217 var len = this.length,
14218 j = +i + ( i < 0 ? len : 0 );
14219 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
14220 },
14221
14222 end: function() {
14223 return this.prevObject || this.constructor();
14224 },
14225
14226 // For internal use only.
14227 // Behaves like an Array's method, not like a jQuery method.
14228 push: push,
14229 sort: arr.sort,
14230 splice: arr.splice
14231 };
14232
14233 jQuery.extend = jQuery.fn.extend = function() {
14234 var options, name, src, copy, copyIsArray, clone,
14235 target = arguments[ 0 ] || {},
14236 i = 1,
14237 length = arguments.length,
14238 deep = false;
14239
14240 // Handle a deep copy situation
14241 if ( typeof target === "boolean" ) {
14242 deep = target;
14243
14244 // Skip the boolean and the target
14245 target = arguments[ i ] || {};
14246 i++;
14247 }
14248
14249 // Handle case when target is a string or something (possible in deep copy)
14250 if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
14251 target = {};
14252 }
14253
14254 // Extend jQuery itself if only one argument is passed
14255 if ( i === length ) {
14256 target = this;
14257 i--;
14258 }
14259
14260 for ( ; i < length; i++ ) {
14261
14262 // Only deal with non-null/undefined values
14263 if ( ( options = arguments[ i ] ) != null ) {
14264
14265 // Extend the base object
14266 for ( name in options ) {
14267 src = target[ name ];
14268 copy = options[ name ];
14269
14270 // Prevent never-ending loop
14271 if ( target === copy ) {
14272 continue;
14273 }
14274
14275 // Recurse if we're merging plain objects or arrays
14276 if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
14277 ( copyIsArray = Array.isArray( copy ) ) ) ) {
14278
14279 if ( copyIsArray ) {
14280 copyIsArray = false;
14281 clone = src && Array.isArray( src ) ? src : [];
14282
14283 } else {
14284 clone = src && jQuery.isPlainObject( src ) ? src : {};
14285 }
14286
14287 // Never move original objects, clone them
14288 target[ name ] = jQuery.extend( deep, clone, copy );
14289
14290 // Don't bring in undefined values
14291 } else if ( copy !== undefined ) {
14292 target[ name ] = copy;
14293 }
14294 }
14295 }
14296 }
14297
14298 // Return the modified object
14299 return target;
14300 };
14301
14302 jQuery.extend( {
14303
14304 // Unique for each copy of jQuery on the page
14305 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
14306
14307 // Assume jQuery is ready without the ready module
14308 isReady: true,
14309
14310 error: function( msg ) {
14311 throw new Error( msg );
14312 },
14313
14314 noop: function() {},
14315
14316 isFunction: function( obj ) {
14317 return jQuery.type( obj ) === "function";
14318 },
14319
14320 isWindow: function( obj ) {
14321 return obj != null && obj === obj.window;
14322 },
14323
14324 isNumeric: function( obj ) {
14325
14326 // As of jQuery 3.0, isNumeric is limited to
14327 // strings and numbers (primitives or objects)
14328 // that can be coerced to finite numbers (gh-2662)
14329 var type = jQuery.type( obj );
14330 return ( type === "number" || type === "string" ) &&
14331
14332 // parseFloat NaNs numeric-cast false positives ("")
14333 // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
14334 // subtraction forces infinities to NaN
14335 !isNaN( obj - parseFloat( obj ) );
14336 },
14337
14338 isPlainObject: function( obj ) {
14339 var proto, Ctor;
14340
14341 // Detect obvious negatives
14342 // Use toString instead of jQuery.type to catch host objects
14343 if ( !obj || toString.call( obj ) !== "[object Object]" ) {
14344 return false;
14345 }
14346
14347 proto = getProto( obj );
14348
14349 // Objects with no prototype (e.g., `Object.create( null )`) are plain
14350 if ( !proto ) {
14351 return true;
14352 }
14353
14354 // Objects with prototype are plain iff they were constructed by a global Object function
14355 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
14356 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
14357 },
14358
14359 isEmptyObject: function( obj ) {
14360
14361 /* eslint-disable no-unused-vars */
14362 // See https://github.com/eslint/eslint/issues/6125
14363 var name;
14364
14365 for ( name in obj ) {
14366 return false;
14367 }
14368 return true;
14369 },
14370
14371 type: function( obj ) {
14372 if ( obj == null ) {
14373 return obj + "";
14374 }
14375
14376 // Support: Android <=2.3 only (functionish RegExp)
14377 return typeof obj === "object" || typeof obj === "function" ?
14378 class2type[ toString.call( obj ) ] || "object" :
14379 typeof obj;
14380 },
14381
14382 // Evaluates a script in a global context
14383 globalEval: function( code ) {
14384 DOMEval( code );
14385 },
14386
14387 // Convert dashed to camelCase; used by the css and data modules
14388 // Support: IE <=9 - 11, Edge 12 - 13
14389 // Microsoft forgot to hump their vendor prefix (#9572)
14390 camelCase: function( string ) {
14391 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
14392 },
14393
14394 each: function( obj, callback ) {
14395 var length, i = 0;
14396
14397 if ( isArrayLike( obj ) ) {
14398 length = obj.length;
14399 for ( ; i < length; i++ ) {
14400 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14401 break;
14402 }
14403 }
14404 } else {
14405 for ( i in obj ) {
14406 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
14407 break;
14408 }
14409 }
14410 }
14411
14412 return obj;
14413 },
14414
14415 // Support: Android <=4.0 only
14416 trim: function( text ) {
14417 return text == null ?
14418 "" :
14419 ( text + "" ).replace( rtrim, "" );
14420 },
14421
14422 // results is for internal usage only
14423 makeArray: function( arr, results ) {
14424 var ret = results || [];
14425
14426 if ( arr != null ) {
14427 if ( isArrayLike( Object( arr ) ) ) {
14428 jQuery.merge( ret,
14429 typeof arr === "string" ?
14430 [ arr ] : arr
14431 );
14432 } else {
14433 push.call( ret, arr );
14434 }
14435 }
14436
14437 return ret;
14438 },
14439
14440 inArray: function( elem, arr, i ) {
14441 return arr == null ? -1 : indexOf.call( arr, elem, i );
14442 },
14443
14444 // Support: Android <=4.0 only, PhantomJS 1 only
14445 // push.apply(_, arraylike) throws on ancient WebKit
14446 merge: function( first, second ) {
14447 var len = +second.length,
14448 j = 0,
14449 i = first.length;
14450
14451 for ( ; j < len; j++ ) {
14452 first[ i++ ] = second[ j ];
14453 }
14454
14455 first.length = i;
14456
14457 return first;
14458 },
14459
14460 grep: function( elems, callback, invert ) {
14461 var callbackInverse,
14462 matches = [],
14463 i = 0,
14464 length = elems.length,
14465 callbackExpect = !invert;
14466
14467 // Go through the array, only saving the items
14468 // that pass the validator function
14469 for ( ; i < length; i++ ) {
14470 callbackInverse = !callback( elems[ i ], i );
14471 if ( callbackInverse !== callbackExpect ) {
14472 matches.push( elems[ i ] );
14473 }
14474 }
14475
14476 return matches;
14477 },
14478
14479 // arg is for internal usage only
14480 map: function( elems, callback, arg ) {
14481 var length, value,
14482 i = 0,
14483 ret = [];
14484
14485 // Go through the array, translating each of the items to their new values
14486 if ( isArrayLike( elems ) ) {
14487 length = elems.length;
14488 for ( ; i < length; i++ ) {
14489 value = callback( elems[ i ], i, arg );
14490
14491 if ( value != null ) {
14492 ret.push( value );
14493 }
14494 }
14495
14496 // Go through every key on the object,
14497 } else {
14498 for ( i in elems ) {
14499 value = callback( elems[ i ], i, arg );
14500
14501 if ( value != null ) {
14502 ret.push( value );
14503 }
14504 }
14505 }
14506
14507 // Flatten any nested arrays
14508 return concat.apply( [], ret );
14509 },
14510
14511 // A global GUID counter for objects
14512 guid: 1,
14513
14514 // Bind a function to a context, optionally partially applying any
14515 // arguments.
14516 proxy: function( fn, context ) {
14517 var tmp, args, proxy;
14518
14519 if ( typeof context === "string" ) {
14520 tmp = fn[ context ];
14521 context = fn;
14522 fn = tmp;
14523 }
14524
14525 // Quick check to determine if target is callable, in the spec
14526 // this throws a TypeError, but we will just return undefined.
14527 if ( !jQuery.isFunction( fn ) ) {
14528 return undefined;
14529 }
14530
14531 // Simulated bind
14532 args = slice.call( arguments, 2 );
14533 proxy = function() {
14534 return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
14535 };
14536
14537 // Set the guid of unique handler to the same of original handler, so it can be removed
14538 proxy.guid = fn.guid = fn.guid || jQuery.guid++;
14539
14540 return proxy;
14541 },
14542
14543 now: Date.now,
14544
14545 // jQuery.support is not used in Core but other projects attach their
14546 // properties to it so it needs to exist.
14547 support: support
14548 } );
14549
14550 if ( typeof Symbol === "function" ) {
14551 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
14552 }
14553
14554 // Populate the class2type map
14555 jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
14556 function( i, name ) {
14557 class2type[ "[object " + name + "]" ] = name.toLowerCase();
14558 } );
14559
14560 function isArrayLike( obj ) {
14561
14562 // Support: real iOS 8.2 only (not reproducible in simulator)
14563 // `in` check used to prevent JIT error (gh-2145)
14564 // hasOwn isn't used here due to false negatives
14565 // regarding Nodelist length in IE
14566 var length = !!obj && "length" in obj && obj.length,
14567 type = jQuery.type( obj );
14568
14569 if ( type === "function" || jQuery.isWindow( obj ) ) {
14570 return false;
14571 }
14572
14573 return type === "array" || length === 0 ||
14574 typeof length === "number" && length > 0 && ( length - 1 ) in obj;
14575 }
14576 var Sizzle =
14577 /*!
14578 * Sizzle CSS Selector Engine v2.3.3
14579 * https://sizzlejs.com/
14580 *
14581 * Copyright jQuery Foundation and other contributors
14582 * Released under the MIT license
14583 * http://jquery.org/license
14584 *
14585 * Date: 2016-08-08
14586 */
14587 (function( window ) {
14588
14589 var i,
14590 support,
14591 Expr,
14592 getText,
14593 isXML,
14594 tokenize,
14595 compile,
14596 select,
14597 outermostContext,
14598 sortInput,
14599 hasDuplicate,
14600
14601 // Local document vars
14602 setDocument,
14603 document,
14604 docElem,
14605 documentIsHTML,
14606 rbuggyQSA,
14607 rbuggyMatches,
14608 matches,
14609 contains,
14610
14611 // Instance-specific data
14612 expando = "sizzle" + 1 * new Date(),
14613 preferredDoc = window.document,
14614 dirruns = 0,
14615 done = 0,
14616 classCache = createCache(),
14617 tokenCache = createCache(),
14618 compilerCache = createCache(),
14619 sortOrder = function( a, b ) {
14620 if ( a === b ) {
14621 hasDuplicate = true;
14622 }
14623 return 0;
14624 },
14625
14626 // Instance methods
14627 hasOwn = ({}).hasOwnProperty,
14628 arr = [],
14629 pop = arr.pop,
14630 push_native = arr.push,
14631 push = arr.push,
14632 slice = arr.slice,
14633 // Use a stripped-down indexOf as it's faster than native
14634 // https://jsperf.com/thor-indexof-vs-for/5
14635 indexOf = function( list, elem ) {
14636 var i = 0,
14637 len = list.length;
14638 for ( ; i < len; i++ ) {
14639 if ( list[i] === elem ) {
14640 return i;
14641 }
14642 }
14643 return -1;
14644 },
14645
14646 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
14647
14648 // Regular expressions
14649
14650 // http://www.w3.org/TR/css3-selectors/#whitespace
14651 whitespace = "[\\x20\\t\\r\\n\\f]",
14652
14653 // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
14654 identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
14655
14656 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
14657 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
14658 // Operator (capture 2)
14659 "*([*^$|!~]?=)" + whitespace +
14660 // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
14661 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
14662 "*\\]",
14663
14664 pseudos = ":(" + identifier + ")(?:\\((" +
14665 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
14666 // 1. quoted (capture 3; capture 4 or capture 5)
14667 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
14668 // 2. simple (capture 6)
14669 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
14670 // 3. anything else (capture 2)
14671 ".*" +
14672 ")\\)|)",
14673
14674 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
14675 rwhitespace = new RegExp( whitespace + "+", "g" ),
14676 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
14677
14678 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
14679 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
14680
14681 rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
14682
14683 rpseudo = new RegExp( pseudos ),
14684 ridentifier = new RegExp( "^" + identifier + "$" ),
14685
14686 matchExpr = {
14687 "ID": new RegExp( "^#(" + identifier + ")" ),
14688 "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
14689 "TAG": new RegExp( "^(" + identifier + "|[*])" ),
14690 "ATTR": new RegExp( "^" + attributes ),
14691 "PSEUDO": new RegExp( "^" + pseudos ),
14692 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
14693 "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
14694 "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
14695 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
14696 // For use in libraries implementing .is()
14697 // We use this for POS matching in `select`
14698 "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
14699 whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
14700 },
14701
14702 rinputs = /^(?:input|select|textarea|button)$/i,
14703 rheader = /^h\d$/i,
14704
14705 rnative = /^[^{]+\{\s*\[native \w/,
14706
14707 // Easily-parseable/retrievable ID or TAG or CLASS selectors
14708 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
14709
14710 rsibling = /[+~]/,
14711
14712 // CSS escapes
14713 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
14714 runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
14715 funescape = function( _, escaped, escapedWhitespace ) {
14716 var high = "0x" + escaped - 0x10000;
14717 // NaN means non-codepoint
14718 // Support: Firefox<24
14719 // Workaround erroneous numeric interpretation of +"0x"
14720 return high !== high || escapedWhitespace ?
14721 escaped :
14722 high < 0 ?
14723 // BMP codepoint
14724 String.fromCharCode( high + 0x10000 ) :
14725 // Supplemental Plane codepoint (surrogate pair)
14726 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
14727 },
14728
14729 // CSS string/identifier serialization
14730 // https://drafts.csswg.org/cssom/#common-serializing-idioms
14731 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
14732 fcssescape = function( ch, asCodePoint ) {
14733 if ( asCodePoint ) {
14734
14735 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
14736 if ( ch === "\0" ) {
14737 return "\uFFFD";
14738 }
14739
14740 // Control characters and (dependent upon position) numbers get escaped as code points
14741 return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
14742 }
14743
14744 // Other potentially-special ASCII characters get backslash-escaped
14745 return "\\" + ch;
14746 },
14747
14748 // Used for iframes
14749 // See setDocument()
14750 // Removing the function wrapper causes a "Permission Denied"
14751 // error in IE
14752 unloadHandler = function() {
14753 setDocument();
14754 },
14755
14756 disabledAncestor = addCombinator(
14757 function( elem ) {
14758 return elem.disabled === true && ("form" in elem || "label" in elem);
14759 },
14760 { dir: "parentNode", next: "legend" }
14761 );
14762
14763 // Optimize for push.apply( _, NodeList )
14764 try {
14765 push.apply(
14766 (arr = slice.call( preferredDoc.childNodes )),
14767 preferredDoc.childNodes
14768 );
14769 // Support: Android<4.0
14770 // Detect silently failing push.apply
14771 arr[ preferredDoc.childNodes.length ].nodeType;
14772 } catch ( e ) {
14773 push = { apply: arr.length ?
14774
14775 // Leverage slice if possible
14776 function( target, els ) {
14777 push_native.apply( target, slice.call(els) );
14778 } :
14779
14780 // Support: IE<9
14781 // Otherwise append directly
14782 function( target, els ) {
14783 var j = target.length,
14784 i = 0;
14785 // Can't trust NodeList.length
14786 while ( (target[j++] = els[i++]) ) {}
14787 target.length = j - 1;
14788 }
14789 };
14790 }
14791
14792 function Sizzle( selector, context, results, seed ) {
14793 var m, i, elem, nid, match, groups, newSelector,
14794 newContext = context && context.ownerDocument,
14795
14796 // nodeType defaults to 9, since context defaults to document
14797 nodeType = context ? context.nodeType : 9;
14798
14799 results = results || [];
14800
14801 // Return early from calls with invalid selector or context
14802 if ( typeof selector !== "string" || !selector ||
14803 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
14804
14805 return results;
14806 }
14807
14808 // Try to shortcut find operations (as opposed to filters) in HTML documents
14809 if ( !seed ) {
14810
14811 if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
14812 setDocument( context );
14813 }
14814 context = context || document;
14815
14816 if ( documentIsHTML ) {
14817
14818 // If the selector is sufficiently simple, try using a "get*By*" DOM method
14819 // (excepting DocumentFragment context, where the methods don't exist)
14820 if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
14821
14822 // ID selector
14823 if ( (m = match[1]) ) {
14824
14825 // Document context
14826 if ( nodeType === 9 ) {
14827 if ( (elem = context.getElementById( m )) ) {
14828
14829 // Support: IE, Opera, Webkit
14830 // TODO: identify versions
14831 // getElementById can match elements by name instead of ID
14832 if ( elem.id === m ) {
14833 results.push( elem );
14834 return results;
14835 }
14836 } else {
14837 return results;
14838 }
14839
14840 // Element context
14841 } else {
14842
14843 // Support: IE, Opera, Webkit
14844 // TODO: identify versions
14845 // getElementById can match elements by name instead of ID
14846 if ( newContext && (elem = newContext.getElementById( m )) &&
14847 contains( context, elem ) &&
14848 elem.id === m ) {
14849
14850 results.push( elem );
14851 return results;
14852 }
14853 }
14854
14855 // Type selector
14856 } else if ( match[2] ) {
14857 push.apply( results, context.getElementsByTagName( selector ) );
14858 return results;
14859
14860 // Class selector
14861 } else if ( (m = match[3]) && support.getElementsByClassName &&
14862 context.getElementsByClassName ) {
14863
14864 push.apply( results, context.getElementsByClassName( m ) );
14865 return results;
14866 }
14867 }
14868
14869 // Take advantage of querySelectorAll
14870 if ( support.qsa &&
14871 !compilerCache[ selector + " " ] &&
14872 (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
14873
14874 if ( nodeType !== 1 ) {
14875 newContext = context;
14876 newSelector = selector;
14877
14878 // qSA looks outside Element context, which is not what we want
14879 // Thanks to Andrew Dupont for this workaround technique
14880 // Support: IE <=8
14881 // Exclude object elements
14882 } else if ( context.nodeName.toLowerCase() !== "object" ) {
14883
14884 // Capture the context ID, setting it first if necessary
14885 if ( (nid = context.getAttribute( "id" )) ) {
14886 nid = nid.replace( rcssescape, fcssescape );
14887 } else {
14888 context.setAttribute( "id", (nid = expando) );
14889 }
14890
14891 // Prefix every selector in the list
14892 groups = tokenize( selector );
14893 i = groups.length;
14894 while ( i-- ) {
14895 groups[i] = "#" + nid + " " + toSelector( groups[i] );
14896 }
14897 newSelector = groups.join( "," );
14898
14899 // Expand context for sibling selectors
14900 newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
14901 context;
14902 }
14903
14904 if ( newSelector ) {
14905 try {
14906 push.apply( results,
14907 newContext.querySelectorAll( newSelector )
14908 );
14909 return results;
14910 } catch ( qsaError ) {
14911 } finally {
14912 if ( nid === expando ) {
14913 context.removeAttribute( "id" );
14914 }
14915 }
14916 }
14917 }
14918 }
14919 }
14920
14921 // All others
14922 return select( selector.replace( rtrim, "$1" ), context, results, seed );
14923 }
14924
14925 /**
14926 * Create key-value caches of limited size
14927 * @returns {function(string, object)} Returns the Object data after storing it on itself with
14928 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
14929 * deleting the oldest entry
14930 */
14931 function createCache() {
14932 var keys = [];
14933
14934 function cache( key, value ) {
14935 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
14936 if ( keys.push( key + " " ) > Expr.cacheLength ) {
14937 // Only keep the most recent entries
14938 delete cache[ keys.shift() ];
14939 }
14940 return (cache[ key + " " ] = value);
14941 }
14942 return cache;
14943 }
14944
14945 /**
14946 * Mark a function for special use by Sizzle
14947 * @param {Function} fn The function to mark
14948 */
14949 function markFunction( fn ) {
14950 fn[ expando ] = true;
14951 return fn;
14952 }
14953
14954 /**
14955 * Support testing using an element
14956 * @param {Function} fn Passed the created element and returns a boolean result
14957 */
14958 function assert( fn ) {
14959 var el = document.createElement("fieldset");
14960
14961 try {
14962 return !!fn( el );
14963 } catch (e) {
14964 return false;
14965 } finally {
14966 // Remove from its parent by default
14967 if ( el.parentNode ) {
14968 el.parentNode.removeChild( el );
14969 }
14970 // release memory in IE
14971 el = null;
14972 }
14973 }
14974
14975 /**
14976 * Adds the same handler for all of the specified attrs
14977 * @param {String} attrs Pipe-separated list of attributes
14978 * @param {Function} handler The method that will be applied
14979 */
14980 function addHandle( attrs, handler ) {
14981 var arr = attrs.split("|"),
14982 i = arr.length;
14983
14984 while ( i-- ) {
14985 Expr.attrHandle[ arr[i] ] = handler;
14986 }
14987 }
14988
14989 /**
14990 * Checks document order of two siblings
14991 * @param {Element} a
14992 * @param {Element} b
14993 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
14994 */
14995 function siblingCheck( a, b ) {
14996 var cur = b && a,
14997 diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
14998 a.sourceIndex - b.sourceIndex;
14999
15000 // Use IE sourceIndex if available on both nodes
15001 if ( diff ) {
15002 return diff;
15003 }
15004
15005 // Check if b follows a
15006 if ( cur ) {
15007 while ( (cur = cur.nextSibling) ) {
15008 if ( cur === b ) {
15009 return -1;
15010 }
15011 }
15012 }
15013
15014 return a ? 1 : -1;
15015 }
15016
15017 /**
15018 * Returns a function to use in pseudos for input types
15019 * @param {String} type
15020 */
15021 function createInputPseudo( type ) {
15022 return function( elem ) {
15023 var name = elem.nodeName.toLowerCase();
15024 return name === "input" && elem.type === type;
15025 };
15026 }
15027
15028 /**
15029 * Returns a function to use in pseudos for buttons
15030 * @param {String} type
15031 */
15032 function createButtonPseudo( type ) {
15033 return function( elem ) {
15034 var name = elem.nodeName.toLowerCase();
15035 return (name === "input" || name === "button") && elem.type === type;
15036 };
15037 }
15038
15039 /**
15040 * Returns a function to use in pseudos for :enabled/:disabled
15041 * @param {Boolean} disabled true for :disabled; false for :enabled
15042 */
15043 function createDisabledPseudo( disabled ) {
15044
15045 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
15046 return function( elem ) {
15047
15048 // Only certain elements can match :enabled or :disabled
15049 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
15050 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
15051 if ( "form" in elem ) {
15052
15053 // Check for inherited disabledness on relevant non-disabled elements:
15054 // * listed form-associated elements in a disabled fieldset
15055 // https://html.spec.whatwg.org/multipage/forms.html#category-listed
15056 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
15057 // * option elements in a disabled optgroup
15058 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
15059 // All such elements have a "form" property.
15060 if ( elem.parentNode && elem.disabled === false ) {
15061
15062 // Option elements defer to a parent optgroup if present
15063 if ( "label" in elem ) {
15064 if ( "label" in elem.parentNode ) {
15065 return elem.parentNode.disabled === disabled;
15066 } else {
15067 return elem.disabled === disabled;
15068 }
15069 }
15070
15071 // Support: IE 6 - 11
15072 // Use the isDisabled shortcut property to check for disabled fieldset ancestors
15073 return elem.isDisabled === disabled ||
15074
15075 // Where there is no isDisabled, check manually
15076 /* jshint -W018 */
15077 elem.isDisabled !== !disabled &&
15078 disabledAncestor( elem ) === disabled;
15079 }
15080
15081 return elem.disabled === disabled;
15082
15083 // Try to winnow out elements that can't be disabled before trusting the disabled property.
15084 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
15085 // even exist on them, let alone have a boolean value.
15086 } else if ( "label" in elem ) {
15087 return elem.disabled === disabled;
15088 }
15089
15090 // Remaining elements are neither :enabled nor :disabled
15091 return false;
15092 };
15093 }
15094
15095 /**
15096 * Returns a function to use in pseudos for positionals
15097 * @param {Function} fn
15098 */
15099 function createPositionalPseudo( fn ) {
15100 return markFunction(function( argument ) {
15101 argument = +argument;
15102 return markFunction(function( seed, matches ) {
15103 var j,
15104 matchIndexes = fn( [], seed.length, argument ),
15105 i = matchIndexes.length;
15106
15107 // Match elements found at the specified indexes
15108 while ( i-- ) {
15109 if ( seed[ (j = matchIndexes[i]) ] ) {
15110 seed[j] = !(matches[j] = seed[j]);
15111 }
15112 }
15113 });
15114 });
15115 }
15116
15117 /**
15118 * Checks a node for validity as a Sizzle context
15119 * @param {Element|Object=} context
15120 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
15121 */
15122 function testContext( context ) {
15123 return context && typeof context.getElementsByTagName !== "undefined" && context;
15124 }
15125
15126 // Expose support vars for convenience
15127 support = Sizzle.support = {};
15128
15129 /**
15130 * Detects XML nodes
15131 * @param {Element|Object} elem An element or a document
15132 * @returns {Boolean} True iff elem is a non-HTML XML node
15133 */
15134 isXML = Sizzle.isXML = function( elem ) {
15135 // documentElement is verified for cases where it doesn't yet exist
15136 // (such as loading iframes in IE - #4833)
15137 var documentElement = elem && (elem.ownerDocument || elem).documentElement;
15138 return documentElement ? documentElement.nodeName !== "HTML" : false;
15139 };
15140
15141 /**
15142 * Sets document-related variables once based on the current document
15143 * @param {Element|Object} [doc] An element or document object to use to set the document
15144 * @returns {Object} Returns the current document
15145 */
15146 setDocument = Sizzle.setDocument = function( node ) {
15147 var hasCompare, subWindow,
15148 doc = node ? node.ownerDocument || node : preferredDoc;
15149
15150 // Return early if doc is invalid or already selected
15151 if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
15152 return document;
15153 }
15154
15155 // Update global variables
15156 document = doc;
15157 docElem = document.documentElement;
15158 documentIsHTML = !isXML( document );
15159
15160 // Support: IE 9-11, Edge
15161 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
15162 if ( preferredDoc !== document &&
15163 (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
15164
15165 // Support: IE 11, Edge
15166 if ( subWindow.addEventListener ) {
15167 subWindow.addEventListener( "unload", unloadHandler, false );
15168
15169 // Support: IE 9 - 10 only
15170 } else if ( subWindow.attachEvent ) {
15171 subWindow.attachEvent( "onunload", unloadHandler );
15172 }
15173 }
15174
15175 /* Attributes
15176 ---------------------------------------------------------------------- */
15177
15178 // Support: IE<8
15179 // Verify that getAttribute really returns attributes and not properties
15180 // (excepting IE8 booleans)
15181 support.attributes = assert(function( el ) {
15182 el.className = "i";
15183 return !el.getAttribute("className");
15184 });
15185
15186 /* getElement(s)By*
15187 ---------------------------------------------------------------------- */
15188
15189 // Check if getElementsByTagName("*") returns only elements
15190 support.getElementsByTagName = assert(function( el ) {
15191 el.appendChild( document.createComment("") );
15192 return !el.getElementsByTagName("*").length;
15193 });
15194
15195 // Support: IE<9
15196 support.getElementsByClassName = rnative.test( document.getElementsByClassName );
15197
15198 // Support: IE<10
15199 // Check if getElementById returns elements by name
15200 // The broken getElementById methods don't pick up programmatically-set names,
15201 // so use a roundabout getElementsByName test
15202 support.getById = assert(function( el ) {
15203 docElem.appendChild( el ).id = expando;
15204 return !document.getElementsByName || !document.getElementsByName( expando ).length;
15205 });
15206
15207 // ID filter and find
15208 if ( support.getById ) {
15209 Expr.filter["ID"] = function( id ) {
15210 var attrId = id.replace( runescape, funescape );
15211 return function( elem ) {
15212 return elem.getAttribute("id") === attrId;
15213 };
15214 };
15215 Expr.find["ID"] = function( id, context ) {
15216 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15217 var elem = context.getElementById( id );
15218 return elem ? [ elem ] : [];
15219 }
15220 };
15221 } else {
15222 Expr.filter["ID"] = function( id ) {
15223 var attrId = id.replace( runescape, funescape );
15224 return function( elem ) {
15225 var node = typeof elem.getAttributeNode !== "undefined" &&
15226 elem.getAttributeNode("id");
15227 return node && node.value === attrId;
15228 };
15229 };
15230
15231 // Support: IE 6 - 7 only
15232 // getElementById is not reliable as a find shortcut
15233 Expr.find["ID"] = function( id, context ) {
15234 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
15235 var node, i, elems,
15236 elem = context.getElementById( id );
15237
15238 if ( elem ) {
15239
15240 // Verify the id attribute
15241 node = elem.getAttributeNode("id");
15242 if ( node && node.value === id ) {
15243 return [ elem ];
15244 }
15245
15246 // Fall back on getElementsByName
15247 elems = context.getElementsByName( id );
15248 i = 0;
15249 while ( (elem = elems[i++]) ) {
15250 node = elem.getAttributeNode("id");
15251 if ( node && node.value === id ) {
15252 return [ elem ];
15253 }
15254 }
15255 }
15256
15257 return [];
15258 }
15259 };
15260 }
15261
15262 // Tag
15263 Expr.find["TAG"] = support.getElementsByTagName ?
15264 function( tag, context ) {
15265 if ( typeof context.getElementsByTagName !== "undefined" ) {
15266 return context.getElementsByTagName( tag );
15267
15268 // DocumentFragment nodes don't have gEBTN
15269 } else if ( support.qsa ) {
15270 return context.querySelectorAll( tag );
15271 }
15272 } :
15273
15274 function( tag, context ) {
15275 var elem,
15276 tmp = [],
15277 i = 0,
15278 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
15279 results = context.getElementsByTagName( tag );
15280
15281 // Filter out possible comments
15282 if ( tag === "*" ) {
15283 while ( (elem = results[i++]) ) {
15284 if ( elem.nodeType === 1 ) {
15285 tmp.push( elem );
15286 }
15287 }
15288
15289 return tmp;
15290 }
15291 return results;
15292 };
15293
15294 // Class
15295 Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
15296 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
15297 return context.getElementsByClassName( className );
15298 }
15299 };
15300
15301 /* QSA/matchesSelector
15302 ---------------------------------------------------------------------- */
15303
15304 // QSA and matchesSelector support
15305
15306 // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
15307 rbuggyMatches = [];
15308
15309 // qSa(:focus) reports false when true (Chrome 21)
15310 // We allow this because of a bug in IE8/9 that throws an error
15311 // whenever `document.activeElement` is accessed on an iframe
15312 // So, we allow :focus to pass through QSA all the time to avoid the IE error
15313 // See https://bugs.jquery.com/ticket/13378
15314 rbuggyQSA = [];
15315
15316 if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
15317 // Build QSA regex
15318 // Regex strategy adopted from Diego Perini
15319 assert(function( el ) {
15320 // Select is set to empty string on purpose
15321 // This is to test IE's treatment of not explicitly
15322 // setting a boolean content attribute,
15323 // since its presence should be enough
15324 // https://bugs.jquery.com/ticket/12359
15325 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
15326 "<select id='" + expando + "-\r\\' msallowcapture=''>" +
15327 "<option selected=''></option></select>";
15328
15329 // Support: IE8, Opera 11-12.16
15330 // Nothing should be selected when empty strings follow ^= or $= or *=
15331 // The test attribute must be unknown in Opera but "safe" for WinRT
15332 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
15333 if ( el.querySelectorAll("[msallowcapture^='']").length ) {
15334 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
15335 }
15336
15337 // Support: IE8
15338 // Boolean attributes and "value" are not treated correctly
15339 if ( !el.querySelectorAll("[selected]").length ) {
15340 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
15341 }
15342
15343 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
15344 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
15345 rbuggyQSA.push("~=");
15346 }
15347
15348 // Webkit/Opera - :checked should return selected option elements
15349 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
15350 // IE8 throws error here and will not see later tests
15351 if ( !el.querySelectorAll(":checked").length ) {
15352 rbuggyQSA.push(":checked");
15353 }
15354
15355 // Support: Safari 8+, iOS 8+
15356 // https://bugs.webkit.org/show_bug.cgi?id=136851
15357 // In-page `selector#id sibling-combinator selector` fails
15358 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
15359 rbuggyQSA.push(".#.+[+~]");
15360 }
15361 });
15362
15363 assert(function( el ) {
15364 el.innerHTML = "<a href='' disabled='disabled'></a>" +
15365 "<select disabled='disabled'><option/></select>";
15366
15367 // Support: Windows 8 Native Apps
15368 // The type and name attributes are restricted during .innerHTML assignment
15369 var input = document.createElement("input");
15370 input.setAttribute( "type", "hidden" );
15371 el.appendChild( input ).setAttribute( "name", "D" );
15372
15373 // Support: IE8
15374 // Enforce case-sensitivity of name attribute
15375 if ( el.querySelectorAll("[name=d]").length ) {
15376 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
15377 }
15378
15379 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
15380 // IE8 throws error here and will not see later tests
15381 if ( el.querySelectorAll(":enabled").length !== 2 ) {
15382 rbuggyQSA.push( ":enabled", ":disabled" );
15383 }
15384
15385 // Support: IE9-11+
15386 // IE's :disabled selector does not pick up the children of disabled fieldsets
15387 docElem.appendChild( el ).disabled = true;
15388 if ( el.querySelectorAll(":disabled").length !== 2 ) {
15389 rbuggyQSA.push( ":enabled", ":disabled" );
15390 }
15391
15392 // Opera 10-11 does not throw on post-comma invalid pseudos
15393 el.querySelectorAll("*,:x");
15394 rbuggyQSA.push(",.*:");
15395 });
15396 }
15397
15398 if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
15399 docElem.webkitMatchesSelector ||
15400 docElem.mozMatchesSelector ||
15401 docElem.oMatchesSelector ||
15402 docElem.msMatchesSelector) )) ) {
15403
15404 assert(function( el ) {
15405 // Check to see if it's possible to do matchesSelector
15406 // on a disconnected node (IE 9)
15407 support.disconnectedMatch = matches.call( el, "*" );
15408
15409 // This should fail with an exception
15410 // Gecko does not error, returns false instead
15411 matches.call( el, "[s!='']:x" );
15412 rbuggyMatches.push( "!=", pseudos );
15413 });
15414 }
15415
15416 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
15417 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
15418
15419 /* Contains
15420 ---------------------------------------------------------------------- */
15421 hasCompare = rnative.test( docElem.compareDocumentPosition );
15422
15423 // Element contains another
15424 // Purposefully self-exclusive
15425 // As in, an element does not contain itself
15426 contains = hasCompare || rnative.test( docElem.contains ) ?
15427 function( a, b ) {
15428 var adown = a.nodeType === 9 ? a.documentElement : a,
15429 bup = b && b.parentNode;
15430 return a === bup || !!( bup && bup.nodeType === 1 && (
15431 adown.contains ?
15432 adown.contains( bup ) :
15433 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
15434 ));
15435 } :
15436 function( a, b ) {
15437 if ( b ) {
15438 while ( (b = b.parentNode) ) {
15439 if ( b === a ) {
15440 return true;
15441 }
15442 }
15443 }
15444 return false;
15445 };
15446
15447 /* Sorting
15448 ---------------------------------------------------------------------- */
15449
15450 // Document order sorting
15451 sortOrder = hasCompare ?
15452 function( a, b ) {
15453
15454 // Flag for duplicate removal
15455 if ( a === b ) {
15456 hasDuplicate = true;
15457 return 0;
15458 }
15459
15460 // Sort on method existence if only one input has compareDocumentPosition
15461 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
15462 if ( compare ) {
15463 return compare;
15464 }
15465
15466 // Calculate position if both inputs belong to the same document
15467 compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
15468 a.compareDocumentPosition( b ) :
15469
15470 // Otherwise we know they are disconnected
15471 1;
15472
15473 // Disconnected nodes
15474 if ( compare & 1 ||
15475 (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
15476
15477 // Choose the first element that is related to our preferred document
15478 if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
15479 return -1;
15480 }
15481 if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
15482 return 1;
15483 }
15484
15485 // Maintain original order
15486 return sortInput ?
15487 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15488 0;
15489 }
15490
15491 return compare & 4 ? -1 : 1;
15492 } :
15493 function( a, b ) {
15494 // Exit early if the nodes are identical
15495 if ( a === b ) {
15496 hasDuplicate = true;
15497 return 0;
15498 }
15499
15500 var cur,
15501 i = 0,
15502 aup = a.parentNode,
15503 bup = b.parentNode,
15504 ap = [ a ],
15505 bp = [ b ];
15506
15507 // Parentless nodes are either documents or disconnected
15508 if ( !aup || !bup ) {
15509 return a === document ? -1 :
15510 b === document ? 1 :
15511 aup ? -1 :
15512 bup ? 1 :
15513 sortInput ?
15514 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
15515 0;
15516
15517 // If the nodes are siblings, we can do a quick check
15518 } else if ( aup === bup ) {
15519 return siblingCheck( a, b );
15520 }
15521
15522 // Otherwise we need full lists of their ancestors for comparison
15523 cur = a;
15524 while ( (cur = cur.parentNode) ) {
15525 ap.unshift( cur );
15526 }
15527 cur = b;
15528 while ( (cur = cur.parentNode) ) {
15529 bp.unshift( cur );
15530 }
15531
15532 // Walk down the tree looking for a discrepancy
15533 while ( ap[i] === bp[i] ) {
15534 i++;
15535 }
15536
15537 return i ?
15538 // Do a sibling check if the nodes have a common ancestor
15539 siblingCheck( ap[i], bp[i] ) :
15540
15541 // Otherwise nodes in our document sort first
15542 ap[i] === preferredDoc ? -1 :
15543 bp[i] === preferredDoc ? 1 :
15544 0;
15545 };
15546
15547 return document;
15548 };
15549
15550 Sizzle.matches = function( expr, elements ) {
15551 return Sizzle( expr, null, null, elements );
15552 };
15553
15554 Sizzle.matchesSelector = function( elem, expr ) {
15555 // Set document vars if needed
15556 if ( ( elem.ownerDocument || elem ) !== document ) {
15557 setDocument( elem );
15558 }
15559
15560 // Make sure that attribute selectors are quoted
15561 expr = expr.replace( rattributeQuotes, "='$1']" );
15562
15563 if ( support.matchesSelector && documentIsHTML &&
15564 !compilerCache[ expr + " " ] &&
15565 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
15566 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
15567
15568 try {
15569 var ret = matches.call( elem, expr );
15570
15571 // IE 9's matchesSelector returns false on disconnected nodes
15572 if ( ret || support.disconnectedMatch ||
15573 // As well, disconnected nodes are said to be in a document
15574 // fragment in IE 9
15575 elem.document && elem.document.nodeType !== 11 ) {
15576 return ret;
15577 }
15578 } catch (e) {}
15579 }
15580
15581 return Sizzle( expr, document, null, [ elem ] ).length > 0;
15582 };
15583
15584 Sizzle.contains = function( context, elem ) {
15585 // Set document vars if needed
15586 if ( ( context.ownerDocument || context ) !== document ) {
15587 setDocument( context );
15588 }
15589 return contains( context, elem );
15590 };
15591
15592 Sizzle.attr = function( elem, name ) {
15593 // Set document vars if needed
15594 if ( ( elem.ownerDocument || elem ) !== document ) {
15595 setDocument( elem );
15596 }
15597
15598 var fn = Expr.attrHandle[ name.toLowerCase() ],
15599 // Don't get fooled by Object.prototype properties (jQuery #13807)
15600 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
15601 fn( elem, name, !documentIsHTML ) :
15602 undefined;
15603
15604 return val !== undefined ?
15605 val :
15606 support.attributes || !documentIsHTML ?
15607 elem.getAttribute( name ) :
15608 (val = elem.getAttributeNode(name)) && val.specified ?
15609 val.value :
15610 null;
15611 };
15612
15613 Sizzle.escape = function( sel ) {
15614 return (sel + "").replace( rcssescape, fcssescape );
15615 };
15616
15617 Sizzle.error = function( msg ) {
15618 throw new Error( "Syntax error, unrecognized expression: " + msg );
15619 };
15620
15621 /**
15622 * Document sorting and removing duplicates
15623 * @param {ArrayLike} results
15624 */
15625 Sizzle.uniqueSort = function( results ) {
15626 var elem,
15627 duplicates = [],
15628 j = 0,
15629 i = 0;
15630
15631 // Unless we *know* we can detect duplicates, assume their presence
15632 hasDuplicate = !support.detectDuplicates;
15633 sortInput = !support.sortStable && results.slice( 0 );
15634 results.sort( sortOrder );
15635
15636 if ( hasDuplicate ) {
15637 while ( (elem = results[i++]) ) {
15638 if ( elem === results[ i ] ) {
15639 j = duplicates.push( i );
15640 }
15641 }
15642 while ( j-- ) {
15643 results.splice( duplicates[ j ], 1 );
15644 }
15645 }
15646
15647 // Clear input after sorting to release objects
15648 // See https://github.com/jquery/sizzle/pull/225
15649 sortInput = null;
15650
15651 return results;
15652 };
15653
15654 /**
15655 * Utility function for retrieving the text value of an array of DOM nodes
15656 * @param {Array|Element} elem
15657 */
15658 getText = Sizzle.getText = function( elem ) {
15659 var node,
15660 ret = "",
15661 i = 0,
15662 nodeType = elem.nodeType;
15663
15664 if ( !nodeType ) {
15665 // If no nodeType, this is expected to be an array
15666 while ( (node = elem[i++]) ) {
15667 // Do not traverse comment nodes
15668 ret += getText( node );
15669 }
15670 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
15671 // Use textContent for elements
15672 // innerText usage removed for consistency of new lines (jQuery #11153)
15673 if ( typeof elem.textContent === "string" ) {
15674 return elem.textContent;
15675 } else {
15676 // Traverse its children
15677 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
15678 ret += getText( elem );
15679 }
15680 }
15681 } else if ( nodeType === 3 || nodeType === 4 ) {
15682 return elem.nodeValue;
15683 }
15684 // Do not include comment or processing instruction nodes
15685
15686 return ret;
15687 };
15688
15689 Expr = Sizzle.selectors = {
15690
15691 // Can be adjusted by the user
15692 cacheLength: 50,
15693
15694 createPseudo: markFunction,
15695
15696 match: matchExpr,
15697
15698 attrHandle: {},
15699
15700 find: {},
15701
15702 relative: {
15703 ">": { dir: "parentNode", first: true },
15704 " ": { dir: "parentNode" },
15705 "+": { dir: "previousSibling", first: true },
15706 "~": { dir: "previousSibling" }
15707 },
15708
15709 preFilter: {
15710 "ATTR": function( match ) {
15711 match[1] = match[1].replace( runescape, funescape );
15712
15713 // Move the given value to match[3] whether quoted or unquoted
15714 match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
15715
15716 if ( match[2] === "~=" ) {
15717 match[3] = " " + match[3] + " ";
15718 }
15719
15720 return match.slice( 0, 4 );
15721 },
15722
15723 "CHILD": function( match ) {
15724 /* matches from matchExpr["CHILD"]
15725 1 type (only|nth|...)
15726 2 what (child|of-type)
15727 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
15728 4 xn-component of xn+y argument ([+-]?\d*n|)
15729 5 sign of xn-component
15730 6 x of xn-component
15731 7 sign of y-component
15732 8 y of y-component
15733 */
15734 match[1] = match[1].toLowerCase();
15735
15736 if ( match[1].slice( 0, 3 ) === "nth" ) {
15737 // nth-* requires argument
15738 if ( !match[3] ) {
15739 Sizzle.error( match[0] );
15740 }
15741
15742 // numeric x and y parameters for Expr.filter.CHILD
15743 // remember that false/true cast respectively to 0/1
15744 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
15745 match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
15746
15747 // other types prohibit arguments
15748 } else if ( match[3] ) {
15749 Sizzle.error( match[0] );
15750 }
15751
15752 return match;
15753 },
15754
15755 "PSEUDO": function( match ) {
15756 var excess,
15757 unquoted = !match[6] && match[2];
15758
15759 if ( matchExpr["CHILD"].test( match[0] ) ) {
15760 return null;
15761 }
15762
15763 // Accept quoted arguments as-is
15764 if ( match[3] ) {
15765 match[2] = match[4] || match[5] || "";
15766
15767 // Strip excess characters from unquoted arguments
15768 } else if ( unquoted && rpseudo.test( unquoted ) &&
15769 // Get excess from tokenize (recursively)
15770 (excess = tokenize( unquoted, true )) &&
15771 // advance to the next closing parenthesis
15772 (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
15773
15774 // excess is a negative index
15775 match[0] = match[0].slice( 0, excess );
15776 match[2] = unquoted.slice( 0, excess );
15777 }
15778
15779 // Return only captures needed by the pseudo filter method (type and argument)
15780 return match.slice( 0, 3 );
15781 }
15782 },
15783
15784 filter: {
15785
15786 "TAG": function( nodeNameSelector ) {
15787 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
15788 return nodeNameSelector === "*" ?
15789 function() { return true; } :
15790 function( elem ) {
15791 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
15792 };
15793 },
15794
15795 "CLASS": function( className ) {
15796 var pattern = classCache[ className + " " ];
15797
15798 return pattern ||
15799 (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
15800 classCache( className, function( elem ) {
15801 return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
15802 });
15803 },
15804
15805 "ATTR": function( name, operator, check ) {
15806 return function( elem ) {
15807 var result = Sizzle.attr( elem, name );
15808
15809 if ( result == null ) {
15810 return operator === "!=";
15811 }
15812 if ( !operator ) {
15813 return true;
15814 }
15815
15816 result += "";
15817
15818 return operator === "=" ? result === check :
15819 operator === "!=" ? result !== check :
15820 operator === "^=" ? check && result.indexOf( check ) === 0 :
15821 operator === "*=" ? check && result.indexOf( check ) > -1 :
15822 operator === "$=" ? check && result.slice( -check.length ) === check :
15823 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
15824 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
15825 false;
15826 };
15827 },
15828
15829 "CHILD": function( type, what, argument, first, last ) {
15830 var simple = type.slice( 0, 3 ) !== "nth",
15831 forward = type.slice( -4 ) !== "last",
15832 ofType = what === "of-type";
15833
15834 return first === 1 && last === 0 ?
15835
15836 // Shortcut for :nth-*(n)
15837 function( elem ) {
15838 return !!elem.parentNode;
15839 } :
15840
15841 function( elem, context, xml ) {
15842 var cache, uniqueCache, outerCache, node, nodeIndex, start,
15843 dir = simple !== forward ? "nextSibling" : "previousSibling",
15844 parent = elem.parentNode,
15845 name = ofType && elem.nodeName.toLowerCase(),
15846 useCache = !xml && !ofType,
15847 diff = false;
15848
15849 if ( parent ) {
15850
15851 // :(first|last|only)-(child|of-type)
15852 if ( simple ) {
15853 while ( dir ) {
15854 node = elem;
15855 while ( (node = node[ dir ]) ) {
15856 if ( ofType ?
15857 node.nodeName.toLowerCase() === name :
15858 node.nodeType === 1 ) {
15859
15860 return false;
15861 }
15862 }
15863 // Reverse direction for :only-* (if we haven't yet done so)
15864 start = dir = type === "only" && !start && "nextSibling";
15865 }
15866 return true;
15867 }
15868
15869 start = [ forward ? parent.firstChild : parent.lastChild ];
15870
15871 // non-xml :nth-child(...) stores cache data on `parent`
15872 if ( forward && useCache ) {
15873
15874 // Seek `elem` from a previously-cached index
15875
15876 // ...in a gzip-friendly way
15877 node = parent;
15878 outerCache = node[ expando ] || (node[ expando ] = {});
15879
15880 // Support: IE <9 only
15881 // Defend against cloned attroperties (jQuery gh-1709)
15882 uniqueCache = outerCache[ node.uniqueID ] ||
15883 (outerCache[ node.uniqueID ] = {});
15884
15885 cache = uniqueCache[ type ] || [];
15886 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15887 diff = nodeIndex && cache[ 2 ];
15888 node = nodeIndex && parent.childNodes[ nodeIndex ];
15889
15890 while ( (node = ++nodeIndex && node && node[ dir ] ||
15891
15892 // Fallback to seeking `elem` from the start
15893 (diff = nodeIndex = 0) || start.pop()) ) {
15894
15895 // When found, cache indexes on `parent` and break
15896 if ( node.nodeType === 1 && ++diff && node === elem ) {
15897 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
15898 break;
15899 }
15900 }
15901
15902 } else {
15903 // Use previously-cached element index if available
15904 if ( useCache ) {
15905 // ...in a gzip-friendly way
15906 node = elem;
15907 outerCache = node[ expando ] || (node[ expando ] = {});
15908
15909 // Support: IE <9 only
15910 // Defend against cloned attroperties (jQuery gh-1709)
15911 uniqueCache = outerCache[ node.uniqueID ] ||
15912 (outerCache[ node.uniqueID ] = {});
15913
15914 cache = uniqueCache[ type ] || [];
15915 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
15916 diff = nodeIndex;
15917 }
15918
15919 // xml :nth-child(...)
15920 // or :nth-last-child(...) or :nth(-last)?-of-type(...)
15921 if ( diff === false ) {
15922 // Use the same loop as above to seek `elem` from the start
15923 while ( (node = ++nodeIndex && node && node[ dir ] ||
15924 (diff = nodeIndex = 0) || start.pop()) ) {
15925
15926 if ( ( ofType ?
15927 node.nodeName.toLowerCase() === name :
15928 node.nodeType === 1 ) &&
15929 ++diff ) {
15930
15931 // Cache the index of each encountered element
15932 if ( useCache ) {
15933 outerCache = node[ expando ] || (node[ expando ] = {});
15934
15935 // Support: IE <9 only
15936 // Defend against cloned attroperties (jQuery gh-1709)
15937 uniqueCache = outerCache[ node.uniqueID ] ||
15938 (outerCache[ node.uniqueID ] = {});
15939
15940 uniqueCache[ type ] = [ dirruns, diff ];
15941 }
15942
15943 if ( node === elem ) {
15944 break;
15945 }
15946 }
15947 }
15948 }
15949 }
15950
15951 // Incorporate the offset, then check against cycle size
15952 diff -= last;
15953 return diff === first || ( diff % first === 0 && diff / first >= 0 );
15954 }
15955 };
15956 },
15957
15958 "PSEUDO": function( pseudo, argument ) {
15959 // pseudo-class names are case-insensitive
15960 // http://www.w3.org/TR/selectors/#pseudo-classes
15961 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
15962 // Remember that setFilters inherits from pseudos
15963 var args,
15964 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
15965 Sizzle.error( "unsupported pseudo: " + pseudo );
15966
15967 // The user may use createPseudo to indicate that
15968 // arguments are needed to create the filter function
15969 // just as Sizzle does
15970 if ( fn[ expando ] ) {
15971 return fn( argument );
15972 }
15973
15974 // But maintain support for old signatures
15975 if ( fn.length > 1 ) {
15976 args = [ pseudo, pseudo, "", argument ];
15977 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
15978 markFunction(function( seed, matches ) {
15979 var idx,
15980 matched = fn( seed, argument ),
15981 i = matched.length;
15982 while ( i-- ) {
15983 idx = indexOf( seed, matched[i] );
15984 seed[ idx ] = !( matches[ idx ] = matched[i] );
15985 }
15986 }) :
15987 function( elem ) {
15988 return fn( elem, 0, args );
15989 };
15990 }
15991
15992 return fn;
15993 }
15994 },
15995
15996 pseudos: {
15997 // Potentially complex pseudos
15998 "not": markFunction(function( selector ) {
15999 // Trim the selector passed to compile
16000 // to avoid treating leading and trailing
16001 // spaces as combinators
16002 var input = [],
16003 results = [],
16004 matcher = compile( selector.replace( rtrim, "$1" ) );
16005
16006 return matcher[ expando ] ?
16007 markFunction(function( seed, matches, context, xml ) {
16008 var elem,
16009 unmatched = matcher( seed, null, xml, [] ),
16010 i = seed.length;
16011
16012 // Match elements unmatched by `matcher`
16013 while ( i-- ) {
16014 if ( (elem = unmatched[i]) ) {
16015 seed[i] = !(matches[i] = elem);
16016 }
16017 }
16018 }) :
16019 function( elem, context, xml ) {
16020 input[0] = elem;
16021 matcher( input, null, xml, results );
16022 // Don't keep the element (issue #299)
16023 input[0] = null;
16024 return !results.pop();
16025 };
16026 }),
16027
16028 "has": markFunction(function( selector ) {
16029 return function( elem ) {
16030 return Sizzle( selector, elem ).length > 0;
16031 };
16032 }),
16033
16034 "contains": markFunction(function( text ) {
16035 text = text.replace( runescape, funescape );
16036 return function( elem ) {
16037 return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
16038 };
16039 }),
16040
16041 // "Whether an element is represented by a :lang() selector
16042 // is based solely on the element's language value
16043 // being equal to the identifier C,
16044 // or beginning with the identifier C immediately followed by "-".
16045 // The matching of C against the element's language value is performed case-insensitively.
16046 // The identifier C does not have to be a valid language name."
16047 // http://www.w3.org/TR/selectors/#lang-pseudo
16048 "lang": markFunction( function( lang ) {
16049 // lang value must be a valid identifier
16050 if ( !ridentifier.test(lang || "") ) {
16051 Sizzle.error( "unsupported lang: " + lang );
16052 }
16053 lang = lang.replace( runescape, funescape ).toLowerCase();
16054 return function( elem ) {
16055 var elemLang;
16056 do {
16057 if ( (elemLang = documentIsHTML ?
16058 elem.lang :
16059 elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
16060
16061 elemLang = elemLang.toLowerCase();
16062 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
16063 }
16064 } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
16065 return false;
16066 };
16067 }),
16068
16069 // Miscellaneous
16070 "target": function( elem ) {
16071 var hash = window.location && window.location.hash;
16072 return hash && hash.slice( 1 ) === elem.id;
16073 },
16074
16075 "root": function( elem ) {
16076 return elem === docElem;
16077 },
16078
16079 "focus": function( elem ) {
16080 return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
16081 },
16082
16083 // Boolean properties
16084 "enabled": createDisabledPseudo( false ),
16085 "disabled": createDisabledPseudo( true ),
16086
16087 "checked": function( elem ) {
16088 // In CSS3, :checked should return both checked and selected elements
16089 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
16090 var nodeName = elem.nodeName.toLowerCase();
16091 return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
16092 },
16093
16094 "selected": function( elem ) {
16095 // Accessing this property makes selected-by-default
16096 // options in Safari work properly
16097 if ( elem.parentNode ) {
16098 elem.parentNode.selectedIndex;
16099 }
16100
16101 return elem.selected === true;
16102 },
16103
16104 // Contents
16105 "empty": function( elem ) {
16106 // http://www.w3.org/TR/selectors/#empty-pseudo
16107 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
16108 // but not by others (comment: 8; processing instruction: 7; etc.)
16109 // nodeType < 6 works because attributes (2) do not appear as children
16110 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
16111 if ( elem.nodeType < 6 ) {
16112 return false;
16113 }
16114 }
16115 return true;
16116 },
16117
16118 "parent": function( elem ) {
16119 return !Expr.pseudos["empty"]( elem );
16120 },
16121
16122 // Element/input types
16123 "header": function( elem ) {
16124 return rheader.test( elem.nodeName );
16125 },
16126
16127 "input": function( elem ) {
16128 return rinputs.test( elem.nodeName );
16129 },
16130
16131 "button": function( elem ) {
16132 var name = elem.nodeName.toLowerCase();
16133 return name === "input" && elem.type === "button" || name === "button";
16134 },
16135
16136 "text": function( elem ) {
16137 var attr;
16138 return elem.nodeName.toLowerCase() === "input" &&
16139 elem.type === "text" &&
16140
16141 // Support: IE<8
16142 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
16143 ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
16144 },
16145
16146 // Position-in-collection
16147 "first": createPositionalPseudo(function() {
16148 return [ 0 ];
16149 }),
16150
16151 "last": createPositionalPseudo(function( matchIndexes, length ) {
16152 return [ length - 1 ];
16153 }),
16154
16155 "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
16156 return [ argument < 0 ? argument + length : argument ];
16157 }),
16158
16159 "even": createPositionalPseudo(function( matchIndexes, length ) {
16160 var i = 0;
16161 for ( ; i < length; i += 2 ) {
16162 matchIndexes.push( i );
16163 }
16164 return matchIndexes;
16165 }),
16166
16167 "odd": createPositionalPseudo(function( matchIndexes, length ) {
16168 var i = 1;
16169 for ( ; i < length; i += 2 ) {
16170 matchIndexes.push( i );
16171 }
16172 return matchIndexes;
16173 }),
16174
16175 "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16176 var i = argument < 0 ? argument + length : argument;
16177 for ( ; --i >= 0; ) {
16178 matchIndexes.push( i );
16179 }
16180 return matchIndexes;
16181 }),
16182
16183 "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
16184 var i = argument < 0 ? argument + length : argument;
16185 for ( ; ++i < length; ) {
16186 matchIndexes.push( i );
16187 }
16188 return matchIndexes;
16189 })
16190 }
16191 };
16192
16193 Expr.pseudos["nth"] = Expr.pseudos["eq"];
16194
16195 // Add button/input type pseudos
16196 for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
16197 Expr.pseudos[ i ] = createInputPseudo( i );
16198 }
16199 for ( i in { submit: true, reset: true } ) {
16200 Expr.pseudos[ i ] = createButtonPseudo( i );
16201 }
16202
16203 // Easy API for creating new setFilters
16204 function setFilters() {}
16205 setFilters.prototype = Expr.filters = Expr.pseudos;
16206 Expr.setFilters = new setFilters();
16207
16208 tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
16209 var matched, match, tokens, type,
16210 soFar, groups, preFilters,
16211 cached = tokenCache[ selector + " " ];
16212
16213 if ( cached ) {
16214 return parseOnly ? 0 : cached.slice( 0 );
16215 }
16216
16217 soFar = selector;
16218 groups = [];
16219 preFilters = Expr.preFilter;
16220
16221 while ( soFar ) {
16222
16223 // Comma and first run
16224 if ( !matched || (match = rcomma.exec( soFar )) ) {
16225 if ( match ) {
16226 // Don't consume trailing commas as valid
16227 soFar = soFar.slice( match[0].length ) || soFar;
16228 }
16229 groups.push( (tokens = []) );
16230 }
16231
16232 matched = false;
16233
16234 // Combinators
16235 if ( (match = rcombinators.exec( soFar )) ) {
16236 matched = match.shift();
16237 tokens.push({
16238 value: matched,
16239 // Cast descendant combinators to space
16240 type: match[0].replace( rtrim, " " )
16241 });
16242 soFar = soFar.slice( matched.length );
16243 }
16244
16245 // Filters
16246 for ( type in Expr.filter ) {
16247 if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
16248 (match = preFilters[ type ]( match ))) ) {
16249 matched = match.shift();
16250 tokens.push({
16251 value: matched,
16252 type: type,
16253 matches: match
16254 });
16255 soFar = soFar.slice( matched.length );
16256 }
16257 }
16258
16259 if ( !matched ) {
16260 break;
16261 }
16262 }
16263
16264 // Return the length of the invalid excess
16265 // if we're just parsing
16266 // Otherwise, throw an error or return tokens
16267 return parseOnly ?
16268 soFar.length :
16269 soFar ?
16270 Sizzle.error( selector ) :
16271 // Cache the tokens
16272 tokenCache( selector, groups ).slice( 0 );
16273 };
16274
16275 function toSelector( tokens ) {
16276 var i = 0,
16277 len = tokens.length,
16278 selector = "";
16279 for ( ; i < len; i++ ) {
16280 selector += tokens[i].value;
16281 }
16282 return selector;
16283 }
16284
16285 function addCombinator( matcher, combinator, base ) {
16286 var dir = combinator.dir,
16287 skip = combinator.next,
16288 key = skip || dir,
16289 checkNonElements = base && key === "parentNode",
16290 doneName = done++;
16291
16292 return combinator.first ?
16293 // Check against closest ancestor/preceding element
16294 function( elem, context, xml ) {
16295 while ( (elem = elem[ dir ]) ) {
16296 if ( elem.nodeType === 1 || checkNonElements ) {
16297 return matcher( elem, context, xml );
16298 }
16299 }
16300 return false;
16301 } :
16302
16303 // Check against all ancestor/preceding elements
16304 function( elem, context, xml ) {
16305 var oldCache, uniqueCache, outerCache,
16306 newCache = [ dirruns, doneName ];
16307
16308 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
16309 if ( xml ) {
16310 while ( (elem = elem[ dir ]) ) {
16311 if ( elem.nodeType === 1 || checkNonElements ) {
16312 if ( matcher( elem, context, xml ) ) {
16313 return true;
16314 }
16315 }
16316 }
16317 } else {
16318 while ( (elem = elem[ dir ]) ) {
16319 if ( elem.nodeType === 1 || checkNonElements ) {
16320 outerCache = elem[ expando ] || (elem[ expando ] = {});
16321
16322 // Support: IE <9 only
16323 // Defend against cloned attroperties (jQuery gh-1709)
16324 uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
16325
16326 if ( skip && skip === elem.nodeName.toLowerCase() ) {
16327 elem = elem[ dir ] || elem;
16328 } else if ( (oldCache = uniqueCache[ key ]) &&
16329 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
16330
16331 // Assign to newCache so results back-propagate to previous elements
16332 return (newCache[ 2 ] = oldCache[ 2 ]);
16333 } else {
16334 // Reuse newcache so results back-propagate to previous elements
16335 uniqueCache[ key ] = newCache;
16336
16337 // A match means we're done; a fail means we have to keep checking
16338 if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
16339 return true;
16340 }
16341 }
16342 }
16343 }
16344 }
16345 return false;
16346 };
16347 }
16348
16349 function elementMatcher( matchers ) {
16350 return matchers.length > 1 ?
16351 function( elem, context, xml ) {
16352 var i = matchers.length;
16353 while ( i-- ) {
16354 if ( !matchers[i]( elem, context, xml ) ) {
16355 return false;
16356 }
16357 }
16358 return true;
16359 } :
16360 matchers[0];
16361 }
16362
16363 function multipleContexts( selector, contexts, results ) {
16364 var i = 0,
16365 len = contexts.length;
16366 for ( ; i < len; i++ ) {
16367 Sizzle( selector, contexts[i], results );
16368 }
16369 return results;
16370 }
16371
16372 function condense( unmatched, map, filter, context, xml ) {
16373 var elem,
16374 newUnmatched = [],
16375 i = 0,
16376 len = unmatched.length,
16377 mapped = map != null;
16378
16379 for ( ; i < len; i++ ) {
16380 if ( (elem = unmatched[i]) ) {
16381 if ( !filter || filter( elem, context, xml ) ) {
16382 newUnmatched.push( elem );
16383 if ( mapped ) {
16384 map.push( i );
16385 }
16386 }
16387 }
16388 }
16389
16390 return newUnmatched;
16391 }
16392
16393 function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
16394 if ( postFilter && !postFilter[ expando ] ) {
16395 postFilter = setMatcher( postFilter );
16396 }
16397 if ( postFinder && !postFinder[ expando ] ) {
16398 postFinder = setMatcher( postFinder, postSelector );
16399 }
16400 return markFunction(function( seed, results, context, xml ) {
16401 var temp, i, elem,
16402 preMap = [],
16403 postMap = [],
16404 preexisting = results.length,
16405
16406 // Get initial elements from seed or context
16407 elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
16408
16409 // Prefilter to get matcher input, preserving a map for seed-results synchronization
16410 matcherIn = preFilter && ( seed || !selector ) ?
16411 condense( elems, preMap, preFilter, context, xml ) :
16412 elems,
16413
16414 matcherOut = matcher ?
16415 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
16416 postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
16417
16418 // ...intermediate processing is necessary
16419 [] :
16420
16421 // ...otherwise use results directly
16422 results :
16423 matcherIn;
16424
16425 // Find primary matches
16426 if ( matcher ) {
16427 matcher( matcherIn, matcherOut, context, xml );
16428 }
16429
16430 // Apply postFilter
16431 if ( postFilter ) {
16432 temp = condense( matcherOut, postMap );
16433 postFilter( temp, [], context, xml );
16434
16435 // Un-match failing elements by moving them back to matcherIn
16436 i = temp.length;
16437 while ( i-- ) {
16438 if ( (elem = temp[i]) ) {
16439 matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
16440 }
16441 }
16442 }
16443
16444 if ( seed ) {
16445 if ( postFinder || preFilter ) {
16446 if ( postFinder ) {
16447 // Get the final matcherOut by condensing this intermediate into postFinder contexts
16448 temp = [];
16449 i = matcherOut.length;
16450 while ( i-- ) {
16451 if ( (elem = matcherOut[i]) ) {
16452 // Restore matcherIn since elem is not yet a final match
16453 temp.push( (matcherIn[i] = elem) );
16454 }
16455 }
16456 postFinder( null, (matcherOut = []), temp, xml );
16457 }
16458
16459 // Move matched elements from seed to results to keep them synchronized
16460 i = matcherOut.length;
16461 while ( i-- ) {
16462 if ( (elem = matcherOut[i]) &&
16463 (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
16464
16465 seed[temp] = !(results[temp] = elem);
16466 }
16467 }
16468 }
16469
16470 // Add elements to results, through postFinder if defined
16471 } else {
16472 matcherOut = condense(
16473 matcherOut === results ?
16474 matcherOut.splice( preexisting, matcherOut.length ) :
16475 matcherOut
16476 );
16477 if ( postFinder ) {
16478 postFinder( null, results, matcherOut, xml );
16479 } else {
16480 push.apply( results, matcherOut );
16481 }
16482 }
16483 });
16484 }
16485
16486 function matcherFromTokens( tokens ) {
16487 var checkContext, matcher, j,
16488 len = tokens.length,
16489 leadingRelative = Expr.relative[ tokens[0].type ],
16490 implicitRelative = leadingRelative || Expr.relative[" "],
16491 i = leadingRelative ? 1 : 0,
16492
16493 // The foundational matcher ensures that elements are reachable from top-level context(s)
16494 matchContext = addCombinator( function( elem ) {
16495 return elem === checkContext;
16496 }, implicitRelative, true ),
16497 matchAnyContext = addCombinator( function( elem ) {
16498 return indexOf( checkContext, elem ) > -1;
16499 }, implicitRelative, true ),
16500 matchers = [ function( elem, context, xml ) {
16501 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
16502 (checkContext = context).nodeType ?
16503 matchContext( elem, context, xml ) :
16504 matchAnyContext( elem, context, xml ) );
16505 // Avoid hanging onto element (issue #299)
16506 checkContext = null;
16507 return ret;
16508 } ];
16509
16510 for ( ; i < len; i++ ) {
16511 if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
16512 matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
16513 } else {
16514 matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
16515
16516 // Return special upon seeing a positional matcher
16517 if ( matcher[ expando ] ) {
16518 // Find the next relative operator (if any) for proper handling
16519 j = ++i;
16520 for ( ; j < len; j++ ) {
16521 if ( Expr.relative[ tokens[j].type ] ) {
16522 break;
16523 }
16524 }
16525 return setMatcher(
16526 i > 1 && elementMatcher( matchers ),
16527 i > 1 && toSelector(
16528 // If the preceding token was a descendant combinator, insert an implicit any-element `*`
16529 tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
16530 ).replace( rtrim, "$1" ),
16531 matcher,
16532 i < j && matcherFromTokens( tokens.slice( i, j ) ),
16533 j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
16534 j < len && toSelector( tokens )
16535 );
16536 }
16537 matchers.push( matcher );
16538 }
16539 }
16540
16541 return elementMatcher( matchers );
16542 }
16543
16544 function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
16545 var bySet = setMatchers.length > 0,
16546 byElement = elementMatchers.length > 0,
16547 superMatcher = function( seed, context, xml, results, outermost ) {
16548 var elem, j, matcher,
16549 matchedCount = 0,
16550 i = "0",
16551 unmatched = seed && [],
16552 setMatched = [],
16553 contextBackup = outermostContext,
16554 // We must always have either seed elements or outermost context
16555 elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
16556 // Use integer dirruns iff this is the outermost matcher
16557 dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
16558 len = elems.length;
16559
16560 if ( outermost ) {
16561 outermostContext = context === document || context || outermost;
16562 }
16563
16564 // Add elements passing elementMatchers directly to results
16565 // Support: IE<9, Safari
16566 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
16567 for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
16568 if ( byElement && elem ) {
16569 j = 0;
16570 if ( !context && elem.ownerDocument !== document ) {
16571 setDocument( elem );
16572 xml = !documentIsHTML;
16573 }
16574 while ( (matcher = elementMatchers[j++]) ) {
16575 if ( matcher( elem, context || document, xml) ) {
16576 results.push( elem );
16577 break;
16578 }
16579 }
16580 if ( outermost ) {
16581 dirruns = dirrunsUnique;
16582 }
16583 }
16584
16585 // Track unmatched elements for set filters
16586 if ( bySet ) {
16587 // They will have gone through all possible matchers
16588 if ( (elem = !matcher && elem) ) {
16589 matchedCount--;
16590 }
16591
16592 // Lengthen the array for every element, matched or not
16593 if ( seed ) {
16594 unmatched.push( elem );
16595 }
16596 }
16597 }
16598
16599 // `i` is now the count of elements visited above, and adding it to `matchedCount`
16600 // makes the latter nonnegative.
16601 matchedCount += i;
16602
16603 // Apply set filters to unmatched elements
16604 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
16605 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
16606 // no element matchers and no seed.
16607 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
16608 // case, which will result in a "00" `matchedCount` that differs from `i` but is also
16609 // numerically zero.
16610 if ( bySet && i !== matchedCount ) {
16611 j = 0;
16612 while ( (matcher = setMatchers[j++]) ) {
16613 matcher( unmatched, setMatched, context, xml );
16614 }
16615
16616 if ( seed ) {
16617 // Reintegrate element matches to eliminate the need for sorting
16618 if ( matchedCount > 0 ) {
16619 while ( i-- ) {
16620 if ( !(unmatched[i] || setMatched[i]) ) {
16621 setMatched[i] = pop.call( results );
16622 }
16623 }
16624 }
16625
16626 // Discard index placeholder values to get only actual matches
16627 setMatched = condense( setMatched );
16628 }
16629
16630 // Add matches to results
16631 push.apply( results, setMatched );
16632
16633 // Seedless set matches succeeding multiple successful matchers stipulate sorting
16634 if ( outermost && !seed && setMatched.length > 0 &&
16635 ( matchedCount + setMatchers.length ) > 1 ) {
16636
16637 Sizzle.uniqueSort( results );
16638 }
16639 }
16640
16641 // Override manipulation of globals by nested matchers
16642 if ( outermost ) {
16643 dirruns = dirrunsUnique;
16644 outermostContext = contextBackup;
16645 }
16646
16647 return unmatched;
16648 };
16649
16650 return bySet ?
16651 markFunction( superMatcher ) :
16652 superMatcher;
16653 }
16654
16655 compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
16656 var i,
16657 setMatchers = [],
16658 elementMatchers = [],
16659 cached = compilerCache[ selector + " " ];
16660
16661 if ( !cached ) {
16662 // Generate a function of recursive functions that can be used to check each element
16663 if ( !match ) {
16664 match = tokenize( selector );
16665 }
16666 i = match.length;
16667 while ( i-- ) {
16668 cached = matcherFromTokens( match[i] );
16669 if ( cached[ expando ] ) {
16670 setMatchers.push( cached );
16671 } else {
16672 elementMatchers.push( cached );
16673 }
16674 }
16675
16676 // Cache the compiled function
16677 cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
16678
16679 // Save selector and tokenization
16680 cached.selector = selector;
16681 }
16682 return cached;
16683 };
16684
16685 /**
16686 * A low-level selection function that works with Sizzle's compiled
16687 * selector functions
16688 * @param {String|Function} selector A selector or a pre-compiled
16689 * selector function built with Sizzle.compile
16690 * @param {Element} context
16691 * @param {Array} [results]
16692 * @param {Array} [seed] A set of elements to match against
16693 */
16694 select = Sizzle.select = function( selector, context, results, seed ) {
16695 var i, tokens, token, type, find,
16696 compiled = typeof selector === "function" && selector,
16697 match = !seed && tokenize( (selector = compiled.selector || selector) );
16698
16699 results = results || [];
16700
16701 // Try to minimize operations if there is only one selector in the list and no seed
16702 // (the latter of which guarantees us context)
16703 if ( match.length === 1 ) {
16704
16705 // Reduce context if the leading compound selector is an ID
16706 tokens = match[0] = match[0].slice( 0 );
16707 if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
16708 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
16709
16710 context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
16711 if ( !context ) {
16712 return results;
16713
16714 // Precompiled matchers will still verify ancestry, so step up a level
16715 } else if ( compiled ) {
16716 context = context.parentNode;
16717 }
16718
16719 selector = selector.slice( tokens.shift().value.length );
16720 }
16721
16722 // Fetch a seed set for right-to-left matching
16723 i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
16724 while ( i-- ) {
16725 token = tokens[i];
16726
16727 // Abort if we hit a combinator
16728 if ( Expr.relative[ (type = token.type) ] ) {
16729 break;
16730 }
16731 if ( (find = Expr.find[ type ]) ) {
16732 // Search, expanding context for leading sibling combinators
16733 if ( (seed = find(
16734 token.matches[0].replace( runescape, funescape ),
16735 rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
16736 )) ) {
16737
16738 // If seed is empty or no tokens remain, we can return early
16739 tokens.splice( i, 1 );
16740 selector = seed.length && toSelector( tokens );
16741 if ( !selector ) {
16742 push.apply( results, seed );
16743 return results;
16744 }
16745
16746 break;
16747 }
16748 }
16749 }
16750 }
16751
16752 // Compile and execute a filtering function if one is not provided
16753 // Provide `match` to avoid retokenization if we modified the selector above
16754 ( compiled || compile( selector, match ) )(
16755 seed,
16756 context,
16757 !documentIsHTML,
16758 results,
16759 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
16760 );
16761 return results;
16762 };
16763
16764 // One-time assignments
16765
16766 // Sort stability
16767 support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
16768
16769 // Support: Chrome 14-35+
16770 // Always assume duplicates if they aren't passed to the comparison function
16771 support.detectDuplicates = !!hasDuplicate;
16772
16773 // Initialize against the default document
16774 setDocument();
16775
16776 // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
16777 // Detached nodes confoundingly follow *each other*
16778 support.sortDetached = assert(function( el ) {
16779 // Should return 1, but returns 4 (following)
16780 return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
16781 });
16782
16783 // Support: IE<8
16784 // Prevent attribute/property "interpolation"
16785 // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
16786 if ( !assert(function( el ) {
16787 el.innerHTML = "<a href='#'></a>";
16788 return el.firstChild.getAttribute("href") === "#" ;
16789 }) ) {
16790 addHandle( "type|href|height|width", function( elem, name, isXML ) {
16791 if ( !isXML ) {
16792 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
16793 }
16794 });
16795 }
16796
16797 // Support: IE<9
16798 // Use defaultValue in place of getAttribute("value")
16799 if ( !support.attributes || !assert(function( el ) {
16800 el.innerHTML = "<input/>";
16801 el.firstChild.setAttribute( "value", "" );
16802 return el.firstChild.getAttribute( "value" ) === "";
16803 }) ) {
16804 addHandle( "value", function( elem, name, isXML ) {
16805 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
16806 return elem.defaultValue;
16807 }
16808 });
16809 }
16810
16811 // Support: IE<9
16812 // Use getAttributeNode to fetch booleans when getAttribute lies
16813 if ( !assert(function( el ) {
16814 return el.getAttribute("disabled") == null;
16815 }) ) {
16816 addHandle( booleans, function( elem, name, isXML ) {
16817 var val;
16818 if ( !isXML ) {
16819 return elem[ name ] === true ? name.toLowerCase() :
16820 (val = elem.getAttributeNode( name )) && val.specified ?
16821 val.value :
16822 null;
16823 }
16824 });
16825 }
16826
16827 return Sizzle;
16828
16829 })( window );
16830
16831
16832
16833 jQuery.find = Sizzle;
16834 jQuery.expr = Sizzle.selectors;
16835
16836 // Deprecated
16837 jQuery.expr[ ":" ] = jQuery.expr.pseudos;
16838 jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
16839 jQuery.text = Sizzle.getText;
16840 jQuery.isXMLDoc = Sizzle.isXML;
16841 jQuery.contains = Sizzle.contains;
16842 jQuery.escapeSelector = Sizzle.escape;
16843
16844
16845
16846
16847 var dir = function( elem, dir, until ) {
16848 var matched = [],
16849 truncate = until !== undefined;
16850
16851 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
16852 if ( elem.nodeType === 1 ) {
16853 if ( truncate && jQuery( elem ).is( until ) ) {
16854 break;
16855 }
16856 matched.push( elem );
16857 }
16858 }
16859 return matched;
16860 };
16861
16862
16863 var siblings = function( n, elem ) {
16864 var matched = [];
16865
16866 for ( ; n; n = n.nextSibling ) {
16867 if ( n.nodeType === 1 && n !== elem ) {
16868 matched.push( n );
16869 }
16870 }
16871
16872 return matched;
16873 };
16874
16875
16876 var rneedsContext = jQuery.expr.match.needsContext;
16877
16878
16879
16880 function nodeName( elem, name ) {
16881
16882 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
16883
16884 };
16885 var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
16886
16887
16888
16889 var risSimple = /^.[^:#\[\.,]*$/;
16890
16891 // Implement the identical functionality for filter and not
16892 function winnow( elements, qualifier, not ) {
16893 if ( jQuery.isFunction( qualifier ) ) {
16894 return jQuery.grep( elements, function( elem, i ) {
16895 return !!qualifier.call( elem, i, elem ) !== not;
16896 } );
16897 }
16898
16899 // Single element
16900 if ( qualifier.nodeType ) {
16901 return jQuery.grep( elements, function( elem ) {
16902 return ( elem === qualifier ) !== not;
16903 } );
16904 }
16905
16906 // Arraylike of elements (jQuery, arguments, Array)
16907 if ( typeof qualifier !== "string" ) {
16908 return jQuery.grep( elements, function( elem ) {
16909 return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
16910 } );
16911 }
16912
16913 // Simple selector that can be filtered directly, removing non-Elements
16914 if ( risSimple.test( qualifier ) ) {
16915 return jQuery.filter( qualifier, elements, not );
16916 }
16917
16918 // Complex selector, compare the two sets, removing non-Elements
16919 qualifier = jQuery.filter( qualifier, elements );
16920 return jQuery.grep( elements, function( elem ) {
16921 return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
16922 } );
16923 }
16924
16925 jQuery.filter = function( expr, elems, not ) {
16926 var elem = elems[ 0 ];
16927
16928 if ( not ) {
16929 expr = ":not(" + expr + ")";
16930 }
16931
16932 if ( elems.length === 1 && elem.nodeType === 1 ) {
16933 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
16934 }
16935
16936 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
16937 return elem.nodeType === 1;
16938 } ) );
16939 };
16940
16941 jQuery.fn.extend( {
16942 find: function( selector ) {
16943 var i, ret,
16944 len = this.length,
16945 self = this;
16946
16947 if ( typeof selector !== "string" ) {
16948 return this.pushStack( jQuery( selector ).filter( function() {
16949 for ( i = 0; i < len; i++ ) {
16950 if ( jQuery.contains( self[ i ], this ) ) {
16951 return true;
16952 }
16953 }
16954 } ) );
16955 }
16956
16957 ret = this.pushStack( [] );
16958
16959 for ( i = 0; i < len; i++ ) {
16960 jQuery.find( selector, self[ i ], ret );
16961 }
16962
16963 return len > 1 ? jQuery.uniqueSort( ret ) : ret;
16964 },
16965 filter: function( selector ) {
16966 return this.pushStack( winnow( this, selector || [], false ) );
16967 },
16968 not: function( selector ) {
16969 return this.pushStack( winnow( this, selector || [], true ) );
16970 },
16971 is: function( selector ) {
16972 return !!winnow(
16973 this,
16974
16975 // If this is a positional/relative selector, check membership in the returned set
16976 // so $("p:first").is("p:last") won't return true for a doc with two "p".
16977 typeof selector === "string" && rneedsContext.test( selector ) ?
16978 jQuery( selector ) :
16979 selector || [],
16980 false
16981 ).length;
16982 }
16983 } );
16984
16985
16986 // Initialize a jQuery object
16987
16988
16989 // A central reference to the root jQuery(document)
16990 var rootjQuery,
16991
16992 // A simple way to check for HTML strings
16993 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
16994 // Strict HTML recognition (#11290: must start with <)
16995 // Shortcut simple #id case for speed
16996 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
16997
16998 init = jQuery.fn.init = function( selector, context, root ) {
16999 var match, elem;
17000
17001 // HANDLE: $(""), $(null), $(undefined), $(false)
17002 if ( !selector ) {
17003 return this;
17004 }
17005
17006 // Method init() accepts an alternate rootjQuery
17007 // so migrate can support jQuery.sub (gh-2101)
17008 root = root || rootjQuery;
17009
17010 // Handle HTML strings
17011 if ( typeof selector === "string" ) {
17012 if ( selector[ 0 ] === "<" &&
17013 selector[ selector.length - 1 ] === ">" &&
17014 selector.length >= 3 ) {
17015
17016 // Assume that strings that start and end with <> are HTML and skip the regex check
17017 match = [ null, selector, null ];
17018
17019 } else {
17020 match = rquickExpr.exec( selector );
17021 }
17022
17023 // Match html or make sure no context is specified for #id
17024 if ( match && ( match[ 1 ] || !context ) ) {
17025
17026 // HANDLE: $(html) -> $(array)
17027 if ( match[ 1 ] ) {
17028 context = context instanceof jQuery ? context[ 0 ] : context;
17029
17030 // Option to run scripts is true for back-compat
17031 // Intentionally let the error be thrown if parseHTML is not present
17032 jQuery.merge( this, jQuery.parseHTML(
17033 match[ 1 ],
17034 context && context.nodeType ? context.ownerDocument || context : document,
17035 true
17036 ) );
17037
17038 // HANDLE: $(html, props)
17039 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
17040 for ( match in context ) {
17041
17042 // Properties of context are called as methods if possible
17043 if ( jQuery.isFunction( this[ match ] ) ) {
17044 this[ match ]( context[ match ] );
17045
17046 // ...and otherwise set as attributes
17047 } else {
17048 this.attr( match, context[ match ] );
17049 }
17050 }
17051 }
17052
17053 return this;
17054
17055 // HANDLE: $(#id)
17056 } else {
17057 elem = document.getElementById( match[ 2 ] );
17058
17059 if ( elem ) {
17060
17061 // Inject the element directly into the jQuery object
17062 this[ 0 ] = elem;
17063 this.length = 1;
17064 }
17065 return this;
17066 }
17067
17068 // HANDLE: $(expr, $(...))
17069 } else if ( !context || context.jquery ) {
17070 return ( context || root ).find( selector );
17071
17072 // HANDLE: $(expr, context)
17073 // (which is just equivalent to: $(context).find(expr)
17074 } else {
17075 return this.constructor( context ).find( selector );
17076 }
17077
17078 // HANDLE: $(DOMElement)
17079 } else if ( selector.nodeType ) {
17080 this[ 0 ] = selector;
17081 this.length = 1;
17082 return this;
17083
17084 // HANDLE: $(function)
17085 // Shortcut for document ready
17086 } else if ( jQuery.isFunction( selector ) ) {
17087 return root.ready !== undefined ?
17088 root.ready( selector ) :
17089
17090 // Execute immediately if ready is not present
17091 selector( jQuery );
17092 }
17093
17094 return jQuery.makeArray( selector, this );
17095 };
17096
17097 // Give the init function the jQuery prototype for later instantiation
17098 init.prototype = jQuery.fn;
17099
17100 // Initialize central reference
17101 rootjQuery = jQuery( document );
17102
17103
17104 var rparentsprev = /^(?:parents|prev(?:Until|All))/,
17105
17106 // Methods guaranteed to produce a unique set when starting from a unique set
17107 guaranteedUnique = {
17108 children: true,
17109 contents: true,
17110 next: true,
17111 prev: true
17112 };
17113
17114 jQuery.fn.extend( {
17115 has: function( target ) {
17116 var targets = jQuery( target, this ),
17117 l = targets.length;
17118
17119 return this.filter( function() {
17120 var i = 0;
17121 for ( ; i < l; i++ ) {
17122 if ( jQuery.contains( this, targets[ i ] ) ) {
17123 return true;
17124 }
17125 }
17126 } );
17127 },
17128
17129 closest: function( selectors, context ) {
17130 var cur,
17131 i = 0,
17132 l = this.length,
17133 matched = [],
17134 targets = typeof selectors !== "string" && jQuery( selectors );
17135
17136 // Positional selectors never match, since there's no _selection_ context
17137 if ( !rneedsContext.test( selectors ) ) {
17138 for ( ; i < l; i++ ) {
17139 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
17140
17141 // Always skip document fragments
17142 if ( cur.nodeType < 11 && ( targets ?
17143 targets.index( cur ) > -1 :
17144
17145 // Don't pass non-elements to Sizzle
17146 cur.nodeType === 1 &&
17147 jQuery.find.matchesSelector( cur, selectors ) ) ) {
17148
17149 matched.push( cur );
17150 break;
17151 }
17152 }
17153 }
17154 }
17155
17156 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
17157 },
17158
17159 // Determine the position of an element within the set
17160 index: function( elem ) {
17161
17162 // No argument, return index in parent
17163 if ( !elem ) {
17164 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
17165 }
17166
17167 // Index in selector
17168 if ( typeof elem === "string" ) {
17169 return indexOf.call( jQuery( elem ), this[ 0 ] );
17170 }
17171
17172 // Locate the position of the desired element
17173 return indexOf.call( this,
17174
17175 // If it receives a jQuery object, the first element is used
17176 elem.jquery ? elem[ 0 ] : elem
17177 );
17178 },
17179
17180 add: function( selector, context ) {
17181 return this.pushStack(
17182 jQuery.uniqueSort(
17183 jQuery.merge( this.get(), jQuery( selector, context ) )
17184 )
17185 );
17186 },
17187
17188 addBack: function( selector ) {
17189 return this.add( selector == null ?
17190 this.prevObject : this.prevObject.filter( selector )
17191 );
17192 }
17193 } );
17194
17195 function sibling( cur, dir ) {
17196 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
17197 return cur;
17198 }
17199
17200 jQuery.each( {
17201 parent: function( elem ) {
17202 var parent = elem.parentNode;
17203 return parent && parent.nodeType !== 11 ? parent : null;
17204 },
17205 parents: function( elem ) {
17206 return dir( elem, "parentNode" );
17207 },
17208 parentsUntil: function( elem, i, until ) {
17209 return dir( elem, "parentNode", until );
17210 },
17211 next: function( elem ) {
17212 return sibling( elem, "nextSibling" );
17213 },
17214 prev: function( elem ) {
17215 return sibling( elem, "previousSibling" );
17216 },
17217 nextAll: function( elem ) {
17218 return dir( elem, "nextSibling" );
17219 },
17220 prevAll: function( elem ) {
17221 return dir( elem, "previousSibling" );
17222 },
17223 nextUntil: function( elem, i, until ) {
17224 return dir( elem, "nextSibling", until );
17225 },
17226 prevUntil: function( elem, i, until ) {
17227 return dir( elem, "previousSibling", until );
17228 },
17229 siblings: function( elem ) {
17230 return siblings( ( elem.parentNode || {} ).firstChild, elem );
17231 },
17232 children: function( elem ) {
17233 return siblings( elem.firstChild );
17234 },
17235 contents: function( elem ) {
17236 if ( nodeName( elem, "iframe" ) ) {
17237 return elem.contentDocument;
17238 }
17239
17240 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
17241 // Treat the template element as a regular one in browsers that
17242 // don't support it.
17243 if ( nodeName( elem, "template" ) ) {
17244 elem = elem.content || elem;
17245 }
17246
17247 return jQuery.merge( [], elem.childNodes );
17248 }
17249 }, function( name, fn ) {
17250 jQuery.fn[ name ] = function( until, selector ) {
17251 var matched = jQuery.map( this, fn, until );
17252
17253 if ( name.slice( -5 ) !== "Until" ) {
17254 selector = until;
17255 }
17256
17257 if ( selector && typeof selector === "string" ) {
17258 matched = jQuery.filter( selector, matched );
17259 }
17260
17261 if ( this.length > 1 ) {
17262
17263 // Remove duplicates
17264 if ( !guaranteedUnique[ name ] ) {
17265 jQuery.uniqueSort( matched );
17266 }
17267
17268 // Reverse order for parents* and prev-derivatives
17269 if ( rparentsprev.test( name ) ) {
17270 matched.reverse();
17271 }
17272 }
17273
17274 return this.pushStack( matched );
17275 };
17276 } );
17277 var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
17278
17279
17280
17281 // Convert String-formatted options into Object-formatted ones
17282 function createOptions( options ) {
17283 var object = {};
17284 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
17285 object[ flag ] = true;
17286 } );
17287 return object;
17288 }
17289
17290 /*
17291 * Create a callback list using the following parameters:
17292 *
17293 * options: an optional list of space-separated options that will change how
17294 * the callback list behaves or a more traditional option object
17295 *
17296 * By default a callback list will act like an event callback list and can be
17297 * "fired" multiple times.
17298 *
17299 * Possible options:
17300 *
17301 * once: will ensure the callback list can only be fired once (like a Deferred)
17302 *
17303 * memory: will keep track of previous values and will call any callback added
17304 * after the list has been fired right away with the latest "memorized"
17305 * values (like a Deferred)
17306 *
17307 * unique: will ensure a callback can only be added once (no duplicate in the list)
17308 *
17309 * stopOnFalse: interrupt callings when a callback returns false
17310 *
17311 */
17312 jQuery.Callbacks = function( options ) {
17313
17314 // Convert options from String-formatted to Object-formatted if needed
17315 // (we check in cache first)
17316 options = typeof options === "string" ?
17317 createOptions( options ) :
17318 jQuery.extend( {}, options );
17319
17320 var // Flag to know if list is currently firing
17321 firing,
17322
17323 // Last fire value for non-forgettable lists
17324 memory,
17325
17326 // Flag to know if list was already fired
17327 fired,
17328
17329 // Flag to prevent firing
17330 locked,
17331
17332 // Actual callback list
17333 list = [],
17334
17335 // Queue of execution data for repeatable lists
17336 queue = [],
17337
17338 // Index of currently firing callback (modified by add/remove as needed)
17339 firingIndex = -1,
17340
17341 // Fire callbacks
17342 fire = function() {
17343
17344 // Enforce single-firing
17345 locked = locked || options.once;
17346
17347 // Execute callbacks for all pending executions,
17348 // respecting firingIndex overrides and runtime changes
17349 fired = firing = true;
17350 for ( ; queue.length; firingIndex = -1 ) {
17351 memory = queue.shift();
17352 while ( ++firingIndex < list.length ) {
17353
17354 // Run callback and check for early termination
17355 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
17356 options.stopOnFalse ) {
17357
17358 // Jump to end and forget the data so .add doesn't re-fire
17359 firingIndex = list.length;
17360 memory = false;
17361 }
17362 }
17363 }
17364
17365 // Forget the data if we're done with it
17366 if ( !options.memory ) {
17367 memory = false;
17368 }
17369
17370 firing = false;
17371
17372 // Clean up if we're done firing for good
17373 if ( locked ) {
17374
17375 // Keep an empty list if we have data for future add calls
17376 if ( memory ) {
17377 list = [];
17378
17379 // Otherwise, this object is spent
17380 } else {
17381 list = "";
17382 }
17383 }
17384 },
17385
17386 // Actual Callbacks object
17387 self = {
17388
17389 // Add a callback or a collection of callbacks to the list
17390 add: function() {
17391 if ( list ) {
17392
17393 // If we have memory from a past run, we should fire after adding
17394 if ( memory && !firing ) {
17395 firingIndex = list.length - 1;
17396 queue.push( memory );
17397 }
17398
17399 ( function add( args ) {
17400 jQuery.each( args, function( _, arg ) {
17401 if ( jQuery.isFunction( arg ) ) {
17402 if ( !options.unique || !self.has( arg ) ) {
17403 list.push( arg );
17404 }
17405 } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
17406
17407 // Inspect recursively
17408 add( arg );
17409 }
17410 } );
17411 } )( arguments );
17412
17413 if ( memory && !firing ) {
17414 fire();
17415 }
17416 }
17417 return this;
17418 },
17419
17420 // Remove a callback from the list
17421 remove: function() {
17422 jQuery.each( arguments, function( _, arg ) {
17423 var index;
17424 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
17425 list.splice( index, 1 );
17426
17427 // Handle firing indexes
17428 if ( index <= firingIndex ) {
17429 firingIndex--;
17430 }
17431 }
17432 } );
17433 return this;
17434 },
17435
17436 // Check if a given callback is in the list.
17437 // If no argument is given, return whether or not list has callbacks attached.
17438 has: function( fn ) {
17439 return fn ?
17440 jQuery.inArray( fn, list ) > -1 :
17441 list.length > 0;
17442 },
17443
17444 // Remove all callbacks from the list
17445 empty: function() {
17446 if ( list ) {
17447 list = [];
17448 }
17449 return this;
17450 },
17451
17452 // Disable .fire and .add
17453 // Abort any current/pending executions
17454 // Clear all callbacks and values
17455 disable: function() {
17456 locked = queue = [];
17457 list = memory = "";
17458 return this;
17459 },
17460 disabled: function() {
17461 return !list;
17462 },
17463
17464 // Disable .fire
17465 // Also disable .add unless we have memory (since it would have no effect)
17466 // Abort any pending executions
17467 lock: function() {
17468 locked = queue = [];
17469 if ( !memory && !firing ) {
17470 list = memory = "";
17471 }
17472 return this;
17473 },
17474 locked: function() {
17475 return !!locked;
17476 },
17477
17478 // Call all callbacks with the given context and arguments
17479 fireWith: function( context, args ) {
17480 if ( !locked ) {
17481 args = args || [];
17482 args = [ context, args.slice ? args.slice() : args ];
17483 queue.push( args );
17484 if ( !firing ) {
17485 fire();
17486 }
17487 }
17488 return this;
17489 },
17490
17491 // Call all the callbacks with the given arguments
17492 fire: function() {
17493 self.fireWith( this, arguments );
17494 return this;
17495 },
17496
17497 // To know if the callbacks have already been called at least once
17498 fired: function() {
17499 return !!fired;
17500 }
17501 };
17502
17503 return self;
17504 };
17505
17506
17507 function Identity( v ) {
17508 return v;
17509 }
17510 function Thrower( ex ) {
17511 throw ex;
17512 }
17513
17514 function adoptValue( value, resolve, reject, noValue ) {
17515 var method;
17516
17517 try {
17518
17519 // Check for promise aspect first to privilege synchronous behavior
17520 if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
17521 method.call( value ).done( resolve ).fail( reject );
17522
17523 // Other thenables
17524 } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
17525 method.call( value, resolve, reject );
17526
17527 // Other non-thenables
17528 } else {
17529
17530 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
17531 // * false: [ value ].slice( 0 ) => resolve( value )
17532 // * true: [ value ].slice( 1 ) => resolve()
17533 resolve.apply( undefined, [ value ].slice( noValue ) );
17534 }
17535
17536 // For Promises/A+, convert exceptions into rejections
17537 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
17538 // Deferred#then to conditionally suppress rejection.
17539 } catch ( value ) {
17540
17541 // Support: Android 4.0 only
17542 // Strict mode functions invoked without .call/.apply get global-object context
17543 reject.apply( undefined, [ value ] );
17544 }
17545 }
17546
17547 jQuery.extend( {
17548
17549 Deferred: function( func ) {
17550 var tuples = [
17551
17552 // action, add listener, callbacks,
17553 // ... .then handlers, argument index, [final state]
17554 [ "notify", "progress", jQuery.Callbacks( "memory" ),
17555 jQuery.Callbacks( "memory" ), 2 ],
17556 [ "resolve", "done", jQuery.Callbacks( "once memory" ),
17557 jQuery.Callbacks( "once memory" ), 0, "resolved" ],
17558 [ "reject", "fail", jQuery.Callbacks( "once memory" ),
17559 jQuery.Callbacks( "once memory" ), 1, "rejected" ]
17560 ],
17561 state = "pending",
17562 promise = {
17563 state: function() {
17564 return state;
17565 },
17566 always: function() {
17567 deferred.done( arguments ).fail( arguments );
17568 return this;
17569 },
17570 "catch": function( fn ) {
17571 return promise.then( null, fn );
17572 },
17573
17574 // Keep pipe for back-compat
17575 pipe: function( /* fnDone, fnFail, fnProgress */ ) {
17576 var fns = arguments;
17577
17578 return jQuery.Deferred( function( newDefer ) {
17579 jQuery.each( tuples, function( i, tuple ) {
17580
17581 // Map tuples (progress, done, fail) to arguments (done, fail, progress)
17582 var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
17583
17584 // deferred.progress(function() { bind to newDefer or newDefer.notify })
17585 // deferred.done(function() { bind to newDefer or newDefer.resolve })
17586 // deferred.fail(function() { bind to newDefer or newDefer.reject })
17587 deferred[ tuple[ 1 ] ]( function() {
17588 var returned = fn && fn.apply( this, arguments );
17589 if ( returned && jQuery.isFunction( returned.promise ) ) {
17590 returned.promise()
17591 .progress( newDefer.notify )
17592 .done( newDefer.resolve )
17593 .fail( newDefer.reject );
17594 } else {
17595 newDefer[ tuple[ 0 ] + "With" ](
17596 this,
17597 fn ? [ returned ] : arguments
17598 );
17599 }
17600 } );
17601 } );
17602 fns = null;
17603 } ).promise();
17604 },
17605 then: function( onFulfilled, onRejected, onProgress ) {
17606 var maxDepth = 0;
17607 function resolve( depth, deferred, handler, special ) {
17608 return function() {
17609 var that = this,
17610 args = arguments,
17611 mightThrow = function() {
17612 var returned, then;
17613
17614 // Support: Promises/A+ section 2.3.3.3.3
17615 // https://promisesaplus.com/#point-59
17616 // Ignore double-resolution attempts
17617 if ( depth < maxDepth ) {
17618 return;
17619 }
17620
17621 returned = handler.apply( that, args );
17622
17623 // Support: Promises/A+ section 2.3.1
17624 // https://promisesaplus.com/#point-48
17625 if ( returned === deferred.promise() ) {
17626 throw new TypeError( "Thenable self-resolution" );
17627 }
17628
17629 // Support: Promises/A+ sections 2.3.3.1, 3.5
17630 // https://promisesaplus.com/#point-54
17631 // https://promisesaplus.com/#point-75
17632 // Retrieve `then` only once
17633 then = returned &&
17634
17635 // Support: Promises/A+ section 2.3.4
17636 // https://promisesaplus.com/#point-64
17637 // Only check objects and functions for thenability
17638 ( typeof returned === "object" ||
17639 typeof returned === "function" ) &&
17640 returned.then;
17641
17642 // Handle a returned thenable
17643 if ( jQuery.isFunction( then ) ) {
17644
17645 // Special processors (notify) just wait for resolution
17646 if ( special ) {
17647 then.call(
17648 returned,
17649 resolve( maxDepth, deferred, Identity, special ),
17650 resolve( maxDepth, deferred, Thrower, special )
17651 );
17652
17653 // Normal processors (resolve) also hook into progress
17654 } else {
17655
17656 // ...and disregard older resolution values
17657 maxDepth++;
17658
17659 then.call(
17660 returned,
17661 resolve( maxDepth, deferred, Identity, special ),
17662 resolve( maxDepth, deferred, Thrower, special ),
17663 resolve( maxDepth, deferred, Identity,
17664 deferred.notifyWith )
17665 );
17666 }
17667
17668 // Handle all other returned values
17669 } else {
17670
17671 // Only substitute handlers pass on context
17672 // and multiple values (non-spec behavior)
17673 if ( handler !== Identity ) {
17674 that = undefined;
17675 args = [ returned ];
17676 }
17677
17678 // Process the value(s)
17679 // Default process is resolve
17680 ( special || deferred.resolveWith )( that, args );
17681 }
17682 },
17683
17684 // Only normal processors (resolve) catch and reject exceptions
17685 process = special ?
17686 mightThrow :
17687 function() {
17688 try {
17689 mightThrow();
17690 } catch ( e ) {
17691
17692 if ( jQuery.Deferred.exceptionHook ) {
17693 jQuery.Deferred.exceptionHook( e,
17694 process.stackTrace );
17695 }
17696
17697 // Support: Promises/A+ section 2.3.3.3.4.1
17698 // https://promisesaplus.com/#point-61
17699 // Ignore post-resolution exceptions
17700 if ( depth + 1 >= maxDepth ) {
17701
17702 // Only substitute handlers pass on context
17703 // and multiple values (non-spec behavior)
17704 if ( handler !== Thrower ) {
17705 that = undefined;
17706 args = [ e ];
17707 }
17708
17709 deferred.rejectWith( that, args );
17710 }
17711 }
17712 };
17713
17714 // Support: Promises/A+ section 2.3.3.3.1
17715 // https://promisesaplus.com/#point-57
17716 // Re-resolve promises immediately to dodge false rejection from
17717 // subsequent errors
17718 if ( depth ) {
17719 process();
17720 } else {
17721
17722 // Call an optional hook to record the stack, in case of exception
17723 // since it's otherwise lost when execution goes async
17724 if ( jQuery.Deferred.getStackHook ) {
17725 process.stackTrace = jQuery.Deferred.getStackHook();
17726 }
17727 window.setTimeout( process );
17728 }
17729 };
17730 }
17731
17732 return jQuery.Deferred( function( newDefer ) {
17733
17734 // progress_handlers.add( ... )
17735 tuples[ 0 ][ 3 ].add(
17736 resolve(
17737 0,
17738 newDefer,
17739 jQuery.isFunction( onProgress ) ?
17740 onProgress :
17741 Identity,
17742 newDefer.notifyWith
17743 )
17744 );
17745
17746 // fulfilled_handlers.add( ... )
17747 tuples[ 1 ][ 3 ].add(
17748 resolve(
17749 0,
17750 newDefer,
17751 jQuery.isFunction( onFulfilled ) ?
17752 onFulfilled :
17753 Identity
17754 )
17755 );
17756
17757 // rejected_handlers.add( ... )
17758 tuples[ 2 ][ 3 ].add(
17759 resolve(
17760 0,
17761 newDefer,
17762 jQuery.isFunction( onRejected ) ?
17763 onRejected :
17764 Thrower
17765 )
17766 );
17767 } ).promise();
17768 },
17769
17770 // Get a promise for this deferred
17771 // If obj is provided, the promise aspect is added to the object
17772 promise: function( obj ) {
17773 return obj != null ? jQuery.extend( obj, promise ) : promise;
17774 }
17775 },
17776 deferred = {};
17777
17778 // Add list-specific methods
17779 jQuery.each( tuples, function( i, tuple ) {
17780 var list = tuple[ 2 ],
17781 stateString = tuple[ 5 ];
17782
17783 // promise.progress = list.add
17784 // promise.done = list.add
17785 // promise.fail = list.add
17786 promise[ tuple[ 1 ] ] = list.add;
17787
17788 // Handle state
17789 if ( stateString ) {
17790 list.add(
17791 function() {
17792
17793 // state = "resolved" (i.e., fulfilled)
17794 // state = "rejected"
17795 state = stateString;
17796 },
17797
17798 // rejected_callbacks.disable
17799 // fulfilled_callbacks.disable
17800 tuples[ 3 - i ][ 2 ].disable,
17801
17802 // progress_callbacks.lock
17803 tuples[ 0 ][ 2 ].lock
17804 );
17805 }
17806
17807 // progress_handlers.fire
17808 // fulfilled_handlers.fire
17809 // rejected_handlers.fire
17810 list.add( tuple[ 3 ].fire );
17811
17812 // deferred.notify = function() { deferred.notifyWith(...) }
17813 // deferred.resolve = function() { deferred.resolveWith(...) }
17814 // deferred.reject = function() { deferred.rejectWith(...) }
17815 deferred[ tuple[ 0 ] ] = function() {
17816 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
17817 return this;
17818 };
17819
17820 // deferred.notifyWith = list.fireWith
17821 // deferred.resolveWith = list.fireWith
17822 // deferred.rejectWith = list.fireWith
17823 deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
17824 } );
17825
17826 // Make the deferred a promise
17827 promise.promise( deferred );
17828
17829 // Call given func if any
17830 if ( func ) {
17831 func.call( deferred, deferred );
17832 }
17833
17834 // All done!
17835 return deferred;
17836 },
17837
17838 // Deferred helper
17839 when: function( singleValue ) {
17840 var
17841
17842 // count of uncompleted subordinates
17843 remaining = arguments.length,
17844
17845 // count of unprocessed arguments
17846 i = remaining,
17847
17848 // subordinate fulfillment data
17849 resolveContexts = Array( i ),
17850 resolveValues = slice.call( arguments ),
17851
17852 // the master Deferred
17853 master = jQuery.Deferred(),
17854
17855 // subordinate callback factory
17856 updateFunc = function( i ) {
17857 return function( value ) {
17858 resolveContexts[ i ] = this;
17859 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
17860 if ( !( --remaining ) ) {
17861 master.resolveWith( resolveContexts, resolveValues );
17862 }
17863 };
17864 };
17865
17866 // Single- and empty arguments are adopted like Promise.resolve
17867 if ( remaining <= 1 ) {
17868 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
17869 !remaining );
17870
17871 // Use .then() to unwrap secondary thenables (cf. gh-3000)
17872 if ( master.state() === "pending" ||
17873 jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
17874
17875 return master.then();
17876 }
17877 }
17878
17879 // Multiple arguments are aggregated like Promise.all array elements
17880 while ( i-- ) {
17881 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
17882 }
17883
17884 return master.promise();
17885 }
17886 } );
17887
17888
17889 // These usually indicate a programmer mistake during development,
17890 // warn about them ASAP rather than swallowing them by default.
17891 var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
17892
17893 jQuery.Deferred.exceptionHook = function( error, stack ) {
17894
17895 // Support: IE 8 - 9 only
17896 // Console exists when dev tools are open, which can happen at any time
17897 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
17898 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
17899 }
17900 };
17901
17902
17903
17904
17905 jQuery.readyException = function( error ) {
17906 window.setTimeout( function() {
17907 throw error;
17908 } );
17909 };
17910
17911
17912
17913
17914 // The deferred used on DOM ready
17915 var readyList = jQuery.Deferred();
17916
17917 jQuery.fn.ready = function( fn ) {
17918
17919 readyList
17920 .then( fn )
17921
17922 // Wrap jQuery.readyException in a function so that the lookup
17923 // happens at the time of error handling instead of callback
17924 // registration.
17925 .catch( function( error ) {
17926 jQuery.readyException( error );
17927 } );
17928
17929 return this;
17930 };
17931
17932 jQuery.extend( {
17933
17934 // Is the DOM ready to be used? Set to true once it occurs.
17935 isReady: false,
17936
17937 // A counter to track how many items to wait for before
17938 // the ready event fires. See #6781
17939 readyWait: 1,
17940
17941 // Handle when the DOM is ready
17942 ready: function( wait ) {
17943
17944 // Abort if there are pending holds or we're already ready
17945 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
17946 return;
17947 }
17948
17949 // Remember that the DOM is ready
17950 jQuery.isReady = true;
17951
17952 // If a normal DOM Ready event fired, decrement, and wait if need be
17953 if ( wait !== true && --jQuery.readyWait > 0 ) {
17954 return;
17955 }
17956
17957 // If there are functions bound, to execute
17958 readyList.resolveWith( document, [ jQuery ] );
17959 }
17960 } );
17961
17962 jQuery.ready.then = readyList.then;
17963
17964 // The ready event handler and self cleanup method
17965 function completed() {
17966 document.removeEventListener( "DOMContentLoaded", completed );
17967 window.removeEventListener( "load", completed );
17968 jQuery.ready();
17969 }
17970
17971 // Catch cases where $(document).ready() is called
17972 // after the browser event has already occurred.
17973 // Support: IE <=9 - 10 only
17974 // Older IE sometimes signals "interactive" too soon
17975 if ( document.readyState === "complete" ||
17976 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
17977
17978 // Handle it asynchronously to allow scripts the opportunity to delay ready
17979 window.setTimeout( jQuery.ready );
17980
17981 } else {
17982
17983 // Use the handy event callback
17984 document.addEventListener( "DOMContentLoaded", completed );
17985
17986 // A fallback to window.onload, that will always work
17987 window.addEventListener( "load", completed );
17988 }
17989
17990
17991
17992
17993 // Multifunctional method to get and set values of a collection
17994 // The value/s can optionally be executed if it's a function
17995 var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
17996 var i = 0,
17997 len = elems.length,
17998 bulk = key == null;
17999
18000 // Sets many values
18001 if ( jQuery.type( key ) === "object" ) {
18002 chainable = true;
18003 for ( i in key ) {
18004 access( elems, fn, i, key[ i ], true, emptyGet, raw );
18005 }
18006
18007 // Sets one value
18008 } else if ( value !== undefined ) {
18009 chainable = true;
18010
18011 if ( !jQuery.isFunction( value ) ) {
18012 raw = true;
18013 }
18014
18015 if ( bulk ) {
18016
18017 // Bulk operations run against the entire set
18018 if ( raw ) {
18019 fn.call( elems, value );
18020 fn = null;
18021
18022 // ...except when executing function values
18023 } else {
18024 bulk = fn;
18025 fn = function( elem, key, value ) {
18026 return bulk.call( jQuery( elem ), value );
18027 };
18028 }
18029 }
18030
18031 if ( fn ) {
18032 for ( ; i < len; i++ ) {
18033 fn(
18034 elems[ i ], key, raw ?
18035 value :
18036 value.call( elems[ i ], i, fn( elems[ i ], key ) )
18037 );
18038 }
18039 }
18040 }
18041
18042 if ( chainable ) {
18043 return elems;
18044 }
18045
18046 // Gets
18047 if ( bulk ) {
18048 return fn.call( elems );
18049 }
18050
18051 return len ? fn( elems[ 0 ], key ) : emptyGet;
18052 };
18053 var acceptData = function( owner ) {
18054
18055 // Accepts only:
18056 // - Node
18057 // - Node.ELEMENT_NODE
18058 // - Node.DOCUMENT_NODE
18059 // - Object
18060 // - Any
18061 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
18062 };
18063
18064
18065
18066
18067 function Data() {
18068 this.expando = jQuery.expando + Data.uid++;
18069 }
18070
18071 Data.uid = 1;
18072
18073 Data.prototype = {
18074
18075 cache: function( owner ) {
18076
18077 // Check if the owner object already has a cache
18078 var value = owner[ this.expando ];
18079
18080 // If not, create one
18081 if ( !value ) {
18082 value = {};
18083
18084 // We can accept data for non-element nodes in modern browsers,
18085 // but we should not, see #8335.
18086 // Always return an empty object.
18087 if ( acceptData( owner ) ) {
18088
18089 // If it is a node unlikely to be stringify-ed or looped over
18090 // use plain assignment
18091 if ( owner.nodeType ) {
18092 owner[ this.expando ] = value;
18093
18094 // Otherwise secure it in a non-enumerable property
18095 // configurable must be true to allow the property to be
18096 // deleted when data is removed
18097 } else {
18098 Object.defineProperty( owner, this.expando, {
18099 value: value,
18100 configurable: true
18101 } );
18102 }
18103 }
18104 }
18105
18106 return value;
18107 },
18108 set: function( owner, data, value ) {
18109 var prop,
18110 cache = this.cache( owner );
18111
18112 // Handle: [ owner, key, value ] args
18113 // Always use camelCase key (gh-2257)
18114 if ( typeof data === "string" ) {
18115 cache[ jQuery.camelCase( data ) ] = value;
18116
18117 // Handle: [ owner, { properties } ] args
18118 } else {
18119
18120 // Copy the properties one-by-one to the cache object
18121 for ( prop in data ) {
18122 cache[ jQuery.camelCase( prop ) ] = data[ prop ];
18123 }
18124 }
18125 return cache;
18126 },
18127 get: function( owner, key ) {
18128 return key === undefined ?
18129 this.cache( owner ) :
18130
18131 // Always use camelCase key (gh-2257)
18132 owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
18133 },
18134 access: function( owner, key, value ) {
18135
18136 // In cases where either:
18137 //
18138 // 1. No key was specified
18139 // 2. A string key was specified, but no value provided
18140 //
18141 // Take the "read" path and allow the get method to determine
18142 // which value to return, respectively either:
18143 //
18144 // 1. The entire cache object
18145 // 2. The data stored at the key
18146 //
18147 if ( key === undefined ||
18148 ( ( key && typeof key === "string" ) && value === undefined ) ) {
18149
18150 return this.get( owner, key );
18151 }
18152
18153 // When the key is not a string, or both a key and value
18154 // are specified, set or extend (existing objects) with either:
18155 //
18156 // 1. An object of properties
18157 // 2. A key and value
18158 //
18159 this.set( owner, key, value );
18160
18161 // Since the "set" path can have two possible entry points
18162 // return the expected data based on which path was taken[*]
18163 return value !== undefined ? value : key;
18164 },
18165 remove: function( owner, key ) {
18166 var i,
18167 cache = owner[ this.expando ];
18168
18169 if ( cache === undefined ) {
18170 return;
18171 }
18172
18173 if ( key !== undefined ) {
18174
18175 // Support array or space separated string of keys
18176 if ( Array.isArray( key ) ) {
18177
18178 // If key is an array of keys...
18179 // We always set camelCase keys, so remove that.
18180 key = key.map( jQuery.camelCase );
18181 } else {
18182 key = jQuery.camelCase( key );
18183
18184 // If a key with the spaces exists, use it.
18185 // Otherwise, create an array by matching non-whitespace
18186 key = key in cache ?
18187 [ key ] :
18188 ( key.match( rnothtmlwhite ) || [] );
18189 }
18190
18191 i = key.length;
18192
18193 while ( i-- ) {
18194 delete cache[ key[ i ] ];
18195 }
18196 }
18197
18198 // Remove the expando if there's no more data
18199 if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
18200
18201 // Support: Chrome <=35 - 45
18202 // Webkit & Blink performance suffers when deleting properties
18203 // from DOM nodes, so set to undefined instead
18204 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
18205 if ( owner.nodeType ) {
18206 owner[ this.expando ] = undefined;
18207 } else {
18208 delete owner[ this.expando ];
18209 }
18210 }
18211 },
18212 hasData: function( owner ) {
18213 var cache = owner[ this.expando ];
18214 return cache !== undefined && !jQuery.isEmptyObject( cache );
18215 }
18216 };
18217 var dataPriv = new Data();
18218
18219 var dataUser = new Data();
18220
18221
18222
18223 // Implementation Summary
18224 //
18225 // 1. Enforce API surface and semantic compatibility with 1.9.x branch
18226 // 2. Improve the module's maintainability by reducing the storage
18227 // paths to a single mechanism.
18228 // 3. Use the same single mechanism to support "private" and "user" data.
18229 // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
18230 // 5. Avoid exposing implementation details on user objects (eg. expando properties)
18231 // 6. Provide a clear path for implementation upgrade to WeakMap in 2014
18232
18233 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
18234 rmultiDash = /[A-Z]/g;
18235
18236 function getData( data ) {
18237 if ( data === "true" ) {
18238 return true;
18239 }
18240
18241 if ( data === "false" ) {
18242 return false;
18243 }
18244
18245 if ( data === "null" ) {
18246 return null;
18247 }
18248
18249 // Only convert to a number if it doesn't change the string
18250 if ( data === +data + "" ) {
18251 return +data;
18252 }
18253
18254 if ( rbrace.test( data ) ) {
18255 return JSON.parse( data );
18256 }
18257
18258 return data;
18259 }
18260
18261 function dataAttr( elem, key, data ) {
18262 var name;
18263
18264 // If nothing was found internally, try to fetch any
18265 // data from the HTML5 data-* attribute
18266 if ( data === undefined && elem.nodeType === 1 ) {
18267 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
18268 data = elem.getAttribute( name );
18269
18270 if ( typeof data === "string" ) {
18271 try {
18272 data = getData( data );
18273 } catch ( e ) {}
18274
18275 // Make sure we set the data so it isn't changed later
18276 dataUser.set( elem, key, data );
18277 } else {
18278 data = undefined;
18279 }
18280 }
18281 return data;
18282 }
18283
18284 jQuery.extend( {
18285 hasData: function( elem ) {
18286 return dataUser.hasData( elem ) || dataPriv.hasData( elem );
18287 },
18288
18289 data: function( elem, name, data ) {
18290 return dataUser.access( elem, name, data );
18291 },
18292
18293 removeData: function( elem, name ) {
18294 dataUser.remove( elem, name );
18295 },
18296
18297 // TODO: Now that all calls to _data and _removeData have been replaced
18298 // with direct calls to dataPriv methods, these can be deprecated.
18299 _data: function( elem, name, data ) {
18300 return dataPriv.access( elem, name, data );
18301 },
18302
18303 _removeData: function( elem, name ) {
18304 dataPriv.remove( elem, name );
18305 }
18306 } );
18307
18308 jQuery.fn.extend( {
18309 data: function( key, value ) {
18310 var i, name, data,
18311 elem = this[ 0 ],
18312 attrs = elem && elem.attributes;
18313
18314 // Gets all values
18315 if ( key === undefined ) {
18316 if ( this.length ) {
18317 data = dataUser.get( elem );
18318
18319 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
18320 i = attrs.length;
18321 while ( i-- ) {
18322
18323 // Support: IE 11 only
18324 // The attrs elements can be null (#14894)
18325 if ( attrs[ i ] ) {
18326 name = attrs[ i ].name;
18327 if ( name.indexOf( "data-" ) === 0 ) {
18328 name = jQuery.camelCase( name.slice( 5 ) );
18329 dataAttr( elem, name, data[ name ] );
18330 }
18331 }
18332 }
18333 dataPriv.set( elem, "hasDataAttrs", true );
18334 }
18335 }
18336
18337 return data;
18338 }
18339
18340 // Sets multiple values
18341 if ( typeof key === "object" ) {
18342 return this.each( function() {
18343 dataUser.set( this, key );
18344 } );
18345 }
18346
18347 return access( this, function( value ) {
18348 var data;
18349
18350 // The calling jQuery object (element matches) is not empty
18351 // (and therefore has an element appears at this[ 0 ]) and the
18352 // `value` parameter was not undefined. An empty jQuery object
18353 // will result in `undefined` for elem = this[ 0 ] which will
18354 // throw an exception if an attempt to read a data cache is made.
18355 if ( elem && value === undefined ) {
18356
18357 // Attempt to get data from the cache
18358 // The key will always be camelCased in Data
18359 data = dataUser.get( elem, key );
18360 if ( data !== undefined ) {
18361 return data;
18362 }
18363
18364 // Attempt to "discover" the data in
18365 // HTML5 custom data-* attrs
18366 data = dataAttr( elem, key );
18367 if ( data !== undefined ) {
18368 return data;
18369 }
18370
18371 // We tried really hard, but the data doesn't exist.
18372 return;
18373 }
18374
18375 // Set the data...
18376 this.each( function() {
18377
18378 // We always store the camelCased key
18379 dataUser.set( this, key, value );
18380 } );
18381 }, null, value, arguments.length > 1, null, true );
18382 },
18383
18384 removeData: function( key ) {
18385 return this.each( function() {
18386 dataUser.remove( this, key );
18387 } );
18388 }
18389 } );
18390
18391
18392 jQuery.extend( {
18393 queue: function( elem, type, data ) {
18394 var queue;
18395
18396 if ( elem ) {
18397 type = ( type || "fx" ) + "queue";
18398 queue = dataPriv.get( elem, type );
18399
18400 // Speed up dequeue by getting out quickly if this is just a lookup
18401 if ( data ) {
18402 if ( !queue || Array.isArray( data ) ) {
18403 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
18404 } else {
18405 queue.push( data );
18406 }
18407 }
18408 return queue || [];
18409 }
18410 },
18411
18412 dequeue: function( elem, type ) {
18413 type = type || "fx";
18414
18415 var queue = jQuery.queue( elem, type ),
18416 startLength = queue.length,
18417 fn = queue.shift(),
18418 hooks = jQuery._queueHooks( elem, type ),
18419 next = function() {
18420 jQuery.dequeue( elem, type );
18421 };
18422
18423 // If the fx queue is dequeued, always remove the progress sentinel
18424 if ( fn === "inprogress" ) {
18425 fn = queue.shift();
18426 startLength--;
18427 }
18428
18429 if ( fn ) {
18430
18431 // Add a progress sentinel to prevent the fx queue from being
18432 // automatically dequeued
18433 if ( type === "fx" ) {
18434 queue.unshift( "inprogress" );
18435 }
18436
18437 // Clear up the last queue stop function
18438 delete hooks.stop;
18439 fn.call( elem, next, hooks );
18440 }
18441
18442 if ( !startLength && hooks ) {
18443 hooks.empty.fire();
18444 }
18445 },
18446
18447 // Not public - generate a queueHooks object, or return the current one
18448 _queueHooks: function( elem, type ) {
18449 var key = type + "queueHooks";
18450 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
18451 empty: jQuery.Callbacks( "once memory" ).add( function() {
18452 dataPriv.remove( elem, [ type + "queue", key ] );
18453 } )
18454 } );
18455 }
18456 } );
18457
18458 jQuery.fn.extend( {
18459 queue: function( type, data ) {
18460 var setter = 2;
18461
18462 if ( typeof type !== "string" ) {
18463 data = type;
18464 type = "fx";
18465 setter--;
18466 }
18467
18468 if ( arguments.length < setter ) {
18469 return jQuery.queue( this[ 0 ], type );
18470 }
18471
18472 return data === undefined ?
18473 this :
18474 this.each( function() {
18475 var queue = jQuery.queue( this, type, data );
18476
18477 // Ensure a hooks for this queue
18478 jQuery._queueHooks( this, type );
18479
18480 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
18481 jQuery.dequeue( this, type );
18482 }
18483 } );
18484 },
18485 dequeue: function( type ) {
18486 return this.each( function() {
18487 jQuery.dequeue( this, type );
18488 } );
18489 },
18490 clearQueue: function( type ) {
18491 return this.queue( type || "fx", [] );
18492 },
18493
18494 // Get a promise resolved when queues of a certain type
18495 // are emptied (fx is the type by default)
18496 promise: function( type, obj ) {
18497 var tmp,
18498 count = 1,
18499 defer = jQuery.Deferred(),
18500 elements = this,
18501 i = this.length,
18502 resolve = function() {
18503 if ( !( --count ) ) {
18504 defer.resolveWith( elements, [ elements ] );
18505 }
18506 };
18507
18508 if ( typeof type !== "string" ) {
18509 obj = type;
18510 type = undefined;
18511 }
18512 type = type || "fx";
18513
18514 while ( i-- ) {
18515 tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
18516 if ( tmp && tmp.empty ) {
18517 count++;
18518 tmp.empty.add( resolve );
18519 }
18520 }
18521 resolve();
18522 return defer.promise( obj );
18523 }
18524 } );
18525 var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
18526
18527 var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
18528
18529
18530 var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
18531
18532 var isHiddenWithinTree = function( elem, el ) {
18533
18534 // isHiddenWithinTree might be called from jQuery#filter function;
18535 // in that case, element will be second argument
18536 elem = el || elem;
18537
18538 // Inline style trumps all
18539 return elem.style.display === "none" ||
18540 elem.style.display === "" &&
18541
18542 // Otherwise, check computed style
18543 // Support: Firefox <=43 - 45
18544 // Disconnected elements can have computed display: none, so first confirm that elem is
18545 // in the document.
18546 jQuery.contains( elem.ownerDocument, elem ) &&
18547
18548 jQuery.css( elem, "display" ) === "none";
18549 };
18550
18551 var swap = function( elem, options, callback, args ) {
18552 var ret, name,
18553 old = {};
18554
18555 // Remember the old values, and insert the new ones
18556 for ( name in options ) {
18557 old[ name ] = elem.style[ name ];
18558 elem.style[ name ] = options[ name ];
18559 }
18560
18561 ret = callback.apply( elem, args || [] );
18562
18563 // Revert the old values
18564 for ( name in options ) {
18565 elem.style[ name ] = old[ name ];
18566 }
18567
18568 return ret;
18569 };
18570
18571
18572
18573
18574 function adjustCSS( elem, prop, valueParts, tween ) {
18575 var adjusted,
18576 scale = 1,
18577 maxIterations = 20,
18578 currentValue = tween ?
18579 function() {
18580 return tween.cur();
18581 } :
18582 function() {
18583 return jQuery.css( elem, prop, "" );
18584 },
18585 initial = currentValue(),
18586 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
18587
18588 // Starting value computation is required for potential unit mismatches
18589 initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
18590 rcssNum.exec( jQuery.css( elem, prop ) );
18591
18592 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
18593
18594 // Trust units reported by jQuery.css
18595 unit = unit || initialInUnit[ 3 ];
18596
18597 // Make sure we update the tween properties later on
18598 valueParts = valueParts || [];
18599
18600 // Iteratively approximate from a nonzero starting point
18601 initialInUnit = +initial || 1;
18602
18603 do {
18604
18605 // If previous iteration zeroed out, double until we get *something*.
18606 // Use string for doubling so we don't accidentally see scale as unchanged below
18607 scale = scale || ".5";
18608
18609 // Adjust and apply
18610 initialInUnit = initialInUnit / scale;
18611 jQuery.style( elem, prop, initialInUnit + unit );
18612
18613 // Update scale, tolerating zero or NaN from tween.cur()
18614 // Break the loop if scale is unchanged or perfect, or if we've just had enough.
18615 } while (
18616 scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
18617 );
18618 }
18619
18620 if ( valueParts ) {
18621 initialInUnit = +initialInUnit || +initial || 0;
18622
18623 // Apply relative offset (+=/-=) if specified
18624 adjusted = valueParts[ 1 ] ?
18625 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
18626 +valueParts[ 2 ];
18627 if ( tween ) {
18628 tween.unit = unit;
18629 tween.start = initialInUnit;
18630 tween.end = adjusted;
18631 }
18632 }
18633 return adjusted;
18634 }
18635
18636
18637 var defaultDisplayMap = {};
18638
18639 function getDefaultDisplay( elem ) {
18640 var temp,
18641 doc = elem.ownerDocument,
18642 nodeName = elem.nodeName,
18643 display = defaultDisplayMap[ nodeName ];
18644
18645 if ( display ) {
18646 return display;
18647 }
18648
18649 temp = doc.body.appendChild( doc.createElement( nodeName ) );
18650 display = jQuery.css( temp, "display" );
18651
18652 temp.parentNode.removeChild( temp );
18653
18654 if ( display === "none" ) {
18655 display = "block";
18656 }
18657 defaultDisplayMap[ nodeName ] = display;
18658
18659 return display;
18660 }
18661
18662 function showHide( elements, show ) {
18663 var display, elem,
18664 values = [],
18665 index = 0,
18666 length = elements.length;
18667
18668 // Determine new display value for elements that need to change
18669 for ( ; index < length; index++ ) {
18670 elem = elements[ index ];
18671 if ( !elem.style ) {
18672 continue;
18673 }
18674
18675 display = elem.style.display;
18676 if ( show ) {
18677
18678 // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
18679 // check is required in this first loop unless we have a nonempty display value (either
18680 // inline or about-to-be-restored)
18681 if ( display === "none" ) {
18682 values[ index ] = dataPriv.get( elem, "display" ) || null;
18683 if ( !values[ index ] ) {
18684 elem.style.display = "";
18685 }
18686 }
18687 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
18688 values[ index ] = getDefaultDisplay( elem );
18689 }
18690 } else {
18691 if ( display !== "none" ) {
18692 values[ index ] = "none";
18693
18694 // Remember what we're overwriting
18695 dataPriv.set( elem, "display", display );
18696 }
18697 }
18698 }
18699
18700 // Set the display of the elements in a second loop to avoid constant reflow
18701 for ( index = 0; index < length; index++ ) {
18702 if ( values[ index ] != null ) {
18703 elements[ index ].style.display = values[ index ];
18704 }
18705 }
18706
18707 return elements;
18708 }
18709
18710 jQuery.fn.extend( {
18711 show: function() {
18712 return showHide( this, true );
18713 },
18714 hide: function() {
18715 return showHide( this );
18716 },
18717 toggle: function( state ) {
18718 if ( typeof state === "boolean" ) {
18719 return state ? this.show() : this.hide();
18720 }
18721
18722 return this.each( function() {
18723 if ( isHiddenWithinTree( this ) ) {
18724 jQuery( this ).show();
18725 } else {
18726 jQuery( this ).hide();
18727 }
18728 } );
18729 }
18730 } );
18731 var rcheckableType = ( /^(?:checkbox|radio)$/i );
18732
18733 var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
18734
18735 var rscriptType = ( /^$|\/(?:java|ecma)script/i );
18736
18737
18738
18739 // We have to close these tags to support XHTML (#13200)
18740 var wrapMap = {
18741
18742 // Support: IE <=9 only
18743 option: [ 1, "<select multiple='multiple'>", "</select>" ],
18744
18745 // XHTML parsers do not magically insert elements in the
18746 // same way that tag soup parsers do. So we cannot shorten
18747 // this by omitting <tbody> or other required elements.
18748 thead: [ 1, "<table>", "</table>" ],
18749 col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
18750 tr: [ 2, "<table><tbody>", "</tbody></table>" ],
18751 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
18752
18753 _default: [ 0, "", "" ]
18754 };
18755
18756 // Support: IE <=9 only
18757 wrapMap.optgroup = wrapMap.option;
18758
18759 wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
18760 wrapMap.th = wrapMap.td;
18761
18762
18763 function getAll( context, tag ) {
18764
18765 // Support: IE <=9 - 11 only
18766 // Use typeof to avoid zero-argument method invocation on host objects (#15151)
18767 var ret;
18768
18769 if ( typeof context.getElementsByTagName !== "undefined" ) {
18770 ret = context.getElementsByTagName( tag || "*" );
18771
18772 } else if ( typeof context.querySelectorAll !== "undefined" ) {
18773 ret = context.querySelectorAll( tag || "*" );
18774
18775 } else {
18776 ret = [];
18777 }
18778
18779 if ( tag === undefined || tag && nodeName( context, tag ) ) {
18780 return jQuery.merge( [ context ], ret );
18781 }
18782
18783 return ret;
18784 }
18785
18786
18787 // Mark scripts as having already been evaluated
18788 function setGlobalEval( elems, refElements ) {
18789 var i = 0,
18790 l = elems.length;
18791
18792 for ( ; i < l; i++ ) {
18793 dataPriv.set(
18794 elems[ i ],
18795 "globalEval",
18796 !refElements || dataPriv.get( refElements[ i ], "globalEval" )
18797 );
18798 }
18799 }
18800
18801
18802 var rhtml = /<|&#?\w+;/;
18803
18804 function buildFragment( elems, context, scripts, selection, ignored ) {
18805 var elem, tmp, tag, wrap, contains, j,
18806 fragment = context.createDocumentFragment(),
18807 nodes = [],
18808 i = 0,
18809 l = elems.length;
18810
18811 for ( ; i < l; i++ ) {
18812 elem = elems[ i ];
18813
18814 if ( elem || elem === 0 ) {
18815
18816 // Add nodes directly
18817 if ( jQuery.type( elem ) === "object" ) {
18818
18819 // Support: Android <=4.0 only, PhantomJS 1 only
18820 // push.apply(_, arraylike) throws on ancient WebKit
18821 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
18822
18823 // Convert non-html into a text node
18824 } else if ( !rhtml.test( elem ) ) {
18825 nodes.push( context.createTextNode( elem ) );
18826
18827 // Convert html into DOM nodes
18828 } else {
18829 tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
18830
18831 // Deserialize a standard representation
18832 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
18833 wrap = wrapMap[ tag ] || wrapMap._default;
18834 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
18835
18836 // Descend through wrappers to the right content
18837 j = wrap[ 0 ];
18838 while ( j-- ) {
18839 tmp = tmp.lastChild;
18840 }
18841
18842 // Support: Android <=4.0 only, PhantomJS 1 only
18843 // push.apply(_, arraylike) throws on ancient WebKit
18844 jQuery.merge( nodes, tmp.childNodes );
18845
18846 // Remember the top-level container
18847 tmp = fragment.firstChild;
18848
18849 // Ensure the created nodes are orphaned (#12392)
18850 tmp.textContent = "";
18851 }
18852 }
18853 }
18854
18855 // Remove wrapper from fragment
18856 fragment.textContent = "";
18857
18858 i = 0;
18859 while ( ( elem = nodes[ i++ ] ) ) {
18860
18861 // Skip elements already in the context collection (trac-4087)
18862 if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
18863 if ( ignored ) {
18864 ignored.push( elem );
18865 }
18866 continue;
18867 }
18868
18869 contains = jQuery.contains( elem.ownerDocument, elem );
18870
18871 // Append to fragment
18872 tmp = getAll( fragment.appendChild( elem ), "script" );
18873
18874 // Preserve script evaluation history
18875 if ( contains ) {
18876 setGlobalEval( tmp );
18877 }
18878
18879 // Capture executables
18880 if ( scripts ) {
18881 j = 0;
18882 while ( ( elem = tmp[ j++ ] ) ) {
18883 if ( rscriptType.test( elem.type || "" ) ) {
18884 scripts.push( elem );
18885 }
18886 }
18887 }
18888 }
18889
18890 return fragment;
18891 }
18892
18893
18894 ( function() {
18895 var fragment = document.createDocumentFragment(),
18896 div = fragment.appendChild( document.createElement( "div" ) ),
18897 input = document.createElement( "input" );
18898
18899 // Support: Android 4.0 - 4.3 only
18900 // Check state lost if the name is set (#11217)
18901 // Support: Windows Web Apps (WWA)
18902 // `name` and `type` must use .setAttribute for WWA (#14901)
18903 input.setAttribute( "type", "radio" );
18904 input.setAttribute( "checked", "checked" );
18905 input.setAttribute( "name", "t" );
18906
18907 div.appendChild( input );
18908
18909 // Support: Android <=4.1 only
18910 // Older WebKit doesn't clone checked state correctly in fragments
18911 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
18912
18913 // Support: IE <=11 only
18914 // Make sure textarea (and checkbox) defaultValue is properly cloned
18915 div.innerHTML = "<textarea>x</textarea>";
18916 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
18917 } )();
18918 var documentElement = document.documentElement;
18919
18920
18921
18922 var
18923 rkeyEvent = /^key/,
18924 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
18925 rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
18926
18927 function returnTrue() {
18928 return true;
18929 }
18930
18931 function returnFalse() {
18932 return false;
18933 }
18934
18935 // Support: IE <=9 only
18936 // See #13393 for more info
18937 function safeActiveElement() {
18938 try {
18939 return document.activeElement;
18940 } catch ( err ) { }
18941 }
18942
18943 function on( elem, types, selector, data, fn, one ) {
18944 var origFn, type;
18945
18946 // Types can be a map of types/handlers
18947 if ( typeof types === "object" ) {
18948
18949 // ( types-Object, selector, data )
18950 if ( typeof selector !== "string" ) {
18951
18952 // ( types-Object, data )
18953 data = data || selector;
18954 selector = undefined;
18955 }
18956 for ( type in types ) {
18957 on( elem, type, selector, data, types[ type ], one );
18958 }
18959 return elem;
18960 }
18961
18962 if ( data == null && fn == null ) {
18963
18964 // ( types, fn )
18965 fn = selector;
18966 data = selector = undefined;
18967 } else if ( fn == null ) {
18968 if ( typeof selector === "string" ) {
18969
18970 // ( types, selector, fn )
18971 fn = data;
18972 data = undefined;
18973 } else {
18974
18975 // ( types, data, fn )
18976 fn = data;
18977 data = selector;
18978 selector = undefined;
18979 }
18980 }
18981 if ( fn === false ) {
18982 fn = returnFalse;
18983 } else if ( !fn ) {
18984 return elem;
18985 }
18986
18987 if ( one === 1 ) {
18988 origFn = fn;
18989 fn = function( event ) {
18990
18991 // Can use an empty set, since event contains the info
18992 jQuery().off( event );
18993 return origFn.apply( this, arguments );
18994 };
18995
18996 // Use same guid so caller can remove using origFn
18997 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
18998 }
18999 return elem.each( function() {
19000 jQuery.event.add( this, types, fn, data, selector );
19001 } );
19002 }
19003
19004 /*
19005 * Helper functions for managing events -- not part of the public interface.
19006 * Props to Dean Edwards' addEvent library for many of the ideas.
19007 */
19008 jQuery.event = {
19009
19010 global: {},
19011
19012 add: function( elem, types, handler, data, selector ) {
19013
19014 var handleObjIn, eventHandle, tmp,
19015 events, t, handleObj,
19016 special, handlers, type, namespaces, origType,
19017 elemData = dataPriv.get( elem );
19018
19019 // Don't attach events to noData or text/comment nodes (but allow plain objects)
19020 if ( !elemData ) {
19021 return;
19022 }
19023
19024 // Caller can pass in an object of custom data in lieu of the handler
19025 if ( handler.handler ) {
19026 handleObjIn = handler;
19027 handler = handleObjIn.handler;
19028 selector = handleObjIn.selector;
19029 }
19030
19031 // Ensure that invalid selectors throw exceptions at attach time
19032 // Evaluate against documentElement in case elem is a non-element node (e.g., document)
19033 if ( selector ) {
19034 jQuery.find.matchesSelector( documentElement, selector );
19035 }
19036
19037 // Make sure that the handler has a unique ID, used to find/remove it later
19038 if ( !handler.guid ) {
19039 handler.guid = jQuery.guid++;
19040 }
19041
19042 // Init the element's event structure and main handler, if this is the first
19043 if ( !( events = elemData.events ) ) {
19044 events = elemData.events = {};
19045 }
19046 if ( !( eventHandle = elemData.handle ) ) {
19047 eventHandle = elemData.handle = function( e ) {
19048
19049 // Discard the second event of a jQuery.event.trigger() and
19050 // when an event is called after a page has unloaded
19051 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
19052 jQuery.event.dispatch.apply( elem, arguments ) : undefined;
19053 };
19054 }
19055
19056 // Handle multiple events separated by a space
19057 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19058 t = types.length;
19059 while ( t-- ) {
19060 tmp = rtypenamespace.exec( types[ t ] ) || [];
19061 type = origType = tmp[ 1 ];
19062 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19063
19064 // There *must* be a type, no attaching namespace-only handlers
19065 if ( !type ) {
19066 continue;
19067 }
19068
19069 // If event changes its type, use the special event handlers for the changed type
19070 special = jQuery.event.special[ type ] || {};
19071
19072 // If selector defined, determine special event api type, otherwise given type
19073 type = ( selector ? special.delegateType : special.bindType ) || type;
19074
19075 // Update special based on newly reset type
19076 special = jQuery.event.special[ type ] || {};
19077
19078 // handleObj is passed to all event handlers
19079 handleObj = jQuery.extend( {
19080 type: type,
19081 origType: origType,
19082 data: data,
19083 handler: handler,
19084 guid: handler.guid,
19085 selector: selector,
19086 needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
19087 namespace: namespaces.join( "." )
19088 }, handleObjIn );
19089
19090 // Init the event handler queue if we're the first
19091 if ( !( handlers = events[ type ] ) ) {
19092 handlers = events[ type ] = [];
19093 handlers.delegateCount = 0;
19094
19095 // Only use addEventListener if the special events handler returns false
19096 if ( !special.setup ||
19097 special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
19098
19099 if ( elem.addEventListener ) {
19100 elem.addEventListener( type, eventHandle );
19101 }
19102 }
19103 }
19104
19105 if ( special.add ) {
19106 special.add.call( elem, handleObj );
19107
19108 if ( !handleObj.handler.guid ) {
19109 handleObj.handler.guid = handler.guid;
19110 }
19111 }
19112
19113 // Add to the element's handler list, delegates in front
19114 if ( selector ) {
19115 handlers.splice( handlers.delegateCount++, 0, handleObj );
19116 } else {
19117 handlers.push( handleObj );
19118 }
19119
19120 // Keep track of which events have ever been used, for event optimization
19121 jQuery.event.global[ type ] = true;
19122 }
19123
19124 },
19125
19126 // Detach an event or set of events from an element
19127 remove: function( elem, types, handler, selector, mappedTypes ) {
19128
19129 var j, origCount, tmp,
19130 events, t, handleObj,
19131 special, handlers, type, namespaces, origType,
19132 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
19133
19134 if ( !elemData || !( events = elemData.events ) ) {
19135 return;
19136 }
19137
19138 // Once for each type.namespace in types; type may be omitted
19139 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
19140 t = types.length;
19141 while ( t-- ) {
19142 tmp = rtypenamespace.exec( types[ t ] ) || [];
19143 type = origType = tmp[ 1 ];
19144 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
19145
19146 // Unbind all events (on this namespace, if provided) for the element
19147 if ( !type ) {
19148 for ( type in events ) {
19149 jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
19150 }
19151 continue;
19152 }
19153
19154 special = jQuery.event.special[ type ] || {};
19155 type = ( selector ? special.delegateType : special.bindType ) || type;
19156 handlers = events[ type ] || [];
19157 tmp = tmp[ 2 ] &&
19158 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
19159
19160 // Remove matching events
19161 origCount = j = handlers.length;
19162 while ( j-- ) {
19163 handleObj = handlers[ j ];
19164
19165 if ( ( mappedTypes || origType === handleObj.origType ) &&
19166 ( !handler || handler.guid === handleObj.guid ) &&
19167 ( !tmp || tmp.test( handleObj.namespace ) ) &&
19168 ( !selector || selector === handleObj.selector ||
19169 selector === "**" && handleObj.selector ) ) {
19170 handlers.splice( j, 1 );
19171
19172 if ( handleObj.selector ) {
19173 handlers.delegateCount--;
19174 }
19175 if ( special.remove ) {
19176 special.remove.call( elem, handleObj );
19177 }
19178 }
19179 }
19180
19181 // Remove generic event handler if we removed something and no more handlers exist
19182 // (avoids potential for endless recursion during removal of special event handlers)
19183 if ( origCount && !handlers.length ) {
19184 if ( !special.teardown ||
19185 special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
19186
19187 jQuery.removeEvent( elem, type, elemData.handle );
19188 }
19189
19190 delete events[ type ];
19191 }
19192 }
19193
19194 // Remove data and the expando if it's no longer used
19195 if ( jQuery.isEmptyObject( events ) ) {
19196 dataPriv.remove( elem, "handle events" );
19197 }
19198 },
19199
19200 dispatch: function( nativeEvent ) {
19201
19202 // Make a writable jQuery.Event from the native event object
19203 var event = jQuery.event.fix( nativeEvent );
19204
19205 var i, j, ret, matched, handleObj, handlerQueue,
19206 args = new Array( arguments.length ),
19207 handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
19208 special = jQuery.event.special[ event.type ] || {};
19209
19210 // Use the fix-ed jQuery.Event rather than the (read-only) native event
19211 args[ 0 ] = event;
19212
19213 for ( i = 1; i < arguments.length; i++ ) {
19214 args[ i ] = arguments[ i ];
19215 }
19216
19217 event.delegateTarget = this;
19218
19219 // Call the preDispatch hook for the mapped type, and let it bail if desired
19220 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
19221 return;
19222 }
19223
19224 // Determine handlers
19225 handlerQueue = jQuery.event.handlers.call( this, event, handlers );
19226
19227 // Run delegates first; they may want to stop propagation beneath us
19228 i = 0;
19229 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
19230 event.currentTarget = matched.elem;
19231
19232 j = 0;
19233 while ( ( handleObj = matched.handlers[ j++ ] ) &&
19234 !event.isImmediatePropagationStopped() ) {
19235
19236 // Triggered event must either 1) have no namespace, or 2) have namespace(s)
19237 // a subset or equal to those in the bound event (both can have no namespace).
19238 if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
19239
19240 event.handleObj = handleObj;
19241 event.data = handleObj.data;
19242
19243 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
19244 handleObj.handler ).apply( matched.elem, args );
19245
19246 if ( ret !== undefined ) {
19247 if ( ( event.result = ret ) === false ) {
19248 event.preventDefault();
19249 event.stopPropagation();
19250 }
19251 }
19252 }
19253 }
19254 }
19255
19256 // Call the postDispatch hook for the mapped type
19257 if ( special.postDispatch ) {
19258 special.postDispatch.call( this, event );
19259 }
19260
19261 return event.result;
19262 },
19263
19264 handlers: function( event, handlers ) {
19265 var i, handleObj, sel, matchedHandlers, matchedSelectors,
19266 handlerQueue = [],
19267 delegateCount = handlers.delegateCount,
19268 cur = event.target;
19269
19270 // Find delegate handlers
19271 if ( delegateCount &&
19272
19273 // Support: IE <=9
19274 // Black-hole SVG <use> instance trees (trac-13180)
19275 cur.nodeType &&
19276
19277 // Support: Firefox <=42
19278 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
19279 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
19280 // Support: IE 11 only
19281 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
19282 !( event.type === "click" && event.button >= 1 ) ) {
19283
19284 for ( ; cur !== this; cur = cur.parentNode || this ) {
19285
19286 // Don't check non-elements (#13208)
19287 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
19288 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
19289 matchedHandlers = [];
19290 matchedSelectors = {};
19291 for ( i = 0; i < delegateCount; i++ ) {
19292 handleObj = handlers[ i ];
19293
19294 // Don't conflict with Object.prototype properties (#13203)
19295 sel = handleObj.selector + " ";
19296
19297 if ( matchedSelectors[ sel ] === undefined ) {
19298 matchedSelectors[ sel ] = handleObj.needsContext ?
19299 jQuery( sel, this ).index( cur ) > -1 :
19300 jQuery.find( sel, this, null, [ cur ] ).length;
19301 }
19302 if ( matchedSelectors[ sel ] ) {
19303 matchedHandlers.push( handleObj );
19304 }
19305 }
19306 if ( matchedHandlers.length ) {
19307 handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
19308 }
19309 }
19310 }
19311 }
19312
19313 // Add the remaining (directly-bound) handlers
19314 cur = this;
19315 if ( delegateCount < handlers.length ) {
19316 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
19317 }
19318
19319 return handlerQueue;
19320 },
19321
19322 addProp: function( name, hook ) {
19323 Object.defineProperty( jQuery.Event.prototype, name, {
19324 enumerable: true,
19325 configurable: true,
19326
19327 get: jQuery.isFunction( hook ) ?
19328 function() {
19329 if ( this.originalEvent ) {
19330 return hook( this.originalEvent );
19331 }
19332 } :
19333 function() {
19334 if ( this.originalEvent ) {
19335 return this.originalEvent[ name ];
19336 }
19337 },
19338
19339 set: function( value ) {
19340 Object.defineProperty( this, name, {
19341 enumerable: true,
19342 configurable: true,
19343 writable: true,
19344 value: value
19345 } );
19346 }
19347 } );
19348 },
19349
19350 fix: function( originalEvent ) {
19351 return originalEvent[ jQuery.expando ] ?
19352 originalEvent :
19353 new jQuery.Event( originalEvent );
19354 },
19355
19356 special: {
19357 load: {
19358
19359 // Prevent triggered image.load events from bubbling to window.load
19360 noBubble: true
19361 },
19362 focus: {
19363
19364 // Fire native event if possible so blur/focus sequence is correct
19365 trigger: function() {
19366 if ( this !== safeActiveElement() && this.focus ) {
19367 this.focus();
19368 return false;
19369 }
19370 },
19371 delegateType: "focusin"
19372 },
19373 blur: {
19374 trigger: function() {
19375 if ( this === safeActiveElement() && this.blur ) {
19376 this.blur();
19377 return false;
19378 }
19379 },
19380 delegateType: "focusout"
19381 },
19382 click: {
19383
19384 // For checkbox, fire native event so checked state will be right
19385 trigger: function() {
19386 if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
19387 this.click();
19388 return false;
19389 }
19390 },
19391
19392 // For cross-browser consistency, don't fire native .click() on links
19393 _default: function( event ) {
19394 return nodeName( event.target, "a" );
19395 }
19396 },
19397
19398 beforeunload: {
19399 postDispatch: function( event ) {
19400
19401 // Support: Firefox 20+
19402 // Firefox doesn't alert if the returnValue field is not set.
19403 if ( event.result !== undefined && event.originalEvent ) {
19404 event.originalEvent.returnValue = event.result;
19405 }
19406 }
19407 }
19408 }
19409 };
19410
19411 jQuery.removeEvent = function( elem, type, handle ) {
19412
19413 // This "if" is needed for plain objects
19414 if ( elem.removeEventListener ) {
19415 elem.removeEventListener( type, handle );
19416 }
19417 };
19418
19419 jQuery.Event = function( src, props ) {
19420
19421 // Allow instantiation without the 'new' keyword
19422 if ( !( this instanceof jQuery.Event ) ) {
19423 return new jQuery.Event( src, props );
19424 }
19425
19426 // Event object
19427 if ( src && src.type ) {
19428 this.originalEvent = src;
19429 this.type = src.type;
19430
19431 // Events bubbling up the document may have been marked as prevented
19432 // by a handler lower down the tree; reflect the correct value.
19433 this.isDefaultPrevented = src.defaultPrevented ||
19434 src.defaultPrevented === undefined &&
19435
19436 // Support: Android <=2.3 only
19437 src.returnValue === false ?
19438 returnTrue :
19439 returnFalse;
19440
19441 // Create target properties
19442 // Support: Safari <=6 - 7 only
19443 // Target should not be a text node (#504, #13143)
19444 this.target = ( src.target && src.target.nodeType === 3 ) ?
19445 src.target.parentNode :
19446 src.target;
19447
19448 this.currentTarget = src.currentTarget;
19449 this.relatedTarget = src.relatedTarget;
19450
19451 // Event type
19452 } else {
19453 this.type = src;
19454 }
19455
19456 // Put explicitly provided properties onto the event object
19457 if ( props ) {
19458 jQuery.extend( this, props );
19459 }
19460
19461 // Create a timestamp if incoming event doesn't have one
19462 this.timeStamp = src && src.timeStamp || jQuery.now();
19463
19464 // Mark it as fixed
19465 this[ jQuery.expando ] = true;
19466 };
19467
19468 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
19469 // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
19470 jQuery.Event.prototype = {
19471 constructor: jQuery.Event,
19472 isDefaultPrevented: returnFalse,
19473 isPropagationStopped: returnFalse,
19474 isImmediatePropagationStopped: returnFalse,
19475 isSimulated: false,
19476
19477 preventDefault: function() {
19478 var e = this.originalEvent;
19479
19480 this.isDefaultPrevented = returnTrue;
19481
19482 if ( e && !this.isSimulated ) {
19483 e.preventDefault();
19484 }
19485 },
19486 stopPropagation: function() {
19487 var e = this.originalEvent;
19488
19489 this.isPropagationStopped = returnTrue;
19490
19491 if ( e && !this.isSimulated ) {
19492 e.stopPropagation();
19493 }
19494 },
19495 stopImmediatePropagation: function() {
19496 var e = this.originalEvent;
19497
19498 this.isImmediatePropagationStopped = returnTrue;
19499
19500 if ( e && !this.isSimulated ) {
19501 e.stopImmediatePropagation();
19502 }
19503
19504 this.stopPropagation();
19505 }
19506 };
19507
19508 // Includes all common event props including KeyEvent and MouseEvent specific props
19509 jQuery.each( {
19510 altKey: true,
19511 bubbles: true,
19512 cancelable: true,
19513 changedTouches: true,
19514 ctrlKey: true,
19515 detail: true,
19516 eventPhase: true,
19517 metaKey: true,
19518 pageX: true,
19519 pageY: true,
19520 shiftKey: true,
19521 view: true,
19522 "char": true,
19523 charCode: true,
19524 key: true,
19525 keyCode: true,
19526 button: true,
19527 buttons: true,
19528 clientX: true,
19529 clientY: true,
19530 offsetX: true,
19531 offsetY: true,
19532 pointerId: true,
19533 pointerType: true,
19534 screenX: true,
19535 screenY: true,
19536 targetTouches: true,
19537 toElement: true,
19538 touches: true,
19539
19540 which: function( event ) {
19541 var button = event.button;
19542
19543 // Add which for key events
19544 if ( event.which == null && rkeyEvent.test( event.type ) ) {
19545 return event.charCode != null ? event.charCode : event.keyCode;
19546 }
19547
19548 // Add which for click: 1 === left; 2 === middle; 3 === right
19549 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
19550 if ( button & 1 ) {
19551 return 1;
19552 }
19553
19554 if ( button & 2 ) {
19555 return 3;
19556 }
19557
19558 if ( button & 4 ) {
19559 return 2;
19560 }
19561
19562 return 0;
19563 }
19564
19565 return event.which;
19566 }
19567 }, jQuery.event.addProp );
19568
19569 // Create mouseenter/leave events using mouseover/out and event-time checks
19570 // so that event delegation works in jQuery.
19571 // Do the same for pointerenter/pointerleave and pointerover/pointerout
19572 //
19573 // Support: Safari 7 only
19574 // Safari sends mouseenter too often; see:
19575 // https://bugs.chromium.org/p/chromium/issues/detail?id=470258
19576 // for the description of the bug (it existed in older Chrome versions as well).
19577 jQuery.each( {
19578 mouseenter: "mouseover",
19579 mouseleave: "mouseout",
19580 pointerenter: "pointerover",
19581 pointerleave: "pointerout"
19582 }, function( orig, fix ) {
19583 jQuery.event.special[ orig ] = {
19584 delegateType: fix,
19585 bindType: fix,
19586
19587 handle: function( event ) {
19588 var ret,
19589 target = this,
19590 related = event.relatedTarget,
19591 handleObj = event.handleObj;
19592
19593 // For mouseenter/leave call the handler if related is outside the target.
19594 // NB: No relatedTarget if the mouse left/entered the browser window
19595 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
19596 event.type = handleObj.origType;
19597 ret = handleObj.handler.apply( this, arguments );
19598 event.type = fix;
19599 }
19600 return ret;
19601 }
19602 };
19603 } );
19604
19605 jQuery.fn.extend( {
19606
19607 on: function( types, selector, data, fn ) {
19608 return on( this, types, selector, data, fn );
19609 },
19610 one: function( types, selector, data, fn ) {
19611 return on( this, types, selector, data, fn, 1 );
19612 },
19613 off: function( types, selector, fn ) {
19614 var handleObj, type;
19615 if ( types && types.preventDefault && types.handleObj ) {
19616
19617 // ( event ) dispatched jQuery.Event
19618 handleObj = types.handleObj;
19619 jQuery( types.delegateTarget ).off(
19620 handleObj.namespace ?
19621 handleObj.origType + "." + handleObj.namespace :
19622 handleObj.origType,
19623 handleObj.selector,
19624 handleObj.handler
19625 );
19626 return this;
19627 }
19628 if ( typeof types === "object" ) {
19629
19630 // ( types-object [, selector] )
19631 for ( type in types ) {
19632 this.off( type, selector, types[ type ] );
19633 }
19634 return this;
19635 }
19636 if ( selector === false || typeof selector === "function" ) {
19637
19638 // ( types [, fn] )
19639 fn = selector;
19640 selector = undefined;
19641 }
19642 if ( fn === false ) {
19643 fn = returnFalse;
19644 }
19645 return this.each( function() {
19646 jQuery.event.remove( this, types, fn, selector );
19647 } );
19648 }
19649 } );
19650
19651
19652 var
19653
19654 /* eslint-disable max-len */
19655
19656 // See https://github.com/eslint/eslint/issues/3229
19657 rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
19658
19659 /* eslint-enable */
19660
19661 // Support: IE <=10 - 11, Edge 12 - 13
19662 // In IE/Edge using regex groups here causes severe slowdowns.
19663 // See https://connect.microsoft.com/IE/feedback/details/1736512/
19664 rnoInnerhtml = /<script|<style|<link/i,
19665
19666 // checked="checked" or checked
19667 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
19668 rscriptTypeMasked = /^true\/(.*)/,
19669 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
19670
19671 // Prefer a tbody over its parent table for containing new rows
19672 function manipulationTarget( elem, content ) {
19673 if ( nodeName( elem, "table" ) &&
19674 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
19675
19676 return jQuery( ">tbody", elem )[ 0 ] || elem;
19677 }
19678
19679 return elem;
19680 }
19681
19682 // Replace/restore the type attribute of script elements for safe DOM manipulation
19683 function disableScript( elem ) {
19684 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
19685 return elem;
19686 }
19687 function restoreScript( elem ) {
19688 var match = rscriptTypeMasked.exec( elem.type );
19689
19690 if ( match ) {
19691 elem.type = match[ 1 ];
19692 } else {
19693 elem.removeAttribute( "type" );
19694 }
19695
19696 return elem;
19697 }
19698
19699 function cloneCopyEvent( src, dest ) {
19700 var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
19701
19702 if ( dest.nodeType !== 1 ) {
19703 return;
19704 }
19705
19706 // 1. Copy private data: events, handlers, etc.
19707 if ( dataPriv.hasData( src ) ) {
19708 pdataOld = dataPriv.access( src );
19709 pdataCur = dataPriv.set( dest, pdataOld );
19710 events = pdataOld.events;
19711
19712 if ( events ) {
19713 delete pdataCur.handle;
19714 pdataCur.events = {};
19715
19716 for ( type in events ) {
19717 for ( i = 0, l = events[ type ].length; i < l; i++ ) {
19718 jQuery.event.add( dest, type, events[ type ][ i ] );
19719 }
19720 }
19721 }
19722 }
19723
19724 // 2. Copy user data
19725 if ( dataUser.hasData( src ) ) {
19726 udataOld = dataUser.access( src );
19727 udataCur = jQuery.extend( {}, udataOld );
19728
19729 dataUser.set( dest, udataCur );
19730 }
19731 }
19732
19733 // Fix IE bugs, see support tests
19734 function fixInput( src, dest ) {
19735 var nodeName = dest.nodeName.toLowerCase();
19736
19737 // Fails to persist the checked state of a cloned checkbox or radio button.
19738 if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
19739 dest.checked = src.checked;
19740
19741 // Fails to return the selected option to the default selected state when cloning options
19742 } else if ( nodeName === "input" || nodeName === "textarea" ) {
19743 dest.defaultValue = src.defaultValue;
19744 }
19745 }
19746
19747 function domManip( collection, args, callback, ignored ) {
19748
19749 // Flatten any nested arrays
19750 args = concat.apply( [], args );
19751
19752 var fragment, first, scripts, hasScripts, node, doc,
19753 i = 0,
19754 l = collection.length,
19755 iNoClone = l - 1,
19756 value = args[ 0 ],
19757 isFunction = jQuery.isFunction( value );
19758
19759 // We can't cloneNode fragments that contain checked, in WebKit
19760 if ( isFunction ||
19761 ( l > 1 && typeof value === "string" &&
19762 !support.checkClone && rchecked.test( value ) ) ) {
19763 return collection.each( function( index ) {
19764 var self = collection.eq( index );
19765 if ( isFunction ) {
19766 args[ 0 ] = value.call( this, index, self.html() );
19767 }
19768 domManip( self, args, callback, ignored );
19769 } );
19770 }
19771
19772 if ( l ) {
19773 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
19774 first = fragment.firstChild;
19775
19776 if ( fragment.childNodes.length === 1 ) {
19777 fragment = first;
19778 }
19779
19780 // Require either new content or an interest in ignored elements to invoke the callback
19781 if ( first || ignored ) {
19782 scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
19783 hasScripts = scripts.length;
19784
19785 // Use the original fragment for the last item
19786 // instead of the first because it can end up
19787 // being emptied incorrectly in certain situations (#8070).
19788 for ( ; i < l; i++ ) {
19789 node = fragment;
19790
19791 if ( i !== iNoClone ) {
19792 node = jQuery.clone( node, true, true );
19793
19794 // Keep references to cloned scripts for later restoration
19795 if ( hasScripts ) {
19796
19797 // Support: Android <=4.0 only, PhantomJS 1 only
19798 // push.apply(_, arraylike) throws on ancient WebKit
19799 jQuery.merge( scripts, getAll( node, "script" ) );
19800 }
19801 }
19802
19803 callback.call( collection[ i ], node, i );
19804 }
19805
19806 if ( hasScripts ) {
19807 doc = scripts[ scripts.length - 1 ].ownerDocument;
19808
19809 // Reenable scripts
19810 jQuery.map( scripts, restoreScript );
19811
19812 // Evaluate executable scripts on first document insertion
19813 for ( i = 0; i < hasScripts; i++ ) {
19814 node = scripts[ i ];
19815 if ( rscriptType.test( node.type || "" ) &&
19816 !dataPriv.access( node, "globalEval" ) &&
19817 jQuery.contains( doc, node ) ) {
19818
19819 if ( node.src ) {
19820
19821 // Optional AJAX dependency, but won't run scripts if not present
19822 if ( jQuery._evalUrl ) {
19823 jQuery._evalUrl( node.src );
19824 }
19825 } else {
19826 DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
19827 }
19828 }
19829 }
19830 }
19831 }
19832 }
19833
19834 return collection;
19835 }
19836
19837 function remove( elem, selector, keepData ) {
19838 var node,
19839 nodes = selector ? jQuery.filter( selector, elem ) : elem,
19840 i = 0;
19841
19842 for ( ; ( node = nodes[ i ] ) != null; i++ ) {
19843 if ( !keepData && node.nodeType === 1 ) {
19844 jQuery.cleanData( getAll( node ) );
19845 }
19846
19847 if ( node.parentNode ) {
19848 if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
19849 setGlobalEval( getAll( node, "script" ) );
19850 }
19851 node.parentNode.removeChild( node );
19852 }
19853 }
19854
19855 return elem;
19856 }
19857
19858 jQuery.extend( {
19859 htmlPrefilter: function( html ) {
19860 return html.replace( rxhtmlTag, "<$1></$2>" );
19861 },
19862
19863 clone: function( elem, dataAndEvents, deepDataAndEvents ) {
19864 var i, l, srcElements, destElements,
19865 clone = elem.cloneNode( true ),
19866 inPage = jQuery.contains( elem.ownerDocument, elem );
19867
19868 // Fix IE cloning issues
19869 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
19870 !jQuery.isXMLDoc( elem ) ) {
19871
19872 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
19873 destElements = getAll( clone );
19874 srcElements = getAll( elem );
19875
19876 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19877 fixInput( srcElements[ i ], destElements[ i ] );
19878 }
19879 }
19880
19881 // Copy the events from the original to the clone
19882 if ( dataAndEvents ) {
19883 if ( deepDataAndEvents ) {
19884 srcElements = srcElements || getAll( elem );
19885 destElements = destElements || getAll( clone );
19886
19887 for ( i = 0, l = srcElements.length; i < l; i++ ) {
19888 cloneCopyEvent( srcElements[ i ], destElements[ i ] );
19889 }
19890 } else {
19891 cloneCopyEvent( elem, clone );
19892 }
19893 }
19894
19895 // Preserve script evaluation history
19896 destElements = getAll( clone, "script" );
19897 if ( destElements.length > 0 ) {
19898 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
19899 }
19900
19901 // Return the cloned set
19902 return clone;
19903 },
19904
19905 cleanData: function( elems ) {
19906 var data, elem, type,
19907 special = jQuery.event.special,
19908 i = 0;
19909
19910 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
19911 if ( acceptData( elem ) ) {
19912 if ( ( data = elem[ dataPriv.expando ] ) ) {
19913 if ( data.events ) {
19914 for ( type in data.events ) {
19915 if ( special[ type ] ) {
19916 jQuery.event.remove( elem, type );
19917
19918 // This is a shortcut to avoid jQuery.event.remove's overhead
19919 } else {
19920 jQuery.removeEvent( elem, type, data.handle );
19921 }
19922 }
19923 }
19924
19925 // Support: Chrome <=35 - 45+
19926 // Assign undefined instead of using delete, see Data#remove
19927 elem[ dataPriv.expando ] = undefined;
19928 }
19929 if ( elem[ dataUser.expando ] ) {
19930
19931 // Support: Chrome <=35 - 45+
19932 // Assign undefined instead of using delete, see Data#remove
19933 elem[ dataUser.expando ] = undefined;
19934 }
19935 }
19936 }
19937 }
19938 } );
19939
19940 jQuery.fn.extend( {
19941 detach: function( selector ) {
19942 return remove( this, selector, true );
19943 },
19944
19945 remove: function( selector ) {
19946 return remove( this, selector );
19947 },
19948
19949 text: function( value ) {
19950 return access( this, function( value ) {
19951 return value === undefined ?
19952 jQuery.text( this ) :
19953 this.empty().each( function() {
19954 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19955 this.textContent = value;
19956 }
19957 } );
19958 }, null, value, arguments.length );
19959 },
19960
19961 append: function() {
19962 return domManip( this, arguments, function( elem ) {
19963 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19964 var target = manipulationTarget( this, elem );
19965 target.appendChild( elem );
19966 }
19967 } );
19968 },
19969
19970 prepend: function() {
19971 return domManip( this, arguments, function( elem ) {
19972 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
19973 var target = manipulationTarget( this, elem );
19974 target.insertBefore( elem, target.firstChild );
19975 }
19976 } );
19977 },
19978
19979 before: function() {
19980 return domManip( this, arguments, function( elem ) {
19981 if ( this.parentNode ) {
19982 this.parentNode.insertBefore( elem, this );
19983 }
19984 } );
19985 },
19986
19987 after: function() {
19988 return domManip( this, arguments, function( elem ) {
19989 if ( this.parentNode ) {
19990 this.parentNode.insertBefore( elem, this.nextSibling );
19991 }
19992 } );
19993 },
19994
19995 empty: function() {
19996 var elem,
19997 i = 0;
19998
19999 for ( ; ( elem = this[ i ] ) != null; i++ ) {
20000 if ( elem.nodeType === 1 ) {
20001
20002 // Prevent memory leaks
20003 jQuery.cleanData( getAll( elem, false ) );
20004
20005 // Remove any remaining nodes
20006 elem.textContent = "";
20007 }
20008 }
20009
20010 return this;
20011 },
20012
20013 clone: function( dataAndEvents, deepDataAndEvents ) {
20014 dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
20015 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
20016
20017 return this.map( function() {
20018 return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
20019 } );
20020 },
20021
20022 html: function( value ) {
20023 return access( this, function( value ) {
20024 var elem = this[ 0 ] || {},
20025 i = 0,
20026 l = this.length;
20027
20028 if ( value === undefined && elem.nodeType === 1 ) {
20029 return elem.innerHTML;
20030 }
20031
20032 // See if we can take a shortcut and just use innerHTML
20033 if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
20034 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
20035
20036 value = jQuery.htmlPrefilter( value );
20037
20038 try {
20039 for ( ; i < l; i++ ) {
20040 elem = this[ i ] || {};
20041
20042 // Remove element nodes and prevent memory leaks
20043 if ( elem.nodeType === 1 ) {
20044 jQuery.cleanData( getAll( elem, false ) );
20045 elem.innerHTML = value;
20046 }
20047 }
20048
20049 elem = 0;
20050
20051 // If using innerHTML throws an exception, use the fallback method
20052 } catch ( e ) {}
20053 }
20054
20055 if ( elem ) {
20056 this.empty().append( value );
20057 }
20058 }, null, value, arguments.length );
20059 },
20060
20061 replaceWith: function() {
20062 var ignored = [];
20063
20064 // Make the changes, replacing each non-ignored context element with the new content
20065 return domManip( this, arguments, function( elem ) {
20066 var parent = this.parentNode;
20067
20068 if ( jQuery.inArray( this, ignored ) < 0 ) {
20069 jQuery.cleanData( getAll( this ) );
20070 if ( parent ) {
20071 parent.replaceChild( elem, this );
20072 }
20073 }
20074
20075 // Force callback invocation
20076 }, ignored );
20077 }
20078 } );
20079
20080 jQuery.each( {
20081 appendTo: "append",
20082 prependTo: "prepend",
20083 insertBefore: "before",
20084 insertAfter: "after",
20085 replaceAll: "replaceWith"
20086 }, function( name, original ) {
20087 jQuery.fn[ name ] = function( selector ) {
20088 var elems,
20089 ret = [],
20090 insert = jQuery( selector ),
20091 last = insert.length - 1,
20092 i = 0;
20093
20094 for ( ; i <= last; i++ ) {
20095 elems = i === last ? this : this.clone( true );
20096 jQuery( insert[ i ] )[ original ]( elems );
20097
20098 // Support: Android <=4.0 only, PhantomJS 1 only
20099 // .get() because push.apply(_, arraylike) throws on ancient WebKit
20100 push.apply( ret, elems.get() );
20101 }
20102
20103 return this.pushStack( ret );
20104 };
20105 } );
20106 var rmargin = ( /^margin/ );
20107
20108 var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
20109
20110 var getStyles = function( elem ) {
20111
20112 // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
20113 // IE throws on elements created in popups
20114 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
20115 var view = elem.ownerDocument.defaultView;
20116
20117 if ( !view || !view.opener ) {
20118 view = window;
20119 }
20120
20121 return view.getComputedStyle( elem );
20122 };
20123
20124
20125
20126 ( function() {
20127
20128 // Executing both pixelPosition & boxSizingReliable tests require only one layout
20129 // so they're executed at the same time to save the second computation.
20130 function computeStyleTests() {
20131
20132 // This is a singleton, we need to execute it only once
20133 if ( !div ) {
20134 return;
20135 }
20136
20137 div.style.cssText =
20138 "box-sizing:border-box;" +
20139 "position:relative;display:block;" +
20140 "margin:auto;border:1px;padding:1px;" +
20141 "top:1%;width:50%";
20142 div.innerHTML = "";
20143 documentElement.appendChild( container );
20144
20145 var divStyle = window.getComputedStyle( div );
20146 pixelPositionVal = divStyle.top !== "1%";
20147
20148 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
20149 reliableMarginLeftVal = divStyle.marginLeft === "2px";
20150 boxSizingReliableVal = divStyle.width === "4px";
20151
20152 // Support: Android 4.0 - 4.3 only
20153 // Some styles come back with percentage values, even though they shouldn't
20154 div.style.marginRight = "50%";
20155 pixelMarginRightVal = divStyle.marginRight === "4px";
20156
20157 documentElement.removeChild( container );
20158
20159 // Nullify the div so it wouldn't be stored in the memory and
20160 // it will also be a sign that checks already performed
20161 div = null;
20162 }
20163
20164 var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
20165 container = document.createElement( "div" ),
20166 div = document.createElement( "div" );
20167
20168 // Finish early in limited (non-browser) environments
20169 if ( !div.style ) {
20170 return;
20171 }
20172
20173 // Support: IE <=9 - 11 only
20174 // Style of cloned element affects source element cloned (#8908)
20175 div.style.backgroundClip = "content-box";
20176 div.cloneNode( true ).style.backgroundClip = "";
20177 support.clearCloneStyle = div.style.backgroundClip === "content-box";
20178
20179 container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
20180 "padding:0;margin-top:1px;position:absolute";
20181 container.appendChild( div );
20182
20183 jQuery.extend( support, {
20184 pixelPosition: function() {
20185 computeStyleTests();
20186 return pixelPositionVal;
20187 },
20188 boxSizingReliable: function() {
20189 computeStyleTests();
20190 return boxSizingReliableVal;
20191 },
20192 pixelMarginRight: function() {
20193 computeStyleTests();
20194 return pixelMarginRightVal;
20195 },
20196 reliableMarginLeft: function() {
20197 computeStyleTests();
20198 return reliableMarginLeftVal;
20199 }
20200 } );
20201 } )();
20202
20203
20204 function curCSS( elem, name, computed ) {
20205 var width, minWidth, maxWidth, ret,
20206
20207 // Support: Firefox 51+
20208 // Retrieving style before computed somehow
20209 // fixes an issue with getting wrong values
20210 // on detached elements
20211 style = elem.style;
20212
20213 computed = computed || getStyles( elem );
20214
20215 // getPropertyValue is needed for:
20216 // .css('filter') (IE 9 only, #12537)
20217 // .css('--customProperty) (#3144)
20218 if ( computed ) {
20219 ret = computed.getPropertyValue( name ) || computed[ name ];
20220
20221 if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
20222 ret = jQuery.style( elem, name );
20223 }
20224
20225 // A tribute to the "awesome hack by Dean Edwards"
20226 // Android Browser returns percentage for some values,
20227 // but width seems to be reliably pixels.
20228 // This is against the CSSOM draft spec:
20229 // https://drafts.csswg.org/cssom/#resolved-values
20230 if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
20231
20232 // Remember the original values
20233 width = style.width;
20234 minWidth = style.minWidth;
20235 maxWidth = style.maxWidth;
20236
20237 // Put in the new values to get a computed value out
20238 style.minWidth = style.maxWidth = style.width = ret;
20239 ret = computed.width;
20240
20241 // Revert the changed values
20242 style.width = width;
20243 style.minWidth = minWidth;
20244 style.maxWidth = maxWidth;
20245 }
20246 }
20247
20248 return ret !== undefined ?
20249
20250 // Support: IE <=9 - 11 only
20251 // IE returns zIndex value as an integer.
20252 ret + "" :
20253 ret;
20254 }
20255
20256
20257 function addGetHookIf( conditionFn, hookFn ) {
20258
20259 // Define the hook, we'll check on the first run if it's really needed.
20260 return {
20261 get: function() {
20262 if ( conditionFn() ) {
20263
20264 // Hook not needed (or it's not possible to use it due
20265 // to missing dependency), remove it.
20266 delete this.get;
20267 return;
20268 }
20269
20270 // Hook needed; redefine it so that the support test is not executed again.
20271 return ( this.get = hookFn ).apply( this, arguments );
20272 }
20273 };
20274 }
20275
20276
20277 var
20278
20279 // Swappable if display is none or starts with table
20280 // except "table", "table-cell", or "table-caption"
20281 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
20282 rdisplayswap = /^(none|table(?!-c[ea]).+)/,
20283 rcustomProp = /^--/,
20284 cssShow = { position: "absolute", visibility: "hidden", display: "block" },
20285 cssNormalTransform = {
20286 letterSpacing: "0",
20287 fontWeight: "400"
20288 },
20289
20290 cssPrefixes = [ "Webkit", "Moz", "ms" ],
20291 emptyStyle = document.createElement( "div" ).style;
20292
20293 // Return a css property mapped to a potentially vendor prefixed property
20294 function vendorPropName( name ) {
20295
20296 // Shortcut for names that are not vendor prefixed
20297 if ( name in emptyStyle ) {
20298 return name;
20299 }
20300
20301 // Check for vendor prefixed names
20302 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
20303 i = cssPrefixes.length;
20304
20305 while ( i-- ) {
20306 name = cssPrefixes[ i ] + capName;
20307 if ( name in emptyStyle ) {
20308 return name;
20309 }
20310 }
20311 }
20312
20313 // Return a property mapped along what jQuery.cssProps suggests or to
20314 // a vendor prefixed property.
20315 function finalPropName( name ) {
20316 var ret = jQuery.cssProps[ name ];
20317 if ( !ret ) {
20318 ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
20319 }
20320 return ret;
20321 }
20322
20323 function setPositiveNumber( elem, value, subtract ) {
20324
20325 // Any relative (+/-) values have already been
20326 // normalized at this point
20327 var matches = rcssNum.exec( value );
20328 return matches ?
20329
20330 // Guard against undefined "subtract", e.g., when used as in cssHooks
20331 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
20332 value;
20333 }
20334
20335 function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
20336 var i,
20337 val = 0;
20338
20339 // If we already have the right measurement, avoid augmentation
20340 if ( extra === ( isBorderBox ? "border" : "content" ) ) {
20341 i = 4;
20342
20343 // Otherwise initialize for horizontal or vertical properties
20344 } else {
20345 i = name === "width" ? 1 : 0;
20346 }
20347
20348 for ( ; i < 4; i += 2 ) {
20349
20350 // Both box models exclude margin, so add it if we want it
20351 if ( extra === "margin" ) {
20352 val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
20353 }
20354
20355 if ( isBorderBox ) {
20356
20357 // border-box includes padding, so remove it if we want content
20358 if ( extra === "content" ) {
20359 val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20360 }
20361
20362 // At this point, extra isn't border nor margin, so remove border
20363 if ( extra !== "margin" ) {
20364 val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20365 }
20366 } else {
20367
20368 // At this point, extra isn't content, so add padding
20369 val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
20370
20371 // At this point, extra isn't content nor padding, so add border
20372 if ( extra !== "padding" ) {
20373 val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
20374 }
20375 }
20376 }
20377
20378 return val;
20379 }
20380
20381 function getWidthOrHeight( elem, name, extra ) {
20382
20383 // Start with computed style
20384 var valueIsBorderBox,
20385 styles = getStyles( elem ),
20386 val = curCSS( elem, name, styles ),
20387 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
20388
20389 // Computed unit is not pixels. Stop here and return.
20390 if ( rnumnonpx.test( val ) ) {
20391 return val;
20392 }
20393
20394 // Check for style in case a browser which returns unreliable values
20395 // for getComputedStyle silently falls back to the reliable elem.style
20396 valueIsBorderBox = isBorderBox &&
20397 ( support.boxSizingReliable() || val === elem.style[ name ] );
20398
20399 // Fall back to offsetWidth/Height when value is "auto"
20400 // This happens for inline elements with no explicit setting (gh-3571)
20401 if ( val === "auto" ) {
20402 val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
20403 }
20404
20405 // Normalize "", auto, and prepare for extra
20406 val = parseFloat( val ) || 0;
20407
20408 // Use the active box-sizing model to add/subtract irrelevant styles
20409 return ( val +
20410 augmentWidthOrHeight(
20411 elem,
20412 name,
20413 extra || ( isBorderBox ? "border" : "content" ),
20414 valueIsBorderBox,
20415 styles
20416 )
20417 ) + "px";
20418 }
20419
20420 jQuery.extend( {
20421
20422 // Add in style property hooks for overriding the default
20423 // behavior of getting and setting a style property
20424 cssHooks: {
20425 opacity: {
20426 get: function( elem, computed ) {
20427 if ( computed ) {
20428
20429 // We should always get a number back from opacity
20430 var ret = curCSS( elem, "opacity" );
20431 return ret === "" ? "1" : ret;
20432 }
20433 }
20434 }
20435 },
20436
20437 // Don't automatically add "px" to these possibly-unitless properties
20438 cssNumber: {
20439 "animationIterationCount": true,
20440 "columnCount": true,
20441 "fillOpacity": true,
20442 "flexGrow": true,
20443 "flexShrink": true,
20444 "fontWeight": true,
20445 "lineHeight": true,
20446 "opacity": true,
20447 "order": true,
20448 "orphans": true,
20449 "widows": true,
20450 "zIndex": true,
20451 "zoom": true
20452 },
20453
20454 // Add in properties whose names you wish to fix before
20455 // setting or getting the value
20456 cssProps: {
20457 "float": "cssFloat"
20458 },
20459
20460 // Get and set the style property on a DOM Node
20461 style: function( elem, name, value, extra ) {
20462
20463 // Don't set styles on text and comment nodes
20464 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
20465 return;
20466 }
20467
20468 // Make sure that we're working with the right name
20469 var ret, type, hooks,
20470 origName = jQuery.camelCase( name ),
20471 isCustomProp = rcustomProp.test( name ),
20472 style = elem.style;
20473
20474 // Make sure that we're working with the right name. We don't
20475 // want to query the value if it is a CSS custom property
20476 // since they are user-defined.
20477 if ( !isCustomProp ) {
20478 name = finalPropName( origName );
20479 }
20480
20481 // Gets hook for the prefixed version, then unprefixed version
20482 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20483
20484 // Check if we're setting a value
20485 if ( value !== undefined ) {
20486 type = typeof value;
20487
20488 // Convert "+=" or "-=" to relative numbers (#7345)
20489 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
20490 value = adjustCSS( elem, name, ret );
20491
20492 // Fixes bug #9237
20493 type = "number";
20494 }
20495
20496 // Make sure that null and NaN values aren't set (#7116)
20497 if ( value == null || value !== value ) {
20498 return;
20499 }
20500
20501 // If a number was passed in, add the unit (except for certain CSS properties)
20502 if ( type === "number" ) {
20503 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
20504 }
20505
20506 // background-* props affect original clone's values
20507 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
20508 style[ name ] = "inherit";
20509 }
20510
20511 // If a hook was provided, use that value, otherwise just set the specified value
20512 if ( !hooks || !( "set" in hooks ) ||
20513 ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
20514
20515 if ( isCustomProp ) {
20516 style.setProperty( name, value );
20517 } else {
20518 style[ name ] = value;
20519 }
20520 }
20521
20522 } else {
20523
20524 // If a hook was provided get the non-computed value from there
20525 if ( hooks && "get" in hooks &&
20526 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
20527
20528 return ret;
20529 }
20530
20531 // Otherwise just get the value from the style object
20532 return style[ name ];
20533 }
20534 },
20535
20536 css: function( elem, name, extra, styles ) {
20537 var val, num, hooks,
20538 origName = jQuery.camelCase( name ),
20539 isCustomProp = rcustomProp.test( name );
20540
20541 // Make sure that we're working with the right name. We don't
20542 // want to modify the value if it is a CSS custom property
20543 // since they are user-defined.
20544 if ( !isCustomProp ) {
20545 name = finalPropName( origName );
20546 }
20547
20548 // Try prefixed name followed by the unprefixed name
20549 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
20550
20551 // If a hook was provided get the computed value from there
20552 if ( hooks && "get" in hooks ) {
20553 val = hooks.get( elem, true, extra );
20554 }
20555
20556 // Otherwise, if a way to get the computed value exists, use that
20557 if ( val === undefined ) {
20558 val = curCSS( elem, name, styles );
20559 }
20560
20561 // Convert "normal" to computed value
20562 if ( val === "normal" && name in cssNormalTransform ) {
20563 val = cssNormalTransform[ name ];
20564 }
20565
20566 // Make numeric if forced or a qualifier was provided and val looks numeric
20567 if ( extra === "" || extra ) {
20568 num = parseFloat( val );
20569 return extra === true || isFinite( num ) ? num || 0 : val;
20570 }
20571
20572 return val;
20573 }
20574 } );
20575
20576 jQuery.each( [ "height", "width" ], function( i, name ) {
20577 jQuery.cssHooks[ name ] = {
20578 get: function( elem, computed, extra ) {
20579 if ( computed ) {
20580
20581 // Certain elements can have dimension info if we invisibly show them
20582 // but it must have a current display style that would benefit
20583 return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
20584
20585 // Support: Safari 8+
20586 // Table columns in Safari have non-zero offsetWidth & zero
20587 // getBoundingClientRect().width unless display is changed.
20588 // Support: IE <=11 only
20589 // Running getBoundingClientRect on a disconnected node
20590 // in IE throws an error.
20591 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
20592 swap( elem, cssShow, function() {
20593 return getWidthOrHeight( elem, name, extra );
20594 } ) :
20595 getWidthOrHeight( elem, name, extra );
20596 }
20597 },
20598
20599 set: function( elem, value, extra ) {
20600 var matches,
20601 styles = extra && getStyles( elem ),
20602 subtract = extra && augmentWidthOrHeight(
20603 elem,
20604 name,
20605 extra,
20606 jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
20607 styles
20608 );
20609
20610 // Convert to pixels if value adjustment is needed
20611 if ( subtract && ( matches = rcssNum.exec( value ) ) &&
20612 ( matches[ 3 ] || "px" ) !== "px" ) {
20613
20614 elem.style[ name ] = value;
20615 value = jQuery.css( elem, name );
20616 }
20617
20618 return setPositiveNumber( elem, value, subtract );
20619 }
20620 };
20621 } );
20622
20623 jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
20624 function( elem, computed ) {
20625 if ( computed ) {
20626 return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
20627 elem.getBoundingClientRect().left -
20628 swap( elem, { marginLeft: 0 }, function() {
20629 return elem.getBoundingClientRect().left;
20630 } )
20631 ) + "px";
20632 }
20633 }
20634 );
20635
20636 // These hooks are used by animate to expand properties
20637 jQuery.each( {
20638 margin: "",
20639 padding: "",
20640 border: "Width"
20641 }, function( prefix, suffix ) {
20642 jQuery.cssHooks[ prefix + suffix ] = {
20643 expand: function( value ) {
20644 var i = 0,
20645 expanded = {},
20646
20647 // Assumes a single number if not a string
20648 parts = typeof value === "string" ? value.split( " " ) : [ value ];
20649
20650 for ( ; i < 4; i++ ) {
20651 expanded[ prefix + cssExpand[ i ] + suffix ] =
20652 parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
20653 }
20654
20655 return expanded;
20656 }
20657 };
20658
20659 if ( !rmargin.test( prefix ) ) {
20660 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
20661 }
20662 } );
20663
20664 jQuery.fn.extend( {
20665 css: function( name, value ) {
20666 return access( this, function( elem, name, value ) {
20667 var styles, len,
20668 map = {},
20669 i = 0;
20670
20671 if ( Array.isArray( name ) ) {
20672 styles = getStyles( elem );
20673 len = name.length;
20674
20675 for ( ; i < len; i++ ) {
20676 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
20677 }
20678
20679 return map;
20680 }
20681
20682 return value !== undefined ?
20683 jQuery.style( elem, name, value ) :
20684 jQuery.css( elem, name );
20685 }, name, value, arguments.length > 1 );
20686 }
20687 } );
20688
20689
20690 function Tween( elem, options, prop, end, easing ) {
20691 return new Tween.prototype.init( elem, options, prop, end, easing );
20692 }
20693 jQuery.Tween = Tween;
20694
20695 Tween.prototype = {
20696 constructor: Tween,
20697 init: function( elem, options, prop, end, easing, unit ) {
20698 this.elem = elem;
20699 this.prop = prop;
20700 this.easing = easing || jQuery.easing._default;
20701 this.options = options;
20702 this.start = this.now = this.cur();
20703 this.end = end;
20704 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
20705 },
20706 cur: function() {
20707 var hooks = Tween.propHooks[ this.prop ];
20708
20709 return hooks && hooks.get ?
20710 hooks.get( this ) :
20711 Tween.propHooks._default.get( this );
20712 },
20713 run: function( percent ) {
20714 var eased,
20715 hooks = Tween.propHooks[ this.prop ];
20716
20717 if ( this.options.duration ) {
20718 this.pos = eased = jQuery.easing[ this.easing ](
20719 percent, this.options.duration * percent, 0, 1, this.options.duration
20720 );
20721 } else {
20722 this.pos = eased = percent;
20723 }
20724 this.now = ( this.end - this.start ) * eased + this.start;
20725
20726 if ( this.options.step ) {
20727 this.options.step.call( this.elem, this.now, this );
20728 }
20729
20730 if ( hooks && hooks.set ) {
20731 hooks.set( this );
20732 } else {
20733 Tween.propHooks._default.set( this );
20734 }
20735 return this;
20736 }
20737 };
20738
20739 Tween.prototype.init.prototype = Tween.prototype;
20740
20741 Tween.propHooks = {
20742 _default: {
20743 get: function( tween ) {
20744 var result;
20745
20746 // Use a property on the element directly when it is not a DOM element,
20747 // or when there is no matching style property that exists.
20748 if ( tween.elem.nodeType !== 1 ||
20749 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
20750 return tween.elem[ tween.prop ];
20751 }
20752
20753 // Passing an empty string as a 3rd parameter to .css will automatically
20754 // attempt a parseFloat and fallback to a string if the parse fails.
20755 // Simple values such as "10px" are parsed to Float;
20756 // complex values such as "rotate(1rad)" are returned as-is.
20757 result = jQuery.css( tween.elem, tween.prop, "" );
20758
20759 // Empty strings, null, undefined and "auto" are converted to 0.
20760 return !result || result === "auto" ? 0 : result;
20761 },
20762 set: function( tween ) {
20763
20764 // Use step hook for back compat.
20765 // Use cssHook if its there.
20766 // Use .style if available and use plain properties where available.
20767 if ( jQuery.fx.step[ tween.prop ] ) {
20768 jQuery.fx.step[ tween.prop ]( tween );
20769 } else if ( tween.elem.nodeType === 1 &&
20770 ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
20771 jQuery.cssHooks[ tween.prop ] ) ) {
20772 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
20773 } else {
20774 tween.elem[ tween.prop ] = tween.now;
20775 }
20776 }
20777 }
20778 };
20779
20780 // Support: IE <=9 only
20781 // Panic based approach to setting things on disconnected nodes
20782 Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
20783 set: function( tween ) {
20784 if ( tween.elem.nodeType && tween.elem.parentNode ) {
20785 tween.elem[ tween.prop ] = tween.now;
20786 }
20787 }
20788 };
20789
20790 jQuery.easing = {
20791 linear: function( p ) {
20792 return p;
20793 },
20794 swing: function( p ) {
20795 return 0.5 - Math.cos( p * Math.PI ) / 2;
20796 },
20797 _default: "swing"
20798 };
20799
20800 jQuery.fx = Tween.prototype.init;
20801
20802 // Back compat <1.8 extension point
20803 jQuery.fx.step = {};
20804
20805
20806
20807
20808 var
20809 fxNow, inProgress,
20810 rfxtypes = /^(?:toggle|show|hide)$/,
20811 rrun = /queueHooks$/;
20812
20813 function schedule() {
20814 if ( inProgress ) {
20815 if ( document.hidden === false && window.requestAnimationFrame ) {
20816 window.requestAnimationFrame( schedule );
20817 } else {
20818 window.setTimeout( schedule, jQuery.fx.interval );
20819 }
20820
20821 jQuery.fx.tick();
20822 }
20823 }
20824
20825 // Animations created synchronously will run synchronously
20826 function createFxNow() {
20827 window.setTimeout( function() {
20828 fxNow = undefined;
20829 } );
20830 return ( fxNow = jQuery.now() );
20831 }
20832
20833 // Generate parameters to create a standard animation
20834 function genFx( type, includeWidth ) {
20835 var which,
20836 i = 0,
20837 attrs = { height: type };
20838
20839 // If we include width, step value is 1 to do all cssExpand values,
20840 // otherwise step value is 2 to skip over Left and Right
20841 includeWidth = includeWidth ? 1 : 0;
20842 for ( ; i < 4; i += 2 - includeWidth ) {
20843 which = cssExpand[ i ];
20844 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
20845 }
20846
20847 if ( includeWidth ) {
20848 attrs.opacity = attrs.width = type;
20849 }
20850
20851 return attrs;
20852 }
20853
20854 function createTween( value, prop, animation ) {
20855 var tween,
20856 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
20857 index = 0,
20858 length = collection.length;
20859 for ( ; index < length; index++ ) {
20860 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
20861
20862 // We're done with this property
20863 return tween;
20864 }
20865 }
20866 }
20867
20868 function defaultPrefilter( elem, props, opts ) {
20869 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
20870 isBox = "width" in props || "height" in props,
20871 anim = this,
20872 orig = {},
20873 style = elem.style,
20874 hidden = elem.nodeType && isHiddenWithinTree( elem ),
20875 dataShow = dataPriv.get( elem, "fxshow" );
20876
20877 // Queue-skipping animations hijack the fx hooks
20878 if ( !opts.queue ) {
20879 hooks = jQuery._queueHooks( elem, "fx" );
20880 if ( hooks.unqueued == null ) {
20881 hooks.unqueued = 0;
20882 oldfire = hooks.empty.fire;
20883 hooks.empty.fire = function() {
20884 if ( !hooks.unqueued ) {
20885 oldfire();
20886 }
20887 };
20888 }
20889 hooks.unqueued++;
20890
20891 anim.always( function() {
20892
20893 // Ensure the complete handler is called before this completes
20894 anim.always( function() {
20895 hooks.unqueued--;
20896 if ( !jQuery.queue( elem, "fx" ).length ) {
20897 hooks.empty.fire();
20898 }
20899 } );
20900 } );
20901 }
20902
20903 // Detect show/hide animations
20904 for ( prop in props ) {
20905 value = props[ prop ];
20906 if ( rfxtypes.test( value ) ) {
20907 delete props[ prop ];
20908 toggle = toggle || value === "toggle";
20909 if ( value === ( hidden ? "hide" : "show" ) ) {
20910
20911 // Pretend to be hidden if this is a "show" and
20912 // there is still data from a stopped show/hide
20913 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
20914 hidden = true;
20915
20916 // Ignore all other no-op show/hide data
20917 } else {
20918 continue;
20919 }
20920 }
20921 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
20922 }
20923 }
20924
20925 // Bail out if this is a no-op like .hide().hide()
20926 propTween = !jQuery.isEmptyObject( props );
20927 if ( !propTween && jQuery.isEmptyObject( orig ) ) {
20928 return;
20929 }
20930
20931 // Restrict "overflow" and "display" styles during box animations
20932 if ( isBox && elem.nodeType === 1 ) {
20933
20934 // Support: IE <=9 - 11, Edge 12 - 13
20935 // Record all 3 overflow attributes because IE does not infer the shorthand
20936 // from identically-valued overflowX and overflowY
20937 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
20938
20939 // Identify a display type, preferring old show/hide data over the CSS cascade
20940 restoreDisplay = dataShow && dataShow.display;
20941 if ( restoreDisplay == null ) {
20942 restoreDisplay = dataPriv.get( elem, "display" );
20943 }
20944 display = jQuery.css( elem, "display" );
20945 if ( display === "none" ) {
20946 if ( restoreDisplay ) {
20947 display = restoreDisplay;
20948 } else {
20949
20950 // Get nonempty value(s) by temporarily forcing visibility
20951 showHide( [ elem ], true );
20952 restoreDisplay = elem.style.display || restoreDisplay;
20953 display = jQuery.css( elem, "display" );
20954 showHide( [ elem ] );
20955 }
20956 }
20957
20958 // Animate inline elements as inline-block
20959 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
20960 if ( jQuery.css( elem, "float" ) === "none" ) {
20961
20962 // Restore the original display value at the end of pure show/hide animations
20963 if ( !propTween ) {
20964 anim.done( function() {
20965 style.display = restoreDisplay;
20966 } );
20967 if ( restoreDisplay == null ) {
20968 display = style.display;
20969 restoreDisplay = display === "none" ? "" : display;
20970 }
20971 }
20972 style.display = "inline-block";
20973 }
20974 }
20975 }
20976
20977 if ( opts.overflow ) {
20978 style.overflow = "hidden";
20979 anim.always( function() {
20980 style.overflow = opts.overflow[ 0 ];
20981 style.overflowX = opts.overflow[ 1 ];
20982 style.overflowY = opts.overflow[ 2 ];
20983 } );
20984 }
20985
20986 // Implement show/hide animations
20987 propTween = false;
20988 for ( prop in orig ) {
20989
20990 // General show/hide setup for this element animation
20991 if ( !propTween ) {
20992 if ( dataShow ) {
20993 if ( "hidden" in dataShow ) {
20994 hidden = dataShow.hidden;
20995 }
20996 } else {
20997 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
20998 }
20999
21000 // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
21001 if ( toggle ) {
21002 dataShow.hidden = !hidden;
21003 }
21004
21005 // Show elements before animating them
21006 if ( hidden ) {
21007 showHide( [ elem ], true );
21008 }
21009
21010 /* eslint-disable no-loop-func */
21011
21012 anim.done( function() {
21013
21014 /* eslint-enable no-loop-func */
21015
21016 // The final step of a "hide" animation is actually hiding the element
21017 if ( !hidden ) {
21018 showHide( [ elem ] );
21019 }
21020 dataPriv.remove( elem, "fxshow" );
21021 for ( prop in orig ) {
21022 jQuery.style( elem, prop, orig[ prop ] );
21023 }
21024 } );
21025 }
21026
21027 // Per-property setup
21028 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
21029 if ( !( prop in dataShow ) ) {
21030 dataShow[ prop ] = propTween.start;
21031 if ( hidden ) {
21032 propTween.end = propTween.start;
21033 propTween.start = 0;
21034 }
21035 }
21036 }
21037 }
21038
21039 function propFilter( props, specialEasing ) {
21040 var index, name, easing, value, hooks;
21041
21042 // camelCase, specialEasing and expand cssHook pass
21043 for ( index in props ) {
21044 name = jQuery.camelCase( index );
21045 easing = specialEasing[ name ];
21046 value = props[ index ];
21047 if ( Array.isArray( value ) ) {
21048 easing = value[ 1 ];
21049 value = props[ index ] = value[ 0 ];
21050 }
21051
21052 if ( index !== name ) {
21053 props[ name ] = value;
21054 delete props[ index ];
21055 }
21056
21057 hooks = jQuery.cssHooks[ name ];
21058 if ( hooks && "expand" in hooks ) {
21059 value = hooks.expand( value );
21060 delete props[ name ];
21061
21062 // Not quite $.extend, this won't overwrite existing keys.
21063 // Reusing 'index' because we have the correct "name"
21064 for ( index in value ) {
21065 if ( !( index in props ) ) {
21066 props[ index ] = value[ index ];
21067 specialEasing[ index ] = easing;
21068 }
21069 }
21070 } else {
21071 specialEasing[ name ] = easing;
21072 }
21073 }
21074 }
21075
21076 function Animation( elem, properties, options ) {
21077 var result,
21078 stopped,
21079 index = 0,
21080 length = Animation.prefilters.length,
21081 deferred = jQuery.Deferred().always( function() {
21082
21083 // Don't match elem in the :animated selector
21084 delete tick.elem;
21085 } ),
21086 tick = function() {
21087 if ( stopped ) {
21088 return false;
21089 }
21090 var currentTime = fxNow || createFxNow(),
21091 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
21092
21093 // Support: Android 2.3 only
21094 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
21095 temp = remaining / animation.duration || 0,
21096 percent = 1 - temp,
21097 index = 0,
21098 length = animation.tweens.length;
21099
21100 for ( ; index < length; index++ ) {
21101 animation.tweens[ index ].run( percent );
21102 }
21103
21104 deferred.notifyWith( elem, [ animation, percent, remaining ] );
21105
21106 // If there's more to do, yield
21107 if ( percent < 1 && length ) {
21108 return remaining;
21109 }
21110
21111 // If this was an empty animation, synthesize a final progress notification
21112 if ( !length ) {
21113 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21114 }
21115
21116 // Resolve the animation and report its conclusion
21117 deferred.resolveWith( elem, [ animation ] );
21118 return false;
21119 },
21120 animation = deferred.promise( {
21121 elem: elem,
21122 props: jQuery.extend( {}, properties ),
21123 opts: jQuery.extend( true, {
21124 specialEasing: {},
21125 easing: jQuery.easing._default
21126 }, options ),
21127 originalProperties: properties,
21128 originalOptions: options,
21129 startTime: fxNow || createFxNow(),
21130 duration: options.duration,
21131 tweens: [],
21132 createTween: function( prop, end ) {
21133 var tween = jQuery.Tween( elem, animation.opts, prop, end,
21134 animation.opts.specialEasing[ prop ] || animation.opts.easing );
21135 animation.tweens.push( tween );
21136 return tween;
21137 },
21138 stop: function( gotoEnd ) {
21139 var index = 0,
21140
21141 // If we are going to the end, we want to run all the tweens
21142 // otherwise we skip this part
21143 length = gotoEnd ? animation.tweens.length : 0;
21144 if ( stopped ) {
21145 return this;
21146 }
21147 stopped = true;
21148 for ( ; index < length; index++ ) {
21149 animation.tweens[ index ].run( 1 );
21150 }
21151
21152 // Resolve when we played the last frame; otherwise, reject
21153 if ( gotoEnd ) {
21154 deferred.notifyWith( elem, [ animation, 1, 0 ] );
21155 deferred.resolveWith( elem, [ animation, gotoEnd ] );
21156 } else {
21157 deferred.rejectWith( elem, [ animation, gotoEnd ] );
21158 }
21159 return this;
21160 }
21161 } ),
21162 props = animation.props;
21163
21164 propFilter( props, animation.opts.specialEasing );
21165
21166 for ( ; index < length; index++ ) {
21167 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
21168 if ( result ) {
21169 if ( jQuery.isFunction( result.stop ) ) {
21170 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
21171 jQuery.proxy( result.stop, result );
21172 }
21173 return result;
21174 }
21175 }
21176
21177 jQuery.map( props, createTween, animation );
21178
21179 if ( jQuery.isFunction( animation.opts.start ) ) {
21180 animation.opts.start.call( elem, animation );
21181 }
21182
21183 // Attach callbacks from options
21184 animation
21185 .progress( animation.opts.progress )
21186 .done( animation.opts.done, animation.opts.complete )
21187 .fail( animation.opts.fail )
21188 .always( animation.opts.always );
21189
21190 jQuery.fx.timer(
21191 jQuery.extend( tick, {
21192 elem: elem,
21193 anim: animation,
21194 queue: animation.opts.queue
21195 } )
21196 );
21197
21198 return animation;
21199 }
21200
21201 jQuery.Animation = jQuery.extend( Animation, {
21202
21203 tweeners: {
21204 "*": [ function( prop, value ) {
21205 var tween = this.createTween( prop, value );
21206 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
21207 return tween;
21208 } ]
21209 },
21210
21211 tweener: function( props, callback ) {
21212 if ( jQuery.isFunction( props ) ) {
21213 callback = props;
21214 props = [ "*" ];
21215 } else {
21216 props = props.match( rnothtmlwhite );
21217 }
21218
21219 var prop,
21220 index = 0,
21221 length = props.length;
21222
21223 for ( ; index < length; index++ ) {
21224 prop = props[ index ];
21225 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
21226 Animation.tweeners[ prop ].unshift( callback );
21227 }
21228 },
21229
21230 prefilters: [ defaultPrefilter ],
21231
21232 prefilter: function( callback, prepend ) {
21233 if ( prepend ) {
21234 Animation.prefilters.unshift( callback );
21235 } else {
21236 Animation.prefilters.push( callback );
21237 }
21238 }
21239 } );
21240
21241 jQuery.speed = function( speed, easing, fn ) {
21242 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
21243 complete: fn || !fn && easing ||
21244 jQuery.isFunction( speed ) && speed,
21245 duration: speed,
21246 easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
21247 };
21248
21249 // Go to the end state if fx are off
21250 if ( jQuery.fx.off ) {
21251 opt.duration = 0;
21252
21253 } else {
21254 if ( typeof opt.duration !== "number" ) {
21255 if ( opt.duration in jQuery.fx.speeds ) {
21256 opt.duration = jQuery.fx.speeds[ opt.duration ];
21257
21258 } else {
21259 opt.duration = jQuery.fx.speeds._default;
21260 }
21261 }
21262 }
21263
21264 // Normalize opt.queue - true/undefined/null -> "fx"
21265 if ( opt.queue == null || opt.queue === true ) {
21266 opt.queue = "fx";
21267 }
21268
21269 // Queueing
21270 opt.old = opt.complete;
21271
21272 opt.complete = function() {
21273 if ( jQuery.isFunction( opt.old ) ) {
21274 opt.old.call( this );
21275 }
21276
21277 if ( opt.queue ) {
21278 jQuery.dequeue( this, opt.queue );
21279 }
21280 };
21281
21282 return opt;
21283 };
21284
21285 jQuery.fn.extend( {
21286 fadeTo: function( speed, to, easing, callback ) {
21287
21288 // Show any hidden elements after setting opacity to 0
21289 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
21290
21291 // Animate to the value specified
21292 .end().animate( { opacity: to }, speed, easing, callback );
21293 },
21294 animate: function( prop, speed, easing, callback ) {
21295 var empty = jQuery.isEmptyObject( prop ),
21296 optall = jQuery.speed( speed, easing, callback ),
21297 doAnimation = function() {
21298
21299 // Operate on a copy of prop so per-property easing won't be lost
21300 var anim = Animation( this, jQuery.extend( {}, prop ), optall );
21301
21302 // Empty animations, or finishing resolves immediately
21303 if ( empty || dataPriv.get( this, "finish" ) ) {
21304 anim.stop( true );
21305 }
21306 };
21307 doAnimation.finish = doAnimation;
21308
21309 return empty || optall.queue === false ?
21310 this.each( doAnimation ) :
21311 this.queue( optall.queue, doAnimation );
21312 },
21313 stop: function( type, clearQueue, gotoEnd ) {
21314 var stopQueue = function( hooks ) {
21315 var stop = hooks.stop;
21316 delete hooks.stop;
21317 stop( gotoEnd );
21318 };
21319
21320 if ( typeof type !== "string" ) {
21321 gotoEnd = clearQueue;
21322 clearQueue = type;
21323 type = undefined;
21324 }
21325 if ( clearQueue && type !== false ) {
21326 this.queue( type || "fx", [] );
21327 }
21328
21329 return this.each( function() {
21330 var dequeue = true,
21331 index = type != null && type + "queueHooks",
21332 timers = jQuery.timers,
21333 data = dataPriv.get( this );
21334
21335 if ( index ) {
21336 if ( data[ index ] && data[ index ].stop ) {
21337 stopQueue( data[ index ] );
21338 }
21339 } else {
21340 for ( index in data ) {
21341 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
21342 stopQueue( data[ index ] );
21343 }
21344 }
21345 }
21346
21347 for ( index = timers.length; index--; ) {
21348 if ( timers[ index ].elem === this &&
21349 ( type == null || timers[ index ].queue === type ) ) {
21350
21351 timers[ index ].anim.stop( gotoEnd );
21352 dequeue = false;
21353 timers.splice( index, 1 );
21354 }
21355 }
21356
21357 // Start the next in the queue if the last step wasn't forced.
21358 // Timers currently will call their complete callbacks, which
21359 // will dequeue but only if they were gotoEnd.
21360 if ( dequeue || !gotoEnd ) {
21361 jQuery.dequeue( this, type );
21362 }
21363 } );
21364 },
21365 finish: function( type ) {
21366 if ( type !== false ) {
21367 type = type || "fx";
21368 }
21369 return this.each( function() {
21370 var index,
21371 data = dataPriv.get( this ),
21372 queue = data[ type + "queue" ],
21373 hooks = data[ type + "queueHooks" ],
21374 timers = jQuery.timers,
21375 length = queue ? queue.length : 0;
21376
21377 // Enable finishing flag on private data
21378 data.finish = true;
21379
21380 // Empty the queue first
21381 jQuery.queue( this, type, [] );
21382
21383 if ( hooks && hooks.stop ) {
21384 hooks.stop.call( this, true );
21385 }
21386
21387 // Look for any active animations, and finish them
21388 for ( index = timers.length; index--; ) {
21389 if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
21390 timers[ index ].anim.stop( true );
21391 timers.splice( index, 1 );
21392 }
21393 }
21394
21395 // Look for any animations in the old queue and finish them
21396 for ( index = 0; index < length; index++ ) {
21397 if ( queue[ index ] && queue[ index ].finish ) {
21398 queue[ index ].finish.call( this );
21399 }
21400 }
21401
21402 // Turn off finishing flag
21403 delete data.finish;
21404 } );
21405 }
21406 } );
21407
21408 jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
21409 var cssFn = jQuery.fn[ name ];
21410 jQuery.fn[ name ] = function( speed, easing, callback ) {
21411 return speed == null || typeof speed === "boolean" ?
21412 cssFn.apply( this, arguments ) :
21413 this.animate( genFx( name, true ), speed, easing, callback );
21414 };
21415 } );
21416
21417 // Generate shortcuts for custom animations
21418 jQuery.each( {
21419 slideDown: genFx( "show" ),
21420 slideUp: genFx( "hide" ),
21421 slideToggle: genFx( "toggle" ),
21422 fadeIn: { opacity: "show" },
21423 fadeOut: { opacity: "hide" },
21424 fadeToggle: { opacity: "toggle" }
21425 }, function( name, props ) {
21426 jQuery.fn[ name ] = function( speed, easing, callback ) {
21427 return this.animate( props, speed, easing, callback );
21428 };
21429 } );
21430
21431 jQuery.timers = [];
21432 jQuery.fx.tick = function() {
21433 var timer,
21434 i = 0,
21435 timers = jQuery.timers;
21436
21437 fxNow = jQuery.now();
21438
21439 for ( ; i < timers.length; i++ ) {
21440 timer = timers[ i ];
21441
21442 // Run the timer and safely remove it when done (allowing for external removal)
21443 if ( !timer() && timers[ i ] === timer ) {
21444 timers.splice( i--, 1 );
21445 }
21446 }
21447
21448 if ( !timers.length ) {
21449 jQuery.fx.stop();
21450 }
21451 fxNow = undefined;
21452 };
21453
21454 jQuery.fx.timer = function( timer ) {
21455 jQuery.timers.push( timer );
21456 jQuery.fx.start();
21457 };
21458
21459 jQuery.fx.interval = 13;
21460 jQuery.fx.start = function() {
21461 if ( inProgress ) {
21462 return;
21463 }
21464
21465 inProgress = true;
21466 schedule();
21467 };
21468
21469 jQuery.fx.stop = function() {
21470 inProgress = null;
21471 };
21472
21473 jQuery.fx.speeds = {
21474 slow: 600,
21475 fast: 200,
21476
21477 // Default speed
21478 _default: 400
21479 };
21480
21481
21482 // Based off of the plugin by Clint Helfers, with permission.
21483 // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
21484 jQuery.fn.delay = function( time, type ) {
21485 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
21486 type = type || "fx";
21487
21488 return this.queue( type, function( next, hooks ) {
21489 var timeout = window.setTimeout( next, time );
21490 hooks.stop = function() {
21491 window.clearTimeout( timeout );
21492 };
21493 } );
21494 };
21495
21496
21497 ( function() {
21498 var input = document.createElement( "input" ),
21499 select = document.createElement( "select" ),
21500 opt = select.appendChild( document.createElement( "option" ) );
21501
21502 input.type = "checkbox";
21503
21504 // Support: Android <=4.3 only
21505 // Default value for a checkbox should be "on"
21506 support.checkOn = input.value !== "";
21507
21508 // Support: IE <=11 only
21509 // Must access selectedIndex to make default options select
21510 support.optSelected = opt.selected;
21511
21512 // Support: IE <=11 only
21513 // An input loses its value after becoming a radio
21514 input = document.createElement( "input" );
21515 input.value = "t";
21516 input.type = "radio";
21517 support.radioValue = input.value === "t";
21518 } )();
21519
21520
21521 var boolHook,
21522 attrHandle = jQuery.expr.attrHandle;
21523
21524 jQuery.fn.extend( {
21525 attr: function( name, value ) {
21526 return access( this, jQuery.attr, name, value, arguments.length > 1 );
21527 },
21528
21529 removeAttr: function( name ) {
21530 return this.each( function() {
21531 jQuery.removeAttr( this, name );
21532 } );
21533 }
21534 } );
21535
21536 jQuery.extend( {
21537 attr: function( elem, name, value ) {
21538 var ret, hooks,
21539 nType = elem.nodeType;
21540
21541 // Don't get/set attributes on text, comment and attribute nodes
21542 if ( nType === 3 || nType === 8 || nType === 2 ) {
21543 return;
21544 }
21545
21546 // Fallback to prop when attributes are not supported
21547 if ( typeof elem.getAttribute === "undefined" ) {
21548 return jQuery.prop( elem, name, value );
21549 }
21550
21551 // Attribute hooks are determined by the lowercase version
21552 // Grab necessary hook if one is defined
21553 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21554 hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
21555 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
21556 }
21557
21558 if ( value !== undefined ) {
21559 if ( value === null ) {
21560 jQuery.removeAttr( elem, name );
21561 return;
21562 }
21563
21564 if ( hooks && "set" in hooks &&
21565 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21566 return ret;
21567 }
21568
21569 elem.setAttribute( name, value + "" );
21570 return value;
21571 }
21572
21573 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21574 return ret;
21575 }
21576
21577 ret = jQuery.find.attr( elem, name );
21578
21579 // Non-existent attributes return null, we normalize to undefined
21580 return ret == null ? undefined : ret;
21581 },
21582
21583 attrHooks: {
21584 type: {
21585 set: function( elem, value ) {
21586 if ( !support.radioValue && value === "radio" &&
21587 nodeName( elem, "input" ) ) {
21588 var val = elem.value;
21589 elem.setAttribute( "type", value );
21590 if ( val ) {
21591 elem.value = val;
21592 }
21593 return value;
21594 }
21595 }
21596 }
21597 },
21598
21599 removeAttr: function( elem, value ) {
21600 var name,
21601 i = 0,
21602
21603 // Attribute names can contain non-HTML whitespace characters
21604 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
21605 attrNames = value && value.match( rnothtmlwhite );
21606
21607 if ( attrNames && elem.nodeType === 1 ) {
21608 while ( ( name = attrNames[ i++ ] ) ) {
21609 elem.removeAttribute( name );
21610 }
21611 }
21612 }
21613 } );
21614
21615 // Hooks for boolean attributes
21616 boolHook = {
21617 set: function( elem, value, name ) {
21618 if ( value === false ) {
21619
21620 // Remove boolean attributes when set to false
21621 jQuery.removeAttr( elem, name );
21622 } else {
21623 elem.setAttribute( name, name );
21624 }
21625 return name;
21626 }
21627 };
21628
21629 jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
21630 var getter = attrHandle[ name ] || jQuery.find.attr;
21631
21632 attrHandle[ name ] = function( elem, name, isXML ) {
21633 var ret, handle,
21634 lowercaseName = name.toLowerCase();
21635
21636 if ( !isXML ) {
21637
21638 // Avoid an infinite loop by temporarily removing this function from the getter
21639 handle = attrHandle[ lowercaseName ];
21640 attrHandle[ lowercaseName ] = ret;
21641 ret = getter( elem, name, isXML ) != null ?
21642 lowercaseName :
21643 null;
21644 attrHandle[ lowercaseName ] = handle;
21645 }
21646 return ret;
21647 };
21648 } );
21649
21650
21651
21652
21653 var rfocusable = /^(?:input|select|textarea|button)$/i,
21654 rclickable = /^(?:a|area)$/i;
21655
21656 jQuery.fn.extend( {
21657 prop: function( name, value ) {
21658 return access( this, jQuery.prop, name, value, arguments.length > 1 );
21659 },
21660
21661 removeProp: function( name ) {
21662 return this.each( function() {
21663 delete this[ jQuery.propFix[ name ] || name ];
21664 } );
21665 }
21666 } );
21667
21668 jQuery.extend( {
21669 prop: function( elem, name, value ) {
21670 var ret, hooks,
21671 nType = elem.nodeType;
21672
21673 // Don't get/set properties on text, comment and attribute nodes
21674 if ( nType === 3 || nType === 8 || nType === 2 ) {
21675 return;
21676 }
21677
21678 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
21679
21680 // Fix name and attach hooks
21681 name = jQuery.propFix[ name ] || name;
21682 hooks = jQuery.propHooks[ name ];
21683 }
21684
21685 if ( value !== undefined ) {
21686 if ( hooks && "set" in hooks &&
21687 ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
21688 return ret;
21689 }
21690
21691 return ( elem[ name ] = value );
21692 }
21693
21694 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
21695 return ret;
21696 }
21697
21698 return elem[ name ];
21699 },
21700
21701 propHooks: {
21702 tabIndex: {
21703 get: function( elem ) {
21704
21705 // Support: IE <=9 - 11 only
21706 // elem.tabIndex doesn't always return the
21707 // correct value when it hasn't been explicitly set
21708 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
21709 // Use proper attribute retrieval(#12072)
21710 var tabindex = jQuery.find.attr( elem, "tabindex" );
21711
21712 if ( tabindex ) {
21713 return parseInt( tabindex, 10 );
21714 }
21715
21716 if (
21717 rfocusable.test( elem.nodeName ) ||
21718 rclickable.test( elem.nodeName ) &&
21719 elem.href
21720 ) {
21721 return 0;
21722 }
21723
21724 return -1;
21725 }
21726 }
21727 },
21728
21729 propFix: {
21730 "for": "htmlFor",
21731 "class": "className"
21732 }
21733 } );
21734
21735 // Support: IE <=11 only
21736 // Accessing the selectedIndex property
21737 // forces the browser to respect setting selected
21738 // on the option
21739 // The getter ensures a default option is selected
21740 // when in an optgroup
21741 // eslint rule "no-unused-expressions" is disabled for this code
21742 // since it considers such accessions noop
21743 if ( !support.optSelected ) {
21744 jQuery.propHooks.selected = {
21745 get: function( elem ) {
21746
21747 /* eslint no-unused-expressions: "off" */
21748
21749 var parent = elem.parentNode;
21750 if ( parent && parent.parentNode ) {
21751 parent.parentNode.selectedIndex;
21752 }
21753 return null;
21754 },
21755 set: function( elem ) {
21756
21757 /* eslint no-unused-expressions: "off" */
21758
21759 var parent = elem.parentNode;
21760 if ( parent ) {
21761 parent.selectedIndex;
21762
21763 if ( parent.parentNode ) {
21764 parent.parentNode.selectedIndex;
21765 }
21766 }
21767 }
21768 };
21769 }
21770
21771 jQuery.each( [
21772 "tabIndex",
21773 "readOnly",
21774 "maxLength",
21775 "cellSpacing",
21776 "cellPadding",
21777 "rowSpan",
21778 "colSpan",
21779 "useMap",
21780 "frameBorder",
21781 "contentEditable"
21782 ], function() {
21783 jQuery.propFix[ this.toLowerCase() ] = this;
21784 } );
21785
21786
21787
21788
21789 // Strip and collapse whitespace according to HTML spec
21790 // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
21791 function stripAndCollapse( value ) {
21792 var tokens = value.match( rnothtmlwhite ) || [];
21793 return tokens.join( " " );
21794 }
21795
21796
21797 function getClass( elem ) {
21798 return elem.getAttribute && elem.getAttribute( "class" ) || "";
21799 }
21800
21801 jQuery.fn.extend( {
21802 addClass: function( value ) {
21803 var classes, elem, cur, curValue, clazz, j, finalValue,
21804 i = 0;
21805
21806 if ( jQuery.isFunction( value ) ) {
21807 return this.each( function( j ) {
21808 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
21809 } );
21810 }
21811
21812 if ( typeof value === "string" && value ) {
21813 classes = value.match( rnothtmlwhite ) || [];
21814
21815 while ( ( elem = this[ i++ ] ) ) {
21816 curValue = getClass( elem );
21817 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21818
21819 if ( cur ) {
21820 j = 0;
21821 while ( ( clazz = classes[ j++ ] ) ) {
21822 if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
21823 cur += clazz + " ";
21824 }
21825 }
21826
21827 // Only assign if different to avoid unneeded rendering.
21828 finalValue = stripAndCollapse( cur );
21829 if ( curValue !== finalValue ) {
21830 elem.setAttribute( "class", finalValue );
21831 }
21832 }
21833 }
21834 }
21835
21836 return this;
21837 },
21838
21839 removeClass: function( value ) {
21840 var classes, elem, cur, curValue, clazz, j, finalValue,
21841 i = 0;
21842
21843 if ( jQuery.isFunction( value ) ) {
21844 return this.each( function( j ) {
21845 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
21846 } );
21847 }
21848
21849 if ( !arguments.length ) {
21850 return this.attr( "class", "" );
21851 }
21852
21853 if ( typeof value === "string" && value ) {
21854 classes = value.match( rnothtmlwhite ) || [];
21855
21856 while ( ( elem = this[ i++ ] ) ) {
21857 curValue = getClass( elem );
21858
21859 // This expression is here for better compressibility (see addClass)
21860 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
21861
21862 if ( cur ) {
21863 j = 0;
21864 while ( ( clazz = classes[ j++ ] ) ) {
21865
21866 // Remove *all* instances
21867 while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
21868 cur = cur.replace( " " + clazz + " ", " " );
21869 }
21870 }
21871
21872 // Only assign if different to avoid unneeded rendering.
21873 finalValue = stripAndCollapse( cur );
21874 if ( curValue !== finalValue ) {
21875 elem.setAttribute( "class", finalValue );
21876 }
21877 }
21878 }
21879 }
21880
21881 return this;
21882 },
21883
21884 toggleClass: function( value, stateVal ) {
21885 var type = typeof value;
21886
21887 if ( typeof stateVal === "boolean" && type === "string" ) {
21888 return stateVal ? this.addClass( value ) : this.removeClass( value );
21889 }
21890
21891 if ( jQuery.isFunction( value ) ) {
21892 return this.each( function( i ) {
21893 jQuery( this ).toggleClass(
21894 value.call( this, i, getClass( this ), stateVal ),
21895 stateVal
21896 );
21897 } );
21898 }
21899
21900 return this.each( function() {
21901 var className, i, self, classNames;
21902
21903 if ( type === "string" ) {
21904
21905 // Toggle individual class names
21906 i = 0;
21907 self = jQuery( this );
21908 classNames = value.match( rnothtmlwhite ) || [];
21909
21910 while ( ( className = classNames[ i++ ] ) ) {
21911
21912 // Check each className given, space separated list
21913 if ( self.hasClass( className ) ) {
21914 self.removeClass( className );
21915 } else {
21916 self.addClass( className );
21917 }
21918 }
21919
21920 // Toggle whole class name
21921 } else if ( value === undefined || type === "boolean" ) {
21922 className = getClass( this );
21923 if ( className ) {
21924
21925 // Store className if set
21926 dataPriv.set( this, "__className__", className );
21927 }
21928
21929 // If the element has a class name or if we're passed `false`,
21930 // then remove the whole classname (if there was one, the above saved it).
21931 // Otherwise bring back whatever was previously saved (if anything),
21932 // falling back to the empty string if nothing was stored.
21933 if ( this.setAttribute ) {
21934 this.setAttribute( "class",
21935 className || value === false ?
21936 "" :
21937 dataPriv.get( this, "__className__" ) || ""
21938 );
21939 }
21940 }
21941 } );
21942 },
21943
21944 hasClass: function( selector ) {
21945 var className, elem,
21946 i = 0;
21947
21948 className = " " + selector + " ";
21949 while ( ( elem = this[ i++ ] ) ) {
21950 if ( elem.nodeType === 1 &&
21951 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
21952 return true;
21953 }
21954 }
21955
21956 return false;
21957 }
21958 } );
21959
21960
21961
21962
21963 var rreturn = /\r/g;
21964
21965 jQuery.fn.extend( {
21966 val: function( value ) {
21967 var hooks, ret, isFunction,
21968 elem = this[ 0 ];
21969
21970 if ( !arguments.length ) {
21971 if ( elem ) {
21972 hooks = jQuery.valHooks[ elem.type ] ||
21973 jQuery.valHooks[ elem.nodeName.toLowerCase() ];
21974
21975 if ( hooks &&
21976 "get" in hooks &&
21977 ( ret = hooks.get( elem, "value" ) ) !== undefined
21978 ) {
21979 return ret;
21980 }
21981
21982 ret = elem.value;
21983
21984 // Handle most common string cases
21985 if ( typeof ret === "string" ) {
21986 return ret.replace( rreturn, "" );
21987 }
21988
21989 // Handle cases where value is null/undef or number
21990 return ret == null ? "" : ret;
21991 }
21992
21993 return;
21994 }
21995
21996 isFunction = jQuery.isFunction( value );
21997
21998 return this.each( function( i ) {
21999 var val;
22000
22001 if ( this.nodeType !== 1 ) {
22002 return;
22003 }
22004
22005 if ( isFunction ) {
22006 val = value.call( this, i, jQuery( this ).val() );
22007 } else {
22008 val = value;
22009 }
22010
22011 // Treat null/undefined as ""; convert numbers to string
22012 if ( val == null ) {
22013 val = "";
22014
22015 } else if ( typeof val === "number" ) {
22016 val += "";
22017
22018 } else if ( Array.isArray( val ) ) {
22019 val = jQuery.map( val, function( value ) {
22020 return value == null ? "" : value + "";
22021 } );
22022 }
22023
22024 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
22025
22026 // If set returns undefined, fall back to normal setting
22027 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
22028 this.value = val;
22029 }
22030 } );
22031 }
22032 } );
22033
22034 jQuery.extend( {
22035 valHooks: {
22036 option: {
22037 get: function( elem ) {
22038
22039 var val = jQuery.find.attr( elem, "value" );
22040 return val != null ?
22041 val :
22042
22043 // Support: IE <=10 - 11 only
22044 // option.text throws exceptions (#14686, #14858)
22045 // Strip and collapse whitespace
22046 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
22047 stripAndCollapse( jQuery.text( elem ) );
22048 }
22049 },
22050 select: {
22051 get: function( elem ) {
22052 var value, option, i,
22053 options = elem.options,
22054 index = elem.selectedIndex,
22055 one = elem.type === "select-one",
22056 values = one ? null : [],
22057 max = one ? index + 1 : options.length;
22058
22059 if ( index < 0 ) {
22060 i = max;
22061
22062 } else {
22063 i = one ? index : 0;
22064 }
22065
22066 // Loop through all the selected options
22067 for ( ; i < max; i++ ) {
22068 option = options[ i ];
22069
22070 // Support: IE <=9 only
22071 // IE8-9 doesn't update selected after form reset (#2551)
22072 if ( ( option.selected || i === index ) &&
22073
22074 // Don't return options that are disabled or in a disabled optgroup
22075 !option.disabled &&
22076 ( !option.parentNode.disabled ||
22077 !nodeName( option.parentNode, "optgroup" ) ) ) {
22078
22079 // Get the specific value for the option
22080 value = jQuery( option ).val();
22081
22082 // We don't need an array for one selects
22083 if ( one ) {
22084 return value;
22085 }
22086
22087 // Multi-Selects return an array
22088 values.push( value );
22089 }
22090 }
22091
22092 return values;
22093 },
22094
22095 set: function( elem, value ) {
22096 var optionSet, option,
22097 options = elem.options,
22098 values = jQuery.makeArray( value ),
22099 i = options.length;
22100
22101 while ( i-- ) {
22102 option = options[ i ];
22103
22104 /* eslint-disable no-cond-assign */
22105
22106 if ( option.selected =
22107 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
22108 ) {
22109 optionSet = true;
22110 }
22111
22112 /* eslint-enable no-cond-assign */
22113 }
22114
22115 // Force browsers to behave consistently when non-matching value is set
22116 if ( !optionSet ) {
22117 elem.selectedIndex = -1;
22118 }
22119 return values;
22120 }
22121 }
22122 }
22123 } );
22124
22125 // Radios and checkboxes getter/setter
22126 jQuery.each( [ "radio", "checkbox" ], function() {
22127 jQuery.valHooks[ this ] = {
22128 set: function( elem, value ) {
22129 if ( Array.isArray( value ) ) {
22130 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
22131 }
22132 }
22133 };
22134 if ( !support.checkOn ) {
22135 jQuery.valHooks[ this ].get = function( elem ) {
22136 return elem.getAttribute( "value" ) === null ? "on" : elem.value;
22137 };
22138 }
22139 } );
22140
22141
22142
22143
22144 // Return jQuery for attributes-only inclusion
22145
22146
22147 var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
22148
22149 jQuery.extend( jQuery.event, {
22150
22151 trigger: function( event, data, elem, onlyHandlers ) {
22152
22153 var i, cur, tmp, bubbleType, ontype, handle, special,
22154 eventPath = [ elem || document ],
22155 type = hasOwn.call( event, "type" ) ? event.type : event,
22156 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
22157
22158 cur = tmp = elem = elem || document;
22159
22160 // Don't do events on text and comment nodes
22161 if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
22162 return;
22163 }
22164
22165 // focus/blur morphs to focusin/out; ensure we're not firing them right now
22166 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
22167 return;
22168 }
22169
22170 if ( type.indexOf( "." ) > -1 ) {
22171
22172 // Namespaced trigger; create a regexp to match event type in handle()
22173 namespaces = type.split( "." );
22174 type = namespaces.shift();
22175 namespaces.sort();
22176 }
22177 ontype = type.indexOf( ":" ) < 0 && "on" + type;
22178
22179 // Caller can pass in a jQuery.Event object, Object, or just an event type string
22180 event = event[ jQuery.expando ] ?
22181 event :
22182 new jQuery.Event( type, typeof event === "object" && event );
22183
22184 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
22185 event.isTrigger = onlyHandlers ? 2 : 3;
22186 event.namespace = namespaces.join( "." );
22187 event.rnamespace = event.namespace ?
22188 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
22189 null;
22190
22191 // Clean up the event in case it is being reused
22192 event.result = undefined;
22193 if ( !event.target ) {
22194 event.target = elem;
22195 }
22196
22197 // Clone any incoming data and prepend the event, creating the handler arg list
22198 data = data == null ?
22199 [ event ] :
22200 jQuery.makeArray( data, [ event ] );
22201
22202 // Allow special events to draw outside the lines
22203 special = jQuery.event.special[ type ] || {};
22204 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
22205 return;
22206 }
22207
22208 // Determine event propagation path in advance, per W3C events spec (#9951)
22209 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
22210 if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
22211
22212 bubbleType = special.delegateType || type;
22213 if ( !rfocusMorph.test( bubbleType + type ) ) {
22214 cur = cur.parentNode;
22215 }
22216 for ( ; cur; cur = cur.parentNode ) {
22217 eventPath.push( cur );
22218 tmp = cur;
22219 }
22220
22221 // Only add window if we got to document (e.g., not plain obj or detached DOM)
22222 if ( tmp === ( elem.ownerDocument || document ) ) {
22223 eventPath.push( tmp.defaultView || tmp.parentWindow || window );
22224 }
22225 }
22226
22227 // Fire handlers on the event path
22228 i = 0;
22229 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
22230
22231 event.type = i > 1 ?
22232 bubbleType :
22233 special.bindType || type;
22234
22235 // jQuery handler
22236 handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
22237 dataPriv.get( cur, "handle" );
22238 if ( handle ) {
22239 handle.apply( cur, data );
22240 }
22241
22242 // Native handler
22243 handle = ontype && cur[ ontype ];
22244 if ( handle && handle.apply && acceptData( cur ) ) {
22245 event.result = handle.apply( cur, data );
22246 if ( event.result === false ) {
22247 event.preventDefault();
22248 }
22249 }
22250 }
22251 event.type = type;
22252
22253 // If nobody prevented the default action, do it now
22254 if ( !onlyHandlers && !event.isDefaultPrevented() ) {
22255
22256 if ( ( !special._default ||
22257 special._default.apply( eventPath.pop(), data ) === false ) &&
22258 acceptData( elem ) ) {
22259
22260 // Call a native DOM method on the target with the same name as the event.
22261 // Don't do default actions on window, that's where global variables be (#6170)
22262 if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
22263
22264 // Don't re-trigger an onFOO event when we call its FOO() method
22265 tmp = elem[ ontype ];
22266
22267 if ( tmp ) {
22268 elem[ ontype ] = null;
22269 }
22270
22271 // Prevent re-triggering of the same event, since we already bubbled it above
22272 jQuery.event.triggered = type;
22273 elem[ type ]();
22274 jQuery.event.triggered = undefined;
22275
22276 if ( tmp ) {
22277 elem[ ontype ] = tmp;
22278 }
22279 }
22280 }
22281 }
22282
22283 return event.result;
22284 },
22285
22286 // Piggyback on a donor event to simulate a different one
22287 // Used only for `focus(in | out)` events
22288 simulate: function( type, elem, event ) {
22289 var e = jQuery.extend(
22290 new jQuery.Event(),
22291 event,
22292 {
22293 type: type,
22294 isSimulated: true
22295 }
22296 );
22297
22298 jQuery.event.trigger( e, null, elem );
22299 }
22300
22301 } );
22302
22303 jQuery.fn.extend( {
22304
22305 trigger: function( type, data ) {
22306 return this.each( function() {
22307 jQuery.event.trigger( type, data, this );
22308 } );
22309 },
22310 triggerHandler: function( type, data ) {
22311 var elem = this[ 0 ];
22312 if ( elem ) {
22313 return jQuery.event.trigger( type, data, elem, true );
22314 }
22315 }
22316 } );
22317
22318
22319 jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
22320 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
22321 "change select submit keydown keypress keyup contextmenu" ).split( " " ),
22322 function( i, name ) {
22323
22324 // Handle event binding
22325 jQuery.fn[ name ] = function( data, fn ) {
22326 return arguments.length > 0 ?
22327 this.on( name, null, data, fn ) :
22328 this.trigger( name );
22329 };
22330 } );
22331
22332 jQuery.fn.extend( {
22333 hover: function( fnOver, fnOut ) {
22334 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
22335 }
22336 } );
22337
22338
22339
22340
22341 support.focusin = "onfocusin" in window;
22342
22343
22344 // Support: Firefox <=44
22345 // Firefox doesn't have focus(in | out) events
22346 // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
22347 //
22348 // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
22349 // focus(in | out) events fire after focus & blur events,
22350 // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
22351 // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
22352 if ( !support.focusin ) {
22353 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
22354
22355 // Attach a single capturing handler on the document while someone wants focusin/focusout
22356 var handler = function( event ) {
22357 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
22358 };
22359
22360 jQuery.event.special[ fix ] = {
22361 setup: function() {
22362 var doc = this.ownerDocument || this,
22363 attaches = dataPriv.access( doc, fix );
22364
22365 if ( !attaches ) {
22366 doc.addEventListener( orig, handler, true );
22367 }
22368 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
22369 },
22370 teardown: function() {
22371 var doc = this.ownerDocument || this,
22372 attaches = dataPriv.access( doc, fix ) - 1;
22373
22374 if ( !attaches ) {
22375 doc.removeEventListener( orig, handler, true );
22376 dataPriv.remove( doc, fix );
22377
22378 } else {
22379 dataPriv.access( doc, fix, attaches );
22380 }
22381 }
22382 };
22383 } );
22384 }
22385 var location = window.location;
22386
22387 var nonce = jQuery.now();
22388
22389 var rquery = ( /\?/ );
22390
22391
22392
22393 // Cross-browser xml parsing
22394 jQuery.parseXML = function( data ) {
22395 var xml;
22396 if ( !data || typeof data !== "string" ) {
22397 return null;
22398 }
22399
22400 // Support: IE 9 - 11 only
22401 // IE throws on parseFromString with invalid input.
22402 try {
22403 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
22404 } catch ( e ) {
22405 xml = undefined;
22406 }
22407
22408 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
22409 jQuery.error( "Invalid XML: " + data );
22410 }
22411 return xml;
22412 };
22413
22414
22415 var
22416 rbracket = /\[\]$/,
22417 rCRLF = /\r?\n/g,
22418 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
22419 rsubmittable = /^(?:input|select|textarea|keygen)/i;
22420
22421 function buildParams( prefix, obj, traditional, add ) {
22422 var name;
22423
22424 if ( Array.isArray( obj ) ) {
22425
22426 // Serialize array item.
22427 jQuery.each( obj, function( i, v ) {
22428 if ( traditional || rbracket.test( prefix ) ) {
22429
22430 // Treat each array item as a scalar.
22431 add( prefix, v );
22432
22433 } else {
22434
22435 // Item is non-scalar (array or object), encode its numeric index.
22436 buildParams(
22437 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
22438 v,
22439 traditional,
22440 add
22441 );
22442 }
22443 } );
22444
22445 } else if ( !traditional && jQuery.type( obj ) === "object" ) {
22446
22447 // Serialize object item.
22448 for ( name in obj ) {
22449 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
22450 }
22451
22452 } else {
22453
22454 // Serialize scalar item.
22455 add( prefix, obj );
22456 }
22457 }
22458
22459 // Serialize an array of form elements or a set of
22460 // key/values into a query string
22461 jQuery.param = function( a, traditional ) {
22462 var prefix,
22463 s = [],
22464 add = function( key, valueOrFunction ) {
22465
22466 // If value is a function, invoke it and use its return value
22467 var value = jQuery.isFunction( valueOrFunction ) ?
22468 valueOrFunction() :
22469 valueOrFunction;
22470
22471 s[ s.length ] = encodeURIComponent( key ) + "=" +
22472 encodeURIComponent( value == null ? "" : value );
22473 };
22474
22475 // If an array was passed in, assume that it is an array of form elements.
22476 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
22477
22478 // Serialize the form elements
22479 jQuery.each( a, function() {
22480 add( this.name, this.value );
22481 } );
22482
22483 } else {
22484
22485 // If traditional, encode the "old" way (the way 1.3.2 or older
22486 // did it), otherwise encode params recursively.
22487 for ( prefix in a ) {
22488 buildParams( prefix, a[ prefix ], traditional, add );
22489 }
22490 }
22491
22492 // Return the resulting serialization
22493 return s.join( "&" );
22494 };
22495
22496 jQuery.fn.extend( {
22497 serialize: function() {
22498 return jQuery.param( this.serializeArray() );
22499 },
22500 serializeArray: function() {
22501 return this.map( function() {
22502
22503 // Can add propHook for "elements" to filter or add form elements
22504 var elements = jQuery.prop( this, "elements" );
22505 return elements ? jQuery.makeArray( elements ) : this;
22506 } )
22507 .filter( function() {
22508 var type = this.type;
22509
22510 // Use .is( ":disabled" ) so that fieldset[disabled] works
22511 return this.name && !jQuery( this ).is( ":disabled" ) &&
22512 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
22513 ( this.checked || !rcheckableType.test( type ) );
22514 } )
22515 .map( function( i, elem ) {
22516 var val = jQuery( this ).val();
22517
22518 if ( val == null ) {
22519 return null;
22520 }
22521
22522 if ( Array.isArray( val ) ) {
22523 return jQuery.map( val, function( val ) {
22524 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22525 } );
22526 }
22527
22528 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
22529 } ).get();
22530 }
22531 } );
22532
22533
22534 var
22535 r20 = /%20/g,
22536 rhash = /#.*$/,
22537 rantiCache = /([?&])_=[^&]*/,
22538 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
22539
22540 // #7653, #8125, #8152: local protocol detection
22541 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
22542 rnoContent = /^(?:GET|HEAD)$/,
22543 rprotocol = /^\/\//,
22544
22545 /* Prefilters
22546 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
22547 * 2) These are called:
22548 * - BEFORE asking for a transport
22549 * - AFTER param serialization (s.data is a string if s.processData is true)
22550 * 3) key is the dataType
22551 * 4) the catchall symbol "*" can be used
22552 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
22553 */
22554 prefilters = {},
22555
22556 /* Transports bindings
22557 * 1) key is the dataType
22558 * 2) the catchall symbol "*" can be used
22559 * 3) selection will start with transport dataType and THEN go to "*" if needed
22560 */
22561 transports = {},
22562
22563 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
22564 allTypes = "*/".concat( "*" ),
22565
22566 // Anchor tag for parsing the document origin
22567 originAnchor = document.createElement( "a" );
22568 originAnchor.href = location.href;
22569
22570 // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
22571 function addToPrefiltersOrTransports( structure ) {
22572
22573 // dataTypeExpression is optional and defaults to "*"
22574 return function( dataTypeExpression, func ) {
22575
22576 if ( typeof dataTypeExpression !== "string" ) {
22577 func = dataTypeExpression;
22578 dataTypeExpression = "*";
22579 }
22580
22581 var dataType,
22582 i = 0,
22583 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
22584
22585 if ( jQuery.isFunction( func ) ) {
22586
22587 // For each dataType in the dataTypeExpression
22588 while ( ( dataType = dataTypes[ i++ ] ) ) {
22589
22590 // Prepend if requested
22591 if ( dataType[ 0 ] === "+" ) {
22592 dataType = dataType.slice( 1 ) || "*";
22593 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
22594
22595 // Otherwise append
22596 } else {
22597 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
22598 }
22599 }
22600 }
22601 };
22602 }
22603
22604 // Base inspection function for prefilters and transports
22605 function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
22606
22607 var inspected = {},
22608 seekingTransport = ( structure === transports );
22609
22610 function inspect( dataType ) {
22611 var selected;
22612 inspected[ dataType ] = true;
22613 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
22614 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
22615 if ( typeof dataTypeOrTransport === "string" &&
22616 !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
22617
22618 options.dataTypes.unshift( dataTypeOrTransport );
22619 inspect( dataTypeOrTransport );
22620 return false;
22621 } else if ( seekingTransport ) {
22622 return !( selected = dataTypeOrTransport );
22623 }
22624 } );
22625 return selected;
22626 }
22627
22628 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
22629 }
22630
22631 // A special extend for ajax options
22632 // that takes "flat" options (not to be deep extended)
22633 // Fixes #9887
22634 function ajaxExtend( target, src ) {
22635 var key, deep,
22636 flatOptions = jQuery.ajaxSettings.flatOptions || {};
22637
22638 for ( key in src ) {
22639 if ( src[ key ] !== undefined ) {
22640 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
22641 }
22642 }
22643 if ( deep ) {
22644 jQuery.extend( true, target, deep );
22645 }
22646
22647 return target;
22648 }
22649
22650 /* Handles responses to an ajax request:
22651 * - finds the right dataType (mediates between content-type and expected dataType)
22652 * - returns the corresponding response
22653 */
22654 function ajaxHandleResponses( s, jqXHR, responses ) {
22655
22656 var ct, type, finalDataType, firstDataType,
22657 contents = s.contents,
22658 dataTypes = s.dataTypes;
22659
22660 // Remove auto dataType and get content-type in the process
22661 while ( dataTypes[ 0 ] === "*" ) {
22662 dataTypes.shift();
22663 if ( ct === undefined ) {
22664 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
22665 }
22666 }
22667
22668 // Check if we're dealing with a known content-type
22669 if ( ct ) {
22670 for ( type in contents ) {
22671 if ( contents[ type ] && contents[ type ].test( ct ) ) {
22672 dataTypes.unshift( type );
22673 break;
22674 }
22675 }
22676 }
22677
22678 // Check to see if we have a response for the expected dataType
22679 if ( dataTypes[ 0 ] in responses ) {
22680 finalDataType = dataTypes[ 0 ];
22681 } else {
22682
22683 // Try convertible dataTypes
22684 for ( type in responses ) {
22685 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
22686 finalDataType = type;
22687 break;
22688 }
22689 if ( !firstDataType ) {
22690 firstDataType = type;
22691 }
22692 }
22693
22694 // Or just use first one
22695 finalDataType = finalDataType || firstDataType;
22696 }
22697
22698 // If we found a dataType
22699 // We add the dataType to the list if needed
22700 // and return the corresponding response
22701 if ( finalDataType ) {
22702 if ( finalDataType !== dataTypes[ 0 ] ) {
22703 dataTypes.unshift( finalDataType );
22704 }
22705 return responses[ finalDataType ];
22706 }
22707 }
22708
22709 /* Chain conversions given the request and the original response
22710 * Also sets the responseXXX fields on the jqXHR instance
22711 */
22712 function ajaxConvert( s, response, jqXHR, isSuccess ) {
22713 var conv2, current, conv, tmp, prev,
22714 converters = {},
22715
22716 // Work with a copy of dataTypes in case we need to modify it for conversion
22717 dataTypes = s.dataTypes.slice();
22718
22719 // Create converters map with lowercased keys
22720 if ( dataTypes[ 1 ] ) {
22721 for ( conv in s.converters ) {
22722 converters[ conv.toLowerCase() ] = s.converters[ conv ];
22723 }
22724 }
22725
22726 current = dataTypes.shift();
22727
22728 // Convert to each sequential dataType
22729 while ( current ) {
22730
22731 if ( s.responseFields[ current ] ) {
22732 jqXHR[ s.responseFields[ current ] ] = response;
22733 }
22734
22735 // Apply the dataFilter if provided
22736 if ( !prev && isSuccess && s.dataFilter ) {
22737 response = s.dataFilter( response, s.dataType );
22738 }
22739
22740 prev = current;
22741 current = dataTypes.shift();
22742
22743 if ( current ) {
22744
22745 // There's only work to do if current dataType is non-auto
22746 if ( current === "*" ) {
22747
22748 current = prev;
22749
22750 // Convert response if prev dataType is non-auto and differs from current
22751 } else if ( prev !== "*" && prev !== current ) {
22752
22753 // Seek a direct converter
22754 conv = converters[ prev + " " + current ] || converters[ "* " + current ];
22755
22756 // If none found, seek a pair
22757 if ( !conv ) {
22758 for ( conv2 in converters ) {
22759
22760 // If conv2 outputs current
22761 tmp = conv2.split( " " );
22762 if ( tmp[ 1 ] === current ) {
22763
22764 // If prev can be converted to accepted input
22765 conv = converters[ prev + " " + tmp[ 0 ] ] ||
22766 converters[ "* " + tmp[ 0 ] ];
22767 if ( conv ) {
22768
22769 // Condense equivalence converters
22770 if ( conv === true ) {
22771 conv = converters[ conv2 ];
22772
22773 // Otherwise, insert the intermediate dataType
22774 } else if ( converters[ conv2 ] !== true ) {
22775 current = tmp[ 0 ];
22776 dataTypes.unshift( tmp[ 1 ] );
22777 }
22778 break;
22779 }
22780 }
22781 }
22782 }
22783
22784 // Apply converter (if not an equivalence)
22785 if ( conv !== true ) {
22786
22787 // Unless errors are allowed to bubble, catch and return them
22788 if ( conv && s.throws ) {
22789 response = conv( response );
22790 } else {
22791 try {
22792 response = conv( response );
22793 } catch ( e ) {
22794 return {
22795 state: "parsererror",
22796 error: conv ? e : "No conversion from " + prev + " to " + current
22797 };
22798 }
22799 }
22800 }
22801 }
22802 }
22803 }
22804
22805 return { state: "success", data: response };
22806 }
22807
22808 jQuery.extend( {
22809
22810 // Counter for holding the number of active queries
22811 active: 0,
22812
22813 // Last-Modified header cache for next request
22814 lastModified: {},
22815 etag: {},
22816
22817 ajaxSettings: {
22818 url: location.href,
22819 type: "GET",
22820 isLocal: rlocalProtocol.test( location.protocol ),
22821 global: true,
22822 processData: true,
22823 async: true,
22824 contentType: "application/x-www-form-urlencoded; charset=UTF-8",
22825
22826 /*
22827 timeout: 0,
22828 data: null,
22829 dataType: null,
22830 username: null,
22831 password: null,
22832 cache: null,
22833 throws: false,
22834 traditional: false,
22835 headers: {},
22836 */
22837
22838 accepts: {
22839 "*": allTypes,
22840 text: "text/plain",
22841 html: "text/html",
22842 xml: "application/xml, text/xml",
22843 json: "application/json, text/javascript"
22844 },
22845
22846 contents: {
22847 xml: /\bxml\b/,
22848 html: /\bhtml/,
22849 json: /\bjson\b/
22850 },
22851
22852 responseFields: {
22853 xml: "responseXML",
22854 text: "responseText",
22855 json: "responseJSON"
22856 },
22857
22858 // Data converters
22859 // Keys separate source (or catchall "*") and destination types with a single space
22860 converters: {
22861
22862 // Convert anything to text
22863 "* text": String,
22864
22865 // Text to html (true = no transformation)
22866 "text html": true,
22867
22868 // Evaluate text as a json expression
22869 "text json": JSON.parse,
22870
22871 // Parse text as xml
22872 "text xml": jQuery.parseXML
22873 },
22874
22875 // For options that shouldn't be deep extended:
22876 // you can add your own custom options here if
22877 // and when you create one that shouldn't be
22878 // deep extended (see ajaxExtend)
22879 flatOptions: {
22880 url: true,
22881 context: true
22882 }
22883 },
22884
22885 // Creates a full fledged settings object into target
22886 // with both ajaxSettings and settings fields.
22887 // If target is omitted, writes into ajaxSettings.
22888 ajaxSetup: function( target, settings ) {
22889 return settings ?
22890
22891 // Building a settings object
22892 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
22893
22894 // Extending ajaxSettings
22895 ajaxExtend( jQuery.ajaxSettings, target );
22896 },
22897
22898 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
22899 ajaxTransport: addToPrefiltersOrTransports( transports ),
22900
22901 // Main method
22902 ajax: function( url, options ) {
22903
22904 // If url is an object, simulate pre-1.5 signature
22905 if ( typeof url === "object" ) {
22906 options = url;
22907 url = undefined;
22908 }
22909
22910 // Force options to be an object
22911 options = options || {};
22912
22913 var transport,
22914
22915 // URL without anti-cache param
22916 cacheURL,
22917
22918 // Response headers
22919 responseHeadersString,
22920 responseHeaders,
22921
22922 // timeout handle
22923 timeoutTimer,
22924
22925 // Url cleanup var
22926 urlAnchor,
22927
22928 // Request state (becomes false upon send and true upon completion)
22929 completed,
22930
22931 // To know if global events are to be dispatched
22932 fireGlobals,
22933
22934 // Loop variable
22935 i,
22936
22937 // uncached part of the url
22938 uncached,
22939
22940 // Create the final options object
22941 s = jQuery.ajaxSetup( {}, options ),
22942
22943 // Callbacks context
22944 callbackContext = s.context || s,
22945
22946 // Context for global events is callbackContext if it is a DOM node or jQuery collection
22947 globalEventContext = s.context &&
22948 ( callbackContext.nodeType || callbackContext.jquery ) ?
22949 jQuery( callbackContext ) :
22950 jQuery.event,
22951
22952 // Deferreds
22953 deferred = jQuery.Deferred(),
22954 completeDeferred = jQuery.Callbacks( "once memory" ),
22955
22956 // Status-dependent callbacks
22957 statusCode = s.statusCode || {},
22958
22959 // Headers (they are sent all at once)
22960 requestHeaders = {},
22961 requestHeadersNames = {},
22962
22963 // Default abort message
22964 strAbort = "canceled",
22965
22966 // Fake xhr
22967 jqXHR = {
22968 readyState: 0,
22969
22970 // Builds headers hashtable if needed
22971 getResponseHeader: function( key ) {
22972 var match;
22973 if ( completed ) {
22974 if ( !responseHeaders ) {
22975 responseHeaders = {};
22976 while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
22977 responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
22978 }
22979 }
22980 match = responseHeaders[ key.toLowerCase() ];
22981 }
22982 return match == null ? null : match;
22983 },
22984
22985 // Raw string
22986 getAllResponseHeaders: function() {
22987 return completed ? responseHeadersString : null;
22988 },
22989
22990 // Caches the header
22991 setRequestHeader: function( name, value ) {
22992 if ( completed == null ) {
22993 name = requestHeadersNames[ name.toLowerCase() ] =
22994 requestHeadersNames[ name.toLowerCase() ] || name;
22995 requestHeaders[ name ] = value;
22996 }
22997 return this;
22998 },
22999
23000 // Overrides response content-type header
23001 overrideMimeType: function( type ) {
23002 if ( completed == null ) {
23003 s.mimeType = type;
23004 }
23005 return this;
23006 },
23007
23008 // Status-dependent callbacks
23009 statusCode: function( map ) {
23010 var code;
23011 if ( map ) {
23012 if ( completed ) {
23013
23014 // Execute the appropriate callbacks
23015 jqXHR.always( map[ jqXHR.status ] );
23016 } else {
23017
23018 // Lazy-add the new callbacks in a way that preserves old ones
23019 for ( code in map ) {
23020 statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
23021 }
23022 }
23023 }
23024 return this;
23025 },
23026
23027 // Cancel the request
23028 abort: function( statusText ) {
23029 var finalText = statusText || strAbort;
23030 if ( transport ) {
23031 transport.abort( finalText );
23032 }
23033 done( 0, finalText );
23034 return this;
23035 }
23036 };
23037
23038 // Attach deferreds
23039 deferred.promise( jqXHR );
23040
23041 // Add protocol if not provided (prefilters might expect it)
23042 // Handle falsy url in the settings object (#10093: consistency with old signature)
23043 // We also use the url parameter if available
23044 s.url = ( ( url || s.url || location.href ) + "" )
23045 .replace( rprotocol, location.protocol + "//" );
23046
23047 // Alias method option to type as per ticket #12004
23048 s.type = options.method || options.type || s.method || s.type;
23049
23050 // Extract dataTypes list
23051 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
23052
23053 // A cross-domain request is in order when the origin doesn't match the current origin.
23054 if ( s.crossDomain == null ) {
23055 urlAnchor = document.createElement( "a" );
23056
23057 // Support: IE <=8 - 11, Edge 12 - 13
23058 // IE throws exception on accessing the href property if url is malformed,
23059 // e.g. http://example.com:80x/
23060 try {
23061 urlAnchor.href = s.url;
23062
23063 // Support: IE <=8 - 11 only
23064 // Anchor's host property isn't correctly set when s.url is relative
23065 urlAnchor.href = urlAnchor.href;
23066 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
23067 urlAnchor.protocol + "//" + urlAnchor.host;
23068 } catch ( e ) {
23069
23070 // If there is an error parsing the URL, assume it is crossDomain,
23071 // it can be rejected by the transport if it is invalid
23072 s.crossDomain = true;
23073 }
23074 }
23075
23076 // Convert data if not already a string
23077 if ( s.data && s.processData && typeof s.data !== "string" ) {
23078 s.data = jQuery.param( s.data, s.traditional );
23079 }
23080
23081 // Apply prefilters
23082 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
23083
23084 // If request was aborted inside a prefilter, stop there
23085 if ( completed ) {
23086 return jqXHR;
23087 }
23088
23089 // We can fire global events as of now if asked to
23090 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
23091 fireGlobals = jQuery.event && s.global;
23092
23093 // Watch for a new set of requests
23094 if ( fireGlobals && jQuery.active++ === 0 ) {
23095 jQuery.event.trigger( "ajaxStart" );
23096 }
23097
23098 // Uppercase the type
23099 s.type = s.type.toUpperCase();
23100
23101 // Determine if request has content
23102 s.hasContent = !rnoContent.test( s.type );
23103
23104 // Save the URL in case we're toying with the If-Modified-Since
23105 // and/or If-None-Match header later on
23106 // Remove hash to simplify url manipulation
23107 cacheURL = s.url.replace( rhash, "" );
23108
23109 // More options handling for requests with no content
23110 if ( !s.hasContent ) {
23111
23112 // Remember the hash so we can put it back
23113 uncached = s.url.slice( cacheURL.length );
23114
23115 // If data is available, append data to url
23116 if ( s.data ) {
23117 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
23118
23119 // #9682: remove data so that it's not used in an eventual retry
23120 delete s.data;
23121 }
23122
23123 // Add or update anti-cache param if needed
23124 if ( s.cache === false ) {
23125 cacheURL = cacheURL.replace( rantiCache, "$1" );
23126 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
23127 }
23128
23129 // Put hash and anti-cache on the URL that will be requested (gh-1732)
23130 s.url = cacheURL + uncached;
23131
23132 // Change '%20' to '+' if this is encoded form body content (gh-2658)
23133 } else if ( s.data && s.processData &&
23134 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
23135 s.data = s.data.replace( r20, "+" );
23136 }
23137
23138 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23139 if ( s.ifModified ) {
23140 if ( jQuery.lastModified[ cacheURL ] ) {
23141 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
23142 }
23143 if ( jQuery.etag[ cacheURL ] ) {
23144 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
23145 }
23146 }
23147
23148 // Set the correct header, if data is being sent
23149 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
23150 jqXHR.setRequestHeader( "Content-Type", s.contentType );
23151 }
23152
23153 // Set the Accepts header for the server, depending on the dataType
23154 jqXHR.setRequestHeader(
23155 "Accept",
23156 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
23157 s.accepts[ s.dataTypes[ 0 ] ] +
23158 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
23159 s.accepts[ "*" ]
23160 );
23161
23162 // Check for headers option
23163 for ( i in s.headers ) {
23164 jqXHR.setRequestHeader( i, s.headers[ i ] );
23165 }
23166
23167 // Allow custom headers/mimetypes and early abort
23168 if ( s.beforeSend &&
23169 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
23170
23171 // Abort if not done already and return
23172 return jqXHR.abort();
23173 }
23174
23175 // Aborting is no longer a cancellation
23176 strAbort = "abort";
23177
23178 // Install callbacks on deferreds
23179 completeDeferred.add( s.complete );
23180 jqXHR.done( s.success );
23181 jqXHR.fail( s.error );
23182
23183 // Get transport
23184 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
23185
23186 // If no transport, we auto-abort
23187 if ( !transport ) {
23188 done( -1, "No Transport" );
23189 } else {
23190 jqXHR.readyState = 1;
23191
23192 // Send global event
23193 if ( fireGlobals ) {
23194 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
23195 }
23196
23197 // If request was aborted inside ajaxSend, stop there
23198 if ( completed ) {
23199 return jqXHR;
23200 }
23201
23202 // Timeout
23203 if ( s.async && s.timeout > 0 ) {
23204 timeoutTimer = window.setTimeout( function() {
23205 jqXHR.abort( "timeout" );
23206 }, s.timeout );
23207 }
23208
23209 try {
23210 completed = false;
23211 transport.send( requestHeaders, done );
23212 } catch ( e ) {
23213
23214 // Rethrow post-completion exceptions
23215 if ( completed ) {
23216 throw e;
23217 }
23218
23219 // Propagate others as results
23220 done( -1, e );
23221 }
23222 }
23223
23224 // Callback for when everything is done
23225 function done( status, nativeStatusText, responses, headers ) {
23226 var isSuccess, success, error, response, modified,
23227 statusText = nativeStatusText;
23228
23229 // Ignore repeat invocations
23230 if ( completed ) {
23231 return;
23232 }
23233
23234 completed = true;
23235
23236 // Clear timeout if it exists
23237 if ( timeoutTimer ) {
23238 window.clearTimeout( timeoutTimer );
23239 }
23240
23241 // Dereference transport for early garbage collection
23242 // (no matter how long the jqXHR object will be used)
23243 transport = undefined;
23244
23245 // Cache response headers
23246 responseHeadersString = headers || "";
23247
23248 // Set readyState
23249 jqXHR.readyState = status > 0 ? 4 : 0;
23250
23251 // Determine if successful
23252 isSuccess = status >= 200 && status < 300 || status === 304;
23253
23254 // Get response data
23255 if ( responses ) {
23256 response = ajaxHandleResponses( s, jqXHR, responses );
23257 }
23258
23259 // Convert no matter what (that way responseXXX fields are always set)
23260 response = ajaxConvert( s, response, jqXHR, isSuccess );
23261
23262 // If successful, handle type chaining
23263 if ( isSuccess ) {
23264
23265 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
23266 if ( s.ifModified ) {
23267 modified = jqXHR.getResponseHeader( "Last-Modified" );
23268 if ( modified ) {
23269 jQuery.lastModified[ cacheURL ] = modified;
23270 }
23271 modified = jqXHR.getResponseHeader( "etag" );
23272 if ( modified ) {
23273 jQuery.etag[ cacheURL ] = modified;
23274 }
23275 }
23276
23277 // if no content
23278 if ( status === 204 || s.type === "HEAD" ) {
23279 statusText = "nocontent";
23280
23281 // if not modified
23282 } else if ( status === 304 ) {
23283 statusText = "notmodified";
23284
23285 // If we have data, let's convert it
23286 } else {
23287 statusText = response.state;
23288 success = response.data;
23289 error = response.error;
23290 isSuccess = !error;
23291 }
23292 } else {
23293
23294 // Extract error from statusText and normalize for non-aborts
23295 error = statusText;
23296 if ( status || !statusText ) {
23297 statusText = "error";
23298 if ( status < 0 ) {
23299 status = 0;
23300 }
23301 }
23302 }
23303
23304 // Set data for the fake xhr object
23305 jqXHR.status = status;
23306 jqXHR.statusText = ( nativeStatusText || statusText ) + "";
23307
23308 // Success/Error
23309 if ( isSuccess ) {
23310 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
23311 } else {
23312 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
23313 }
23314
23315 // Status-dependent callbacks
23316 jqXHR.statusCode( statusCode );
23317 statusCode = undefined;
23318
23319 if ( fireGlobals ) {
23320 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
23321 [ jqXHR, s, isSuccess ? success : error ] );
23322 }
23323
23324 // Complete
23325 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
23326
23327 if ( fireGlobals ) {
23328 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
23329
23330 // Handle the global AJAX counter
23331 if ( !( --jQuery.active ) ) {
23332 jQuery.event.trigger( "ajaxStop" );
23333 }
23334 }
23335 }
23336
23337 return jqXHR;
23338 },
23339
23340 getJSON: function( url, data, callback ) {
23341 return jQuery.get( url, data, callback, "json" );
23342 },
23343
23344 getScript: function( url, callback ) {
23345 return jQuery.get( url, undefined, callback, "script" );
23346 }
23347 } );
23348
23349 jQuery.each( [ "get", "post" ], function( i, method ) {
23350 jQuery[ method ] = function( url, data, callback, type ) {
23351
23352 // Shift arguments if data argument was omitted
23353 if ( jQuery.isFunction( data ) ) {
23354 type = type || callback;
23355 callback = data;
23356 data = undefined;
23357 }
23358
23359 // The url can be an options object (which then must have .url)
23360 return jQuery.ajax( jQuery.extend( {
23361 url: url,
23362 type: method,
23363 dataType: type,
23364 data: data,
23365 success: callback
23366 }, jQuery.isPlainObject( url ) && url ) );
23367 };
23368 } );
23369
23370
23371 jQuery._evalUrl = function( url ) {
23372 return jQuery.ajax( {
23373 url: url,
23374
23375 // Make this explicit, since user can override this through ajaxSetup (#11264)
23376 type: "GET",
23377 dataType: "script",
23378 cache: true,
23379 async: false,
23380 global: false,
23381 "throws": true
23382 } );
23383 };
23384
23385
23386 jQuery.fn.extend( {
23387 wrapAll: function( html ) {
23388 var wrap;
23389
23390 if ( this[ 0 ] ) {
23391 if ( jQuery.isFunction( html ) ) {
23392 html = html.call( this[ 0 ] );
23393 }
23394
23395 // The elements to wrap the target around
23396 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
23397
23398 if ( this[ 0 ].parentNode ) {
23399 wrap.insertBefore( this[ 0 ] );
23400 }
23401
23402 wrap.map( function() {
23403 var elem = this;
23404
23405 while ( elem.firstElementChild ) {
23406 elem = elem.firstElementChild;
23407 }
23408
23409 return elem;
23410 } ).append( this );
23411 }
23412
23413 return this;
23414 },
23415
23416 wrapInner: function( html ) {
23417 if ( jQuery.isFunction( html ) ) {
23418 return this.each( function( i ) {
23419 jQuery( this ).wrapInner( html.call( this, i ) );
23420 } );
23421 }
23422
23423 return this.each( function() {
23424 var self = jQuery( this ),
23425 contents = self.contents();
23426
23427 if ( contents.length ) {
23428 contents.wrapAll( html );
23429
23430 } else {
23431 self.append( html );
23432 }
23433 } );
23434 },
23435
23436 wrap: function( html ) {
23437 var isFunction = jQuery.isFunction( html );
23438
23439 return this.each( function( i ) {
23440 jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
23441 } );
23442 },
23443
23444 unwrap: function( selector ) {
23445 this.parent( selector ).not( "body" ).each( function() {
23446 jQuery( this ).replaceWith( this.childNodes );
23447 } );
23448 return this;
23449 }
23450 } );
23451
23452
23453 jQuery.expr.pseudos.hidden = function( elem ) {
23454 return !jQuery.expr.pseudos.visible( elem );
23455 };
23456 jQuery.expr.pseudos.visible = function( elem ) {
23457 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
23458 };
23459
23460
23461
23462
23463 jQuery.ajaxSettings.xhr = function() {
23464 try {
23465 return new window.XMLHttpRequest();
23466 } catch ( e ) {}
23467 };
23468
23469 var xhrSuccessStatus = {
23470
23471 // File protocol always yields status code 0, assume 200
23472 0: 200,
23473
23474 // Support: IE <=9 only
23475 // #1450: sometimes IE returns 1223 when it should be 204
23476 1223: 204
23477 },
23478 xhrSupported = jQuery.ajaxSettings.xhr();
23479
23480 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
23481 support.ajax = xhrSupported = !!xhrSupported;
23482
23483 jQuery.ajaxTransport( function( options ) {
23484 var callback, errorCallback;
23485
23486 // Cross domain only allowed if supported through XMLHttpRequest
23487 if ( support.cors || xhrSupported && !options.crossDomain ) {
23488 return {
23489 send: function( headers, complete ) {
23490 var i,
23491 xhr = options.xhr();
23492
23493 xhr.open(
23494 options.type,
23495 options.url,
23496 options.async,
23497 options.username,
23498 options.password
23499 );
23500
23501 // Apply custom fields if provided
23502 if ( options.xhrFields ) {
23503 for ( i in options.xhrFields ) {
23504 xhr[ i ] = options.xhrFields[ i ];
23505 }
23506 }
23507
23508 // Override mime type if needed
23509 if ( options.mimeType && xhr.overrideMimeType ) {
23510 xhr.overrideMimeType( options.mimeType );
23511 }
23512
23513 // X-Requested-With header
23514 // For cross-domain requests, seeing as conditions for a preflight are
23515 // akin to a jigsaw puzzle, we simply never set it to be sure.
23516 // (it can always be set on a per-request basis or even using ajaxSetup)
23517 // For same-domain requests, won't change header if already provided.
23518 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
23519 headers[ "X-Requested-With" ] = "XMLHttpRequest";
23520 }
23521
23522 // Set headers
23523 for ( i in headers ) {
23524 xhr.setRequestHeader( i, headers[ i ] );
23525 }
23526
23527 // Callback
23528 callback = function( type ) {
23529 return function() {
23530 if ( callback ) {
23531 callback = errorCallback = xhr.onload =
23532 xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
23533
23534 if ( type === "abort" ) {
23535 xhr.abort();
23536 } else if ( type === "error" ) {
23537
23538 // Support: IE <=9 only
23539 // On a manual native abort, IE9 throws
23540 // errors on any property access that is not readyState
23541 if ( typeof xhr.status !== "number" ) {
23542 complete( 0, "error" );
23543 } else {
23544 complete(
23545
23546 // File: protocol always yields status 0; see #8605, #14207
23547 xhr.status,
23548 xhr.statusText
23549 );
23550 }
23551 } else {
23552 complete(
23553 xhrSuccessStatus[ xhr.status ] || xhr.status,
23554 xhr.statusText,
23555
23556 // Support: IE <=9 only
23557 // IE9 has no XHR2 but throws on binary (trac-11426)
23558 // For XHR2 non-text, let the caller handle it (gh-2498)
23559 ( xhr.responseType || "text" ) !== "text" ||
23560 typeof xhr.responseText !== "string" ?
23561 { binary: xhr.response } :
23562 { text: xhr.responseText },
23563 xhr.getAllResponseHeaders()
23564 );
23565 }
23566 }
23567 };
23568 };
23569
23570 // Listen to events
23571 xhr.onload = callback();
23572 errorCallback = xhr.onerror = callback( "error" );
23573
23574 // Support: IE 9 only
23575 // Use onreadystatechange to replace onabort
23576 // to handle uncaught aborts
23577 if ( xhr.onabort !== undefined ) {
23578 xhr.onabort = errorCallback;
23579 } else {
23580 xhr.onreadystatechange = function() {
23581
23582 // Check readyState before timeout as it changes
23583 if ( xhr.readyState === 4 ) {
23584
23585 // Allow onerror to be called first,
23586 // but that will not handle a native abort
23587 // Also, save errorCallback to a variable
23588 // as xhr.onerror cannot be accessed
23589 window.setTimeout( function() {
23590 if ( callback ) {
23591 errorCallback();
23592 }
23593 } );
23594 }
23595 };
23596 }
23597
23598 // Create the abort callback
23599 callback = callback( "abort" );
23600
23601 try {
23602
23603 // Do send the request (this may raise an exception)
23604 xhr.send( options.hasContent && options.data || null );
23605 } catch ( e ) {
23606
23607 // #14683: Only rethrow if this hasn't been notified as an error yet
23608 if ( callback ) {
23609 throw e;
23610 }
23611 }
23612 },
23613
23614 abort: function() {
23615 if ( callback ) {
23616 callback();
23617 }
23618 }
23619 };
23620 }
23621 } );
23622
23623
23624
23625
23626 // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
23627 jQuery.ajaxPrefilter( function( s ) {
23628 if ( s.crossDomain ) {
23629 s.contents.script = false;
23630 }
23631 } );
23632
23633 // Install script dataType
23634 jQuery.ajaxSetup( {
23635 accepts: {
23636 script: "text/javascript, application/javascript, " +
23637 "application/ecmascript, application/x-ecmascript"
23638 },
23639 contents: {
23640 script: /\b(?:java|ecma)script\b/
23641 },
23642 converters: {
23643 "text script": function( text ) {
23644 jQuery.globalEval( text );
23645 return text;
23646 }
23647 }
23648 } );
23649
23650 // Handle cache's special case and crossDomain
23651 jQuery.ajaxPrefilter( "script", function( s ) {
23652 if ( s.cache === undefined ) {
23653 s.cache = false;
23654 }
23655 if ( s.crossDomain ) {
23656 s.type = "GET";
23657 }
23658 } );
23659
23660 // Bind script tag hack transport
23661 jQuery.ajaxTransport( "script", function( s ) {
23662
23663 // This transport only deals with cross domain requests
23664 if ( s.crossDomain ) {
23665 var script, callback;
23666 return {
23667 send: function( _, complete ) {
23668 script = jQuery( "<script>" ).prop( {
23669 charset: s.scriptCharset,
23670 src: s.url
23671 } ).on(
23672 "load error",
23673 callback = function( evt ) {
23674 script.remove();
23675 callback = null;
23676 if ( evt ) {
23677 complete( evt.type === "error" ? 404 : 200, evt.type );
23678 }
23679 }
23680 );
23681
23682 // Use native DOM manipulation to avoid our domManip AJAX trickery
23683 document.head.appendChild( script[ 0 ] );
23684 },
23685 abort: function() {
23686 if ( callback ) {
23687 callback();
23688 }
23689 }
23690 };
23691 }
23692 } );
23693
23694
23695
23696
23697 var oldCallbacks = [],
23698 rjsonp = /(=)\?(?=&|$)|\?\?/;
23699
23700 // Default jsonp settings
23701 jQuery.ajaxSetup( {
23702 jsonp: "callback",
23703 jsonpCallback: function() {
23704 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
23705 this[ callback ] = true;
23706 return callback;
23707 }
23708 } );
23709
23710 // Detect, normalize options and install callbacks for jsonp requests
23711 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
23712
23713 var callbackName, overwritten, responseContainer,
23714 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
23715 "url" :
23716 typeof s.data === "string" &&
23717 ( s.contentType || "" )
23718 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
23719 rjsonp.test( s.data ) && "data"
23720 );
23721
23722 // Handle iff the expected data type is "jsonp" or we have a parameter to set
23723 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
23724
23725 // Get callback name, remembering preexisting value associated with it
23726 callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
23727 s.jsonpCallback() :
23728 s.jsonpCallback;
23729
23730 // Insert callback into url or form data
23731 if ( jsonProp ) {
23732 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
23733 } else if ( s.jsonp !== false ) {
23734 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
23735 }
23736
23737 // Use data converter to retrieve json after script execution
23738 s.converters[ "script json" ] = function() {
23739 if ( !responseContainer ) {
23740 jQuery.error( callbackName + " was not called" );
23741 }
23742 return responseContainer[ 0 ];
23743 };
23744
23745 // Force json dataType
23746 s.dataTypes[ 0 ] = "json";
23747
23748 // Install callback
23749 overwritten = window[ callbackName ];
23750 window[ callbackName ] = function() {
23751 responseContainer = arguments;
23752 };
23753
23754 // Clean-up function (fires after converters)
23755 jqXHR.always( function() {
23756
23757 // If previous value didn't exist - remove it
23758 if ( overwritten === undefined ) {
23759 jQuery( window ).removeProp( callbackName );
23760
23761 // Otherwise restore preexisting value
23762 } else {
23763 window[ callbackName ] = overwritten;
23764 }
23765
23766 // Save back as free
23767 if ( s[ callbackName ] ) {
23768
23769 // Make sure that re-using the options doesn't screw things around
23770 s.jsonpCallback = originalSettings.jsonpCallback;
23771
23772 // Save the callback name for future use
23773 oldCallbacks.push( callbackName );
23774 }
23775
23776 // Call if it was a function and we have a response
23777 if ( responseContainer && jQuery.isFunction( overwritten ) ) {
23778 overwritten( responseContainer[ 0 ] );
23779 }
23780
23781 responseContainer = overwritten = undefined;
23782 } );
23783
23784 // Delegate to script
23785 return "script";
23786 }
23787 } );
23788
23789
23790
23791
23792 // Support: Safari 8 only
23793 // In Safari 8 documents created via document.implementation.createHTMLDocument
23794 // collapse sibling forms: the second one becomes a child of the first one.
23795 // Because of that, this security measure has to be disabled in Safari 8.
23796 // https://bugs.webkit.org/show_bug.cgi?id=137337
23797 support.createHTMLDocument = ( function() {
23798 var body = document.implementation.createHTMLDocument( "" ).body;
23799 body.innerHTML = "<form></form><form></form>";
23800 return body.childNodes.length === 2;
23801 } )();
23802
23803
23804 // Argument "data" should be string of html
23805 // context (optional): If specified, the fragment will be created in this context,
23806 // defaults to document
23807 // keepScripts (optional): If true, will include scripts passed in the html string
23808 jQuery.parseHTML = function( data, context, keepScripts ) {
23809 if ( typeof data !== "string" ) {
23810 return [];
23811 }
23812 if ( typeof context === "boolean" ) {
23813 keepScripts = context;
23814 context = false;
23815 }
23816
23817 var base, parsed, scripts;
23818
23819 if ( !context ) {
23820
23821 // Stop scripts or inline event handlers from being executed immediately
23822 // by using document.implementation
23823 if ( support.createHTMLDocument ) {
23824 context = document.implementation.createHTMLDocument( "" );
23825
23826 // Set the base href for the created document
23827 // so any parsed elements with URLs
23828 // are based on the document's URL (gh-2965)
23829 base = context.createElement( "base" );
23830 base.href = document.location.href;
23831 context.head.appendChild( base );
23832 } else {
23833 context = document;
23834 }
23835 }
23836
23837 parsed = rsingleTag.exec( data );
23838 scripts = !keepScripts && [];
23839
23840 // Single tag
23841 if ( parsed ) {
23842 return [ context.createElement( parsed[ 1 ] ) ];
23843 }
23844
23845 parsed = buildFragment( [ data ], context, scripts );
23846
23847 if ( scripts && scripts.length ) {
23848 jQuery( scripts ).remove();
23849 }
23850
23851 return jQuery.merge( [], parsed.childNodes );
23852 };
23853
23854
23855 /**
23856 * Load a url into a page
23857 */
23858 jQuery.fn.load = function( url, params, callback ) {
23859 var selector, type, response,
23860 self = this,
23861 off = url.indexOf( " " );
23862
23863 if ( off > -1 ) {
23864 selector = stripAndCollapse( url.slice( off ) );
23865 url = url.slice( 0, off );
23866 }
23867
23868 // If it's a function
23869 if ( jQuery.isFunction( params ) ) {
23870
23871 // We assume that it's the callback
23872 callback = params;
23873 params = undefined;
23874
23875 // Otherwise, build a param string
23876 } else if ( params && typeof params === "object" ) {
23877 type = "POST";
23878 }
23879
23880 // If we have elements to modify, make the request
23881 if ( self.length > 0 ) {
23882 jQuery.ajax( {
23883 url: url,
23884
23885 // If "type" variable is undefined, then "GET" method will be used.
23886 // Make value of this field explicit since
23887 // user can override it through ajaxSetup method
23888 type: type || "GET",
23889 dataType: "html",
23890 data: params
23891 } ).done( function( responseText ) {
23892
23893 // Save response for use in complete callback
23894 response = arguments;
23895
23896 self.html( selector ?
23897
23898 // If a selector was specified, locate the right elements in a dummy div
23899 // Exclude scripts to avoid IE 'Permission Denied' errors
23900 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
23901
23902 // Otherwise use the full result
23903 responseText );
23904
23905 // If the request succeeds, this function gets "data", "status", "jqXHR"
23906 // but they are ignored because response was set above.
23907 // If it fails, this function gets "jqXHR", "status", "error"
23908 } ).always( callback && function( jqXHR, status ) {
23909 self.each( function() {
23910 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
23911 } );
23912 } );
23913 }
23914
23915 return this;
23916 };
23917
23918
23919
23920
23921 // Attach a bunch of functions for handling common AJAX events
23922 jQuery.each( [
23923 "ajaxStart",
23924 "ajaxStop",
23925 "ajaxComplete",
23926 "ajaxError",
23927 "ajaxSuccess",
23928 "ajaxSend"
23929 ], function( i, type ) {
23930 jQuery.fn[ type ] = function( fn ) {
23931 return this.on( type, fn );
23932 };
23933 } );
23934
23935
23936
23937
23938 jQuery.expr.pseudos.animated = function( elem ) {
23939 return jQuery.grep( jQuery.timers, function( fn ) {
23940 return elem === fn.elem;
23941 } ).length;
23942 };
23943
23944
23945
23946
23947 jQuery.offset = {
23948 setOffset: function( elem, options, i ) {
23949 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
23950 position = jQuery.css( elem, "position" ),
23951 curElem = jQuery( elem ),
23952 props = {};
23953
23954 // Set position first, in-case top/left are set even on static elem
23955 if ( position === "static" ) {
23956 elem.style.position = "relative";
23957 }
23958
23959 curOffset = curElem.offset();
23960 curCSSTop = jQuery.css( elem, "top" );
23961 curCSSLeft = jQuery.css( elem, "left" );
23962 calculatePosition = ( position === "absolute" || position === "fixed" ) &&
23963 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
23964
23965 // Need to be able to calculate position if either
23966 // top or left is auto and position is either absolute or fixed
23967 if ( calculatePosition ) {
23968 curPosition = curElem.position();
23969 curTop = curPosition.top;
23970 curLeft = curPosition.left;
23971
23972 } else {
23973 curTop = parseFloat( curCSSTop ) || 0;
23974 curLeft = parseFloat( curCSSLeft ) || 0;
23975 }
23976
23977 if ( jQuery.isFunction( options ) ) {
23978
23979 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
23980 options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
23981 }
23982
23983 if ( options.top != null ) {
23984 props.top = ( options.top - curOffset.top ) + curTop;
23985 }
23986 if ( options.left != null ) {
23987 props.left = ( options.left - curOffset.left ) + curLeft;
23988 }
23989
23990 if ( "using" in options ) {
23991 options.using.call( elem, props );
23992
23993 } else {
23994 curElem.css( props );
23995 }
23996 }
23997 };
23998
23999 jQuery.fn.extend( {
24000 offset: function( options ) {
24001
24002 // Preserve chaining for setter
24003 if ( arguments.length ) {
24004 return options === undefined ?
24005 this :
24006 this.each( function( i ) {
24007 jQuery.offset.setOffset( this, options, i );
24008 } );
24009 }
24010
24011 var doc, docElem, rect, win,
24012 elem = this[ 0 ];
24013
24014 if ( !elem ) {
24015 return;
24016 }
24017
24018 // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
24019 // Support: IE <=11 only
24020 // Running getBoundingClientRect on a
24021 // disconnected node in IE throws an error
24022 if ( !elem.getClientRects().length ) {
24023 return { top: 0, left: 0 };
24024 }
24025
24026 rect = elem.getBoundingClientRect();
24027
24028 doc = elem.ownerDocument;
24029 docElem = doc.documentElement;
24030 win = doc.defaultView;
24031
24032 return {
24033 top: rect.top + win.pageYOffset - docElem.clientTop,
24034 left: rect.left + win.pageXOffset - docElem.clientLeft
24035 };
24036 },
24037
24038 position: function() {
24039 if ( !this[ 0 ] ) {
24040 return;
24041 }
24042
24043 var offsetParent, offset,
24044 elem = this[ 0 ],
24045 parentOffset = { top: 0, left: 0 };
24046
24047 // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
24048 // because it is its only offset parent
24049 if ( jQuery.css( elem, "position" ) === "fixed" ) {
24050
24051 // Assume getBoundingClientRect is there when computed position is fixed
24052 offset = elem.getBoundingClientRect();
24053
24054 } else {
24055
24056 // Get *real* offsetParent
24057 offsetParent = this.offsetParent();
24058
24059 // Get correct offsets
24060 offset = this.offset();
24061 if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
24062 parentOffset = offsetParent.offset();
24063 }
24064
24065 // Add offsetParent borders
24066 parentOffset = {
24067 top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
24068 left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
24069 };
24070 }
24071
24072 // Subtract parent offsets and element margins
24073 return {
24074 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
24075 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
24076 };
24077 },
24078
24079 // This method will return documentElement in the following cases:
24080 // 1) For the element inside the iframe without offsetParent, this method will return
24081 // documentElement of the parent window
24082 // 2) For the hidden or detached element
24083 // 3) For body or html element, i.e. in case of the html node - it will return itself
24084 //
24085 // but those exceptions were never presented as a real life use-cases
24086 // and might be considered as more preferable results.
24087 //
24088 // This logic, however, is not guaranteed and can change at any point in the future
24089 offsetParent: function() {
24090 return this.map( function() {
24091 var offsetParent = this.offsetParent;
24092
24093 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
24094 offsetParent = offsetParent.offsetParent;
24095 }
24096
24097 return offsetParent || documentElement;
24098 } );
24099 }
24100 } );
24101
24102 // Create scrollLeft and scrollTop methods
24103 jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
24104 var top = "pageYOffset" === prop;
24105
24106 jQuery.fn[ method ] = function( val ) {
24107 return access( this, function( elem, method, val ) {
24108
24109 // Coalesce documents and windows
24110 var win;
24111 if ( jQuery.isWindow( elem ) ) {
24112 win = elem;
24113 } else if ( elem.nodeType === 9 ) {
24114 win = elem.defaultView;
24115 }
24116
24117 if ( val === undefined ) {
24118 return win ? win[ prop ] : elem[ method ];
24119 }
24120
24121 if ( win ) {
24122 win.scrollTo(
24123 !top ? val : win.pageXOffset,
24124 top ? val : win.pageYOffset
24125 );
24126
24127 } else {
24128 elem[ method ] = val;
24129 }
24130 }, method, val, arguments.length );
24131 };
24132 } );
24133
24134 // Support: Safari <=7 - 9.1, Chrome <=37 - 49
24135 // Add the top/left cssHooks using jQuery.fn.position
24136 // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
24137 // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
24138 // getComputedStyle returns percent when specified for top/left/bottom/right;
24139 // rather than make the css module depend on the offset module, just check for it here
24140 jQuery.each( [ "top", "left" ], function( i, prop ) {
24141 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
24142 function( elem, computed ) {
24143 if ( computed ) {
24144 computed = curCSS( elem, prop );
24145
24146 // If curCSS returns percentage, fallback to offset
24147 return rnumnonpx.test( computed ) ?
24148 jQuery( elem ).position()[ prop ] + "px" :
24149 computed;
24150 }
24151 }
24152 );
24153 } );
24154
24155
24156 // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
24157 jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
24158 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
24159 function( defaultExtra, funcName ) {
24160
24161 // Margin is only for outerHeight, outerWidth
24162 jQuery.fn[ funcName ] = function( margin, value ) {
24163 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
24164 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
24165
24166 return access( this, function( elem, type, value ) {
24167 var doc;
24168
24169 if ( jQuery.isWindow( elem ) ) {
24170
24171 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
24172 return funcName.indexOf( "outer" ) === 0 ?
24173 elem[ "inner" + name ] :
24174 elem.document.documentElement[ "client" + name ];
24175 }
24176
24177 // Get document width or height
24178 if ( elem.nodeType === 9 ) {
24179 doc = elem.documentElement;
24180
24181 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
24182 // whichever is greatest
24183 return Math.max(
24184 elem.body[ "scroll" + name ], doc[ "scroll" + name ],
24185 elem.body[ "offset" + name ], doc[ "offset" + name ],
24186 doc[ "client" + name ]
24187 );
24188 }
24189
24190 return value === undefined ?
24191
24192 // Get width or height on the element, requesting but not forcing parseFloat
24193 jQuery.css( elem, type, extra ) :
24194
24195 // Set width or height on the element
24196 jQuery.style( elem, type, value, extra );
24197 }, type, chainable ? margin : undefined, chainable );
24198 };
24199 } );
24200 } );
24201
24202
24203 jQuery.fn.extend( {
24204
24205 bind: function( types, data, fn ) {
24206 return this.on( types, null, data, fn );
24207 },
24208 unbind: function( types, fn ) {
24209 return this.off( types, null, fn );
24210 },
24211
24212 delegate: function( selector, types, data, fn ) {
24213 return this.on( types, selector, data, fn );
24214 },
24215 undelegate: function( selector, types, fn ) {
24216
24217 // ( namespace ) or ( selector, types [, fn] )
24218 return arguments.length === 1 ?
24219 this.off( selector, "**" ) :
24220 this.off( types, selector || "**", fn );
24221 }
24222 } );
24223
24224 jQuery.holdReady = function( hold ) {
24225 if ( hold ) {
24226 jQuery.readyWait++;
24227 } else {
24228 jQuery.ready( true );
24229 }
24230 };
24231 jQuery.isArray = Array.isArray;
24232 jQuery.parseJSON = JSON.parse;
24233 jQuery.nodeName = nodeName;
24234
24235
24236
24237
24238 // Register as a named AMD module, since jQuery can be concatenated with other
24239 // files that may use define, but not via a proper concatenation script that
24240 // understands anonymous AMD modules. A named AMD is safest and most robust
24241 // way to register. Lowercase jquery is used because AMD module names are
24242 // derived from file names, and jQuery is normally delivered in a lowercase
24243 // file name. Do this after creating the global so that if an AMD module wants
24244 // to call noConflict to hide this version of jQuery, it will work.
24245
24246 // Note that for maximum portability, libraries that are not jQuery should
24247 // declare themselves as anonymous modules, and avoid setting a global if an
24248 // AMD loader is present. jQuery is a special case. For more information, see
24249 // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
24250
24251 if ( typeof define === "function" && define.amd ) {
24252 define( "jquery", [], function() {
24253 return jQuery;
24254 } );
24255 }
24256
24257
24258
24259
24260 var
24261
24262 // Map over jQuery in case of overwrite
24263 _jQuery = window.jQuery,
24264
24265 // Map over the $ in case of overwrite
24266 _$ = window.$;
24267
24268 jQuery.noConflict = function( deep ) {
24269 if ( window.$ === jQuery ) {
24270 window.$ = _$;
24271 }
24272
24273 if ( deep && window.jQuery === jQuery ) {
24274 window.jQuery = _jQuery;
24275 }
24276
24277 return jQuery;
24278 };
24279
24280 // Expose jQuery and $ identifiers, even in AMD
24281 // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
24282 // and CommonJS for browser emulators (#13566)
24283 if ( !noGlobal ) {
24284 window.jQuery = window.$ = jQuery;
24285 }
24286
24287
24288
24289
24290 return jQuery;
24291 } );
24292 </script>
24293 <script>/*!
24294 * Bootstrap v3.3.7 (http://getbootstrap.com)
24295 * Copyright 2011-2016 Twitter, Inc.
24296 * Licensed under the MIT license
24297 */
24298
24299 if (typeof jQuery === 'undefined') {
24300 throw new Error('Bootstrap\'s JavaScript requires jQuery')
24301 }
24302
24303 +function ($) {
24304 'use strict';
24305 var version = $.fn.jquery.split(' ')[0].split('.')
24306 if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {
24307 throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')
24308 }
24309 }(jQuery);
24310
24311 /* ========================================================================
24312 * Bootstrap: transition.js v3.3.7
24313 * http://getbootstrap.com/javascript/#transitions
24314 * ========================================================================
24315 * Copyright 2011-2016 Twitter, Inc.
24316 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24317 * ======================================================================== */
24318
24319
24320 +function ($) {
24321 'use strict';
24322
24323 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)
24324 // ============================================================
24325
24326 function transitionEnd() {
24327 var el = document.createElement('bootstrap')
24328
24329 var transEndEventNames = {
24330 WebkitTransition : 'webkitTransitionEnd',
24331 MozTransition : 'transitionend',
24332 OTransition : 'oTransitionEnd otransitionend',
24333 transition : 'transitionend'
24334 }
24335
24336 for (var name in transEndEventNames) {
24337 if (el.style[name] !== undefined) {
24338 return { end: transEndEventNames[name] }
24339 }
24340 }
24341
24342 return false // explicit for ie8 ( ._.)
24343 }
24344
24345 // http://blog.alexmaccaw.com/css-transitions
24346 $.fn.emulateTransitionEnd = function (duration) {
24347 var called = false
24348 var $el = this
24349 $(this).one('bsTransitionEnd', function () { called = true })
24350 var callback = function () { if (!called) $($el).trigger($.support.transition.end) }
24351 setTimeout(callback, duration)
24352 return this
24353 }
24354
24355 $(function () {
24356 $.support.transition = transitionEnd()
24357
24358 if (!$.support.transition) return
24359
24360 $.event.special.bsTransitionEnd = {
24361 bindType: $.support.transition.end,
24362 delegateType: $.support.transition.end,
24363 handle: function (e) {
24364 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)
24365 }
24366 }
24367 })
24368
24369 }(jQuery);
24370
24371 /* ========================================================================
24372 * Bootstrap: alert.js v3.3.7
24373 * http://getbootstrap.com/javascript/#alerts
24374 * ========================================================================
24375 * Copyright 2011-2016 Twitter, Inc.
24376 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24377 * ======================================================================== */
24378
24379
24380 +function ($) {
24381 'use strict';
24382
24383 // ALERT CLASS DEFINITION
24384 // ======================
24385
24386 var dismiss = '[data-dismiss="alert"]'
24387 var Alert = function (el) {
24388 $(el).on('click', dismiss, this.close)
24389 }
24390
24391 Alert.VERSION = '3.3.7'
24392
24393 Alert.TRANSITION_DURATION = 150
24394
24395 Alert.prototype.close = function (e) {
24396 var $this = $(this)
24397 var selector = $this.attr('data-target')
24398
24399 if (!selector) {
24400 selector = $this.attr('href')
24401 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
24402 }
24403
24404 var $parent = $(selector === '#' ? [] : selector)
24405
24406 if (e) e.preventDefault()
24407
24408 if (!$parent.length) {
24409 $parent = $this.closest('.alert')
24410 }
24411
24412 $parent.trigger(e = $.Event('close.bs.alert'))
24413
24414 if (e.isDefaultPrevented()) return
24415
24416 $parent.removeClass('in')
24417
24418 function removeElement() {
24419 // detach from parent, fire event then clean up data
24420 $parent.detach().trigger('closed.bs.alert').remove()
24421 }
24422
24423 $.support.transition && $parent.hasClass('fade') ?
24424 $parent
24425 .one('bsTransitionEnd', removeElement)
24426 .emulateTransitionEnd(Alert.TRANSITION_DURATION) :
24427 removeElement()
24428 }
24429
24430
24431 // ALERT PLUGIN DEFINITION
24432 // =======================
24433
24434 function Plugin(option) {
24435 return this.each(function () {
24436 var $this = $(this)
24437 var data = $this.data('bs.alert')
24438
24439 if (!data) $this.data('bs.alert', (data = new Alert(this)))
24440 if (typeof option == 'string') data[option].call($this)
24441 })
24442 }
24443
24444 var old = $.fn.alert
24445
24446 $.fn.alert = Plugin
24447 $.fn.alert.Constructor = Alert
24448
24449
24450 // ALERT NO CONFLICT
24451 // =================
24452
24453 $.fn.alert.noConflict = function () {
24454 $.fn.alert = old
24455 return this
24456 }
24457
24458
24459 // ALERT DATA-API
24460 // ==============
24461
24462 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)
24463
24464 }(jQuery);
24465
24466 /* ========================================================================
24467 * Bootstrap: button.js v3.3.7
24468 * http://getbootstrap.com/javascript/#buttons
24469 * ========================================================================
24470 * Copyright 2011-2016 Twitter, Inc.
24471 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24472 * ======================================================================== */
24473
24474
24475 +function ($) {
24476 'use strict';
24477
24478 // BUTTON PUBLIC CLASS DEFINITION
24479 // ==============================
24480
24481 var Button = function (element, options) {
24482 this.$element = $(element)
24483 this.options = $.extend({}, Button.DEFAULTS, options)
24484 this.isLoading = false
24485 }
24486
24487 Button.VERSION = '3.3.7'
24488
24489 Button.DEFAULTS = {
24490 loadingText: 'loading...'
24491 }
24492
24493 Button.prototype.setState = function (state) {
24494 var d = 'disabled'
24495 var $el = this.$element
24496 var val = $el.is('input') ? 'val' : 'html'
24497 var data = $el.data()
24498
24499 state += 'Text'
24500
24501 if (data.resetText == null) $el.data('resetText', $el[val]())
24502
24503 // push to event loop to allow forms to submit
24504 setTimeout($.proxy(function () {
24505 $el[val](data[state] == null ? this.options[state] : data[state])
24506
24507 if (state == 'loadingText') {
24508 this.isLoading = true
24509 $el.addClass(d).attr(d, d).prop(d, true)
24510 } else if (this.isLoading) {
24511 this.isLoading = false
24512 $el.removeClass(d).removeAttr(d).prop(d, false)
24513 }
24514 }, this), 0)
24515 }
24516
24517 Button.prototype.toggle = function () {
24518 var changed = true
24519 var $parent = this.$element.closest('[data-toggle="buttons"]')
24520
24521 if ($parent.length) {
24522 var $input = this.$element.find('input')
24523 if ($input.prop('type') == 'radio') {
24524 if ($input.prop('checked')) changed = false
24525 $parent.find('.active').removeClass('active')
24526 this.$element.addClass('active')
24527 } else if ($input.prop('type') == 'checkbox') {
24528 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false
24529 this.$element.toggleClass('active')
24530 }
24531 $input.prop('checked', this.$element.hasClass('active'))
24532 if (changed) $input.trigger('change')
24533 } else {
24534 this.$element.attr('aria-pressed', !this.$element.hasClass('active'))
24535 this.$element.toggleClass('active')
24536 }
24537 }
24538
24539
24540 // BUTTON PLUGIN DEFINITION
24541 // ========================
24542
24543 function Plugin(option) {
24544 return this.each(function () {
24545 var $this = $(this)
24546 var data = $this.data('bs.button')
24547 var options = typeof option == 'object' && option
24548
24549 if (!data) $this.data('bs.button', (data = new Button(this, options)))
24550
24551 if (option == 'toggle') data.toggle()
24552 else if (option) data.setState(option)
24553 })
24554 }
24555
24556 var old = $.fn.button
24557
24558 $.fn.button = Plugin
24559 $.fn.button.Constructor = Button
24560
24561
24562 // BUTTON NO CONFLICT
24563 // ==================
24564
24565 $.fn.button.noConflict = function () {
24566 $.fn.button = old
24567 return this
24568 }
24569
24570
24571 // BUTTON DATA-API
24572 // ===============
24573
24574 $(document)
24575 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24576 var $btn = $(e.target).closest('.btn')
24577 Plugin.call($btn, 'toggle')
24578 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) {
24579 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes
24580 e.preventDefault()
24581 // The target component still receive the focus
24582 if ($btn.is('input,button')) $btn.trigger('focus')
24583 else $btn.find('input:visible,button:visible').first().trigger('focus')
24584 }
24585 })
24586 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) {
24587 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))
24588 })
24589
24590 }(jQuery);
24591
24592 /* ========================================================================
24593 * Bootstrap: carousel.js v3.3.7
24594 * http://getbootstrap.com/javascript/#carousel
24595 * ========================================================================
24596 * Copyright 2011-2016 Twitter, Inc.
24597 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24598 * ======================================================================== */
24599
24600
24601 +function ($) {
24602 'use strict';
24603
24604 // CAROUSEL CLASS DEFINITION
24605 // =========================
24606
24607 var Carousel = function (element, options) {
24608 this.$element = $(element)
24609 this.$indicators = this.$element.find('.carousel-indicators')
24610 this.options = options
24611 this.paused = null
24612 this.sliding = null
24613 this.interval = null
24614 this.$active = null
24615 this.$items = null
24616
24617 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))
24618
24619 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element
24620 .on('mouseenter.bs.carousel', $.proxy(this.pause, this))
24621 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))
24622 }
24623
24624 Carousel.VERSION = '3.3.7'
24625
24626 Carousel.TRANSITION_DURATION = 600
24627
24628 Carousel.DEFAULTS = {
24629 interval: 5000,
24630 pause: 'hover',
24631 wrap: true,
24632 keyboard: true
24633 }
24634
24635 Carousel.prototype.keydown = function (e) {
24636 if (/input|textarea/i.test(e.target.tagName)) return
24637 switch (e.which) {
24638 case 37: this.prev(); break
24639 case 39: this.next(); break
24640 default: return
24641 }
24642
24643 e.preventDefault()
24644 }
24645
24646 Carousel.prototype.cycle = function (e) {
24647 e || (this.paused = false)
24648
24649 this.interval && clearInterval(this.interval)
24650
24651 this.options.interval
24652 && !this.paused
24653 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))
24654
24655 return this
24656 }
24657
24658 Carousel.prototype.getItemIndex = function (item) {
24659 this.$items = item.parent().children('.item')
24660 return this.$items.index(item || this.$active)
24661 }
24662
24663 Carousel.prototype.getItemForDirection = function (direction, active) {
24664 var activeIndex = this.getItemIndex(active)
24665 var willWrap = (direction == 'prev' && activeIndex === 0)
24666 || (direction == 'next' && activeIndex == (this.$items.length - 1))
24667 if (willWrap && !this.options.wrap) return active
24668 var delta = direction == 'prev' ? -1 : 1
24669 var itemIndex = (activeIndex + delta) % this.$items.length
24670 return this.$items.eq(itemIndex)
24671 }
24672
24673 Carousel.prototype.to = function (pos) {
24674 var that = this
24675 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))
24676
24677 if (pos > (this.$items.length - 1) || pos < 0) return
24678
24679 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid"
24680 if (activeIndex == pos) return this.pause().cycle()
24681
24682 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))
24683 }
24684
24685 Carousel.prototype.pause = function (e) {
24686 e || (this.paused = true)
24687
24688 if (this.$element.find('.next, .prev').length && $.support.transition) {
24689 this.$element.trigger($.support.transition.end)
24690 this.cycle(true)
24691 }
24692
24693 this.interval = clearInterval(this.interval)
24694
24695 return this
24696 }
24697
24698 Carousel.prototype.next = function () {
24699 if (this.sliding) return
24700 return this.slide('next')
24701 }
24702
24703 Carousel.prototype.prev = function () {
24704 if (this.sliding) return
24705 return this.slide('prev')
24706 }
24707
24708 Carousel.prototype.slide = function (type, next) {
24709 var $active = this.$element.find('.item.active')
24710 var $next = next || this.getItemForDirection(type, $active)
24711 var isCycling = this.interval
24712 var direction = type == 'next' ? 'left' : 'right'
24713 var that = this
24714
24715 if ($next.hasClass('active')) return (this.sliding = false)
24716
24717 var relatedTarget = $next[0]
24718 var slideEvent = $.Event('slide.bs.carousel', {
24719 relatedTarget: relatedTarget,
24720 direction: direction
24721 })
24722 this.$element.trigger(slideEvent)
24723 if (slideEvent.isDefaultPrevented()) return
24724
24725 this.sliding = true
24726
24727 isCycling && this.pause()
24728
24729 if (this.$indicators.length) {
24730 this.$indicators.find('.active').removeClass('active')
24731 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])
24732 $nextIndicator && $nextIndicator.addClass('active')
24733 }
24734
24735 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
24736 if ($.support.transition && this.$element.hasClass('slide')) {
24737 $next.addClass(type)
24738 $next[0].offsetWidth // force reflow
24739 $active.addClass(direction)
24740 $next.addClass(direction)
24741 $active
24742 .one('bsTransitionEnd', function () {
24743 $next.removeClass([type, direction].join(' ')).addClass('active')
24744 $active.removeClass(['active', direction].join(' '))
24745 that.sliding = false
24746 setTimeout(function () {
24747 that.$element.trigger(slidEvent)
24748 }, 0)
24749 })
24750 .emulateTransitionEnd(Carousel.TRANSITION_DURATION)
24751 } else {
24752 $active.removeClass('active')
24753 $next.addClass('active')
24754 this.sliding = false
24755 this.$element.trigger(slidEvent)
24756 }
24757
24758 isCycling && this.cycle()
24759
24760 return this
24761 }
24762
24763
24764 // CAROUSEL PLUGIN DEFINITION
24765 // ==========================
24766
24767 function Plugin(option) {
24768 return this.each(function () {
24769 var $this = $(this)
24770 var data = $this.data('bs.carousel')
24771 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)
24772 var action = typeof option == 'string' ? option : options.slide
24773
24774 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))
24775 if (typeof option == 'number') data.to(option)
24776 else if (action) data[action]()
24777 else if (options.interval) data.pause().cycle()
24778 })
24779 }
24780
24781 var old = $.fn.carousel
24782
24783 $.fn.carousel = Plugin
24784 $.fn.carousel.Constructor = Carousel
24785
24786
24787 // CAROUSEL NO CONFLICT
24788 // ====================
24789
24790 $.fn.carousel.noConflict = function () {
24791 $.fn.carousel = old
24792 return this
24793 }
24794
24795
24796 // CAROUSEL DATA-API
24797 // =================
24798
24799 var clickHandler = function (e) {
24800 var href
24801 var $this = $(this)
24802 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7
24803 if (!$target.hasClass('carousel')) return
24804 var options = $.extend({}, $target.data(), $this.data())
24805 var slideIndex = $this.attr('data-slide-to')
24806 if (slideIndex) options.interval = false
24807
24808 Plugin.call($target, options)
24809
24810 if (slideIndex) {
24811 $target.data('bs.carousel').to(slideIndex)
24812 }
24813
24814 e.preventDefault()
24815 }
24816
24817 $(document)
24818 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)
24819 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)
24820
24821 $(window).on('load', function () {
24822 $('[data-ride="carousel"]').each(function () {
24823 var $carousel = $(this)
24824 Plugin.call($carousel, $carousel.data())
24825 })
24826 })
24827
24828 }(jQuery);
24829
24830 /* ========================================================================
24831 * Bootstrap: collapse.js v3.3.7
24832 * http://getbootstrap.com/javascript/#collapse
24833 * ========================================================================
24834 * Copyright 2011-2016 Twitter, Inc.
24835 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
24836 * ======================================================================== */
24837
24838 /* jshint latedef: false */
24839
24840 +function ($) {
24841 'use strict';
24842
24843 // COLLAPSE PUBLIC CLASS DEFINITION
24844 // ================================
24845
24846 var Collapse = function (element, options) {
24847 this.$element = $(element)
24848 this.options = $.extend({}, Collapse.DEFAULTS, options)
24849 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' +
24850 '[data-toggle="collapse"][data-target="#' + element.id + '"]')
24851 this.transitioning = null
24852
24853 if (this.options.parent) {
24854 this.$parent = this.getParent()
24855 } else {
24856 this.addAriaAndCollapsedClass(this.$element, this.$trigger)
24857 }
24858
24859 if (this.options.toggle) this.toggle()
24860 }
24861
24862 Collapse.VERSION = '3.3.7'
24863
24864 Collapse.TRANSITION_DURATION = 350
24865
24866 Collapse.DEFAULTS = {
24867 toggle: true
24868 }
24869
24870 Collapse.prototype.dimension = function () {
24871 var hasWidth = this.$element.hasClass('width')
24872 return hasWidth ? 'width' : 'height'
24873 }
24874
24875 Collapse.prototype.show = function () {
24876 if (this.transitioning || this.$element.hasClass('in')) return
24877
24878 var activesData
24879 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')
24880
24881 if (actives && actives.length) {
24882 activesData = actives.data('bs.collapse')
24883 if (activesData && activesData.transitioning) return
24884 }
24885
24886 var startEvent = $.Event('show.bs.collapse')
24887 this.$element.trigger(startEvent)
24888 if (startEvent.isDefaultPrevented()) return
24889
24890 if (actives && actives.length) {
24891 Plugin.call(actives, 'hide')
24892 activesData || actives.data('bs.collapse', null)
24893 }
24894
24895 var dimension = this.dimension()
24896
24897 this.$element
24898 .removeClass('collapse')
24899 .addClass('collapsing')[dimension](0)
24900 .attr('aria-expanded', true)
24901
24902 this.$trigger
24903 .removeClass('collapsed')
24904 .attr('aria-expanded', true)
24905
24906 this.transitioning = 1
24907
24908 var complete = function () {
24909 this.$element
24910 .removeClass('collapsing')
24911 .addClass('collapse in')[dimension]('')
24912 this.transitioning = 0
24913 this.$element
24914 .trigger('shown.bs.collapse')
24915 }
24916
24917 if (!$.support.transition) return complete.call(this)
24918
24919 var scrollSize = $.camelCase(['scroll', dimension].join('-'))
24920
24921 this.$element
24922 .one('bsTransitionEnd', $.proxy(complete, this))
24923 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])
24924 }
24925
24926 Collapse.prototype.hide = function () {
24927 if (this.transitioning || !this.$element.hasClass('in')) return
24928
24929 var startEvent = $.Event('hide.bs.collapse')
24930 this.$element.trigger(startEvent)
24931 if (startEvent.isDefaultPrevented()) return
24932
24933 var dimension = this.dimension()
24934
24935 this.$element[dimension](this.$element[dimension]())[0].offsetHeight
24936
24937 this.$element
24938 .addClass('collapsing')
24939 .removeClass('collapse in')
24940 .attr('aria-expanded', false)
24941
24942 this.$trigger
24943 .addClass('collapsed')
24944 .attr('aria-expanded', false)
24945
24946 this.transitioning = 1
24947
24948 var complete = function () {
24949 this.transitioning = 0
24950 this.$element
24951 .removeClass('collapsing')
24952 .addClass('collapse')
24953 .trigger('hidden.bs.collapse')
24954 }
24955
24956 if (!$.support.transition) return complete.call(this)
24957
24958 this.$element
24959 [dimension](0)
24960 .one('bsTransitionEnd', $.proxy(complete, this))
24961 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)
24962 }
24963
24964 Collapse.prototype.toggle = function () {
24965 this[this.$element.hasClass('in') ? 'hide' : 'show']()
24966 }
24967
24968 Collapse.prototype.getParent = function () {
24969 return $(this.options.parent)
24970 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]')
24971 .each($.proxy(function (i, element) {
24972 var $element = $(element)
24973 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)
24974 }, this))
24975 .end()
24976 }
24977
24978 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {
24979 var isOpen = $element.hasClass('in')
24980
24981 $element.attr('aria-expanded', isOpen)
24982 $trigger
24983 .toggleClass('collapsed', !isOpen)
24984 .attr('aria-expanded', isOpen)
24985 }
24986
24987 function getTargetFromTrigger($trigger) {
24988 var href
24989 var target = $trigger.attr('data-target')
24990 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7
24991
24992 return $(target)
24993 }
24994
24995
24996 // COLLAPSE PLUGIN DEFINITION
24997 // ==========================
24998
24999 function Plugin(option) {
25000 return this.each(function () {
25001 var $this = $(this)
25002 var data = $this.data('bs.collapse')
25003 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)
25004
25005 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false
25006 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))
25007 if (typeof option == 'string') data[option]()
25008 })
25009 }
25010
25011 var old = $.fn.collapse
25012
25013 $.fn.collapse = Plugin
25014 $.fn.collapse.Constructor = Collapse
25015
25016
25017 // COLLAPSE NO CONFLICT
25018 // ====================
25019
25020 $.fn.collapse.noConflict = function () {
25021 $.fn.collapse = old
25022 return this
25023 }
25024
25025
25026 // COLLAPSE DATA-API
25027 // =================
25028
25029 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
25030 var $this = $(this)
25031
25032 if (!$this.attr('data-target')) e.preventDefault()
25033
25034 var $target = getTargetFromTrigger($this)
25035 var data = $target.data('bs.collapse')
25036 var option = data ? 'toggle' : $this.data()
25037
25038 Plugin.call($target, option)
25039 })
25040
25041 }(jQuery);
25042
25043 /* ========================================================================
25044 * Bootstrap: dropdown.js v3.3.7
25045 * http://getbootstrap.com/javascript/#dropdowns
25046 * ========================================================================
25047 * Copyright 2011-2016 Twitter, Inc.
25048 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25049 * ======================================================================== */
25050
25051
25052 +function ($) {
25053 'use strict';
25054
25055 // DROPDOWN CLASS DEFINITION
25056 // =========================
25057
25058 var backdrop = '.dropdown-backdrop'
25059 var toggle = '[data-toggle="dropdown"]'
25060 var Dropdown = function (element) {
25061 $(element).on('click.bs.dropdown', this.toggle)
25062 }
25063
25064 Dropdown.VERSION = '3.3.7'
25065
25066 function getParent($this) {
25067 var selector = $this.attr('data-target')
25068
25069 if (!selector) {
25070 selector = $this.attr('href')
25071 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
25072 }
25073
25074 var $parent = selector && $(selector)
25075
25076 return $parent && $parent.length ? $parent : $this.parent()
25077 }
25078
25079 function clearMenus(e) {
25080 if (e && e.which === 3) return
25081 $(backdrop).remove()
25082 $(toggle).each(function () {
25083 var $this = $(this)
25084 var $parent = getParent($this)
25085 var relatedTarget = { relatedTarget: this }
25086
25087 if (!$parent.hasClass('open')) return
25088
25089 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return
25090
25091 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))
25092
25093 if (e.isDefaultPrevented()) return
25094
25095 $this.attr('aria-expanded', 'false')
25096 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))
25097 })
25098 }
25099
25100 Dropdown.prototype.toggle = function (e) {
25101 var $this = $(this)
25102
25103 if ($this.is('.disabled, :disabled')) return
25104
25105 var $parent = getParent($this)
25106 var isActive = $parent.hasClass('open')
25107
25108 clearMenus()
25109
25110 if (!isActive) {
25111 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {
25112 // if mobile we use a backdrop because click events don't delegate
25113 $(document.createElement('div'))
25114 .addClass('dropdown-backdrop')
25115 .insertAfter($(this))
25116 .on('click', clearMenus)
25117 }
25118
25119 var relatedTarget = { relatedTarget: this }
25120 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))
25121
25122 if (e.isDefaultPrevented()) return
25123
25124 $this
25125 .trigger('focus')
25126 .attr('aria-expanded', 'true')
25127
25128 $parent
25129 .toggleClass('open')
25130 .trigger($.Event('shown.bs.dropdown', relatedTarget))
25131 }
25132
25133 return false
25134 }
25135
25136 Dropdown.prototype.keydown = function (e) {
25137 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return
25138
25139 var $this = $(this)
25140
25141 e.preventDefault()
25142 e.stopPropagation()
25143
25144 if ($this.is('.disabled, :disabled')) return
25145
25146 var $parent = getParent($this)
25147 var isActive = $parent.hasClass('open')
25148
25149 if (!isActive && e.which != 27 || isActive && e.which == 27) {
25150 if (e.which == 27) $parent.find(toggle).trigger('focus')
25151 return $this.trigger('click')
25152 }
25153
25154 var desc = ' li:not(.disabled):visible a'
25155 var $items = $parent.find('.dropdown-menu' + desc)
25156
25157 if (!$items.length) return
25158
25159 var index = $items.index(e.target)
25160
25161 if (e.which == 38 && index > 0) index-- // up
25162 if (e.which == 40 && index < $items.length - 1) index++ // down
25163 if (!~index) index = 0
25164
25165 $items.eq(index).trigger('focus')
25166 }
25167
25168
25169 // DROPDOWN PLUGIN DEFINITION
25170 // ==========================
25171
25172 function Plugin(option) {
25173 return this.each(function () {
25174 var $this = $(this)
25175 var data = $this.data('bs.dropdown')
25176
25177 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))
25178 if (typeof option == 'string') data[option].call($this)
25179 })
25180 }
25181
25182 var old = $.fn.dropdown
25183
25184 $.fn.dropdown = Plugin
25185 $.fn.dropdown.Constructor = Dropdown
25186
25187
25188 // DROPDOWN NO CONFLICT
25189 // ====================
25190
25191 $.fn.dropdown.noConflict = function () {
25192 $.fn.dropdown = old
25193 return this
25194 }
25195
25196
25197 // APPLY TO STANDARD DROPDOWN ELEMENTS
25198 // ===================================
25199
25200 $(document)
25201 .on('click.bs.dropdown.data-api', clearMenus)
25202 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
25203 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
25204 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)
25205 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)
25206
25207 }(jQuery);
25208
25209 /* ========================================================================
25210 * Bootstrap: modal.js v3.3.7
25211 * http://getbootstrap.com/javascript/#modals
25212 * ========================================================================
25213 * Copyright 2011-2016 Twitter, Inc.
25214 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25215 * ======================================================================== */
25216
25217
25218 +function ($) {
25219 'use strict';
25220
25221 // MODAL CLASS DEFINITION
25222 // ======================
25223
25224 var Modal = function (element, options) {
25225 this.options = options
25226 this.$body = $(document.body)
25227 this.$element = $(element)
25228 this.$dialog = this.$element.find('.modal-dialog')
25229 this.$backdrop = null
25230 this.isShown = null
25231 this.originalBodyPad = null
25232 this.scrollbarWidth = 0
25233 this.ignoreBackdropClick = false
25234
25235 if (this.options.remote) {
25236 this.$element
25237 .find('.modal-content')
25238 .load(this.options.remote, $.proxy(function () {
25239 this.$element.trigger('loaded.bs.modal')
25240 }, this))
25241 }
25242 }
25243
25244 Modal.VERSION = '3.3.7'
25245
25246 Modal.TRANSITION_DURATION = 300
25247 Modal.BACKDROP_TRANSITION_DURATION = 150
25248
25249 Modal.DEFAULTS = {
25250 backdrop: true,
25251 keyboard: true,
25252 show: true
25253 }
25254
25255 Modal.prototype.toggle = function (_relatedTarget) {
25256 return this.isShown ? this.hide() : this.show(_relatedTarget)
25257 }
25258
25259 Modal.prototype.show = function (_relatedTarget) {
25260 var that = this
25261 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
25262
25263 this.$element.trigger(e)
25264
25265 if (this.isShown || e.isDefaultPrevented()) return
25266
25267 this.isShown = true
25268
25269 this.checkScrollbar()
25270 this.setScrollbar()
25271 this.$body.addClass('modal-open')
25272
25273 this.escape()
25274 this.resize()
25275
25276 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
25277
25278 this.$dialog.on('mousedown.dismiss.bs.modal', function () {
25279 that.$element.one('mouseup.dismiss.bs.modal', function (e) {
25280 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
25281 })
25282 })
25283
25284 this.backdrop(function () {
25285 var transition = $.support.transition && that.$element.hasClass('fade')
25286
25287 if (!that.$element.parent().length) {
25288 that.$element.appendTo(that.$body) // don't move modals dom position
25289 }
25290
25291 that.$element
25292 .show()
25293 .scrollTop(0)
25294
25295 that.adjustDialog()
25296
25297 if (transition) {
25298 that.$element[0].offsetWidth // force reflow
25299 }
25300
25301 that.$element.addClass('in')
25302
25303 that.enforceFocus()
25304
25305 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
25306
25307 transition ?
25308 that.$dialog // wait for modal to slide in
25309 .one('bsTransitionEnd', function () {
25310 that.$element.trigger('focus').trigger(e)
25311 })
25312 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25313 that.$element.trigger('focus').trigger(e)
25314 })
25315 }
25316
25317 Modal.prototype.hide = function (e) {
25318 if (e) e.preventDefault()
25319
25320 e = $.Event('hide.bs.modal')
25321
25322 this.$element.trigger(e)
25323
25324 if (!this.isShown || e.isDefaultPrevented()) return
25325
25326 this.isShown = false
25327
25328 this.escape()
25329 this.resize()
25330
25331 $(document).off('focusin.bs.modal')
25332
25333 this.$element
25334 .removeClass('in')
25335 .off('click.dismiss.bs.modal')
25336 .off('mouseup.dismiss.bs.modal')
25337
25338 this.$dialog.off('mousedown.dismiss.bs.modal')
25339
25340 $.support.transition && this.$element.hasClass('fade') ?
25341 this.$element
25342 .one('bsTransitionEnd', $.proxy(this.hideModal, this))
25343 .emulateTransitionEnd(Modal.TRANSITION_DURATION) :
25344 this.hideModal()
25345 }
25346
25347 Modal.prototype.enforceFocus = function () {
25348 $(document)
25349 .off('focusin.bs.modal') // guard against infinite focus loop
25350 .on('focusin.bs.modal', $.proxy(function (e) {
25351 if (document !== e.target &&
25352 this.$element[0] !== e.target &&
25353 !this.$element.has(e.target).length) {
25354 this.$element.trigger('focus')
25355 }
25356 }, this))
25357 }
25358
25359 Modal.prototype.escape = function () {
25360 if (this.isShown && this.options.keyboard) {
25361 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
25362 e.which == 27 && this.hide()
25363 }, this))
25364 } else if (!this.isShown) {
25365 this.$element.off('keydown.dismiss.bs.modal')
25366 }
25367 }
25368
25369 Modal.prototype.resize = function () {
25370 if (this.isShown) {
25371 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
25372 } else {
25373 $(window).off('resize.bs.modal')
25374 }
25375 }
25376
25377 Modal.prototype.hideModal = function () {
25378 var that = this
25379 this.$element.hide()
25380 this.backdrop(function () {
25381 that.$body.removeClass('modal-open')
25382 that.resetAdjustments()
25383 that.resetScrollbar()
25384 that.$element.trigger('hidden.bs.modal')
25385 })
25386 }
25387
25388 Modal.prototype.removeBackdrop = function () {
25389 this.$backdrop && this.$backdrop.remove()
25390 this.$backdrop = null
25391 }
25392
25393 Modal.prototype.backdrop = function (callback) {
25394 var that = this
25395 var animate = this.$element.hasClass('fade') ? 'fade' : ''
25396
25397 if (this.isShown && this.options.backdrop) {
25398 var doAnimate = $.support.transition && animate
25399
25400 this.$backdrop = $(document.createElement('div'))
25401 .addClass('modal-backdrop ' + animate)
25402 .appendTo(this.$body)
25403
25404 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
25405 if (this.ignoreBackdropClick) {
25406 this.ignoreBackdropClick = false
25407 return
25408 }
25409 if (e.target !== e.currentTarget) return
25410 this.options.backdrop == 'static'
25411 ? this.$element[0].focus()
25412 : this.hide()
25413 }, this))
25414
25415 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
25416
25417 this.$backdrop.addClass('in')
25418
25419 if (!callback) return
25420
25421 doAnimate ?
25422 this.$backdrop
25423 .one('bsTransitionEnd', callback)
25424 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25425 callback()
25426
25427 } else if (!this.isShown && this.$backdrop) {
25428 this.$backdrop.removeClass('in')
25429
25430 var callbackRemove = function () {
25431 that.removeBackdrop()
25432 callback && callback()
25433 }
25434 $.support.transition && this.$element.hasClass('fade') ?
25435 this.$backdrop
25436 .one('bsTransitionEnd', callbackRemove)
25437 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
25438 callbackRemove()
25439
25440 } else if (callback) {
25441 callback()
25442 }
25443 }
25444
25445 // these following methods are used to handle overflowing modals
25446
25447 Modal.prototype.handleUpdate = function () {
25448 this.adjustDialog()
25449 }
25450
25451 Modal.prototype.adjustDialog = function () {
25452 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
25453
25454 this.$element.css({
25455 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
25456 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
25457 })
25458 }
25459
25460 Modal.prototype.resetAdjustments = function () {
25461 this.$element.css({
25462 paddingLeft: '',
25463 paddingRight: ''
25464 })
25465 }
25466
25467 Modal.prototype.checkScrollbar = function () {
25468 var fullWindowWidth = window.innerWidth
25469 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
25470 var documentElementRect = document.documentElement.getBoundingClientRect()
25471 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
25472 }
25473 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
25474 this.scrollbarWidth = this.measureScrollbar()
25475 }
25476
25477 Modal.prototype.setScrollbar = function () {
25478 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
25479 this.originalBodyPad = document.body.style.paddingRight || ''
25480 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
25481 }
25482
25483 Modal.prototype.resetScrollbar = function () {
25484 this.$body.css('padding-right', this.originalBodyPad)
25485 }
25486
25487 Modal.prototype.measureScrollbar = function () { // thx walsh
25488 var scrollDiv = document.createElement('div')
25489 scrollDiv.className = 'modal-scrollbar-measure'
25490 this.$body.append(scrollDiv)
25491 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
25492 this.$body[0].removeChild(scrollDiv)
25493 return scrollbarWidth
25494 }
25495
25496
25497 // MODAL PLUGIN DEFINITION
25498 // =======================
25499
25500 function Plugin(option, _relatedTarget) {
25501 return this.each(function () {
25502 var $this = $(this)
25503 var data = $this.data('bs.modal')
25504 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
25505
25506 if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
25507 if (typeof option == 'string') data[option](_relatedTarget)
25508 else if (options.show) data.show(_relatedTarget)
25509 })
25510 }
25511
25512 var old = $.fn.modal
25513
25514 $.fn.modal = Plugin
25515 $.fn.modal.Constructor = Modal
25516
25517
25518 // MODAL NO CONFLICT
25519 // =================
25520
25521 $.fn.modal.noConflict = function () {
25522 $.fn.modal = old
25523 return this
25524 }
25525
25526
25527 // MODAL DATA-API
25528 // ==============
25529
25530 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
25531 var $this = $(this)
25532 var href = $this.attr('href')
25533 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
25534 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
25535
25536 if ($this.is('a')) e.preventDefault()
25537
25538 $target.one('show.bs.modal', function (showEvent) {
25539 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
25540 $target.one('hidden.bs.modal', function () {
25541 $this.is(':visible') && $this.trigger('focus')
25542 })
25543 })
25544 Plugin.call($target, option, this)
25545 })
25546
25547 }(jQuery);
25548
25549 /* ========================================================================
25550 * Bootstrap: tooltip.js v3.3.7
25551 * http://getbootstrap.com/javascript/#tooltip
25552 * Inspired by the original jQuery.tipsy by Jason Frame
25553 * ========================================================================
25554 * Copyright 2011-2016 Twitter, Inc.
25555 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
25556 * ======================================================================== */
25557
25558
25559 +function ($) {
25560 'use strict';
25561
25562 // TOOLTIP PUBLIC CLASS DEFINITION
25563 // ===============================
25564
25565 var Tooltip = function (element, options) {
25566 this.type = null
25567 this.options = null
25568 this.enabled = null
25569 this.timeout = null
25570 this.hoverState = null
25571 this.$element = null
25572 this.inState = null
25573
25574 this.init('tooltip', element, options)
25575 }
25576
25577 Tooltip.VERSION = '3.3.7'
25578
25579 Tooltip.TRANSITION_DURATION = 150
25580
25581 Tooltip.DEFAULTS = {
25582 animation: true,
25583 placement: 'top',
25584 selector: false,
25585 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
25586 trigger: 'hover focus',
25587 title: '',
25588 delay: 0,
25589 html: false,
25590 container: false,
25591 viewport: {
25592 selector: 'body',
25593 padding: 0
25594 }
25595 }
25596
25597 Tooltip.prototype.init = function (type, element, options) {
25598 this.enabled = true
25599 this.type = type
25600 this.$element = $(element)
25601 this.options = this.getOptions(options)
25602 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))
25603 this.inState = { click: false, hover: false, focus: false }
25604
25605 if (this.$element[0] instanceof document.constructor && !this.options.selector) {
25606 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')
25607 }
25608
25609 var triggers = this.options.trigger.split(' ')
25610
25611 for (var i = triggers.length; i--;) {
25612 var trigger = triggers[i]
25613
25614 if (trigger == 'click') {
25615 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
25616 } else if (trigger != 'manual') {
25617 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'
25618 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'
25619
25620 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
25621 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
25622 }
25623 }
25624
25625 this.options.selector ?
25626 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
25627 this.fixTitle()
25628 }
25629
25630 Tooltip.prototype.getDefaults = function () {
25631 return Tooltip.DEFAULTS
25632 }
25633
25634 Tooltip.prototype.getOptions = function (options) {
25635 options = $.extend({}, this.getDefaults(), this.$element.data(), options)
25636
25637 if (options.delay && typeof options.delay == 'number') {
25638 options.delay = {
25639 show: options.delay,
25640 hide: options.delay
25641 }
25642 }
25643
25644 return options
25645 }
25646
25647 Tooltip.prototype.getDelegateOptions = function () {
25648 var options = {}
25649 var defaults = this.getDefaults()
25650
25651 this._options && $.each(this._options, function (key, value) {
25652 if (defaults[key] != value) options[key] = value
25653 })
25654
25655 return options
25656 }
25657
25658 Tooltip.prototype.enter = function (obj) {
25659 var self = obj instanceof this.constructor ?
25660 obj : $(obj.currentTarget).data('bs.' + this.type)
25661
25662 if (!self) {
25663 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25664 $(obj.currentTarget).data('bs.' + this.type, self)
25665 }
25666
25667 if (obj instanceof $.Event) {
25668 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true
25669 }
25670
25671 if (self.tip().hasClass('in') || self.hoverState == 'in') {
25672 self.hoverState = 'in'
25673 return
25674 }
25675
25676 clearTimeout(self.timeout)
25677
25678 self.hoverState = 'in'
25679
25680 if (!self.options.delay || !self.options.delay.show) return self.show()
25681
25682 self.timeout = setTimeout(function () {
25683 if (self.hoverState == 'in') self.show()
25684 }, self.options.delay.show)
25685 }
25686
25687 Tooltip.prototype.isInStateTrue = function () {
25688 for (var key in this.inState) {
25689 if (this.inState[key]) return true
25690 }
25691
25692 return false
25693 }
25694
25695 Tooltip.prototype.leave = function (obj) {
25696 var self = obj instanceof this.constructor ?
25697 obj : $(obj.currentTarget).data('bs.' + this.type)
25698
25699 if (!self) {
25700 self = new this.constructor(obj.currentTarget, this.getDelegateOptions())
25701 $(obj.currentTarget).data('bs.' + this.type, self)
25702 }
25703
25704 if (obj instanceof $.Event) {
25705 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false
25706 }
25707
25708 if (self.isInStateTrue()) return
25709
25710 clearTimeout(self.timeout)
25711
25712 self.hoverState = 'out'
25713
25714 if (!self.options.delay || !self.options.delay.hide) return self.hide()
25715
25716 self.timeout = setTimeout(function () {
25717 if (self.hoverState == 'out') self.hide()
25718 }, self.options.delay.hide)
25719 }
25720
25721 Tooltip.prototype.show = function () {
25722 var e = $.Event('show.bs.' + this.type)
25723
25724 if (this.hasContent() && this.enabled) {
25725 this.$element.trigger(e)
25726
25727 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])
25728 if (e.isDefaultPrevented() || !inDom) return
25729 var that = this
25730
25731 var $tip = this.tip()
25732
25733 var tipId = this.getUID(this.type)
25734
25735 this.setContent()
25736 $tip.attr('id', tipId)
25737 this.$element.attr('aria-describedby', tipId)
25738
25739 if (this.options.animation) $tip.addClass('fade')
25740
25741 var placement = typeof this.options.placement == 'function' ?
25742 this.options.placement.call(this, $tip[0], this.$element[0]) :
25743 this.options.placement
25744
25745 var autoToken = /\s?auto?\s?/i
25746 var autoPlace = autoToken.test(placement)
25747 if (autoPlace) placement = placement.replace(autoToken, '') || 'top'
25748
25749 $tip
25750 .detach()
25751 .css({ top: 0, left: 0, display: 'block' })
25752 .addClass(placement)
25753 .data('bs.' + this.type, this)
25754
25755 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
25756 this.$element.trigger('inserted.bs.' + this.type)
25757
25758 var pos = this.getPosition()
25759 var actualWidth = $tip[0].offsetWidth
25760 var actualHeight = $tip[0].offsetHeight
25761
25762 if (autoPlace) {
25763 var orgPlacement = placement
25764 var viewportDim = this.getPosition(this.$viewport)
25765
25766 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :
25767 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :
25768 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :
25769 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :
25770 placement
25771
25772 $tip
25773 .removeClass(orgPlacement)
25774 .addClass(placement)
25775 }
25776
25777 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)
25778
25779 this.applyPlacement(calculatedOffset, placement)
25780
25781 var complete = function () {
25782 var prevHoverState = that.hoverState
25783 that.$element.trigger('shown.bs.' + that.type)
25784 that.hoverState = null
25785
25786 if (prevHoverState == 'out') that.leave(that)
25787 }
25788
25789 $.support.transition && this.$tip.hasClass('fade') ?
25790 $tip
25791 .one('bsTransitionEnd', complete)
25792 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25793 complete()
25794 }
25795 }
25796
25797 Tooltip.prototype.applyPlacement = function (offset, placement) {
25798 var $tip = this.tip()
25799 var width = $tip[0].offsetWidth
25800 var height = $tip[0].offsetHeight
25801
25802 // manually read margins because getBoundingClientRect includes difference
25803 var marginTop = parseInt($tip.css('margin-top'), 10)
25804 var marginLeft = parseInt($tip.css('margin-left'), 10)
25805
25806 // we must check for NaN for ie 8/9
25807 if (isNaN(marginTop)) marginTop = 0
25808 if (isNaN(marginLeft)) marginLeft = 0
25809
25810 offset.top += marginTop
25811 offset.left += marginLeft
25812
25813 // $.fn.offset doesn't round pixel values
25814 // so we use setOffset directly with our own function B-0
25815 $.offset.setOffset($tip[0], $.extend({
25816 using: function (props) {
25817 $tip.css({
25818 top: Math.round(props.top),
25819 left: Math.round(props.left)
25820 })
25821 }
25822 }, offset), 0)
25823
25824 $tip.addClass('in')
25825
25826 // check to see if placing tip in new offset caused the tip to resize itself
25827 var actualWidth = $tip[0].offsetWidth
25828 var actualHeight = $tip[0].offsetHeight
25829
25830 if (placement == 'top' && actualHeight != height) {
25831 offset.top = offset.top + height - actualHeight
25832 }
25833
25834 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)
25835
25836 if (delta.left) offset.left += delta.left
25837 else offset.top += delta.top
25838
25839 var isVertical = /top|bottom/.test(placement)
25840 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight
25841 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'
25842
25843 $tip.offset(offset)
25844 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)
25845 }
25846
25847 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {
25848 this.arrow()
25849 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')
25850 .css(isVertical ? 'top' : 'left', '')
25851 }
25852
25853 Tooltip.prototype.setContent = function () {
25854 var $tip = this.tip()
25855 var title = this.getTitle()
25856
25857 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
25858 $tip.removeClass('fade in top bottom left right')
25859 }
25860
25861 Tooltip.prototype.hide = function (callback) {
25862 var that = this
25863 var $tip = $(this.$tip)
25864 var e = $.Event('hide.bs.' + this.type)
25865
25866 function complete() {
25867 if (that.hoverState != 'in') $tip.detach()
25868 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.
25869 that.$element
25870 .removeAttr('aria-describedby')
25871 .trigger('hidden.bs.' + that.type)
25872 }
25873 callback && callback()
25874 }
25875
25876 this.$element.trigger(e)
25877
25878 if (e.isDefaultPrevented()) return
25879
25880 $tip.removeClass('in')
25881
25882 $.support.transition && $tip.hasClass('fade') ?
25883 $tip
25884 .one('bsTransitionEnd', complete)
25885 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :
25886 complete()
25887
25888 this.hoverState = null
25889
25890 return this
25891 }
25892
25893 Tooltip.prototype.fixTitle = function () {
25894 var $e = this.$element
25895 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {
25896 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
25897 }
25898 }
25899
25900 Tooltip.prototype.hasContent = function () {
25901 return this.getTitle()
25902 }
25903
25904 Tooltip.prototype.getPosition = function ($element) {
25905 $element = $element || this.$element
25906
25907 var el = $element[0]
25908 var isBody = el.tagName == 'BODY'
25909
25910 var elRect = el.getBoundingClientRect()
25911 if (elRect.width == null) {
25912 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093
25913 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })
25914 }
25915 var isSvg = window.SVGElement && el instanceof window.SVGElement
25916 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.
25917 // See https://github.com/twbs/bootstrap/issues/20280
25918 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())
25919 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }
25920 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null
25921
25922 return $.extend({}, elRect, scroll, outerDims, elOffset)
25923 }
25924
25925 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {
25926 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25927 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :
25928 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :
25929 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }
25930
25931 }
25932
25933 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {
25934 var delta = { top: 0, left: 0 }
25935 if (!this.$viewport) return delta
25936
25937 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0
25938 var viewportDimensions = this.getPosition(this.$viewport)
25939
25940 if (/right|left/.test(placement)) {
25941 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll
25942 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight
25943 if (topEdgeOffset < viewportDimensions.top) { // top overflow
25944 delta.top = viewportDimensions.top - topEdgeOffset
25945 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow
25946 delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset
25947 }
25948 } else {
25949 var leftEdgeOffset = pos.left - viewportPadding
25950 var rightEdgeOffset = pos.left + viewportPadding + actualWidth
25951 if (leftEdgeOffset < viewportDimensions.left) { // left overflow
25952 delta.left = viewportDimensions.left - leftEdgeOffset
25953 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow
25954 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset
25955 }
25956 }
25957
25958 return delta
25959 }
25960
25961 Tooltip.prototype.getTitle = function () {
25962 var title
25963 var $e = this.$element
25964 var o = this.options
25965
25966 title = $e.attr('data-original-title')
25967 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
25968
25969 return title
25970 }
25971
25972 Tooltip.prototype.getUID = function (prefix) {
25973 do prefix += ~~(Math.random() * 1000000)
25974 while (document.getElementById(prefix))
25975 return prefix
25976 }
25977
25978 Tooltip.prototype.tip = function () {
25979 if (!this.$tip) {
25980 this.$tip = $(this.options.template)
25981 if (this.$tip.length != 1) {
25982 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')
25983 }
25984 }
25985 return this.$tip
25986 }
25987
25988 Tooltip.prototype.arrow = function () {
25989 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))
25990 }
25991
25992 Tooltip.prototype.enable = function () {
25993 this.enabled = true
25994 }
25995
25996 Tooltip.prototype.disable = function () {
25997 this.enabled = false
25998 }
25999
26000 Tooltip.prototype.toggleEnabled = function () {
26001 this.enabled = !this.enabled
26002 }
26003
26004 Tooltip.prototype.toggle = function (e) {
26005 var self = this
26006 if (e) {
26007 self = $(e.currentTarget).data('bs.' + this.type)
26008 if (!self) {
26009 self = new this.constructor(e.currentTarget, this.getDelegateOptions())
26010 $(e.currentTarget).data('bs.' + this.type, self)
26011 }
26012 }
26013
26014 if (e) {
26015 self.inState.click = !self.inState.click
26016 if (self.isInStateTrue()) self.enter(self)
26017 else self.leave(self)
26018 } else {
26019 self.tip().hasClass('in') ? self.leave(self) : self.enter(self)
26020 }
26021 }
26022
26023 Tooltip.prototype.destroy = function () {
26024 var that = this
26025 clearTimeout(this.timeout)
26026 this.hide(function () {
26027 that.$element.off('.' + that.type).removeData('bs.' + that.type)
26028 if (that.$tip) {
26029 that.$tip.detach()
26030 }
26031 that.$tip = null
26032 that.$arrow = null
26033 that.$viewport = null
26034 that.$element = null
26035 })
26036 }
26037
26038
26039 // TOOLTIP PLUGIN DEFINITION
26040 // =========================
26041
26042 function Plugin(option) {
26043 return this.each(function () {
26044 var $this = $(this)
26045 var data = $this.data('bs.tooltip')
26046 var options = typeof option == 'object' && option
26047
26048 if (!data && /destroy|hide/.test(option)) return
26049 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))
26050 if (typeof option == 'string') data[option]()
26051 })
26052 }
26053
26054 var old = $.fn.tooltip
26055
26056 $.fn.tooltip = Plugin
26057 $.fn.tooltip.Constructor = Tooltip
26058
26059
26060 // TOOLTIP NO CONFLICT
26061 // ===================
26062
26063 $.fn.tooltip.noConflict = function () {
26064 $.fn.tooltip = old
26065 return this
26066 }
26067
26068 }(jQuery);
26069
26070 /* ========================================================================
26071 * Bootstrap: popover.js v3.3.7
26072 * http://getbootstrap.com/javascript/#popovers
26073 * ========================================================================
26074 * Copyright 2011-2016 Twitter, Inc.
26075 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26076 * ======================================================================== */
26077
26078
26079 +function ($) {
26080 'use strict';
26081
26082 // POPOVER PUBLIC CLASS DEFINITION
26083 // ===============================
26084
26085 var Popover = function (element, options) {
26086 this.init('popover', element, options)
26087 }
26088
26089 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')
26090
26091 Popover.VERSION = '3.3.7'
26092
26093 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {
26094 placement: 'right',
26095 trigger: 'click',
26096 content: '',
26097 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
26098 })
26099
26100
26101 // NOTE: POPOVER EXTENDS tooltip.js
26102 // ================================
26103
26104 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)
26105
26106 Popover.prototype.constructor = Popover
26107
26108 Popover.prototype.getDefaults = function () {
26109 return Popover.DEFAULTS
26110 }
26111
26112 Popover.prototype.setContent = function () {
26113 var $tip = this.tip()
26114 var title = this.getTitle()
26115 var content = this.getContent()
26116
26117 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
26118 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events
26119 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'
26120 ](content)
26121
26122 $tip.removeClass('fade top bottom left right in')
26123
26124 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do
26125 // this manually by checking the contents.
26126 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()
26127 }
26128
26129 Popover.prototype.hasContent = function () {
26130 return this.getTitle() || this.getContent()
26131 }
26132
26133 Popover.prototype.getContent = function () {
26134 var $e = this.$element
26135 var o = this.options
26136
26137 return $e.attr('data-content')
26138 || (typeof o.content == 'function' ?
26139 o.content.call($e[0]) :
26140 o.content)
26141 }
26142
26143 Popover.prototype.arrow = function () {
26144 return (this.$arrow = this.$arrow || this.tip().find('.arrow'))
26145 }
26146
26147
26148 // POPOVER PLUGIN DEFINITION
26149 // =========================
26150
26151 function Plugin(option) {
26152 return this.each(function () {
26153 var $this = $(this)
26154 var data = $this.data('bs.popover')
26155 var options = typeof option == 'object' && option
26156
26157 if (!data && /destroy|hide/.test(option)) return
26158 if (!data) $this.data('bs.popover', (data = new Popover(this, options)))
26159 if (typeof option == 'string') data[option]()
26160 })
26161 }
26162
26163 var old = $.fn.popover
26164
26165 $.fn.popover = Plugin
26166 $.fn.popover.Constructor = Popover
26167
26168
26169 // POPOVER NO CONFLICT
26170 // ===================
26171
26172 $.fn.popover.noConflict = function () {
26173 $.fn.popover = old
26174 return this
26175 }
26176
26177 }(jQuery);
26178
26179 /* ========================================================================
26180 * Bootstrap: scrollspy.js v3.3.7
26181 * http://getbootstrap.com/javascript/#scrollspy
26182 * ========================================================================
26183 * Copyright 2011-2016 Twitter, Inc.
26184 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26185 * ======================================================================== */
26186
26187
26188 +function ($) {
26189 'use strict';
26190
26191 // SCROLLSPY CLASS DEFINITION
26192 // ==========================
26193
26194 function ScrollSpy(element, options) {
26195 this.$body = $(document.body)
26196 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)
26197 this.options = $.extend({}, ScrollSpy.DEFAULTS, options)
26198 this.selector = (this.options.target || '') + ' .nav li > a'
26199 this.offsets = []
26200 this.targets = []
26201 this.activeTarget = null
26202 this.scrollHeight = 0
26203
26204 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))
26205 this.refresh()
26206 this.process()
26207 }
26208
26209 ScrollSpy.VERSION = '3.3.7'
26210
26211 ScrollSpy.DEFAULTS = {
26212 offset: 10
26213 }
26214
26215 ScrollSpy.prototype.getScrollHeight = function () {
26216 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)
26217 }
26218
26219 ScrollSpy.prototype.refresh = function () {
26220 var that = this
26221 var offsetMethod = 'offset'
26222 var offsetBase = 0
26223
26224 this.offsets = []
26225 this.targets = []
26226 this.scrollHeight = this.getScrollHeight()
26227
26228 if (!$.isWindow(this.$scrollElement[0])) {
26229 offsetMethod = 'position'
26230 offsetBase = this.$scrollElement.scrollTop()
26231 }
26232
26233 this.$body
26234 .find(this.selector)
26235 .map(function () {
26236 var $el = $(this)
26237 var href = $el.data('target') || $el.attr('href')
26238 var $href = /^#./.test(href) && $(href)
26239
26240 return ($href
26241 && $href.length
26242 && $href.is(':visible')
26243 && [[$href[offsetMethod]().top + offsetBase, href]]) || null
26244 })
26245 .sort(function (a, b) { return a[0] - b[0] })
26246 .each(function () {
26247 that.offsets.push(this[0])
26248 that.targets.push(this[1])
26249 })
26250 }
26251
26252 ScrollSpy.prototype.process = function () {
26253 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
26254 var scrollHeight = this.getScrollHeight()
26255 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height()
26256 var offsets = this.offsets
26257 var targets = this.targets
26258 var activeTarget = this.activeTarget
26259 var i
26260
26261 if (this.scrollHeight != scrollHeight) {
26262 this.refresh()
26263 }
26264
26265 if (scrollTop >= maxScroll) {
26266 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)
26267 }
26268
26269 if (activeTarget && scrollTop < offsets[0]) {
26270 this.activeTarget = null
26271 return this.clear()
26272 }
26273
26274 for (i = offsets.length; i--;) {
26275 activeTarget != targets[i]
26276 && scrollTop >= offsets[i]
26277 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])
26278 && this.activate(targets[i])
26279 }
26280 }
26281
26282 ScrollSpy.prototype.activate = function (target) {
26283 this.activeTarget = target
26284
26285 this.clear()
26286
26287 var selector = this.selector +
26288 '[data-target="' + target + '"],' +
26289 this.selector + '[href="' + target + '"]'
26290
26291 var active = $(selector)
26292 .parents('li')
26293 .addClass('active')
26294
26295 if (active.parent('.dropdown-menu').length) {
26296 active = active
26297 .closest('li.dropdown')
26298 .addClass('active')
26299 }
26300
26301 active.trigger('activate.bs.scrollspy')
26302 }
26303
26304 ScrollSpy.prototype.clear = function () {
26305 $(this.selector)
26306 .parentsUntil(this.options.target, '.active')
26307 .removeClass('active')
26308 }
26309
26310
26311 // SCROLLSPY PLUGIN DEFINITION
26312 // ===========================
26313
26314 function Plugin(option) {
26315 return this.each(function () {
26316 var $this = $(this)
26317 var data = $this.data('bs.scrollspy')
26318 var options = typeof option == 'object' && option
26319
26320 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))
26321 if (typeof option == 'string') data[option]()
26322 })
26323 }
26324
26325 var old = $.fn.scrollspy
26326
26327 $.fn.scrollspy = Plugin
26328 $.fn.scrollspy.Constructor = ScrollSpy
26329
26330
26331 // SCROLLSPY NO CONFLICT
26332 // =====================
26333
26334 $.fn.scrollspy.noConflict = function () {
26335 $.fn.scrollspy = old
26336 return this
26337 }
26338
26339
26340 // SCROLLSPY DATA-API
26341 // ==================
26342
26343 $(window).on('load.bs.scrollspy.data-api', function () {
26344 $('[data-spy="scroll"]').each(function () {
26345 var $spy = $(this)
26346 Plugin.call($spy, $spy.data())
26347 })
26348 })
26349
26350 }(jQuery);
26351
26352 /* ========================================================================
26353 * Bootstrap: tab.js v3.3.7
26354 * http://getbootstrap.com/javascript/#tabs
26355 * ========================================================================
26356 * Copyright 2011-2016 Twitter, Inc.
26357 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26358 * ======================================================================== */
26359
26360
26361 +function ($) {
26362 'use strict';
26363
26364 // TAB CLASS DEFINITION
26365 // ====================
26366
26367 var Tab = function (element) {
26368 // jscs:disable requireDollarBeforejQueryAssignment
26369 this.element = $(element)
26370 // jscs:enable requireDollarBeforejQueryAssignment
26371 }
26372
26373 Tab.VERSION = '3.3.7'
26374
26375 Tab.TRANSITION_DURATION = 150
26376
26377 Tab.prototype.show = function () {
26378 var $this = this.element
26379 var $ul = $this.closest('ul:not(.dropdown-menu)')
26380 var selector = $this.data('target')
26381
26382 if (!selector) {
26383 selector = $this.attr('href')
26384 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7
26385 }
26386
26387 if ($this.parent('li').hasClass('active')) return
26388
26389 var $previous = $ul.find('.active:last a')
26390 var hideEvent = $.Event('hide.bs.tab', {
26391 relatedTarget: $this[0]
26392 })
26393 var showEvent = $.Event('show.bs.tab', {
26394 relatedTarget: $previous[0]
26395 })
26396
26397 $previous.trigger(hideEvent)
26398 $this.trigger(showEvent)
26399
26400 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return
26401
26402 var $target = $(selector)
26403
26404 this.activate($this.closest('li'), $ul)
26405 this.activate($target, $target.parent(), function () {
26406 $previous.trigger({
26407 type: 'hidden.bs.tab',
26408 relatedTarget: $this[0]
26409 })
26410 $this.trigger({
26411 type: 'shown.bs.tab',
26412 relatedTarget: $previous[0]
26413 })
26414 })
26415 }
26416
26417 Tab.prototype.activate = function (element, container, callback) {
26418 var $active = container.find('> .active')
26419 var transition = callback
26420 && $.support.transition
26421 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)
26422
26423 function next() {
26424 $active
26425 .removeClass('active')
26426 .find('> .dropdown-menu > .active')
26427 .removeClass('active')
26428 .end()
26429 .find('[data-toggle="tab"]')
26430 .attr('aria-expanded', false)
26431
26432 element
26433 .addClass('active')
26434 .find('[data-toggle="tab"]')
26435 .attr('aria-expanded', true)
26436
26437 if (transition) {
26438 element[0].offsetWidth // reflow for transition
26439 element.addClass('in')
26440 } else {
26441 element.removeClass('fade')
26442 }
26443
26444 if (element.parent('.dropdown-menu').length) {
26445 element
26446 .closest('li.dropdown')
26447 .addClass('active')
26448 .end()
26449 .find('[data-toggle="tab"]')
26450 .attr('aria-expanded', true)
26451 }
26452
26453 callback && callback()
26454 }
26455
26456 $active.length && transition ?
26457 $active
26458 .one('bsTransitionEnd', next)
26459 .emulateTransitionEnd(Tab.TRANSITION_DURATION) :
26460 next()
26461
26462 $active.removeClass('in')
26463 }
26464
26465
26466 // TAB PLUGIN DEFINITION
26467 // =====================
26468
26469 function Plugin(option) {
26470 return this.each(function () {
26471 var $this = $(this)
26472 var data = $this.data('bs.tab')
26473
26474 if (!data) $this.data('bs.tab', (data = new Tab(this)))
26475 if (typeof option == 'string') data[option]()
26476 })
26477 }
26478
26479 var old = $.fn.tab
26480
26481 $.fn.tab = Plugin
26482 $.fn.tab.Constructor = Tab
26483
26484
26485 // TAB NO CONFLICT
26486 // ===============
26487
26488 $.fn.tab.noConflict = function () {
26489 $.fn.tab = old
26490 return this
26491 }
26492
26493
26494 // TAB DATA-API
26495 // ============
26496
26497 var clickHandler = function (e) {
26498 e.preventDefault()
26499 Plugin.call($(this), 'show')
26500 }
26501
26502 $(document)
26503 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler)
26504 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler)
26505
26506 }(jQuery);
26507
26508 /* ========================================================================
26509 * Bootstrap: affix.js v3.3.7
26510 * http://getbootstrap.com/javascript/#affix
26511 * ========================================================================
26512 * Copyright 2011-2016 Twitter, Inc.
26513 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
26514 * ======================================================================== */
26515
26516
26517 +function ($) {
26518 'use strict';
26519
26520 // AFFIX CLASS DEFINITION
26521 // ======================
26522
26523 var Affix = function (element, options) {
26524 this.options = $.extend({}, Affix.DEFAULTS, options)
26525
26526 this.$target = $(this.options.target)
26527 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))
26528 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))
26529
26530 this.$element = $(element)
26531 this.affixed = null
26532 this.unpin = null
26533 this.pinnedOffset = null
26534
26535 this.checkPosition()
26536 }
26537
26538 Affix.VERSION = '3.3.7'
26539
26540 Affix.RESET = 'affix affix-top affix-bottom'
26541
26542 Affix.DEFAULTS = {
26543 offset: 0,
26544 target: window
26545 }
26546
26547 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {
26548 var scrollTop = this.$target.scrollTop()
26549 var position = this.$element.offset()
26550 var targetHeight = this.$target.height()
26551
26552 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false
26553
26554 if (this.affixed == 'bottom') {
26555 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'
26556 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'
26557 }
26558
26559 var initializing = this.affixed == null
26560 var colliderTop = initializing ? scrollTop : position.top
26561 var colliderHeight = initializing ? targetHeight : height
26562
26563 if (offsetTop != null && scrollTop <= offsetTop) return 'top'
26564 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'
26565
26566 return false
26567 }
26568
26569 Affix.prototype.getPinnedOffset = function () {
26570 if (this.pinnedOffset) return this.pinnedOffset
26571 this.$element.removeClass(Affix.RESET).addClass('affix')
26572 var scrollTop = this.$target.scrollTop()
26573 var position = this.$element.offset()
26574 return (this.pinnedOffset = position.top - scrollTop)
26575 }
26576
26577 Affix.prototype.checkPositionWithEventLoop = function () {
26578 setTimeout($.proxy(this.checkPosition, this), 1)
26579 }
26580
26581 Affix.prototype.checkPosition = function () {
26582 if (!this.$element.is(':visible')) return
26583
26584 var height = this.$element.height()
26585 var offset = this.options.offset
26586 var offsetTop = offset.top
26587 var offsetBottom = offset.bottom
26588 var scrollHeight = Math.max($(document).height(), $(document.body).height())
26589
26590 if (typeof offset != 'object') offsetBottom = offsetTop = offset
26591 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)
26592 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)
26593
26594 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)
26595
26596 if (this.affixed != affix) {
26597 if (this.unpin != null) this.$element.css('top', '')
26598
26599 var affixType = 'affix' + (affix ? '-' + affix : '')
26600 var e = $.Event(affixType + '.bs.affix')
26601
26602 this.$element.trigger(e)
26603
26604 if (e.isDefaultPrevented()) return
26605
26606 this.affixed = affix
26607 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null
26608
26609 this.$element
26610 .removeClass(Affix.RESET)
26611 .addClass(affixType)
26612 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')
26613 }
26614
26615 if (affix == 'bottom') {
26616 this.$element.offset({
26617 top: scrollHeight - height - offsetBottom
26618 })
26619 }
26620 }
26621
26622
26623 // AFFIX PLUGIN DEFINITION
26624 // =======================
26625
26626 function Plugin(option) {
26627 return this.each(function () {
26628 var $this = $(this)
26629 var data = $this.data('bs.affix')
26630 var options = typeof option == 'object' && option
26631
26632 if (!data) $this.data('bs.affix', (data = new Affix(this, options)))
26633 if (typeof option == 'string') data[option]()
26634 })
26635 }
26636
26637 var old = $.fn.affix
26638
26639 $.fn.affix = Plugin
26640 $.fn.affix.Constructor = Affix
26641
26642
26643 // AFFIX NO CONFLICT
26644 // =================
26645
26646 $.fn.affix.noConflict = function () {
26647 $.fn.affix = old
26648 return this
26649 }
26650
26651
26652 // AFFIX DATA-API
26653 // ==============
26654
26655 $(window).on('load', function () {
26656 $('[data-spy="affix"]').each(function () {
26657 var $spy = $(this)
26658 var data = $spy.data()
26659
26660 data.offset = data.offset || {}
26661
26662 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom
26663 if (data.offsetTop != null) data.offset.top = data.offsetTop
26664
26665 Plugin.call($spy, data)
26666 })
26667 })
26668
26669 }(jQuery);
26670 </script>
26671 <script>(function() {
26672 'use strict';
26673
26674 /**
26675 * Extend an Object with another Object's properties.
26676 *
26677 * The source objects are specified as additional arguments.
26678 *
26679 * @param dst Object the object to extend.
26680 *
26681 * @return Object the final object.
26682 */
26683 var _extend = function(dst) {
26684 var sources = Array.prototype.slice.call(arguments, 1);
26685 for (var i=0; i<sources.length; ++i) {
26686 var src = sources[i];
26687 for (var p in src) {
26688 if (src.hasOwnProperty(p)) dst[p] = src[p];
26689 }
26690 }
26691 return dst;
26692 };
26693
26694
26695 /**
26696 * Defer execution of given function.
26697 * @param {Function} func
26698 */
26699 var _defer = function(func) {
26700 if (typeof setImmediate === 'function') {
26701 return setImmediate(func);
26702 } else {
26703 return setTimeout(func, 0);
26704 }
26705 };
26706
26707 /**
26708 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
26709 */
26710 var Levenshtein = {
26711 /**
26712 * Calculate levenshtein distance of the two strings.
26713 *
26714 * @param str1 String the first string.
26715 * @param str2 String the second string.
26716 * @return Integer the levenshtein distance (0 and above).
26717 */
26718 get: function(str1, str2) {
26719 // base cases
26720 if (str1 === str2) return 0;
26721 if (str1.length === 0) return str2.length;
26722 if (str2.length === 0) return str1.length;
26723
26724 // two rows
26725 var prevRow = new Array(str2.length + 1),
26726 curCol, nextCol, i, j, tmp;
26727
26728 // initialise previous row
26729 for (i=0; i<prevRow.length; ++i) {
26730 prevRow[i] = i;
26731 }
26732
26733 // calculate current row distance from previous row
26734 for (i=0; i<str1.length; ++i) {
26735 nextCol = i + 1;
26736
26737 for (j=0; j<str2.length; ++j) {
26738 curCol = nextCol;
26739
26740 // substution
26741 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26742 // insertion
26743 tmp = curCol + 1;
26744 if (nextCol > tmp) {
26745 nextCol = tmp;
26746 }
26747 // deletion
26748 tmp = prevRow[j + 1] + 1;
26749 if (nextCol > tmp) {
26750 nextCol = tmp;
26751 }
26752
26753 // copy current col value into previous (in preparation for next iteration)
26754 prevRow[j] = curCol;
26755 }
26756
26757 // copy last col value into previous (in preparation for next iteration)
26758 prevRow[j] = nextCol;
26759 }
26760
26761 return nextCol;
26762 },
26763
26764 /**
26765 * Asynchronously calculate levenshtein distance of the two strings.
26766 *
26767 * @param str1 String the first string.
26768 * @param str2 String the second string.
26769 * @param cb Function callback function with signature: function(Error err, int distance)
26770 * @param [options] Object additional options.
26771 * @param [options.progress] Function progress callback with signature: function(percentComplete)
26772 */
26773 getAsync: function(str1, str2, cb, options) {
26774 options = _extend({}, {
26775 progress: null
26776 }, options);
26777
26778 // base cases
26779 if (str1 === str2) return cb(null, 0);
26780 if (str1.length === 0) return cb(null, str2.length);
26781 if (str2.length === 0) return cb(null, str1.length);
26782
26783 // two rows
26784 var prevRow = new Array(str2.length + 1),
26785 curCol, nextCol,
26786 i, j, tmp,
26787 startTime, currentTime;
26788
26789 // initialise previous row
26790 for (i=0; i<prevRow.length; ++i) {
26791 prevRow[i] = i;
26792 }
26793
26794 nextCol = 1;
26795 i = 0;
26796 j = -1;
26797
26798 var __calculate = function() {
26799 // reset timer
26800 startTime = new Date().valueOf();
26801 currentTime = startTime;
26802
26803 // keep going until one second has elapsed
26804 while (currentTime - startTime < 1000) {
26805 // reached end of current row?
26806 if (str2.length <= (++j)) {
26807 // copy current into previous (in preparation for next iteration)
26808 prevRow[j] = nextCol;
26809
26810 // if already done all chars
26811 if (str1.length <= (++i)) {
26812 return cb(null, nextCol);
26813 }
26814 // else if we have more left to do
26815 else {
26816 nextCol = i + 1;
26817 j = 0;
26818 }
26819 }
26820
26821 // calculation
26822 curCol = nextCol;
26823
26824 // substution
26825 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
26826 // insertion
26827 tmp = curCol + 1;
26828 if (nextCol > tmp) {
26829 nextCol = tmp;
26830 }
26831 // deletion
26832 tmp = prevRow[j + 1] + 1;
26833 if (nextCol > tmp) {
26834 nextCol = tmp;
26835 }
26836
26837 // copy current into previous (in preparation for next iteration)
26838 prevRow[j] = curCol;
26839
26840 // get current time
26841 currentTime = new Date().valueOf();
26842 }
26843
26844 // send a progress update?
26845 if (null !== options.progress) {
26846 try {
26847 options.progress.call(null, (i * 100.0/ str1.length));
26848 } catch (err) {
26849 return cb('Progress callback: ' + err.toString());
26850 }
26851 }
26852
26853 // next iteration
26854 _defer(__calculate);
26855 };
26856
26857 __calculate();
26858 }
26859
26860 };
26861
26862 // amd
26863 if (typeof define !== "undefined" && define !== null && define.amd) {
26864 define(function() {
26865 return Levenshtein;
26866 });
26867 }
26868 // commonjs
26869 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
26870 module.exports = Levenshtein;
26871 }
26872 // web worker
26873 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
26874 self.Levenshtein = Levenshtein;
26875 }
26876 // browser main thread
26877 else if (typeof window !== "undefined" && window !== null) {
26878 window.Levenshtein = Levenshtein;
26879 }
26880 }());
26881
26882 </script>
26883 <script>/*! kjua v0.1.1 - https://larsjung.de/kjua/ */
26884 !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>
26885 <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){
26886 (function (global){
26887 'use strict';
26888
26889 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
26890 // original notice:
26891
26892 /*!
26893 * The buffer module from node.js, for the browser.
26894 *
26895 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
26896 * @license MIT
26897 */
26898 function compare(a, b) {
26899 if (a === b) {
26900 return 0;
26901 }
26902
26903 var x = a.length;
26904 var y = b.length;
26905
26906 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
26907 if (a[i] !== b[i]) {
26908 x = a[i];
26909 y = b[i];
26910 break;
26911 }
26912 }
26913
26914 if (x < y) {
26915 return -1;
26916 }
26917 if (y < x) {
26918 return 1;
26919 }
26920 return 0;
26921 }
26922 function isBuffer(b) {
26923 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
26924 return global.Buffer.isBuffer(b);
26925 }
26926 return !!(b != null && b._isBuffer);
26927 }
26928
26929 // based on node assert, original notice:
26930
26931 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
26932 //
26933 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
26934 //
26935 // Originally from narwhal.js (http://narwhaljs.org)
26936 // Copyright (c) 2009 Thomas Robinson <280north.com>
26937 //
26938 // Permission is hereby granted, free of charge, to any person obtaining a copy
26939 // of this software and associated documentation files (the 'Software'), to
26940 // deal in the Software without restriction, including without limitation the
26941 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
26942 // sell copies of the Software, and to permit persons to whom the Software is
26943 // furnished to do so, subject to the following conditions:
26944 //
26945 // The above copyright notice and this permission notice shall be included in
26946 // all copies or substantial portions of the Software.
26947 //
26948 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
26949 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26950 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26951 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
26952 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26953 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26954
26955 var util = require('util/');
26956 var hasOwn = Object.prototype.hasOwnProperty;
26957 var pSlice = Array.prototype.slice;
26958 var functionsHaveNames = (function () {
26959 return function foo() {}.name === 'foo';
26960 }());
26961 function pToString (obj) {
26962 return Object.prototype.toString.call(obj);
26963 }
26964 function isView(arrbuf) {
26965 if (isBuffer(arrbuf)) {
26966 return false;
26967 }
26968 if (typeof global.ArrayBuffer !== 'function') {
26969 return false;
26970 }
26971 if (typeof ArrayBuffer.isView === 'function') {
26972 return ArrayBuffer.isView(arrbuf);
26973 }
26974 if (!arrbuf) {
26975 return false;
26976 }
26977 if (arrbuf instanceof DataView) {
26978 return true;
26979 }
26980 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
26981 return true;
26982 }
26983 return false;
26984 }
26985 // 1. The assert module provides functions that throw
26986 // AssertionError's when particular conditions are not met. The
26987 // assert module must conform to the following interface.
26988
26989 var assert = module.exports = ok;
26990
26991 // 2. The AssertionError is defined in assert.
26992 // new assert.AssertionError({ message: message,
26993 // actual: actual,
26994 // expected: expected })
26995
26996 var regex = /\s*function\s+([^\(\s]*)\s*/;
26997 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
26998 function getName(func) {
26999 if (!util.isFunction(func)) {
27000 return;
27001 }
27002 if (functionsHaveNames) {
27003 return func.name;
27004 }
27005 var str = func.toString();
27006 var match = str.match(regex);
27007 return match && match[1];
27008 }
27009 assert.AssertionError = function AssertionError(options) {
27010 this.name = 'AssertionError';
27011 this.actual = options.actual;
27012 this.expected = options.expected;
27013 this.operator = options.operator;
27014 if (options.message) {
27015 this.message = options.message;
27016 this.generatedMessage = false;
27017 } else {
27018 this.message = getMessage(this);
27019 this.generatedMessage = true;
27020 }
27021 var stackStartFunction = options.stackStartFunction || fail;
27022 if (Error.captureStackTrace) {
27023 Error.captureStackTrace(this, stackStartFunction);
27024 } else {
27025 // non v8 browsers so we can have a stacktrace
27026 var err = new Error();
27027 if (err.stack) {
27028 var out = err.stack;
27029
27030 // try to strip useless frames
27031 var fn_name = getName(stackStartFunction);
27032 var idx = out.indexOf('\n' + fn_name);
27033 if (idx >= 0) {
27034 // once we have located the function frame
27035 // we need to strip out everything before it (and its line)
27036 var next_line = out.indexOf('\n', idx + 1);
27037 out = out.substring(next_line + 1);
27038 }
27039
27040 this.stack = out;
27041 }
27042 }
27043 };
27044
27045 // assert.AssertionError instanceof Error
27046 util.inherits(assert.AssertionError, Error);
27047
27048 function truncate(s, n) {
27049 if (typeof s === 'string') {
27050 return s.length < n ? s : s.slice(0, n);
27051 } else {
27052 return s;
27053 }
27054 }
27055 function inspect(something) {
27056 if (functionsHaveNames || !util.isFunction(something)) {
27057 return util.inspect(something);
27058 }
27059 var rawname = getName(something);
27060 var name = rawname ? ': ' + rawname : '';
27061 return '[Function' + name + ']';
27062 }
27063 function getMessage(self) {
27064 return truncate(inspect(self.actual), 128) + ' ' +
27065 self.operator + ' ' +
27066 truncate(inspect(self.expected), 128);
27067 }
27068
27069 // At present only the three keys mentioned above are used and
27070 // understood by the spec. Implementations or sub modules can pass
27071 // other keys to the AssertionError's constructor - they will be
27072 // ignored.
27073
27074 // 3. All of the following functions must throw an AssertionError
27075 // when a corresponding condition is not met, with a message that
27076 // may be undefined if not provided. All assertion methods provide
27077 // both the actual and expected values to the assertion error for
27078 // display purposes.
27079
27080 function fail(actual, expected, message, operator, stackStartFunction) {
27081 throw new assert.AssertionError({
27082 message: message,
27083 actual: actual,
27084 expected: expected,
27085 operator: operator,
27086 stackStartFunction: stackStartFunction
27087 });
27088 }
27089
27090 // EXTENSION! allows for well behaved errors defined elsewhere.
27091 assert.fail = fail;
27092
27093 // 4. Pure assertion tests whether a value is truthy, as determined
27094 // by !!guard.
27095 // assert.ok(guard, message_opt);
27096 // This statement is equivalent to assert.equal(true, !!guard,
27097 // message_opt);. To test strictly for the value true, use
27098 // assert.strictEqual(true, guard, message_opt);.
27099
27100 function ok(value, message) {
27101 if (!value) fail(value, true, message, '==', assert.ok);
27102 }
27103 assert.ok = ok;
27104
27105 // 5. The equality assertion tests shallow, coercive equality with
27106 // ==.
27107 // assert.equal(actual, expected, message_opt);
27108
27109 assert.equal = function equal(actual, expected, message) {
27110 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
27111 };
27112
27113 // 6. The non-equality assertion tests for whether two objects are not equal
27114 // with != assert.notEqual(actual, expected, message_opt);
27115
27116 assert.notEqual = function notEqual(actual, expected, message) {
27117 if (actual == expected) {
27118 fail(actual, expected, message, '!=', assert.notEqual);
27119 }
27120 };
27121
27122 // 7. The equivalence assertion tests a deep equality relation.
27123 // assert.deepEqual(actual, expected, message_opt);
27124
27125 assert.deepEqual = function deepEqual(actual, expected, message) {
27126 if (!_deepEqual(actual, expected, false)) {
27127 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
27128 }
27129 };
27130
27131 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
27132 if (!_deepEqual(actual, expected, true)) {
27133 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
27134 }
27135 };
27136
27137 function _deepEqual(actual, expected, strict, memos) {
27138 // 7.1. All identical values are equivalent, as determined by ===.
27139 if (actual === expected) {
27140 return true;
27141 } else if (isBuffer(actual) && isBuffer(expected)) {
27142 return compare(actual, expected) === 0;
27143
27144 // 7.2. If the expected value is a Date object, the actual value is
27145 // equivalent if it is also a Date object that refers to the same time.
27146 } else if (util.isDate(actual) && util.isDate(expected)) {
27147 return actual.getTime() === expected.getTime();
27148
27149 // 7.3 If the expected value is a RegExp object, the actual value is
27150 // equivalent if it is also a RegExp object with the same source and
27151 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
27152 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
27153 return actual.source === expected.source &&
27154 actual.global === expected.global &&
27155 actual.multiline === expected.multiline &&
27156 actual.lastIndex === expected.lastIndex &&
27157 actual.ignoreCase === expected.ignoreCase;
27158
27159 // 7.4. Other pairs that do not both pass typeof value == 'object',
27160 // equivalence is determined by ==.
27161 } else if ((actual === null || typeof actual !== 'object') &&
27162 (expected === null || typeof expected !== 'object')) {
27163 return strict ? actual === expected : actual == expected;
27164
27165 // If both values are instances of typed arrays, wrap their underlying
27166 // ArrayBuffers in a Buffer each to increase performance
27167 // This optimization requires the arrays to have the same type as checked by
27168 // Object.prototype.toString (aka pToString). Never perform binary
27169 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
27170 // bit patterns are not identical.
27171 } else if (isView(actual) && isView(expected) &&
27172 pToString(actual) === pToString(expected) &&
27173 !(actual instanceof Float32Array ||
27174 actual instanceof Float64Array)) {
27175 return compare(new Uint8Array(actual.buffer),
27176 new Uint8Array(expected.buffer)) === 0;
27177
27178 // 7.5 For all other Object pairs, including Array objects, equivalence is
27179 // determined by having the same number of owned properties (as verified
27180 // with Object.prototype.hasOwnProperty.call), the same set of keys
27181 // (although not necessarily the same order), equivalent values for every
27182 // corresponding key, and an identical 'prototype' property. Note: this
27183 // accounts for both named and indexed properties on Arrays.
27184 } else if (isBuffer(actual) !== isBuffer(expected)) {
27185 return false;
27186 } else {
27187 memos = memos || {actual: [], expected: []};
27188
27189 var actualIndex = memos.actual.indexOf(actual);
27190 if (actualIndex !== -1) {
27191 if (actualIndex === memos.expected.indexOf(expected)) {
27192 return true;
27193 }
27194 }
27195
27196 memos.actual.push(actual);
27197 memos.expected.push(expected);
27198
27199 return objEquiv(actual, expected, strict, memos);
27200 }
27201 }
27202
27203 function isArguments(object) {
27204 return Object.prototype.toString.call(object) == '[object Arguments]';
27205 }
27206
27207 function objEquiv(a, b, strict, actualVisitedObjects) {
27208 if (a === null || a === undefined || b === null || b === undefined)
27209 return false;
27210 // if one is a primitive, the other must be same
27211 if (util.isPrimitive(a) || util.isPrimitive(b))
27212 return a === b;
27213 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
27214 return false;
27215 var aIsArgs = isArguments(a);
27216 var bIsArgs = isArguments(b);
27217 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
27218 return false;
27219 if (aIsArgs) {
27220 a = pSlice.call(a);
27221 b = pSlice.call(b);
27222 return _deepEqual(a, b, strict);
27223 }
27224 var ka = objectKeys(a);
27225 var kb = objectKeys(b);
27226 var key, i;
27227 // having the same number of owned properties (keys incorporates
27228 // hasOwnProperty)
27229 if (ka.length !== kb.length)
27230 return false;
27231 //the same set of keys (although not necessarily the same order),
27232 ka.sort();
27233 kb.sort();
27234 //~~~cheap key test
27235 for (i = ka.length - 1; i >= 0; i--) {
27236 if (ka[i] !== kb[i])
27237 return false;
27238 }
27239 //equivalent values for every corresponding key, and
27240 //~~~possibly expensive deep test
27241 for (i = ka.length - 1; i >= 0; i--) {
27242 key = ka[i];
27243 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
27244 return false;
27245 }
27246 return true;
27247 }
27248
27249 // 8. The non-equivalence assertion tests for any deep inequality.
27250 // assert.notDeepEqual(actual, expected, message_opt);
27251
27252 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
27253 if (_deepEqual(actual, expected, false)) {
27254 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
27255 }
27256 };
27257
27258 assert.notDeepStrictEqual = notDeepStrictEqual;
27259 function notDeepStrictEqual(actual, expected, message) {
27260 if (_deepEqual(actual, expected, true)) {
27261 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
27262 }
27263 }
27264
27265
27266 // 9. The strict equality assertion tests strict equality, as determined by ===.
27267 // assert.strictEqual(actual, expected, message_opt);
27268
27269 assert.strictEqual = function strictEqual(actual, expected, message) {
27270 if (actual !== expected) {
27271 fail(actual, expected, message, '===', assert.strictEqual);
27272 }
27273 };
27274
27275 // 10. The strict non-equality assertion tests for strict inequality, as
27276 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
27277
27278 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
27279 if (actual === expected) {
27280 fail(actual, expected, message, '!==', assert.notStrictEqual);
27281 }
27282 };
27283
27284 function expectedException(actual, expected) {
27285 if (!actual || !expected) {
27286 return false;
27287 }
27288
27289 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
27290 return expected.test(actual);
27291 }
27292
27293 try {
27294 if (actual instanceof expected) {
27295 return true;
27296 }
27297 } catch (e) {
27298 // Ignore. The instanceof check doesn't work for arrow functions.
27299 }
27300
27301 if (Error.isPrototypeOf(expected)) {
27302 return false;
27303 }
27304
27305 return expected.call({}, actual) === true;
27306 }
27307
27308 function _tryBlock(block) {
27309 var error;
27310 try {
27311 block();
27312 } catch (e) {
27313 error = e;
27314 }
27315 return error;
27316 }
27317
27318 function _throws(shouldThrow, block, expected, message) {
27319 var actual;
27320
27321 if (typeof block !== 'function') {
27322 throw new TypeError('"block" argument must be a function');
27323 }
27324
27325 if (typeof expected === 'string') {
27326 message = expected;
27327 expected = null;
27328 }
27329
27330 actual = _tryBlock(block);
27331
27332 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
27333 (message ? ' ' + message : '.');
27334
27335 if (shouldThrow && !actual) {
27336 fail(actual, expected, 'Missing expected exception' + message);
27337 }
27338
27339 var userProvidedMessage = typeof message === 'string';
27340 var isUnwantedException = !shouldThrow && util.isError(actual);
27341 var isUnexpectedException = !shouldThrow && actual && !expected;
27342
27343 if ((isUnwantedException &&
27344 userProvidedMessage &&
27345 expectedException(actual, expected)) ||
27346 isUnexpectedException) {
27347 fail(actual, expected, 'Got unwanted exception' + message);
27348 }
27349
27350 if ((shouldThrow && actual && expected &&
27351 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
27352 throw actual;
27353 }
27354 }
27355
27356 // 11. Expected to throw an error:
27357 // assert.throws(block, Error_opt, message_opt);
27358
27359 assert.throws = function(block, /*optional*/error, /*optional*/message) {
27360 _throws(true, block, error, message);
27361 };
27362
27363 // EXTENSION! This is annoying to write outside this module.
27364 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
27365 _throws(false, block, error, message);
27366 };
27367
27368 assert.ifError = function(err) { if (err) throw err; };
27369
27370 var objectKeys = Object.keys || function (obj) {
27371 var keys = [];
27372 for (var key in obj) {
27373 if (hasOwn.call(obj, key)) keys.push(key);
27374 }
27375 return keys;
27376 };
27377
27378 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27379 },{"util/":33}],2:[function(require,module,exports){
27380 'use strict'
27381
27382 exports.byteLength = byteLength
27383 exports.toByteArray = toByteArray
27384 exports.fromByteArray = fromByteArray
27385
27386 var lookup = []
27387 var revLookup = []
27388 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
27389
27390 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
27391 for (var i = 0, len = code.length; i < len; ++i) {
27392 lookup[i] = code[i]
27393 revLookup[code.charCodeAt(i)] = i
27394 }
27395
27396 revLookup['-'.charCodeAt(0)] = 62
27397 revLookup['_'.charCodeAt(0)] = 63
27398
27399 function placeHoldersCount (b64) {
27400 var len = b64.length
27401 if (len % 4 > 0) {
27402 throw new Error('Invalid string. Length must be a multiple of 4')
27403 }
27404
27405 // the number of equal signs (place holders)
27406 // if there are two placeholders, than the two characters before it
27407 // represent one byte
27408 // if there is only one, then the three characters before it represent 2 bytes
27409 // this is just a cheap hack to not do indexOf twice
27410 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
27411 }
27412
27413 function byteLength (b64) {
27414 // base64 is 4/3 + up to two characters of the original data
27415 return b64.length * 3 / 4 - placeHoldersCount(b64)
27416 }
27417
27418 function toByteArray (b64) {
27419 var i, j, l, tmp, placeHolders, arr
27420 var len = b64.length
27421 placeHolders = placeHoldersCount(b64)
27422
27423 arr = new Arr(len * 3 / 4 - placeHolders)
27424
27425 // if there are placeholders, only get up to the last complete 4 chars
27426 l = placeHolders > 0 ? len - 4 : len
27427
27428 var L = 0
27429
27430 for (i = 0, j = 0; i < l; i += 4, j += 3) {
27431 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
27432 arr[L++] = (tmp >> 16) & 0xFF
27433 arr[L++] = (tmp >> 8) & 0xFF
27434 arr[L++] = tmp & 0xFF
27435 }
27436
27437 if (placeHolders === 2) {
27438 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
27439 arr[L++] = tmp & 0xFF
27440 } else if (placeHolders === 1) {
27441 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
27442 arr[L++] = (tmp >> 8) & 0xFF
27443 arr[L++] = tmp & 0xFF
27444 }
27445
27446 return arr
27447 }
27448
27449 function tripletToBase64 (num) {
27450 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
27451 }
27452
27453 function encodeChunk (uint8, start, end) {
27454 var tmp
27455 var output = []
27456 for (var i = start; i < end; i += 3) {
27457 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
27458 output.push(tripletToBase64(tmp))
27459 }
27460 return output.join('')
27461 }
27462
27463 function fromByteArray (uint8) {
27464 var tmp
27465 var len = uint8.length
27466 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
27467 var output = ''
27468 var parts = []
27469 var maxChunkLength = 16383 // must be multiple of 3
27470
27471 // go through the array every three bytes, we'll deal with trailing stuff later
27472 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
27473 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
27474 }
27475
27476 // pad the end with zeros, but make sure to not forget the extra bytes
27477 if (extraBytes === 1) {
27478 tmp = uint8[len - 1]
27479 output += lookup[tmp >> 2]
27480 output += lookup[(tmp << 4) & 0x3F]
27481 output += '=='
27482 } else if (extraBytes === 2) {
27483 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
27484 output += lookup[tmp >> 10]
27485 output += lookup[(tmp >> 4) & 0x3F]
27486 output += lookup[(tmp << 2) & 0x3F]
27487 output += '='
27488 }
27489
27490 parts.push(output)
27491
27492 return parts.join('')
27493 }
27494
27495 },{}],3:[function(require,module,exports){
27496
27497 },{}],4:[function(require,module,exports){
27498 (function (global){
27499 'use strict';
27500
27501 var buffer = require('buffer');
27502 var Buffer = buffer.Buffer;
27503 var SlowBuffer = buffer.SlowBuffer;
27504 var MAX_LEN = buffer.kMaxLength || 2147483647;
27505 exports.alloc = function alloc(size, fill, encoding) {
27506 if (typeof Buffer.alloc === 'function') {
27507 return Buffer.alloc(size, fill, encoding);
27508 }
27509 if (typeof encoding === 'number') {
27510 throw new TypeError('encoding must not be number');
27511 }
27512 if (typeof size !== 'number') {
27513 throw new TypeError('size must be a number');
27514 }
27515 if (size > MAX_LEN) {
27516 throw new RangeError('size is too large');
27517 }
27518 var enc = encoding;
27519 var _fill = fill;
27520 if (_fill === undefined) {
27521 enc = undefined;
27522 _fill = 0;
27523 }
27524 var buf = new Buffer(size);
27525 if (typeof _fill === 'string') {
27526 var fillBuf = new Buffer(_fill, enc);
27527 var flen = fillBuf.length;
27528 var i = -1;
27529 while (++i < size) {
27530 buf[i] = fillBuf[i % flen];
27531 }
27532 } else {
27533 buf.fill(_fill);
27534 }
27535 return buf;
27536 }
27537 exports.allocUnsafe = function allocUnsafe(size) {
27538 if (typeof Buffer.allocUnsafe === 'function') {
27539 return Buffer.allocUnsafe(size);
27540 }
27541 if (typeof size !== 'number') {
27542 throw new TypeError('size must be a number');
27543 }
27544 if (size > MAX_LEN) {
27545 throw new RangeError('size is too large');
27546 }
27547 return new Buffer(size);
27548 }
27549 exports.from = function from(value, encodingOrOffset, length) {
27550 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
27551 return Buffer.from(value, encodingOrOffset, length);
27552 }
27553 if (typeof value === 'number') {
27554 throw new TypeError('"value" argument must not be a number');
27555 }
27556 if (typeof value === 'string') {
27557 return new Buffer(value, encodingOrOffset);
27558 }
27559 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
27560 var offset = encodingOrOffset;
27561 if (arguments.length === 1) {
27562 return new Buffer(value);
27563 }
27564 if (typeof offset === 'undefined') {
27565 offset = 0;
27566 }
27567 var len = length;
27568 if (typeof len === 'undefined') {
27569 len = value.byteLength - offset;
27570 }
27571 if (offset >= value.byteLength) {
27572 throw new RangeError('\'offset\' is out of bounds');
27573 }
27574 if (len > value.byteLength - offset) {
27575 throw new RangeError('\'length\' is out of bounds');
27576 }
27577 return new Buffer(value.slice(offset, offset + len));
27578 }
27579 if (Buffer.isBuffer(value)) {
27580 var out = new Buffer(value.length);
27581 value.copy(out, 0, 0, value.length);
27582 return out;
27583 }
27584 if (value) {
27585 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
27586 return new Buffer(value);
27587 }
27588 if (value.type === 'Buffer' && Array.isArray(value.data)) {
27589 return new Buffer(value.data);
27590 }
27591 }
27592
27593 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
27594 }
27595 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
27596 if (typeof Buffer.allocUnsafeSlow === 'function') {
27597 return Buffer.allocUnsafeSlow(size);
27598 }
27599 if (typeof size !== 'number') {
27600 throw new TypeError('size must be a number');
27601 }
27602 if (size >= MAX_LEN) {
27603 throw new RangeError('size is too large');
27604 }
27605 return new SlowBuffer(size);
27606 }
27607
27608 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27609 },{"buffer":5}],5:[function(require,module,exports){
27610 /*!
27611 * The buffer module from node.js, for the browser.
27612 *
27613 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
27614 * @license MIT
27615 */
27616 /* eslint-disable no-proto */
27617
27618 'use strict'
27619
27620 var base64 = require('base64-js')
27621 var ieee754 = require('ieee754')
27622
27623 exports.Buffer = Buffer
27624 exports.SlowBuffer = SlowBuffer
27625 exports.INSPECT_MAX_BYTES = 50
27626
27627 var K_MAX_LENGTH = 0x7fffffff
27628 exports.kMaxLength = K_MAX_LENGTH
27629
27630 /**
27631 * If `Buffer.TYPED_ARRAY_SUPPORT`:
27632 * === true Use Uint8Array implementation (fastest)
27633 * === false Print warning and recommend using `buffer` v4.x which has an Object
27634 * implementation (most compatible, even IE6)
27635 *
27636 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
27637 * Opera 11.6+, iOS 4.2+.
27638 *
27639 * We report that the browser does not support typed arrays if the are not subclassable
27640 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
27641 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
27642 * for __proto__ and has a buggy typed array implementation.
27643 */
27644 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
27645
27646 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
27647 typeof console.error === 'function') {
27648 console.error(
27649 'This browser lacks typed array (Uint8Array) support which is required by ' +
27650 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
27651 )
27652 }
27653
27654 function typedArraySupport () {
27655 // Can typed array instances can be augmented?
27656 try {
27657 var arr = new Uint8Array(1)
27658 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
27659 return arr.foo() === 42
27660 } catch (e) {
27661 return false
27662 }
27663 }
27664
27665 function createBuffer (length) {
27666 if (length > K_MAX_LENGTH) {
27667 throw new RangeError('Invalid typed array length')
27668 }
27669 // Return an augmented `Uint8Array` instance
27670 var buf = new Uint8Array(length)
27671 buf.__proto__ = Buffer.prototype
27672 return buf
27673 }
27674
27675 /**
27676 * The Buffer constructor returns instances of `Uint8Array` that have their
27677 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
27678 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
27679 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
27680 * returns a single octet.
27681 *
27682 * The `Uint8Array` prototype remains unmodified.
27683 */
27684
27685 function Buffer (arg, encodingOrOffset, length) {
27686 // Common case.
27687 if (typeof arg === 'number') {
27688 if (typeof encodingOrOffset === 'string') {
27689 throw new Error(
27690 'If encoding is specified then the first argument must be a string'
27691 )
27692 }
27693 return allocUnsafe(arg)
27694 }
27695 return from(arg, encodingOrOffset, length)
27696 }
27697
27698 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
27699 if (typeof Symbol !== 'undefined' && Symbol.species &&
27700 Buffer[Symbol.species] === Buffer) {
27701 Object.defineProperty(Buffer, Symbol.species, {
27702 value: null,
27703 configurable: true,
27704 enumerable: false,
27705 writable: false
27706 })
27707 }
27708
27709 Buffer.poolSize = 8192 // not used by this implementation
27710
27711 function from (value, encodingOrOffset, length) {
27712 if (typeof value === 'number') {
27713 throw new TypeError('"value" argument must not be a number')
27714 }
27715
27716 if (value instanceof ArrayBuffer) {
27717 return fromArrayBuffer(value, encodingOrOffset, length)
27718 }
27719
27720 if (typeof value === 'string') {
27721 return fromString(value, encodingOrOffset)
27722 }
27723
27724 return fromObject(value)
27725 }
27726
27727 /**
27728 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
27729 * if value is a number.
27730 * Buffer.from(str[, encoding])
27731 * Buffer.from(array)
27732 * Buffer.from(buffer)
27733 * Buffer.from(arrayBuffer[, byteOffset[, length]])
27734 **/
27735 Buffer.from = function (value, encodingOrOffset, length) {
27736 return from(value, encodingOrOffset, length)
27737 }
27738
27739 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
27740 // https://github.com/feross/buffer/pull/148
27741 Buffer.prototype.__proto__ = Uint8Array.prototype
27742 Buffer.__proto__ = Uint8Array
27743
27744 function assertSize (size) {
27745 if (typeof size !== 'number') {
27746 throw new TypeError('"size" argument must be a number')
27747 } else if (size < 0) {
27748 throw new RangeError('"size" argument must not be negative')
27749 }
27750 }
27751
27752 function alloc (size, fill, encoding) {
27753 assertSize(size)
27754 if (size <= 0) {
27755 return createBuffer(size)
27756 }
27757 if (fill !== undefined) {
27758 // Only pay attention to encoding if it's a string. This
27759 // prevents accidentally sending in a number that would
27760 // be interpretted as a start offset.
27761 return typeof encoding === 'string'
27762 ? createBuffer(size).fill(fill, encoding)
27763 : createBuffer(size).fill(fill)
27764 }
27765 return createBuffer(size)
27766 }
27767
27768 /**
27769 * Creates a new filled Buffer instance.
27770 * alloc(size[, fill[, encoding]])
27771 **/
27772 Buffer.alloc = function (size, fill, encoding) {
27773 return alloc(size, fill, encoding)
27774 }
27775
27776 function allocUnsafe (size) {
27777 assertSize(size)
27778 return createBuffer(size < 0 ? 0 : checked(size) | 0)
27779 }
27780
27781 /**
27782 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
27783 * */
27784 Buffer.allocUnsafe = function (size) {
27785 return allocUnsafe(size)
27786 }
27787 /**
27788 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
27789 */
27790 Buffer.allocUnsafeSlow = function (size) {
27791 return allocUnsafe(size)
27792 }
27793
27794 function fromString (string, encoding) {
27795 if (typeof encoding !== 'string' || encoding === '') {
27796 encoding = 'utf8'
27797 }
27798
27799 if (!Buffer.isEncoding(encoding)) {
27800 throw new TypeError('"encoding" must be a valid string encoding')
27801 }
27802
27803 var length = byteLength(string, encoding) | 0
27804 var buf = createBuffer(length)
27805
27806 var actual = buf.write(string, encoding)
27807
27808 if (actual !== length) {
27809 // Writing a hex string, for example, that contains invalid characters will
27810 // cause everything after the first invalid character to be ignored. (e.g.
27811 // 'abxxcd' will be treated as 'ab')
27812 buf = buf.slice(0, actual)
27813 }
27814
27815 return buf
27816 }
27817
27818 function fromArrayLike (array) {
27819 var length = array.length < 0 ? 0 : checked(array.length) | 0
27820 var buf = createBuffer(length)
27821 for (var i = 0; i < length; i += 1) {
27822 buf[i] = array[i] & 255
27823 }
27824 return buf
27825 }
27826
27827 function fromArrayBuffer (array, byteOffset, length) {
27828 if (byteOffset < 0 || array.byteLength < byteOffset) {
27829 throw new RangeError('\'offset\' is out of bounds')
27830 }
27831
27832 if (array.byteLength < byteOffset + (length || 0)) {
27833 throw new RangeError('\'length\' is out of bounds')
27834 }
27835
27836 var buf
27837 if (byteOffset === undefined && length === undefined) {
27838 buf = new Uint8Array(array)
27839 } else if (length === undefined) {
27840 buf = new Uint8Array(array, byteOffset)
27841 } else {
27842 buf = new Uint8Array(array, byteOffset, length)
27843 }
27844
27845 // Return an augmented `Uint8Array` instance
27846 buf.__proto__ = Buffer.prototype
27847 return buf
27848 }
27849
27850 function fromObject (obj) {
27851 if (Buffer.isBuffer(obj)) {
27852 var len = checked(obj.length) | 0
27853 var buf = createBuffer(len)
27854
27855 if (buf.length === 0) {
27856 return buf
27857 }
27858
27859 obj.copy(buf, 0, 0, len)
27860 return buf
27861 }
27862
27863 if (obj) {
27864 if (isArrayBufferView(obj) || 'length' in obj) {
27865 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
27866 return createBuffer(0)
27867 }
27868 return fromArrayLike(obj)
27869 }
27870
27871 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
27872 return fromArrayLike(obj.data)
27873 }
27874 }
27875
27876 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
27877 }
27878
27879 function checked (length) {
27880 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
27881 // length is NaN (which is otherwise coerced to zero.)
27882 if (length >= K_MAX_LENGTH) {
27883 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
27884 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
27885 }
27886 return length | 0
27887 }
27888
27889 function SlowBuffer (length) {
27890 if (+length != length) { // eslint-disable-line eqeqeq
27891 length = 0
27892 }
27893 return Buffer.alloc(+length)
27894 }
27895
27896 Buffer.isBuffer = function isBuffer (b) {
27897 return b != null && b._isBuffer === true
27898 }
27899
27900 Buffer.compare = function compare (a, b) {
27901 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
27902 throw new TypeError('Arguments must be Buffers')
27903 }
27904
27905 if (a === b) return 0
27906
27907 var x = a.length
27908 var y = b.length
27909
27910 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
27911 if (a[i] !== b[i]) {
27912 x = a[i]
27913 y = b[i]
27914 break
27915 }
27916 }
27917
27918 if (x < y) return -1
27919 if (y < x) return 1
27920 return 0
27921 }
27922
27923 Buffer.isEncoding = function isEncoding (encoding) {
27924 switch (String(encoding).toLowerCase()) {
27925 case 'hex':
27926 case 'utf8':
27927 case 'utf-8':
27928 case 'ascii':
27929 case 'latin1':
27930 case 'binary':
27931 case 'base64':
27932 case 'ucs2':
27933 case 'ucs-2':
27934 case 'utf16le':
27935 case 'utf-16le':
27936 return true
27937 default:
27938 return false
27939 }
27940 }
27941
27942 Buffer.concat = function concat (list, length) {
27943 if (!Array.isArray(list)) {
27944 throw new TypeError('"list" argument must be an Array of Buffers')
27945 }
27946
27947 if (list.length === 0) {
27948 return Buffer.alloc(0)
27949 }
27950
27951 var i
27952 if (length === undefined) {
27953 length = 0
27954 for (i = 0; i < list.length; ++i) {
27955 length += list[i].length
27956 }
27957 }
27958
27959 var buffer = Buffer.allocUnsafe(length)
27960 var pos = 0
27961 for (i = 0; i < list.length; ++i) {
27962 var buf = list[i]
27963 if (!Buffer.isBuffer(buf)) {
27964 throw new TypeError('"list" argument must be an Array of Buffers')
27965 }
27966 buf.copy(buffer, pos)
27967 pos += buf.length
27968 }
27969 return buffer
27970 }
27971
27972 function byteLength (string, encoding) {
27973 if (Buffer.isBuffer(string)) {
27974 return string.length
27975 }
27976 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
27977 return string.byteLength
27978 }
27979 if (typeof string !== 'string') {
27980 string = '' + string
27981 }
27982
27983 var len = string.length
27984 if (len === 0) return 0
27985
27986 // Use a for loop to avoid recursion
27987 var loweredCase = false
27988 for (;;) {
27989 switch (encoding) {
27990 case 'ascii':
27991 case 'latin1':
27992 case 'binary':
27993 return len
27994 case 'utf8':
27995 case 'utf-8':
27996 case undefined:
27997 return utf8ToBytes(string).length
27998 case 'ucs2':
27999 case 'ucs-2':
28000 case 'utf16le':
28001 case 'utf-16le':
28002 return len * 2
28003 case 'hex':
28004 return len >>> 1
28005 case 'base64':
28006 return base64ToBytes(string).length
28007 default:
28008 if (loweredCase) return utf8ToBytes(string).length // assume utf8
28009 encoding = ('' + encoding).toLowerCase()
28010 loweredCase = true
28011 }
28012 }
28013 }
28014 Buffer.byteLength = byteLength
28015
28016 function slowToString (encoding, start, end) {
28017 var loweredCase = false
28018
28019 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
28020 // property of a typed array.
28021
28022 // This behaves neither like String nor Uint8Array in that we set start/end
28023 // to their upper/lower bounds if the value passed is out of range.
28024 // undefined is handled specially as per ECMA-262 6th Edition,
28025 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
28026 if (start === undefined || start < 0) {
28027 start = 0
28028 }
28029 // Return early if start > this.length. Done here to prevent potential uint32
28030 // coercion fail below.
28031 if (start > this.length) {
28032 return ''
28033 }
28034
28035 if (end === undefined || end > this.length) {
28036 end = this.length
28037 }
28038
28039 if (end <= 0) {
28040 return ''
28041 }
28042
28043 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
28044 end >>>= 0
28045 start >>>= 0
28046
28047 if (end <= start) {
28048 return ''
28049 }
28050
28051 if (!encoding) encoding = 'utf8'
28052
28053 while (true) {
28054 switch (encoding) {
28055 case 'hex':
28056 return hexSlice(this, start, end)
28057
28058 case 'utf8':
28059 case 'utf-8':
28060 return utf8Slice(this, start, end)
28061
28062 case 'ascii':
28063 return asciiSlice(this, start, end)
28064
28065 case 'latin1':
28066 case 'binary':
28067 return latin1Slice(this, start, end)
28068
28069 case 'base64':
28070 return base64Slice(this, start, end)
28071
28072 case 'ucs2':
28073 case 'ucs-2':
28074 case 'utf16le':
28075 case 'utf-16le':
28076 return utf16leSlice(this, start, end)
28077
28078 default:
28079 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28080 encoding = (encoding + '').toLowerCase()
28081 loweredCase = true
28082 }
28083 }
28084 }
28085
28086 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
28087 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
28088 // reliably in a browserify context because there could be multiple different
28089 // copies of the 'buffer' package in use. This method works even for Buffer
28090 // instances that were created from another copy of the `buffer` package.
28091 // See: https://github.com/feross/buffer/issues/154
28092 Buffer.prototype._isBuffer = true
28093
28094 function swap (b, n, m) {
28095 var i = b[n]
28096 b[n] = b[m]
28097 b[m] = i
28098 }
28099
28100 Buffer.prototype.swap16 = function swap16 () {
28101 var len = this.length
28102 if (len % 2 !== 0) {
28103 throw new RangeError('Buffer size must be a multiple of 16-bits')
28104 }
28105 for (var i = 0; i < len; i += 2) {
28106 swap(this, i, i + 1)
28107 }
28108 return this
28109 }
28110
28111 Buffer.prototype.swap32 = function swap32 () {
28112 var len = this.length
28113 if (len % 4 !== 0) {
28114 throw new RangeError('Buffer size must be a multiple of 32-bits')
28115 }
28116 for (var i = 0; i < len; i += 4) {
28117 swap(this, i, i + 3)
28118 swap(this, i + 1, i + 2)
28119 }
28120 return this
28121 }
28122
28123 Buffer.prototype.swap64 = function swap64 () {
28124 var len = this.length
28125 if (len % 8 !== 0) {
28126 throw new RangeError('Buffer size must be a multiple of 64-bits')
28127 }
28128 for (var i = 0; i < len; i += 8) {
28129 swap(this, i, i + 7)
28130 swap(this, i + 1, i + 6)
28131 swap(this, i + 2, i + 5)
28132 swap(this, i + 3, i + 4)
28133 }
28134 return this
28135 }
28136
28137 Buffer.prototype.toString = function toString () {
28138 var length = this.length
28139 if (length === 0) return ''
28140 if (arguments.length === 0) return utf8Slice(this, 0, length)
28141 return slowToString.apply(this, arguments)
28142 }
28143
28144 Buffer.prototype.equals = function equals (b) {
28145 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
28146 if (this === b) return true
28147 return Buffer.compare(this, b) === 0
28148 }
28149
28150 Buffer.prototype.inspect = function inspect () {
28151 var str = ''
28152 var max = exports.INSPECT_MAX_BYTES
28153 if (this.length > 0) {
28154 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
28155 if (this.length > max) str += ' ... '
28156 }
28157 return '<Buffer ' + str + '>'
28158 }
28159
28160 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
28161 if (!Buffer.isBuffer(target)) {
28162 throw new TypeError('Argument must be a Buffer')
28163 }
28164
28165 if (start === undefined) {
28166 start = 0
28167 }
28168 if (end === undefined) {
28169 end = target ? target.length : 0
28170 }
28171 if (thisStart === undefined) {
28172 thisStart = 0
28173 }
28174 if (thisEnd === undefined) {
28175 thisEnd = this.length
28176 }
28177
28178 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
28179 throw new RangeError('out of range index')
28180 }
28181
28182 if (thisStart >= thisEnd && start >= end) {
28183 return 0
28184 }
28185 if (thisStart >= thisEnd) {
28186 return -1
28187 }
28188 if (start >= end) {
28189 return 1
28190 }
28191
28192 start >>>= 0
28193 end >>>= 0
28194 thisStart >>>= 0
28195 thisEnd >>>= 0
28196
28197 if (this === target) return 0
28198
28199 var x = thisEnd - thisStart
28200 var y = end - start
28201 var len = Math.min(x, y)
28202
28203 var thisCopy = this.slice(thisStart, thisEnd)
28204 var targetCopy = target.slice(start, end)
28205
28206 for (var i = 0; i < len; ++i) {
28207 if (thisCopy[i] !== targetCopy[i]) {
28208 x = thisCopy[i]
28209 y = targetCopy[i]
28210 break
28211 }
28212 }
28213
28214 if (x < y) return -1
28215 if (y < x) return 1
28216 return 0
28217 }
28218
28219 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
28220 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
28221 //
28222 // Arguments:
28223 // - buffer - a Buffer to search
28224 // - val - a string, Buffer, or number
28225 // - byteOffset - an index into `buffer`; will be clamped to an int32
28226 // - encoding - an optional encoding, relevant is val is a string
28227 // - dir - true for indexOf, false for lastIndexOf
28228 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
28229 // Empty buffer means no match
28230 if (buffer.length === 0) return -1
28231
28232 // Normalize byteOffset
28233 if (typeof byteOffset === 'string') {
28234 encoding = byteOffset
28235 byteOffset = 0
28236 } else if (byteOffset > 0x7fffffff) {
28237 byteOffset = 0x7fffffff
28238 } else if (byteOffset < -0x80000000) {
28239 byteOffset = -0x80000000
28240 }
28241 byteOffset = +byteOffset // Coerce to Number.
28242 if (numberIsNaN(byteOffset)) {
28243 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
28244 byteOffset = dir ? 0 : (buffer.length - 1)
28245 }
28246
28247 // Normalize byteOffset: negative offsets start from the end of the buffer
28248 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
28249 if (byteOffset >= buffer.length) {
28250 if (dir) return -1
28251 else byteOffset = buffer.length - 1
28252 } else if (byteOffset < 0) {
28253 if (dir) byteOffset = 0
28254 else return -1
28255 }
28256
28257 // Normalize val
28258 if (typeof val === 'string') {
28259 val = Buffer.from(val, encoding)
28260 }
28261
28262 // Finally, search either indexOf (if dir is true) or lastIndexOf
28263 if (Buffer.isBuffer(val)) {
28264 // Special case: looking for empty string/buffer always fails
28265 if (val.length === 0) {
28266 return -1
28267 }
28268 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
28269 } else if (typeof val === 'number') {
28270 val = val & 0xFF // Search for a byte value [0-255]
28271 if (typeof Uint8Array.prototype.indexOf === 'function') {
28272 if (dir) {
28273 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
28274 } else {
28275 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
28276 }
28277 }
28278 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
28279 }
28280
28281 throw new TypeError('val must be string, number or Buffer')
28282 }
28283
28284 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
28285 var indexSize = 1
28286 var arrLength = arr.length
28287 var valLength = val.length
28288
28289 if (encoding !== undefined) {
28290 encoding = String(encoding).toLowerCase()
28291 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
28292 encoding === 'utf16le' || encoding === 'utf-16le') {
28293 if (arr.length < 2 || val.length < 2) {
28294 return -1
28295 }
28296 indexSize = 2
28297 arrLength /= 2
28298 valLength /= 2
28299 byteOffset /= 2
28300 }
28301 }
28302
28303 function read (buf, i) {
28304 if (indexSize === 1) {
28305 return buf[i]
28306 } else {
28307 return buf.readUInt16BE(i * indexSize)
28308 }
28309 }
28310
28311 var i
28312 if (dir) {
28313 var foundIndex = -1
28314 for (i = byteOffset; i < arrLength; i++) {
28315 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
28316 if (foundIndex === -1) foundIndex = i
28317 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
28318 } else {
28319 if (foundIndex !== -1) i -= i - foundIndex
28320 foundIndex = -1
28321 }
28322 }
28323 } else {
28324 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
28325 for (i = byteOffset; i >= 0; i--) {
28326 var found = true
28327 for (var j = 0; j < valLength; j++) {
28328 if (read(arr, i + j) !== read(val, j)) {
28329 found = false
28330 break
28331 }
28332 }
28333 if (found) return i
28334 }
28335 }
28336
28337 return -1
28338 }
28339
28340 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
28341 return this.indexOf(val, byteOffset, encoding) !== -1
28342 }
28343
28344 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
28345 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
28346 }
28347
28348 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
28349 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
28350 }
28351
28352 function hexWrite (buf, string, offset, length) {
28353 offset = Number(offset) || 0
28354 var remaining = buf.length - offset
28355 if (!length) {
28356 length = remaining
28357 } else {
28358 length = Number(length)
28359 if (length > remaining) {
28360 length = remaining
28361 }
28362 }
28363
28364 // must be an even number of digits
28365 var strLen = string.length
28366 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
28367
28368 if (length > strLen / 2) {
28369 length = strLen / 2
28370 }
28371 for (var i = 0; i < length; ++i) {
28372 var parsed = parseInt(string.substr(i * 2, 2), 16)
28373 if (numberIsNaN(parsed)) return i
28374 buf[offset + i] = parsed
28375 }
28376 return i
28377 }
28378
28379 function utf8Write (buf, string, offset, length) {
28380 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
28381 }
28382
28383 function asciiWrite (buf, string, offset, length) {
28384 return blitBuffer(asciiToBytes(string), buf, offset, length)
28385 }
28386
28387 function latin1Write (buf, string, offset, length) {
28388 return asciiWrite(buf, string, offset, length)
28389 }
28390
28391 function base64Write (buf, string, offset, length) {
28392 return blitBuffer(base64ToBytes(string), buf, offset, length)
28393 }
28394
28395 function ucs2Write (buf, string, offset, length) {
28396 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
28397 }
28398
28399 Buffer.prototype.write = function write (string, offset, length, encoding) {
28400 // Buffer#write(string)
28401 if (offset === undefined) {
28402 encoding = 'utf8'
28403 length = this.length
28404 offset = 0
28405 // Buffer#write(string, encoding)
28406 } else if (length === undefined && typeof offset === 'string') {
28407 encoding = offset
28408 length = this.length
28409 offset = 0
28410 // Buffer#write(string, offset[, length][, encoding])
28411 } else if (isFinite(offset)) {
28412 offset = offset >>> 0
28413 if (isFinite(length)) {
28414 length = length >>> 0
28415 if (encoding === undefined) encoding = 'utf8'
28416 } else {
28417 encoding = length
28418 length = undefined
28419 }
28420 } else {
28421 throw new Error(
28422 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
28423 )
28424 }
28425
28426 var remaining = this.length - offset
28427 if (length === undefined || length > remaining) length = remaining
28428
28429 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
28430 throw new RangeError('Attempt to write outside buffer bounds')
28431 }
28432
28433 if (!encoding) encoding = 'utf8'
28434
28435 var loweredCase = false
28436 for (;;) {
28437 switch (encoding) {
28438 case 'hex':
28439 return hexWrite(this, string, offset, length)
28440
28441 case 'utf8':
28442 case 'utf-8':
28443 return utf8Write(this, string, offset, length)
28444
28445 case 'ascii':
28446 return asciiWrite(this, string, offset, length)
28447
28448 case 'latin1':
28449 case 'binary':
28450 return latin1Write(this, string, offset, length)
28451
28452 case 'base64':
28453 // Warning: maxLength not taken into account in base64Write
28454 return base64Write(this, string, offset, length)
28455
28456 case 'ucs2':
28457 case 'ucs-2':
28458 case 'utf16le':
28459 case 'utf-16le':
28460 return ucs2Write(this, string, offset, length)
28461
28462 default:
28463 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
28464 encoding = ('' + encoding).toLowerCase()
28465 loweredCase = true
28466 }
28467 }
28468 }
28469
28470 Buffer.prototype.toJSON = function toJSON () {
28471 return {
28472 type: 'Buffer',
28473 data: Array.prototype.slice.call(this._arr || this, 0)
28474 }
28475 }
28476
28477 function base64Slice (buf, start, end) {
28478 if (start === 0 && end === buf.length) {
28479 return base64.fromByteArray(buf)
28480 } else {
28481 return base64.fromByteArray(buf.slice(start, end))
28482 }
28483 }
28484
28485 function utf8Slice (buf, start, end) {
28486 end = Math.min(buf.length, end)
28487 var res = []
28488
28489 var i = start
28490 while (i < end) {
28491 var firstByte = buf[i]
28492 var codePoint = null
28493 var bytesPerSequence = (firstByte > 0xEF) ? 4
28494 : (firstByte > 0xDF) ? 3
28495 : (firstByte > 0xBF) ? 2
28496 : 1
28497
28498 if (i + bytesPerSequence <= end) {
28499 var secondByte, thirdByte, fourthByte, tempCodePoint
28500
28501 switch (bytesPerSequence) {
28502 case 1:
28503 if (firstByte < 0x80) {
28504 codePoint = firstByte
28505 }
28506 break
28507 case 2:
28508 secondByte = buf[i + 1]
28509 if ((secondByte & 0xC0) === 0x80) {
28510 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
28511 if (tempCodePoint > 0x7F) {
28512 codePoint = tempCodePoint
28513 }
28514 }
28515 break
28516 case 3:
28517 secondByte = buf[i + 1]
28518 thirdByte = buf[i + 2]
28519 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
28520 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
28521 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
28522 codePoint = tempCodePoint
28523 }
28524 }
28525 break
28526 case 4:
28527 secondByte = buf[i + 1]
28528 thirdByte = buf[i + 2]
28529 fourthByte = buf[i + 3]
28530 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
28531 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
28532 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
28533 codePoint = tempCodePoint
28534 }
28535 }
28536 }
28537 }
28538
28539 if (codePoint === null) {
28540 // we did not generate a valid codePoint so insert a
28541 // replacement char (U+FFFD) and advance only 1 byte
28542 codePoint = 0xFFFD
28543 bytesPerSequence = 1
28544 } else if (codePoint > 0xFFFF) {
28545 // encode to utf16 (surrogate pair dance)
28546 codePoint -= 0x10000
28547 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
28548 codePoint = 0xDC00 | codePoint & 0x3FF
28549 }
28550
28551 res.push(codePoint)
28552 i += bytesPerSequence
28553 }
28554
28555 return decodeCodePointsArray(res)
28556 }
28557
28558 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
28559 // the lowest limit is Chrome, with 0x10000 args.
28560 // We go 1 magnitude less, for safety
28561 var MAX_ARGUMENTS_LENGTH = 0x1000
28562
28563 function decodeCodePointsArray (codePoints) {
28564 var len = codePoints.length
28565 if (len <= MAX_ARGUMENTS_LENGTH) {
28566 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
28567 }
28568
28569 // Decode in chunks to avoid "call stack size exceeded".
28570 var res = ''
28571 var i = 0
28572 while (i < len) {
28573 res += String.fromCharCode.apply(
28574 String,
28575 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
28576 )
28577 }
28578 return res
28579 }
28580
28581 function asciiSlice (buf, start, end) {
28582 var ret = ''
28583 end = Math.min(buf.length, end)
28584
28585 for (var i = start; i < end; ++i) {
28586 ret += String.fromCharCode(buf[i] & 0x7F)
28587 }
28588 return ret
28589 }
28590
28591 function latin1Slice (buf, start, end) {
28592 var ret = ''
28593 end = Math.min(buf.length, end)
28594
28595 for (var i = start; i < end; ++i) {
28596 ret += String.fromCharCode(buf[i])
28597 }
28598 return ret
28599 }
28600
28601 function hexSlice (buf, start, end) {
28602 var len = buf.length
28603
28604 if (!start || start < 0) start = 0
28605 if (!end || end < 0 || end > len) end = len
28606
28607 var out = ''
28608 for (var i = start; i < end; ++i) {
28609 out += toHex(buf[i])
28610 }
28611 return out
28612 }
28613
28614 function utf16leSlice (buf, start, end) {
28615 var bytes = buf.slice(start, end)
28616 var res = ''
28617 for (var i = 0; i < bytes.length; i += 2) {
28618 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
28619 }
28620 return res
28621 }
28622
28623 Buffer.prototype.slice = function slice (start, end) {
28624 var len = this.length
28625 start = ~~start
28626 end = end === undefined ? len : ~~end
28627
28628 if (start < 0) {
28629 start += len
28630 if (start < 0) start = 0
28631 } else if (start > len) {
28632 start = len
28633 }
28634
28635 if (end < 0) {
28636 end += len
28637 if (end < 0) end = 0
28638 } else if (end > len) {
28639 end = len
28640 }
28641
28642 if (end < start) end = start
28643
28644 var newBuf = this.subarray(start, end)
28645 // Return an augmented `Uint8Array` instance
28646 newBuf.__proto__ = Buffer.prototype
28647 return newBuf
28648 }
28649
28650 /*
28651 * Need to make sure that buffer isn't trying to write out of bounds.
28652 */
28653 function checkOffset (offset, ext, length) {
28654 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
28655 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
28656 }
28657
28658 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
28659 offset = offset >>> 0
28660 byteLength = byteLength >>> 0
28661 if (!noAssert) checkOffset(offset, byteLength, this.length)
28662
28663 var val = this[offset]
28664 var mul = 1
28665 var i = 0
28666 while (++i < byteLength && (mul *= 0x100)) {
28667 val += this[offset + i] * mul
28668 }
28669
28670 return val
28671 }
28672
28673 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
28674 offset = offset >>> 0
28675 byteLength = byteLength >>> 0
28676 if (!noAssert) {
28677 checkOffset(offset, byteLength, this.length)
28678 }
28679
28680 var val = this[offset + --byteLength]
28681 var mul = 1
28682 while (byteLength > 0 && (mul *= 0x100)) {
28683 val += this[offset + --byteLength] * mul
28684 }
28685
28686 return val
28687 }
28688
28689 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
28690 offset = offset >>> 0
28691 if (!noAssert) checkOffset(offset, 1, this.length)
28692 return this[offset]
28693 }
28694
28695 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
28696 offset = offset >>> 0
28697 if (!noAssert) checkOffset(offset, 2, this.length)
28698 return this[offset] | (this[offset + 1] << 8)
28699 }
28700
28701 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
28702 offset = offset >>> 0
28703 if (!noAssert) checkOffset(offset, 2, this.length)
28704 return (this[offset] << 8) | this[offset + 1]
28705 }
28706
28707 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
28708 offset = offset >>> 0
28709 if (!noAssert) checkOffset(offset, 4, this.length)
28710
28711 return ((this[offset]) |
28712 (this[offset + 1] << 8) |
28713 (this[offset + 2] << 16)) +
28714 (this[offset + 3] * 0x1000000)
28715 }
28716
28717 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
28718 offset = offset >>> 0
28719 if (!noAssert) checkOffset(offset, 4, this.length)
28720
28721 return (this[offset] * 0x1000000) +
28722 ((this[offset + 1] << 16) |
28723 (this[offset + 2] << 8) |
28724 this[offset + 3])
28725 }
28726
28727 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
28728 offset = offset >>> 0
28729 byteLength = byteLength >>> 0
28730 if (!noAssert) checkOffset(offset, byteLength, this.length)
28731
28732 var val = this[offset]
28733 var mul = 1
28734 var i = 0
28735 while (++i < byteLength && (mul *= 0x100)) {
28736 val += this[offset + i] * mul
28737 }
28738 mul *= 0x80
28739
28740 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28741
28742 return val
28743 }
28744
28745 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
28746 offset = offset >>> 0
28747 byteLength = byteLength >>> 0
28748 if (!noAssert) checkOffset(offset, byteLength, this.length)
28749
28750 var i = byteLength
28751 var mul = 1
28752 var val = this[offset + --i]
28753 while (i > 0 && (mul *= 0x100)) {
28754 val += this[offset + --i] * mul
28755 }
28756 mul *= 0x80
28757
28758 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
28759
28760 return val
28761 }
28762
28763 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
28764 offset = offset >>> 0
28765 if (!noAssert) checkOffset(offset, 1, this.length)
28766 if (!(this[offset] & 0x80)) return (this[offset])
28767 return ((0xff - this[offset] + 1) * -1)
28768 }
28769
28770 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
28771 offset = offset >>> 0
28772 if (!noAssert) checkOffset(offset, 2, this.length)
28773 var val = this[offset] | (this[offset + 1] << 8)
28774 return (val & 0x8000) ? val | 0xFFFF0000 : val
28775 }
28776
28777 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
28778 offset = offset >>> 0
28779 if (!noAssert) checkOffset(offset, 2, this.length)
28780 var val = this[offset + 1] | (this[offset] << 8)
28781 return (val & 0x8000) ? val | 0xFFFF0000 : val
28782 }
28783
28784 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
28785 offset = offset >>> 0
28786 if (!noAssert) checkOffset(offset, 4, this.length)
28787
28788 return (this[offset]) |
28789 (this[offset + 1] << 8) |
28790 (this[offset + 2] << 16) |
28791 (this[offset + 3] << 24)
28792 }
28793
28794 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
28795 offset = offset >>> 0
28796 if (!noAssert) checkOffset(offset, 4, this.length)
28797
28798 return (this[offset] << 24) |
28799 (this[offset + 1] << 16) |
28800 (this[offset + 2] << 8) |
28801 (this[offset + 3])
28802 }
28803
28804 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
28805 offset = offset >>> 0
28806 if (!noAssert) checkOffset(offset, 4, this.length)
28807 return ieee754.read(this, offset, true, 23, 4)
28808 }
28809
28810 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
28811 offset = offset >>> 0
28812 if (!noAssert) checkOffset(offset, 4, this.length)
28813 return ieee754.read(this, offset, false, 23, 4)
28814 }
28815
28816 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
28817 offset = offset >>> 0
28818 if (!noAssert) checkOffset(offset, 8, this.length)
28819 return ieee754.read(this, offset, true, 52, 8)
28820 }
28821
28822 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
28823 offset = offset >>> 0
28824 if (!noAssert) checkOffset(offset, 8, this.length)
28825 return ieee754.read(this, offset, false, 52, 8)
28826 }
28827
28828 function checkInt (buf, value, offset, ext, max, min) {
28829 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
28830 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
28831 if (offset + ext > buf.length) throw new RangeError('Index out of range')
28832 }
28833
28834 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
28835 value = +value
28836 offset = offset >>> 0
28837 byteLength = byteLength >>> 0
28838 if (!noAssert) {
28839 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28840 checkInt(this, value, offset, byteLength, maxBytes, 0)
28841 }
28842
28843 var mul = 1
28844 var i = 0
28845 this[offset] = value & 0xFF
28846 while (++i < byteLength && (mul *= 0x100)) {
28847 this[offset + i] = (value / mul) & 0xFF
28848 }
28849
28850 return offset + byteLength
28851 }
28852
28853 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
28854 value = +value
28855 offset = offset >>> 0
28856 byteLength = byteLength >>> 0
28857 if (!noAssert) {
28858 var maxBytes = Math.pow(2, 8 * byteLength) - 1
28859 checkInt(this, value, offset, byteLength, maxBytes, 0)
28860 }
28861
28862 var i = byteLength - 1
28863 var mul = 1
28864 this[offset + i] = value & 0xFF
28865 while (--i >= 0 && (mul *= 0x100)) {
28866 this[offset + i] = (value / mul) & 0xFF
28867 }
28868
28869 return offset + byteLength
28870 }
28871
28872 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
28873 value = +value
28874 offset = offset >>> 0
28875 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
28876 this[offset] = (value & 0xff)
28877 return offset + 1
28878 }
28879
28880 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
28881 value = +value
28882 offset = offset >>> 0
28883 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28884 this[offset] = (value & 0xff)
28885 this[offset + 1] = (value >>> 8)
28886 return offset + 2
28887 }
28888
28889 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
28890 value = +value
28891 offset = offset >>> 0
28892 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
28893 this[offset] = (value >>> 8)
28894 this[offset + 1] = (value & 0xff)
28895 return offset + 2
28896 }
28897
28898 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
28899 value = +value
28900 offset = offset >>> 0
28901 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28902 this[offset + 3] = (value >>> 24)
28903 this[offset + 2] = (value >>> 16)
28904 this[offset + 1] = (value >>> 8)
28905 this[offset] = (value & 0xff)
28906 return offset + 4
28907 }
28908
28909 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
28910 value = +value
28911 offset = offset >>> 0
28912 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
28913 this[offset] = (value >>> 24)
28914 this[offset + 1] = (value >>> 16)
28915 this[offset + 2] = (value >>> 8)
28916 this[offset + 3] = (value & 0xff)
28917 return offset + 4
28918 }
28919
28920 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
28921 value = +value
28922 offset = offset >>> 0
28923 if (!noAssert) {
28924 var limit = Math.pow(2, (8 * byteLength) - 1)
28925
28926 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28927 }
28928
28929 var i = 0
28930 var mul = 1
28931 var sub = 0
28932 this[offset] = value & 0xFF
28933 while (++i < byteLength && (mul *= 0x100)) {
28934 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
28935 sub = 1
28936 }
28937 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28938 }
28939
28940 return offset + byteLength
28941 }
28942
28943 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
28944 value = +value
28945 offset = offset >>> 0
28946 if (!noAssert) {
28947 var limit = Math.pow(2, (8 * byteLength) - 1)
28948
28949 checkInt(this, value, offset, byteLength, limit - 1, -limit)
28950 }
28951
28952 var i = byteLength - 1
28953 var mul = 1
28954 var sub = 0
28955 this[offset + i] = value & 0xFF
28956 while (--i >= 0 && (mul *= 0x100)) {
28957 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
28958 sub = 1
28959 }
28960 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
28961 }
28962
28963 return offset + byteLength
28964 }
28965
28966 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
28967 value = +value
28968 offset = offset >>> 0
28969 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
28970 if (value < 0) value = 0xff + value + 1
28971 this[offset] = (value & 0xff)
28972 return offset + 1
28973 }
28974
28975 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
28976 value = +value
28977 offset = offset >>> 0
28978 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28979 this[offset] = (value & 0xff)
28980 this[offset + 1] = (value >>> 8)
28981 return offset + 2
28982 }
28983
28984 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
28985 value = +value
28986 offset = offset >>> 0
28987 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
28988 this[offset] = (value >>> 8)
28989 this[offset + 1] = (value & 0xff)
28990 return offset + 2
28991 }
28992
28993 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
28994 value = +value
28995 offset = offset >>> 0
28996 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
28997 this[offset] = (value & 0xff)
28998 this[offset + 1] = (value >>> 8)
28999 this[offset + 2] = (value >>> 16)
29000 this[offset + 3] = (value >>> 24)
29001 return offset + 4
29002 }
29003
29004 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
29005 value = +value
29006 offset = offset >>> 0
29007 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
29008 if (value < 0) value = 0xffffffff + value + 1
29009 this[offset] = (value >>> 24)
29010 this[offset + 1] = (value >>> 16)
29011 this[offset + 2] = (value >>> 8)
29012 this[offset + 3] = (value & 0xff)
29013 return offset + 4
29014 }
29015
29016 function checkIEEE754 (buf, value, offset, ext, max, min) {
29017 if (offset + ext > buf.length) throw new RangeError('Index out of range')
29018 if (offset < 0) throw new RangeError('Index out of range')
29019 }
29020
29021 function writeFloat (buf, value, offset, littleEndian, noAssert) {
29022 value = +value
29023 offset = offset >>> 0
29024 if (!noAssert) {
29025 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
29026 }
29027 ieee754.write(buf, value, offset, littleEndian, 23, 4)
29028 return offset + 4
29029 }
29030
29031 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
29032 return writeFloat(this, value, offset, true, noAssert)
29033 }
29034
29035 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
29036 return writeFloat(this, value, offset, false, noAssert)
29037 }
29038
29039 function writeDouble (buf, value, offset, littleEndian, noAssert) {
29040 value = +value
29041 offset = offset >>> 0
29042 if (!noAssert) {
29043 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
29044 }
29045 ieee754.write(buf, value, offset, littleEndian, 52, 8)
29046 return offset + 8
29047 }
29048
29049 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
29050 return writeDouble(this, value, offset, true, noAssert)
29051 }
29052
29053 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
29054 return writeDouble(this, value, offset, false, noAssert)
29055 }
29056
29057 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
29058 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
29059 if (!start) start = 0
29060 if (!end && end !== 0) end = this.length
29061 if (targetStart >= target.length) targetStart = target.length
29062 if (!targetStart) targetStart = 0
29063 if (end > 0 && end < start) end = start
29064
29065 // Copy 0 bytes; we're done
29066 if (end === start) return 0
29067 if (target.length === 0 || this.length === 0) return 0
29068
29069 // Fatal error conditions
29070 if (targetStart < 0) {
29071 throw new RangeError('targetStart out of bounds')
29072 }
29073 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
29074 if (end < 0) throw new RangeError('sourceEnd out of bounds')
29075
29076 // Are we oob?
29077 if (end > this.length) end = this.length
29078 if (target.length - targetStart < end - start) {
29079 end = target.length - targetStart + start
29080 }
29081
29082 var len = end - start
29083 var i
29084
29085 if (this === target && start < targetStart && targetStart < end) {
29086 // descending copy from end
29087 for (i = len - 1; i >= 0; --i) {
29088 target[i + targetStart] = this[i + start]
29089 }
29090 } else if (len < 1000) {
29091 // ascending copy from start
29092 for (i = 0; i < len; ++i) {
29093 target[i + targetStart] = this[i + start]
29094 }
29095 } else {
29096 Uint8Array.prototype.set.call(
29097 target,
29098 this.subarray(start, start + len),
29099 targetStart
29100 )
29101 }
29102
29103 return len
29104 }
29105
29106 // Usage:
29107 // buffer.fill(number[, offset[, end]])
29108 // buffer.fill(buffer[, offset[, end]])
29109 // buffer.fill(string[, offset[, end]][, encoding])
29110 Buffer.prototype.fill = function fill (val, start, end, encoding) {
29111 // Handle string cases:
29112 if (typeof val === 'string') {
29113 if (typeof start === 'string') {
29114 encoding = start
29115 start = 0
29116 end = this.length
29117 } else if (typeof end === 'string') {
29118 encoding = end
29119 end = this.length
29120 }
29121 if (val.length === 1) {
29122 var code = val.charCodeAt(0)
29123 if (code < 256) {
29124 val = code
29125 }
29126 }
29127 if (encoding !== undefined && typeof encoding !== 'string') {
29128 throw new TypeError('encoding must be a string')
29129 }
29130 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
29131 throw new TypeError('Unknown encoding: ' + encoding)
29132 }
29133 } else if (typeof val === 'number') {
29134 val = val & 255
29135 }
29136
29137 // Invalid ranges are not set to a default, so can range check early.
29138 if (start < 0 || this.length < start || this.length < end) {
29139 throw new RangeError('Out of range index')
29140 }
29141
29142 if (end <= start) {
29143 return this
29144 }
29145
29146 start = start >>> 0
29147 end = end === undefined ? this.length : end >>> 0
29148
29149 if (!val) val = 0
29150
29151 var i
29152 if (typeof val === 'number') {
29153 for (i = start; i < end; ++i) {
29154 this[i] = val
29155 }
29156 } else {
29157 var bytes = Buffer.isBuffer(val)
29158 ? val
29159 : new Buffer(val, encoding)
29160 var len = bytes.length
29161 for (i = 0; i < end - start; ++i) {
29162 this[i + start] = bytes[i % len]
29163 }
29164 }
29165
29166 return this
29167 }
29168
29169 // HELPER FUNCTIONS
29170 // ================
29171
29172 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
29173
29174 function base64clean (str) {
29175 // Node strips out invalid characters like \n and \t from the string, base64-js does not
29176 str = str.trim().replace(INVALID_BASE64_RE, '')
29177 // Node converts strings with length < 2 to ''
29178 if (str.length < 2) return ''
29179 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
29180 while (str.length % 4 !== 0) {
29181 str = str + '='
29182 }
29183 return str
29184 }
29185
29186 function toHex (n) {
29187 if (n < 16) return '0' + n.toString(16)
29188 return n.toString(16)
29189 }
29190
29191 function utf8ToBytes (string, units) {
29192 units = units || Infinity
29193 var codePoint
29194 var length = string.length
29195 var leadSurrogate = null
29196 var bytes = []
29197
29198 for (var i = 0; i < length; ++i) {
29199 codePoint = string.charCodeAt(i)
29200
29201 // is surrogate component
29202 if (codePoint > 0xD7FF && codePoint < 0xE000) {
29203 // last char was a lead
29204 if (!leadSurrogate) {
29205 // no lead yet
29206 if (codePoint > 0xDBFF) {
29207 // unexpected trail
29208 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29209 continue
29210 } else if (i + 1 === length) {
29211 // unpaired lead
29212 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29213 continue
29214 }
29215
29216 // valid lead
29217 leadSurrogate = codePoint
29218
29219 continue
29220 }
29221
29222 // 2 leads in a row
29223 if (codePoint < 0xDC00) {
29224 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29225 leadSurrogate = codePoint
29226 continue
29227 }
29228
29229 // valid surrogate pair
29230 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
29231 } else if (leadSurrogate) {
29232 // valid bmp char, but last char was a lead
29233 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
29234 }
29235
29236 leadSurrogate = null
29237
29238 // encode utf8
29239 if (codePoint < 0x80) {
29240 if ((units -= 1) < 0) break
29241 bytes.push(codePoint)
29242 } else if (codePoint < 0x800) {
29243 if ((units -= 2) < 0) break
29244 bytes.push(
29245 codePoint >> 0x6 | 0xC0,
29246 codePoint & 0x3F | 0x80
29247 )
29248 } else if (codePoint < 0x10000) {
29249 if ((units -= 3) < 0) break
29250 bytes.push(
29251 codePoint >> 0xC | 0xE0,
29252 codePoint >> 0x6 & 0x3F | 0x80,
29253 codePoint & 0x3F | 0x80
29254 )
29255 } else if (codePoint < 0x110000) {
29256 if ((units -= 4) < 0) break
29257 bytes.push(
29258 codePoint >> 0x12 | 0xF0,
29259 codePoint >> 0xC & 0x3F | 0x80,
29260 codePoint >> 0x6 & 0x3F | 0x80,
29261 codePoint & 0x3F | 0x80
29262 )
29263 } else {
29264 throw new Error('Invalid code point')
29265 }
29266 }
29267
29268 return bytes
29269 }
29270
29271 function asciiToBytes (str) {
29272 var byteArray = []
29273 for (var i = 0; i < str.length; ++i) {
29274 // Node's code seems to be doing this and not & 0x7F..
29275 byteArray.push(str.charCodeAt(i) & 0xFF)
29276 }
29277 return byteArray
29278 }
29279
29280 function utf16leToBytes (str, units) {
29281 var c, hi, lo
29282 var byteArray = []
29283 for (var i = 0; i < str.length; ++i) {
29284 if ((units -= 2) < 0) break
29285
29286 c = str.charCodeAt(i)
29287 hi = c >> 8
29288 lo = c % 256
29289 byteArray.push(lo)
29290 byteArray.push(hi)
29291 }
29292
29293 return byteArray
29294 }
29295
29296 function base64ToBytes (str) {
29297 return base64.toByteArray(base64clean(str))
29298 }
29299
29300 function blitBuffer (src, dst, offset, length) {
29301 for (var i = 0; i < length; ++i) {
29302 if ((i + offset >= dst.length) || (i >= src.length)) break
29303 dst[i + offset] = src[i]
29304 }
29305 return i
29306 }
29307
29308 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
29309 function isArrayBufferView (obj) {
29310 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
29311 }
29312
29313 function numberIsNaN (obj) {
29314 return obj !== obj // eslint-disable-line no-self-compare
29315 }
29316
29317 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
29318 (function (Buffer){
29319 // Copyright Joyent, Inc. and other Node contributors.
29320 //
29321 // Permission is hereby granted, free of charge, to any person obtaining a
29322 // copy of this software and associated documentation files (the
29323 // "Software"), to deal in the Software without restriction, including
29324 // without limitation the rights to use, copy, modify, merge, publish,
29325 // distribute, sublicense, and/or sell copies of the Software, and to permit
29326 // persons to whom the Software is furnished to do so, subject to the
29327 // following conditions:
29328 //
29329 // The above copyright notice and this permission notice shall be included
29330 // in all copies or substantial portions of the Software.
29331 //
29332 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29333 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29334 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29335 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29336 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29337 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29338 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29339
29340 // NOTE: These type checking functions intentionally don't use `instanceof`
29341 // because it is fragile and can be easily faked with `Object.create()`.
29342
29343 function isArray(arg) {
29344 if (Array.isArray) {
29345 return Array.isArray(arg);
29346 }
29347 return objectToString(arg) === '[object Array]';
29348 }
29349 exports.isArray = isArray;
29350
29351 function isBoolean(arg) {
29352 return typeof arg === 'boolean';
29353 }
29354 exports.isBoolean = isBoolean;
29355
29356 function isNull(arg) {
29357 return arg === null;
29358 }
29359 exports.isNull = isNull;
29360
29361 function isNullOrUndefined(arg) {
29362 return arg == null;
29363 }
29364 exports.isNullOrUndefined = isNullOrUndefined;
29365
29366 function isNumber(arg) {
29367 return typeof arg === 'number';
29368 }
29369 exports.isNumber = isNumber;
29370
29371 function isString(arg) {
29372 return typeof arg === 'string';
29373 }
29374 exports.isString = isString;
29375
29376 function isSymbol(arg) {
29377 return typeof arg === 'symbol';
29378 }
29379 exports.isSymbol = isSymbol;
29380
29381 function isUndefined(arg) {
29382 return arg === void 0;
29383 }
29384 exports.isUndefined = isUndefined;
29385
29386 function isRegExp(re) {
29387 return objectToString(re) === '[object RegExp]';
29388 }
29389 exports.isRegExp = isRegExp;
29390
29391 function isObject(arg) {
29392 return typeof arg === 'object' && arg !== null;
29393 }
29394 exports.isObject = isObject;
29395
29396 function isDate(d) {
29397 return objectToString(d) === '[object Date]';
29398 }
29399 exports.isDate = isDate;
29400
29401 function isError(e) {
29402 return (objectToString(e) === '[object Error]' || e instanceof Error);
29403 }
29404 exports.isError = isError;
29405
29406 function isFunction(arg) {
29407 return typeof arg === 'function';
29408 }
29409 exports.isFunction = isFunction;
29410
29411 function isPrimitive(arg) {
29412 return arg === null ||
29413 typeof arg === 'boolean' ||
29414 typeof arg === 'number' ||
29415 typeof arg === 'string' ||
29416 typeof arg === 'symbol' || // ES6 symbol
29417 typeof arg === 'undefined';
29418 }
29419 exports.isPrimitive = isPrimitive;
29420
29421 exports.isBuffer = Buffer.isBuffer;
29422
29423 function objectToString(o) {
29424 return Object.prototype.toString.call(o);
29425 }
29426
29427 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
29428 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
29429 // Copyright Joyent, Inc. and other Node contributors.
29430 //
29431 // Permission is hereby granted, free of charge, to any person obtaining a
29432 // copy of this software and associated documentation files (the
29433 // "Software"), to deal in the Software without restriction, including
29434 // without limitation the rights to use, copy, modify, merge, publish,
29435 // distribute, sublicense, and/or sell copies of the Software, and to permit
29436 // persons to whom the Software is furnished to do so, subject to the
29437 // following conditions:
29438 //
29439 // The above copyright notice and this permission notice shall be included
29440 // in all copies or substantial portions of the Software.
29441 //
29442 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
29443 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
29444 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
29445 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
29446 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
29447 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
29448 // USE OR OTHER DEALINGS IN THE SOFTWARE.
29449
29450 function EventEmitter() {
29451 this._events = this._events || {};
29452 this._maxListeners = this._maxListeners || undefined;
29453 }
29454 module.exports = EventEmitter;
29455
29456 // Backwards-compat with node 0.10.x
29457 EventEmitter.EventEmitter = EventEmitter;
29458
29459 EventEmitter.prototype._events = undefined;
29460 EventEmitter.prototype._maxListeners = undefined;
29461
29462 // By default EventEmitters will print a warning if more than 10 listeners are
29463 // added to it. This is a useful default which helps finding memory leaks.
29464 EventEmitter.defaultMaxListeners = 10;
29465
29466 // Obviously not all Emitters should be limited to 10. This function allows
29467 // that to be increased. Set to zero for unlimited.
29468 EventEmitter.prototype.setMaxListeners = function(n) {
29469 if (!isNumber(n) || n < 0 || isNaN(n))
29470 throw TypeError('n must be a positive number');
29471 this._maxListeners = n;
29472 return this;
29473 };
29474
29475 EventEmitter.prototype.emit = function(type) {
29476 var er, handler, len, args, i, listeners;
29477
29478 if (!this._events)
29479 this._events = {};
29480
29481 // If there is no 'error' event listener then throw.
29482 if (type === 'error') {
29483 if (!this._events.error ||
29484 (isObject(this._events.error) && !this._events.error.length)) {
29485 er = arguments[1];
29486 if (er instanceof Error) {
29487 throw er; // Unhandled 'error' event
29488 } else {
29489 // At least give some kind of context to the user
29490 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
29491 err.context = er;
29492 throw err;
29493 }
29494 }
29495 }
29496
29497 handler = this._events[type];
29498
29499 if (isUndefined(handler))
29500 return false;
29501
29502 if (isFunction(handler)) {
29503 switch (arguments.length) {
29504 // fast cases
29505 case 1:
29506 handler.call(this);
29507 break;
29508 case 2:
29509 handler.call(this, arguments[1]);
29510 break;
29511 case 3:
29512 handler.call(this, arguments[1], arguments[2]);
29513 break;
29514 // slower
29515 default:
29516 args = Array.prototype.slice.call(arguments, 1);
29517 handler.apply(this, args);
29518 }
29519 } else if (isObject(handler)) {
29520 args = Array.prototype.slice.call(arguments, 1);
29521 listeners = handler.slice();
29522 len = listeners.length;
29523 for (i = 0; i < len; i++)
29524 listeners[i].apply(this, args);
29525 }
29526
29527 return true;
29528 };
29529
29530 EventEmitter.prototype.addListener = function(type, listener) {
29531 var m;
29532
29533 if (!isFunction(listener))
29534 throw TypeError('listener must be a function');
29535
29536 if (!this._events)
29537 this._events = {};
29538
29539 // To avoid recursion in the case that type === "newListener"! Before
29540 // adding it to the listeners, first emit "newListener".
29541 if (this._events.newListener)
29542 this.emit('newListener', type,
29543 isFunction(listener.listener) ?
29544 listener.listener : listener);
29545
29546 if (!this._events[type])
29547 // Optimize the case of one listener. Don't need the extra array object.
29548 this._events[type] = listener;
29549 else if (isObject(this._events[type]))
29550 // If we've already got an array, just append.
29551 this._events[type].push(listener);
29552 else
29553 // Adding the second element, need to change to array.
29554 this._events[type] = [this._events[type], listener];
29555
29556 // Check for listener leak
29557 if (isObject(this._events[type]) && !this._events[type].warned) {
29558 if (!isUndefined(this._maxListeners)) {
29559 m = this._maxListeners;
29560 } else {
29561 m = EventEmitter.defaultMaxListeners;
29562 }
29563
29564 if (m && m > 0 && this._events[type].length > m) {
29565 this._events[type].warned = true;
29566 console.error('(node) warning: possible EventEmitter memory ' +
29567 'leak detected. %d listeners added. ' +
29568 'Use emitter.setMaxListeners() to increase limit.',
29569 this._events[type].length);
29570 if (typeof console.trace === 'function') {
29571 // not supported in IE 10
29572 console.trace();
29573 }
29574 }
29575 }
29576
29577 return this;
29578 };
29579
29580 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
29581
29582 EventEmitter.prototype.once = function(type, listener) {
29583 if (!isFunction(listener))
29584 throw TypeError('listener must be a function');
29585
29586 var fired = false;
29587
29588 function g() {
29589 this.removeListener(type, g);
29590
29591 if (!fired) {
29592 fired = true;
29593 listener.apply(this, arguments);
29594 }
29595 }
29596
29597 g.listener = listener;
29598 this.on(type, g);
29599
29600 return this;
29601 };
29602
29603 // emits a 'removeListener' event iff the listener was removed
29604 EventEmitter.prototype.removeListener = function(type, listener) {
29605 var list, position, length, i;
29606
29607 if (!isFunction(listener))
29608 throw TypeError('listener must be a function');
29609
29610 if (!this._events || !this._events[type])
29611 return this;
29612
29613 list = this._events[type];
29614 length = list.length;
29615 position = -1;
29616
29617 if (list === listener ||
29618 (isFunction(list.listener) && list.listener === listener)) {
29619 delete this._events[type];
29620 if (this._events.removeListener)
29621 this.emit('removeListener', type, listener);
29622
29623 } else if (isObject(list)) {
29624 for (i = length; i-- > 0;) {
29625 if (list[i] === listener ||
29626 (list[i].listener && list[i].listener === listener)) {
29627 position = i;
29628 break;
29629 }
29630 }
29631
29632 if (position < 0)
29633 return this;
29634
29635 if (list.length === 1) {
29636 list.length = 0;
29637 delete this._events[type];
29638 } else {
29639 list.splice(position, 1);
29640 }
29641
29642 if (this._events.removeListener)
29643 this.emit('removeListener', type, listener);
29644 }
29645
29646 return this;
29647 };
29648
29649 EventEmitter.prototype.removeAllListeners = function(type) {
29650 var key, listeners;
29651
29652 if (!this._events)
29653 return this;
29654
29655 // not listening for removeListener, no need to emit
29656 if (!this._events.removeListener) {
29657 if (arguments.length === 0)
29658 this._events = {};
29659 else if (this._events[type])
29660 delete this._events[type];
29661 return this;
29662 }
29663
29664 // emit removeListener for all listeners on all events
29665 if (arguments.length === 0) {
29666 for (key in this._events) {
29667 if (key === 'removeListener') continue;
29668 this.removeAllListeners(key);
29669 }
29670 this.removeAllListeners('removeListener');
29671 this._events = {};
29672 return this;
29673 }
29674
29675 listeners = this._events[type];
29676
29677 if (isFunction(listeners)) {
29678 this.removeListener(type, listeners);
29679 } else if (listeners) {
29680 // LIFO order
29681 while (listeners.length)
29682 this.removeListener(type, listeners[listeners.length - 1]);
29683 }
29684 delete this._events[type];
29685
29686 return this;
29687 };
29688
29689 EventEmitter.prototype.listeners = function(type) {
29690 var ret;
29691 if (!this._events || !this._events[type])
29692 ret = [];
29693 else if (isFunction(this._events[type]))
29694 ret = [this._events[type]];
29695 else
29696 ret = this._events[type].slice();
29697 return ret;
29698 };
29699
29700 EventEmitter.prototype.listenerCount = function(type) {
29701 if (this._events) {
29702 var evlistener = this._events[type];
29703
29704 if (isFunction(evlistener))
29705 return 1;
29706 else if (evlistener)
29707 return evlistener.length;
29708 }
29709 return 0;
29710 };
29711
29712 EventEmitter.listenerCount = function(emitter, type) {
29713 return emitter.listenerCount(type);
29714 };
29715
29716 function isFunction(arg) {
29717 return typeof arg === 'function';
29718 }
29719
29720 function isNumber(arg) {
29721 return typeof arg === 'number';
29722 }
29723
29724 function isObject(arg) {
29725 return typeof arg === 'object' && arg !== null;
29726 }
29727
29728 function isUndefined(arg) {
29729 return arg === void 0;
29730 }
29731
29732 },{}],8:[function(require,module,exports){
29733 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
29734 var e, m
29735 var eLen = nBytes * 8 - mLen - 1
29736 var eMax = (1 << eLen) - 1
29737 var eBias = eMax >> 1
29738 var nBits = -7
29739 var i = isLE ? (nBytes - 1) : 0
29740 var d = isLE ? -1 : 1
29741 var s = buffer[offset + i]
29742
29743 i += d
29744
29745 e = s & ((1 << (-nBits)) - 1)
29746 s >>= (-nBits)
29747 nBits += eLen
29748 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29749
29750 m = e & ((1 << (-nBits)) - 1)
29751 e >>= (-nBits)
29752 nBits += mLen
29753 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
29754
29755 if (e === 0) {
29756 e = 1 - eBias
29757 } else if (e === eMax) {
29758 return m ? NaN : ((s ? -1 : 1) * Infinity)
29759 } else {
29760 m = m + Math.pow(2, mLen)
29761 e = e - eBias
29762 }
29763 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
29764 }
29765
29766 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
29767 var e, m, c
29768 var eLen = nBytes * 8 - mLen - 1
29769 var eMax = (1 << eLen) - 1
29770 var eBias = eMax >> 1
29771 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
29772 var i = isLE ? 0 : (nBytes - 1)
29773 var d = isLE ? 1 : -1
29774 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
29775
29776 value = Math.abs(value)
29777
29778 if (isNaN(value) || value === Infinity) {
29779 m = isNaN(value) ? 1 : 0
29780 e = eMax
29781 } else {
29782 e = Math.floor(Math.log(value) / Math.LN2)
29783 if (value * (c = Math.pow(2, -e)) < 1) {
29784 e--
29785 c *= 2
29786 }
29787 if (e + eBias >= 1) {
29788 value += rt / c
29789 } else {
29790 value += rt * Math.pow(2, 1 - eBias)
29791 }
29792 if (value * c >= 2) {
29793 e++
29794 c /= 2
29795 }
29796
29797 if (e + eBias >= eMax) {
29798 m = 0
29799 e = eMax
29800 } else if (e + eBias >= 1) {
29801 m = (value * c - 1) * Math.pow(2, mLen)
29802 e = e + eBias
29803 } else {
29804 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
29805 e = 0
29806 }
29807 }
29808
29809 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
29810
29811 e = (e << mLen) | m
29812 eLen += mLen
29813 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
29814
29815 buffer[offset + i - d] |= s * 128
29816 }
29817
29818 },{}],9:[function(require,module,exports){
29819 if (typeof Object.create === 'function') {
29820 // implementation from standard node.js 'util' module
29821 module.exports = function inherits(ctor, superCtor) {
29822 ctor.super_ = superCtor
29823 ctor.prototype = Object.create(superCtor.prototype, {
29824 constructor: {
29825 value: ctor,
29826 enumerable: false,
29827 writable: true,
29828 configurable: true
29829 }
29830 });
29831 };
29832 } else {
29833 // old school shim for old browsers
29834 module.exports = function inherits(ctor, superCtor) {
29835 ctor.super_ = superCtor
29836 var TempCtor = function () {}
29837 TempCtor.prototype = superCtor.prototype
29838 ctor.prototype = new TempCtor()
29839 ctor.prototype.constructor = ctor
29840 }
29841 }
29842
29843 },{}],10:[function(require,module,exports){
29844 /*!
29845 * Determine if an object is a Buffer
29846 *
29847 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
29848 * @license MIT
29849 */
29850
29851 // The _isBuffer check is for Safari 5-7 support, because it's missing
29852 // Object.prototype.constructor. Remove this eventually
29853 module.exports = function (obj) {
29854 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
29855 }
29856
29857 function isBuffer (obj) {
29858 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
29859 }
29860
29861 // For Node v0.10 support. Remove this eventually.
29862 function isSlowBuffer (obj) {
29863 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
29864 }
29865
29866 },{}],11:[function(require,module,exports){
29867 var toString = {}.toString;
29868
29869 module.exports = Array.isArray || function (arr) {
29870 return toString.call(arr) == '[object Array]';
29871 };
29872
29873 },{}],12:[function(require,module,exports){
29874 (function (process){
29875 'use strict';
29876
29877 if (!process.version ||
29878 process.version.indexOf('v0.') === 0 ||
29879 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
29880 module.exports = nextTick;
29881 } else {
29882 module.exports = process.nextTick;
29883 }
29884
29885 function nextTick(fn, arg1, arg2, arg3) {
29886 if (typeof fn !== 'function') {
29887 throw new TypeError('"callback" argument must be a function');
29888 }
29889 var len = arguments.length;
29890 var args, i;
29891 switch (len) {
29892 case 0:
29893 case 1:
29894 return process.nextTick(fn);
29895 case 2:
29896 return process.nextTick(function afterTickOne() {
29897 fn.call(null, arg1);
29898 });
29899 case 3:
29900 return process.nextTick(function afterTickTwo() {
29901 fn.call(null, arg1, arg2);
29902 });
29903 case 4:
29904 return process.nextTick(function afterTickThree() {
29905 fn.call(null, arg1, arg2, arg3);
29906 });
29907 default:
29908 args = new Array(len - 1);
29909 i = 0;
29910 while (i < args.length) {
29911 args[i++] = arguments[i];
29912 }
29913 return process.nextTick(function afterTick() {
29914 fn.apply(null, args);
29915 });
29916 }
29917 }
29918
29919 }).call(this,require('_process'))
29920 },{"_process":13}],13:[function(require,module,exports){
29921 // shim for using process in browser
29922 var process = module.exports = {};
29923
29924 // cached from whatever global is present so that test runners that stub it
29925 // don't break things. But we need to wrap it in a try catch in case it is
29926 // wrapped in strict mode code which doesn't define any globals. It's inside a
29927 // function because try/catches deoptimize in certain engines.
29928
29929 var cachedSetTimeout;
29930 var cachedClearTimeout;
29931
29932 function defaultSetTimout() {
29933 throw new Error('setTimeout has not been defined');
29934 }
29935 function defaultClearTimeout () {
29936 throw new Error('clearTimeout has not been defined');
29937 }
29938 (function () {
29939 try {
29940 if (typeof setTimeout === 'function') {
29941 cachedSetTimeout = setTimeout;
29942 } else {
29943 cachedSetTimeout = defaultSetTimout;
29944 }
29945 } catch (e) {
29946 cachedSetTimeout = defaultSetTimout;
29947 }
29948 try {
29949 if (typeof clearTimeout === 'function') {
29950 cachedClearTimeout = clearTimeout;
29951 } else {
29952 cachedClearTimeout = defaultClearTimeout;
29953 }
29954 } catch (e) {
29955 cachedClearTimeout = defaultClearTimeout;
29956 }
29957 } ())
29958 function runTimeout(fun) {
29959 if (cachedSetTimeout === setTimeout) {
29960 //normal enviroments in sane situations
29961 return setTimeout(fun, 0);
29962 }
29963 // if setTimeout wasn't available but was latter defined
29964 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
29965 cachedSetTimeout = setTimeout;
29966 return setTimeout(fun, 0);
29967 }
29968 try {
29969 // when when somebody has screwed with setTimeout but no I.E. maddness
29970 return cachedSetTimeout(fun, 0);
29971 } catch(e){
29972 try {
29973 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29974 return cachedSetTimeout.call(null, fun, 0);
29975 } catch(e){
29976 // 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
29977 return cachedSetTimeout.call(this, fun, 0);
29978 }
29979 }
29980
29981
29982 }
29983 function runClearTimeout(marker) {
29984 if (cachedClearTimeout === clearTimeout) {
29985 //normal enviroments in sane situations
29986 return clearTimeout(marker);
29987 }
29988 // if clearTimeout wasn't available but was latter defined
29989 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
29990 cachedClearTimeout = clearTimeout;
29991 return clearTimeout(marker);
29992 }
29993 try {
29994 // when when somebody has screwed with setTimeout but no I.E. maddness
29995 return cachedClearTimeout(marker);
29996 } catch (e){
29997 try {
29998 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
29999 return cachedClearTimeout.call(null, marker);
30000 } catch (e){
30001 // 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.
30002 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
30003 return cachedClearTimeout.call(this, marker);
30004 }
30005 }
30006
30007
30008
30009 }
30010 var queue = [];
30011 var draining = false;
30012 var currentQueue;
30013 var queueIndex = -1;
30014
30015 function cleanUpNextTick() {
30016 if (!draining || !currentQueue) {
30017 return;
30018 }
30019 draining = false;
30020 if (currentQueue.length) {
30021 queue = currentQueue.concat(queue);
30022 } else {
30023 queueIndex = -1;
30024 }
30025 if (queue.length) {
30026 drainQueue();
30027 }
30028 }
30029
30030 function drainQueue() {
30031 if (draining) {
30032 return;
30033 }
30034 var timeout = runTimeout(cleanUpNextTick);
30035 draining = true;
30036
30037 var len = queue.length;
30038 while(len) {
30039 currentQueue = queue;
30040 queue = [];
30041 while (++queueIndex < len) {
30042 if (currentQueue) {
30043 currentQueue[queueIndex].run();
30044 }
30045 }
30046 queueIndex = -1;
30047 len = queue.length;
30048 }
30049 currentQueue = null;
30050 draining = false;
30051 runClearTimeout(timeout);
30052 }
30053
30054 process.nextTick = function (fun) {
30055 var args = new Array(arguments.length - 1);
30056 if (arguments.length > 1) {
30057 for (var i = 1; i < arguments.length; i++) {
30058 args[i - 1] = arguments[i];
30059 }
30060 }
30061 queue.push(new Item(fun, args));
30062 if (queue.length === 1 && !draining) {
30063 runTimeout(drainQueue);
30064 }
30065 };
30066
30067 // v8 likes predictible objects
30068 function Item(fun, array) {
30069 this.fun = fun;
30070 this.array = array;
30071 }
30072 Item.prototype.run = function () {
30073 this.fun.apply(null, this.array);
30074 };
30075 process.title = 'browser';
30076 process.browser = true;
30077 process.env = {};
30078 process.argv = [];
30079 process.version = ''; // empty string to avoid regexp issues
30080 process.versions = {};
30081
30082 function noop() {}
30083
30084 process.on = noop;
30085 process.addListener = noop;
30086 process.once = noop;
30087 process.off = noop;
30088 process.removeListener = noop;
30089 process.removeAllListeners = noop;
30090 process.emit = noop;
30091 process.prependListener = noop;
30092 process.prependOnceListener = noop;
30093
30094 process.listeners = function (name) { return [] }
30095
30096 process.binding = function (name) {
30097 throw new Error('process.binding is not supported');
30098 };
30099
30100 process.cwd = function () { return '/' };
30101 process.chdir = function (dir) {
30102 throw new Error('process.chdir is not supported');
30103 };
30104 process.umask = function() { return 0; };
30105
30106 },{}],14:[function(require,module,exports){
30107 module.exports = require('./lib/_stream_duplex.js');
30108
30109 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
30110 // a duplex stream is just a stream that is both readable and writable.
30111 // Since JS doesn't have multiple prototypal inheritance, this class
30112 // prototypally inherits from Readable, and then parasitically from
30113 // Writable.
30114
30115 'use strict';
30116
30117 /*<replacement>*/
30118
30119 var objectKeys = Object.keys || function (obj) {
30120 var keys = [];
30121 for (var key in obj) {
30122 keys.push(key);
30123 }return keys;
30124 };
30125 /*</replacement>*/
30126
30127 module.exports = Duplex;
30128
30129 /*<replacement>*/
30130 var processNextTick = require('process-nextick-args');
30131 /*</replacement>*/
30132
30133 /*<replacement>*/
30134 var util = require('core-util-is');
30135 util.inherits = require('inherits');
30136 /*</replacement>*/
30137
30138 var Readable = require('./_stream_readable');
30139 var Writable = require('./_stream_writable');
30140
30141 util.inherits(Duplex, Readable);
30142
30143 var keys = objectKeys(Writable.prototype);
30144 for (var v = 0; v < keys.length; v++) {
30145 var method = keys[v];
30146 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
30147 }
30148
30149 function Duplex(options) {
30150 if (!(this instanceof Duplex)) return new Duplex(options);
30151
30152 Readable.call(this, options);
30153 Writable.call(this, options);
30154
30155 if (options && options.readable === false) this.readable = false;
30156
30157 if (options && options.writable === false) this.writable = false;
30158
30159 this.allowHalfOpen = true;
30160 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
30161
30162 this.once('end', onend);
30163 }
30164
30165 // the no-half-open enforcer
30166 function onend() {
30167 // if we allow half-open state, or if the writable side ended,
30168 // then we're ok.
30169 if (this.allowHalfOpen || this._writableState.ended) return;
30170
30171 // no more data can be written.
30172 // But allow more writes to happen in this tick.
30173 processNextTick(onEndNT, this);
30174 }
30175
30176 function onEndNT(self) {
30177 self.end();
30178 }
30179
30180 function forEach(xs, f) {
30181 for (var i = 0, l = xs.length; i < l; i++) {
30182 f(xs[i], i);
30183 }
30184 }
30185 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
30186 // a passthrough stream.
30187 // basically just the most minimal sort of Transform stream.
30188 // Every written chunk gets output as-is.
30189
30190 'use strict';
30191
30192 module.exports = PassThrough;
30193
30194 var Transform = require('./_stream_transform');
30195
30196 /*<replacement>*/
30197 var util = require('core-util-is');
30198 util.inherits = require('inherits');
30199 /*</replacement>*/
30200
30201 util.inherits(PassThrough, Transform);
30202
30203 function PassThrough(options) {
30204 if (!(this instanceof PassThrough)) return new PassThrough(options);
30205
30206 Transform.call(this, options);
30207 }
30208
30209 PassThrough.prototype._transform = function (chunk, encoding, cb) {
30210 cb(null, chunk);
30211 };
30212 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
30213 (function (process){
30214 'use strict';
30215
30216 module.exports = Readable;
30217
30218 /*<replacement>*/
30219 var processNextTick = require('process-nextick-args');
30220 /*</replacement>*/
30221
30222 /*<replacement>*/
30223 var isArray = require('isarray');
30224 /*</replacement>*/
30225
30226 /*<replacement>*/
30227 var Duplex;
30228 /*</replacement>*/
30229
30230 Readable.ReadableState = ReadableState;
30231
30232 /*<replacement>*/
30233 var EE = require('events').EventEmitter;
30234
30235 var EElistenerCount = function (emitter, type) {
30236 return emitter.listeners(type).length;
30237 };
30238 /*</replacement>*/
30239
30240 /*<replacement>*/
30241 var Stream = require('./internal/streams/stream');
30242 /*</replacement>*/
30243
30244 var Buffer = require('buffer').Buffer;
30245 /*<replacement>*/
30246 var bufferShim = require('buffer-shims');
30247 /*</replacement>*/
30248
30249 /*<replacement>*/
30250 var util = require('core-util-is');
30251 util.inherits = require('inherits');
30252 /*</replacement>*/
30253
30254 /*<replacement>*/
30255 var debugUtil = require('util');
30256 var debug = void 0;
30257 if (debugUtil && debugUtil.debuglog) {
30258 debug = debugUtil.debuglog('stream');
30259 } else {
30260 debug = function () {};
30261 }
30262 /*</replacement>*/
30263
30264 var BufferList = require('./internal/streams/BufferList');
30265 var StringDecoder;
30266
30267 util.inherits(Readable, Stream);
30268
30269 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
30270
30271 function prependListener(emitter, event, fn) {
30272 // Sadly this is not cacheable as some libraries bundle their own
30273 // event emitter implementation with them.
30274 if (typeof emitter.prependListener === 'function') {
30275 return emitter.prependListener(event, fn);
30276 } else {
30277 // This is a hack to make sure that our error handler is attached before any
30278 // userland ones. NEVER DO THIS. This is here only because this code needs
30279 // to continue to work with older versions of Node.js that do not include
30280 // the prependListener() method. The goal is to eventually remove this hack.
30281 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]];
30282 }
30283 }
30284
30285 function ReadableState(options, stream) {
30286 Duplex = Duplex || require('./_stream_duplex');
30287
30288 options = options || {};
30289
30290 // object stream flag. Used to make read(n) ignore n and to
30291 // make all the buffer merging and length checks go away
30292 this.objectMode = !!options.objectMode;
30293
30294 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
30295
30296 // the point at which it stops calling _read() to fill the buffer
30297 // Note: 0 is a valid value, means "don't call _read preemptively ever"
30298 var hwm = options.highWaterMark;
30299 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
30300 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
30301
30302 // cast to ints.
30303 this.highWaterMark = ~~this.highWaterMark;
30304
30305 // A linked list is used to store data chunks instead of an array because the
30306 // linked list can remove elements from the beginning faster than
30307 // array.shift()
30308 this.buffer = new BufferList();
30309 this.length = 0;
30310 this.pipes = null;
30311 this.pipesCount = 0;
30312 this.flowing = null;
30313 this.ended = false;
30314 this.endEmitted = false;
30315 this.reading = false;
30316
30317 // a flag to be able to tell if the onwrite cb is called immediately,
30318 // or on a later tick. We set this to true at first, because any
30319 // actions that shouldn't happen until "later" should generally also
30320 // not happen before the first write call.
30321 this.sync = true;
30322
30323 // whenever we return null, then we set a flag to say
30324 // that we're awaiting a 'readable' event emission.
30325 this.needReadable = false;
30326 this.emittedReadable = false;
30327 this.readableListening = false;
30328 this.resumeScheduled = false;
30329
30330 // Crypto is kind of old and crusty. Historically, its default string
30331 // encoding is 'binary' so we have to make this configurable.
30332 // Everything else in the universe uses 'utf8', though.
30333 this.defaultEncoding = options.defaultEncoding || 'utf8';
30334
30335 // when piping, we only care about 'readable' events that happen
30336 // after read()ing all the bytes and not getting any pushback.
30337 this.ranOut = false;
30338
30339 // the number of writers that are awaiting a drain event in .pipe()s
30340 this.awaitDrain = 0;
30341
30342 // if true, a maybeReadMore has been scheduled
30343 this.readingMore = false;
30344
30345 this.decoder = null;
30346 this.encoding = null;
30347 if (options.encoding) {
30348 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30349 this.decoder = new StringDecoder(options.encoding);
30350 this.encoding = options.encoding;
30351 }
30352 }
30353
30354 function Readable(options) {
30355 Duplex = Duplex || require('./_stream_duplex');
30356
30357 if (!(this instanceof Readable)) return new Readable(options);
30358
30359 this._readableState = new ReadableState(options, this);
30360
30361 // legacy
30362 this.readable = true;
30363
30364 if (options && typeof options.read === 'function') this._read = options.read;
30365
30366 Stream.call(this);
30367 }
30368
30369 // Manually shove something into the read() buffer.
30370 // This returns true if the highWaterMark has not been hit yet,
30371 // similar to how Writable.write() returns true if you should
30372 // write() some more.
30373 Readable.prototype.push = function (chunk, encoding) {
30374 var state = this._readableState;
30375
30376 if (!state.objectMode && typeof chunk === 'string') {
30377 encoding = encoding || state.defaultEncoding;
30378 if (encoding !== state.encoding) {
30379 chunk = bufferShim.from(chunk, encoding);
30380 encoding = '';
30381 }
30382 }
30383
30384 return readableAddChunk(this, state, chunk, encoding, false);
30385 };
30386
30387 // Unshift should *always* be something directly out of read()
30388 Readable.prototype.unshift = function (chunk) {
30389 var state = this._readableState;
30390 return readableAddChunk(this, state, chunk, '', true);
30391 };
30392
30393 Readable.prototype.isPaused = function () {
30394 return this._readableState.flowing === false;
30395 };
30396
30397 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
30398 var er = chunkInvalid(state, chunk);
30399 if (er) {
30400 stream.emit('error', er);
30401 } else if (chunk === null) {
30402 state.reading = false;
30403 onEofChunk(stream, state);
30404 } else if (state.objectMode || chunk && chunk.length > 0) {
30405 if (state.ended && !addToFront) {
30406 var e = new Error('stream.push() after EOF');
30407 stream.emit('error', e);
30408 } else if (state.endEmitted && addToFront) {
30409 var _e = new Error('stream.unshift() after end event');
30410 stream.emit('error', _e);
30411 } else {
30412 var skipAdd;
30413 if (state.decoder && !addToFront && !encoding) {
30414 chunk = state.decoder.write(chunk);
30415 skipAdd = !state.objectMode && chunk.length === 0;
30416 }
30417
30418 if (!addToFront) state.reading = false;
30419
30420 // Don't add to the buffer if we've decoded to an empty string chunk and
30421 // we're not in object mode
30422 if (!skipAdd) {
30423 // if we want the data now, just emit it.
30424 if (state.flowing && state.length === 0 && !state.sync) {
30425 stream.emit('data', chunk);
30426 stream.read(0);
30427 } else {
30428 // update the buffer info.
30429 state.length += state.objectMode ? 1 : chunk.length;
30430 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
30431
30432 if (state.needReadable) emitReadable(stream);
30433 }
30434 }
30435
30436 maybeReadMore(stream, state);
30437 }
30438 } else if (!addToFront) {
30439 state.reading = false;
30440 }
30441
30442 return needMoreData(state);
30443 }
30444
30445 // if it's past the high water mark, we can push in some more.
30446 // Also, if we have no data yet, we can stand some
30447 // more bytes. This is to work around cases where hwm=0,
30448 // such as the repl. Also, if the push() triggered a
30449 // readable event, and the user called read(largeNumber) such that
30450 // needReadable was set, then we ought to push more, so that another
30451 // 'readable' event will be triggered.
30452 function needMoreData(state) {
30453 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
30454 }
30455
30456 // backwards compatibility.
30457 Readable.prototype.setEncoding = function (enc) {
30458 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
30459 this._readableState.decoder = new StringDecoder(enc);
30460 this._readableState.encoding = enc;
30461 return this;
30462 };
30463
30464 // Don't raise the hwm > 8MB
30465 var MAX_HWM = 0x800000;
30466 function computeNewHighWaterMark(n) {
30467 if (n >= MAX_HWM) {
30468 n = MAX_HWM;
30469 } else {
30470 // Get the next highest power of 2 to prevent increasing hwm excessively in
30471 // tiny amounts
30472 n--;
30473 n |= n >>> 1;
30474 n |= n >>> 2;
30475 n |= n >>> 4;
30476 n |= n >>> 8;
30477 n |= n >>> 16;
30478 n++;
30479 }
30480 return n;
30481 }
30482
30483 // This function is designed to be inlinable, so please take care when making
30484 // changes to the function body.
30485 function howMuchToRead(n, state) {
30486 if (n <= 0 || state.length === 0 && state.ended) return 0;
30487 if (state.objectMode) return 1;
30488 if (n !== n) {
30489 // Only flow one buffer at a time
30490 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
30491 }
30492 // If we're asking for more than the current hwm, then raise the hwm.
30493 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
30494 if (n <= state.length) return n;
30495 // Don't have enough
30496 if (!state.ended) {
30497 state.needReadable = true;
30498 return 0;
30499 }
30500 return state.length;
30501 }
30502
30503 // you can override either this method, or the async _read(n) below.
30504 Readable.prototype.read = function (n) {
30505 debug('read', n);
30506 n = parseInt(n, 10);
30507 var state = this._readableState;
30508 var nOrig = n;
30509
30510 if (n !== 0) state.emittedReadable = false;
30511
30512 // if we're doing read(0) to trigger a readable event, but we
30513 // already have a bunch of data in the buffer, then just trigger
30514 // the 'readable' event and move on.
30515 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
30516 debug('read: emitReadable', state.length, state.ended);
30517 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
30518 return null;
30519 }
30520
30521 n = howMuchToRead(n, state);
30522
30523 // if we've ended, and we're now clear, then finish it up.
30524 if (n === 0 && state.ended) {
30525 if (state.length === 0) endReadable(this);
30526 return null;
30527 }
30528
30529 // All the actual chunk generation logic needs to be
30530 // *below* the call to _read. The reason is that in certain
30531 // synthetic stream cases, such as passthrough streams, _read
30532 // may be a completely synchronous operation which may change
30533 // the state of the read buffer, providing enough data when
30534 // before there was *not* enough.
30535 //
30536 // So, the steps are:
30537 // 1. Figure out what the state of things will be after we do
30538 // a read from the buffer.
30539 //
30540 // 2. If that resulting state will trigger a _read, then call _read.
30541 // Note that this may be asynchronous, or synchronous. Yes, it is
30542 // deeply ugly to write APIs this way, but that still doesn't mean
30543 // that the Readable class should behave improperly, as streams are
30544 // designed to be sync/async agnostic.
30545 // Take note if the _read call is sync or async (ie, if the read call
30546 // has returned yet), so that we know whether or not it's safe to emit
30547 // 'readable' etc.
30548 //
30549 // 3. Actually pull the requested chunks out of the buffer and return.
30550
30551 // if we need a readable event, then we need to do some reading.
30552 var doRead = state.needReadable;
30553 debug('need readable', doRead);
30554
30555 // if we currently have less than the highWaterMark, then also read some
30556 if (state.length === 0 || state.length - n < state.highWaterMark) {
30557 doRead = true;
30558 debug('length less than watermark', doRead);
30559 }
30560
30561 // however, if we've ended, then there's no point, and if we're already
30562 // reading, then it's unnecessary.
30563 if (state.ended || state.reading) {
30564 doRead = false;
30565 debug('reading or ended', doRead);
30566 } else if (doRead) {
30567 debug('do read');
30568 state.reading = true;
30569 state.sync = true;
30570 // if the length is currently zero, then we *need* a readable event.
30571 if (state.length === 0) state.needReadable = true;
30572 // call internal read method
30573 this._read(state.highWaterMark);
30574 state.sync = false;
30575 // If _read pushed data synchronously, then `reading` will be false,
30576 // and we need to re-evaluate how much data we can return to the user.
30577 if (!state.reading) n = howMuchToRead(nOrig, state);
30578 }
30579
30580 var ret;
30581 if (n > 0) ret = fromList(n, state);else ret = null;
30582
30583 if (ret === null) {
30584 state.needReadable = true;
30585 n = 0;
30586 } else {
30587 state.length -= n;
30588 }
30589
30590 if (state.length === 0) {
30591 // If we have nothing in the buffer, then we want to know
30592 // as soon as we *do* get something into the buffer.
30593 if (!state.ended) state.needReadable = true;
30594
30595 // If we tried to read() past the EOF, then emit end on the next tick.
30596 if (nOrig !== n && state.ended) endReadable(this);
30597 }
30598
30599 if (ret !== null) this.emit('data', ret);
30600
30601 return ret;
30602 };
30603
30604 function chunkInvalid(state, chunk) {
30605 var er = null;
30606 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
30607 er = new TypeError('Invalid non-string/buffer chunk');
30608 }
30609 return er;
30610 }
30611
30612 function onEofChunk(stream, state) {
30613 if (state.ended) return;
30614 if (state.decoder) {
30615 var chunk = state.decoder.end();
30616 if (chunk && chunk.length) {
30617 state.buffer.push(chunk);
30618 state.length += state.objectMode ? 1 : chunk.length;
30619 }
30620 }
30621 state.ended = true;
30622
30623 // emit 'readable' now to make sure it gets picked up.
30624 emitReadable(stream);
30625 }
30626
30627 // Don't emit readable right away in sync mode, because this can trigger
30628 // another read() call => stack overflow. This way, it might trigger
30629 // a nextTick recursion warning, but that's not so bad.
30630 function emitReadable(stream) {
30631 var state = stream._readableState;
30632 state.needReadable = false;
30633 if (!state.emittedReadable) {
30634 debug('emitReadable', state.flowing);
30635 state.emittedReadable = true;
30636 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
30637 }
30638 }
30639
30640 function emitReadable_(stream) {
30641 debug('emit readable');
30642 stream.emit('readable');
30643 flow(stream);
30644 }
30645
30646 // at this point, the user has presumably seen the 'readable' event,
30647 // and called read() to consume some data. that may have triggered
30648 // in turn another _read(n) call, in which case reading = true if
30649 // it's in progress.
30650 // However, if we're not ended, or reading, and the length < hwm,
30651 // then go ahead and try to read some more preemptively.
30652 function maybeReadMore(stream, state) {
30653 if (!state.readingMore) {
30654 state.readingMore = true;
30655 processNextTick(maybeReadMore_, stream, state);
30656 }
30657 }
30658
30659 function maybeReadMore_(stream, state) {
30660 var len = state.length;
30661 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
30662 debug('maybeReadMore read 0');
30663 stream.read(0);
30664 if (len === state.length)
30665 // didn't get any data, stop spinning.
30666 break;else len = state.length;
30667 }
30668 state.readingMore = false;
30669 }
30670
30671 // abstract method. to be overridden in specific implementation classes.
30672 // call cb(er, data) where data is <= n in length.
30673 // for virtual (non-string, non-buffer) streams, "length" is somewhat
30674 // arbitrary, and perhaps not very meaningful.
30675 Readable.prototype._read = function (n) {
30676 this.emit('error', new Error('_read() is not implemented'));
30677 };
30678
30679 Readable.prototype.pipe = function (dest, pipeOpts) {
30680 var src = this;
30681 var state = this._readableState;
30682
30683 switch (state.pipesCount) {
30684 case 0:
30685 state.pipes = dest;
30686 break;
30687 case 1:
30688 state.pipes = [state.pipes, dest];
30689 break;
30690 default:
30691 state.pipes.push(dest);
30692 break;
30693 }
30694 state.pipesCount += 1;
30695 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
30696
30697 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
30698
30699 var endFn = doEnd ? onend : cleanup;
30700 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
30701
30702 dest.on('unpipe', onunpipe);
30703 function onunpipe(readable) {
30704 debug('onunpipe');
30705 if (readable === src) {
30706 cleanup();
30707 }
30708 }
30709
30710 function onend() {
30711 debug('onend');
30712 dest.end();
30713 }
30714
30715 // when the dest drains, it reduces the awaitDrain counter
30716 // on the source. This would be more elegant with a .once()
30717 // handler in flow(), but adding and removing repeatedly is
30718 // too slow.
30719 var ondrain = pipeOnDrain(src);
30720 dest.on('drain', ondrain);
30721
30722 var cleanedUp = false;
30723 function cleanup() {
30724 debug('cleanup');
30725 // cleanup event handlers once the pipe is broken
30726 dest.removeListener('close', onclose);
30727 dest.removeListener('finish', onfinish);
30728 dest.removeListener('drain', ondrain);
30729 dest.removeListener('error', onerror);
30730 dest.removeListener('unpipe', onunpipe);
30731 src.removeListener('end', onend);
30732 src.removeListener('end', cleanup);
30733 src.removeListener('data', ondata);
30734
30735 cleanedUp = true;
30736
30737 // if the reader is waiting for a drain event from this
30738 // specific writer, then it would cause it to never start
30739 // flowing again.
30740 // So, if this is awaiting a drain, then we just call it now.
30741 // If we don't know, then assume that we are waiting for one.
30742 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
30743 }
30744
30745 // If the user pushes more data while we're writing to dest then we'll end up
30746 // in ondata again. However, we only want to increase awaitDrain once because
30747 // dest will only emit one 'drain' event for the multiple writes.
30748 // => Introduce a guard on increasing awaitDrain.
30749 var increasedAwaitDrain = false;
30750 src.on('data', ondata);
30751 function ondata(chunk) {
30752 debug('ondata');
30753 increasedAwaitDrain = false;
30754 var ret = dest.write(chunk);
30755 if (false === ret && !increasedAwaitDrain) {
30756 // If the user unpiped during `dest.write()`, it is possible
30757 // to get stuck in a permanently paused state if that write
30758 // also returned false.
30759 // => Check whether `dest` is still a piping destination.
30760 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
30761 debug('false write response, pause', src._readableState.awaitDrain);
30762 src._readableState.awaitDrain++;
30763 increasedAwaitDrain = true;
30764 }
30765 src.pause();
30766 }
30767 }
30768
30769 // if the dest has an error, then stop piping into it.
30770 // however, don't suppress the throwing behavior for this.
30771 function onerror(er) {
30772 debug('onerror', er);
30773 unpipe();
30774 dest.removeListener('error', onerror);
30775 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
30776 }
30777
30778 // Make sure our error handler is attached before userland ones.
30779 prependListener(dest, 'error', onerror);
30780
30781 // Both close and finish should trigger unpipe, but only once.
30782 function onclose() {
30783 dest.removeListener('finish', onfinish);
30784 unpipe();
30785 }
30786 dest.once('close', onclose);
30787 function onfinish() {
30788 debug('onfinish');
30789 dest.removeListener('close', onclose);
30790 unpipe();
30791 }
30792 dest.once('finish', onfinish);
30793
30794 function unpipe() {
30795 debug('unpipe');
30796 src.unpipe(dest);
30797 }
30798
30799 // tell the dest that it's being piped to
30800 dest.emit('pipe', src);
30801
30802 // start the flow if it hasn't been started already.
30803 if (!state.flowing) {
30804 debug('pipe resume');
30805 src.resume();
30806 }
30807
30808 return dest;
30809 };
30810
30811 function pipeOnDrain(src) {
30812 return function () {
30813 var state = src._readableState;
30814 debug('pipeOnDrain', state.awaitDrain);
30815 if (state.awaitDrain) state.awaitDrain--;
30816 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
30817 state.flowing = true;
30818 flow(src);
30819 }
30820 };
30821 }
30822
30823 Readable.prototype.unpipe = function (dest) {
30824 var state = this._readableState;
30825
30826 // if we're not piping anywhere, then do nothing.
30827 if (state.pipesCount === 0) return this;
30828
30829 // just one destination. most common case.
30830 if (state.pipesCount === 1) {
30831 // passed in one, but it's not the right one.
30832 if (dest && dest !== state.pipes) return this;
30833
30834 if (!dest) dest = state.pipes;
30835
30836 // got a match.
30837 state.pipes = null;
30838 state.pipesCount = 0;
30839 state.flowing = false;
30840 if (dest) dest.emit('unpipe', this);
30841 return this;
30842 }
30843
30844 // slow case. multiple pipe destinations.
30845
30846 if (!dest) {
30847 // remove all.
30848 var dests = state.pipes;
30849 var len = state.pipesCount;
30850 state.pipes = null;
30851 state.pipesCount = 0;
30852 state.flowing = false;
30853
30854 for (var i = 0; i < len; i++) {
30855 dests[i].emit('unpipe', this);
30856 }return this;
30857 }
30858
30859 // try to find the right one.
30860 var index = indexOf(state.pipes, dest);
30861 if (index === -1) return this;
30862
30863 state.pipes.splice(index, 1);
30864 state.pipesCount -= 1;
30865 if (state.pipesCount === 1) state.pipes = state.pipes[0];
30866
30867 dest.emit('unpipe', this);
30868
30869 return this;
30870 };
30871
30872 // set up data events if they are asked for
30873 // Ensure readable listeners eventually get something
30874 Readable.prototype.on = function (ev, fn) {
30875 var res = Stream.prototype.on.call(this, ev, fn);
30876
30877 if (ev === 'data') {
30878 // Start flowing on next tick if stream isn't explicitly paused
30879 if (this._readableState.flowing !== false) this.resume();
30880 } else if (ev === 'readable') {
30881 var state = this._readableState;
30882 if (!state.endEmitted && !state.readableListening) {
30883 state.readableListening = state.needReadable = true;
30884 state.emittedReadable = false;
30885 if (!state.reading) {
30886 processNextTick(nReadingNextTick, this);
30887 } else if (state.length) {
30888 emitReadable(this, state);
30889 }
30890 }
30891 }
30892
30893 return res;
30894 };
30895 Readable.prototype.addListener = Readable.prototype.on;
30896
30897 function nReadingNextTick(self) {
30898 debug('readable nexttick read 0');
30899 self.read(0);
30900 }
30901
30902 // pause() and resume() are remnants of the legacy readable stream API
30903 // If the user uses them, then switch into old mode.
30904 Readable.prototype.resume = function () {
30905 var state = this._readableState;
30906 if (!state.flowing) {
30907 debug('resume');
30908 state.flowing = true;
30909 resume(this, state);
30910 }
30911 return this;
30912 };
30913
30914 function resume(stream, state) {
30915 if (!state.resumeScheduled) {
30916 state.resumeScheduled = true;
30917 processNextTick(resume_, stream, state);
30918 }
30919 }
30920
30921 function resume_(stream, state) {
30922 if (!state.reading) {
30923 debug('resume read 0');
30924 stream.read(0);
30925 }
30926
30927 state.resumeScheduled = false;
30928 state.awaitDrain = 0;
30929 stream.emit('resume');
30930 flow(stream);
30931 if (state.flowing && !state.reading) stream.read(0);
30932 }
30933
30934 Readable.prototype.pause = function () {
30935 debug('call pause flowing=%j', this._readableState.flowing);
30936 if (false !== this._readableState.flowing) {
30937 debug('pause');
30938 this._readableState.flowing = false;
30939 this.emit('pause');
30940 }
30941 return this;
30942 };
30943
30944 function flow(stream) {
30945 var state = stream._readableState;
30946 debug('flow', state.flowing);
30947 while (state.flowing && stream.read() !== null) {}
30948 }
30949
30950 // wrap an old-style stream as the async data source.
30951 // This is *not* part of the readable stream interface.
30952 // It is an ugly unfortunate mess of history.
30953 Readable.prototype.wrap = function (stream) {
30954 var state = this._readableState;
30955 var paused = false;
30956
30957 var self = this;
30958 stream.on('end', function () {
30959 debug('wrapped end');
30960 if (state.decoder && !state.ended) {
30961 var chunk = state.decoder.end();
30962 if (chunk && chunk.length) self.push(chunk);
30963 }
30964
30965 self.push(null);
30966 });
30967
30968 stream.on('data', function (chunk) {
30969 debug('wrapped data');
30970 if (state.decoder) chunk = state.decoder.write(chunk);
30971
30972 // don't skip over falsy values in objectMode
30973 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
30974
30975 var ret = self.push(chunk);
30976 if (!ret) {
30977 paused = true;
30978 stream.pause();
30979 }
30980 });
30981
30982 // proxy all the other methods.
30983 // important when wrapping filters and duplexes.
30984 for (var i in stream) {
30985 if (this[i] === undefined && typeof stream[i] === 'function') {
30986 this[i] = function (method) {
30987 return function () {
30988 return stream[method].apply(stream, arguments);
30989 };
30990 }(i);
30991 }
30992 }
30993
30994 // proxy certain important events.
30995 for (var n = 0; n < kProxyEvents.length; n++) {
30996 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
30997 }
30998
30999 // when we try to consume some more bytes, simply unpause the
31000 // underlying stream.
31001 self._read = function (n) {
31002 debug('wrapped _read', n);
31003 if (paused) {
31004 paused = false;
31005 stream.resume();
31006 }
31007 };
31008
31009 return self;
31010 };
31011
31012 // exposed for testing purposes only.
31013 Readable._fromList = fromList;
31014
31015 // Pluck off n bytes from an array of buffers.
31016 // Length is the combined lengths of all the buffers in the list.
31017 // This function is designed to be inlinable, so please take care when making
31018 // changes to the function body.
31019 function fromList(n, state) {
31020 // nothing buffered
31021 if (state.length === 0) return null;
31022
31023 var ret;
31024 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
31025 // read it all, truncate the list
31026 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);
31027 state.buffer.clear();
31028 } else {
31029 // read part of list
31030 ret = fromListPartial(n, state.buffer, state.decoder);
31031 }
31032
31033 return ret;
31034 }
31035
31036 // Extracts only enough buffered data to satisfy the amount requested.
31037 // This function is designed to be inlinable, so please take care when making
31038 // changes to the function body.
31039 function fromListPartial(n, list, hasStrings) {
31040 var ret;
31041 if (n < list.head.data.length) {
31042 // slice is the same for buffers and strings
31043 ret = list.head.data.slice(0, n);
31044 list.head.data = list.head.data.slice(n);
31045 } else if (n === list.head.data.length) {
31046 // first chunk is a perfect match
31047 ret = list.shift();
31048 } else {
31049 // result spans more than one buffer
31050 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
31051 }
31052 return ret;
31053 }
31054
31055 // Copies a specified amount of characters from the list of buffered data
31056 // chunks.
31057 // This function is designed to be inlinable, so please take care when making
31058 // changes to the function body.
31059 function copyFromBufferString(n, list) {
31060 var p = list.head;
31061 var c = 1;
31062 var ret = p.data;
31063 n -= ret.length;
31064 while (p = p.next) {
31065 var str = p.data;
31066 var nb = n > str.length ? str.length : n;
31067 if (nb === str.length) ret += str;else ret += str.slice(0, n);
31068 n -= nb;
31069 if (n === 0) {
31070 if (nb === str.length) {
31071 ++c;
31072 if (p.next) list.head = p.next;else list.head = list.tail = null;
31073 } else {
31074 list.head = p;
31075 p.data = str.slice(nb);
31076 }
31077 break;
31078 }
31079 ++c;
31080 }
31081 list.length -= c;
31082 return ret;
31083 }
31084
31085 // Copies a specified amount of bytes from the list of buffered data chunks.
31086 // This function is designed to be inlinable, so please take care when making
31087 // changes to the function body.
31088 function copyFromBuffer(n, list) {
31089 var ret = bufferShim.allocUnsafe(n);
31090 var p = list.head;
31091 var c = 1;
31092 p.data.copy(ret);
31093 n -= p.data.length;
31094 while (p = p.next) {
31095 var buf = p.data;
31096 var nb = n > buf.length ? buf.length : n;
31097 buf.copy(ret, ret.length - n, 0, nb);
31098 n -= nb;
31099 if (n === 0) {
31100 if (nb === buf.length) {
31101 ++c;
31102 if (p.next) list.head = p.next;else list.head = list.tail = null;
31103 } else {
31104 list.head = p;
31105 p.data = buf.slice(nb);
31106 }
31107 break;
31108 }
31109 ++c;
31110 }
31111 list.length -= c;
31112 return ret;
31113 }
31114
31115 function endReadable(stream) {
31116 var state = stream._readableState;
31117
31118 // If we get here before consuming all the bytes, then that is a
31119 // bug in node. Should never happen.
31120 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
31121
31122 if (!state.endEmitted) {
31123 state.ended = true;
31124 processNextTick(endReadableNT, state, stream);
31125 }
31126 }
31127
31128 function endReadableNT(state, stream) {
31129 // Check that we didn't get one last unshift.
31130 if (!state.endEmitted && state.length === 0) {
31131 state.endEmitted = true;
31132 stream.readable = false;
31133 stream.emit('end');
31134 }
31135 }
31136
31137 function forEach(xs, f) {
31138 for (var i = 0, l = xs.length; i < l; i++) {
31139 f(xs[i], i);
31140 }
31141 }
31142
31143 function indexOf(xs, x) {
31144 for (var i = 0, l = xs.length; i < l; i++) {
31145 if (xs[i] === x) return i;
31146 }
31147 return -1;
31148 }
31149 }).call(this,require('_process'))
31150 },{"./_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){
31151 // a transform stream is a readable/writable stream where you do
31152 // something with the data. Sometimes it's called a "filter",
31153 // but that's not a great name for it, since that implies a thing where
31154 // some bits pass through, and others are simply ignored. (That would
31155 // be a valid example of a transform, of course.)
31156 //
31157 // While the output is causally related to the input, it's not a
31158 // necessarily symmetric or synchronous transformation. For example,
31159 // a zlib stream might take multiple plain-text writes(), and then
31160 // emit a single compressed chunk some time in the future.
31161 //
31162 // Here's how this works:
31163 //
31164 // The Transform stream has all the aspects of the readable and writable
31165 // stream classes. When you write(chunk), that calls _write(chunk,cb)
31166 // internally, and returns false if there's a lot of pending writes
31167 // buffered up. When you call read(), that calls _read(n) until
31168 // there's enough pending readable data buffered up.
31169 //
31170 // In a transform stream, the written data is placed in a buffer. When
31171 // _read(n) is called, it transforms the queued up data, calling the
31172 // buffered _write cb's as it consumes chunks. If consuming a single
31173 // written chunk would result in multiple output chunks, then the first
31174 // outputted bit calls the readcb, and subsequent chunks just go into
31175 // the read buffer, and will cause it to emit 'readable' if necessary.
31176 //
31177 // This way, back-pressure is actually determined by the reading side,
31178 // since _read has to be called to start processing a new chunk. However,
31179 // a pathological inflate type of transform can cause excessive buffering
31180 // here. For example, imagine a stream where every byte of input is
31181 // interpreted as an integer from 0-255, and then results in that many
31182 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
31183 // 1kb of data being output. In this case, you could write a very small
31184 // amount of input, and end up with a very large amount of output. In
31185 // such a pathological inflating mechanism, there'd be no way to tell
31186 // the system to stop doing the transform. A single 4MB write could
31187 // cause the system to run out of memory.
31188 //
31189 // However, even in such a pathological case, only a single written chunk
31190 // would be consumed, and then the rest would wait (un-transformed) until
31191 // the results of the previous transformed chunk were consumed.
31192
31193 'use strict';
31194
31195 module.exports = Transform;
31196
31197 var Duplex = require('./_stream_duplex');
31198
31199 /*<replacement>*/
31200 var util = require('core-util-is');
31201 util.inherits = require('inherits');
31202 /*</replacement>*/
31203
31204 util.inherits(Transform, Duplex);
31205
31206 function TransformState(stream) {
31207 this.afterTransform = function (er, data) {
31208 return afterTransform(stream, er, data);
31209 };
31210
31211 this.needTransform = false;
31212 this.transforming = false;
31213 this.writecb = null;
31214 this.writechunk = null;
31215 this.writeencoding = null;
31216 }
31217
31218 function afterTransform(stream, er, data) {
31219 var ts = stream._transformState;
31220 ts.transforming = false;
31221
31222 var cb = ts.writecb;
31223
31224 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
31225
31226 ts.writechunk = null;
31227 ts.writecb = null;
31228
31229 if (data !== null && data !== undefined) stream.push(data);
31230
31231 cb(er);
31232
31233 var rs = stream._readableState;
31234 rs.reading = false;
31235 if (rs.needReadable || rs.length < rs.highWaterMark) {
31236 stream._read(rs.highWaterMark);
31237 }
31238 }
31239
31240 function Transform(options) {
31241 if (!(this instanceof Transform)) return new Transform(options);
31242
31243 Duplex.call(this, options);
31244
31245 this._transformState = new TransformState(this);
31246
31247 var stream = this;
31248
31249 // start out asking for a readable event once data is transformed.
31250 this._readableState.needReadable = true;
31251
31252 // we have implemented the _read method, and done the other things
31253 // that Readable wants before the first _read call, so unset the
31254 // sync guard flag.
31255 this._readableState.sync = false;
31256
31257 if (options) {
31258 if (typeof options.transform === 'function') this._transform = options.transform;
31259
31260 if (typeof options.flush === 'function') this._flush = options.flush;
31261 }
31262
31263 // When the writable side finishes, then flush out anything remaining.
31264 this.once('prefinish', function () {
31265 if (typeof this._flush === 'function') this._flush(function (er, data) {
31266 done(stream, er, data);
31267 });else done(stream);
31268 });
31269 }
31270
31271 Transform.prototype.push = function (chunk, encoding) {
31272 this._transformState.needTransform = false;
31273 return Duplex.prototype.push.call(this, chunk, encoding);
31274 };
31275
31276 // This is the part where you do stuff!
31277 // override this function in implementation classes.
31278 // 'chunk' is an input chunk.
31279 //
31280 // Call `push(newChunk)` to pass along transformed output
31281 // to the readable side. You may call 'push' zero or more times.
31282 //
31283 // Call `cb(err)` when you are done with this chunk. If you pass
31284 // an error, then that'll put the hurt on the whole operation. If you
31285 // never call cb(), then you'll never get another chunk.
31286 Transform.prototype._transform = function (chunk, encoding, cb) {
31287 throw new Error('_transform() is not implemented');
31288 };
31289
31290 Transform.prototype._write = function (chunk, encoding, cb) {
31291 var ts = this._transformState;
31292 ts.writecb = cb;
31293 ts.writechunk = chunk;
31294 ts.writeencoding = encoding;
31295 if (!ts.transforming) {
31296 var rs = this._readableState;
31297 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
31298 }
31299 };
31300
31301 // Doesn't matter what the args are here.
31302 // _transform does all the work.
31303 // That we got here means that the readable side wants more data.
31304 Transform.prototype._read = function (n) {
31305 var ts = this._transformState;
31306
31307 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
31308 ts.transforming = true;
31309 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
31310 } else {
31311 // mark that we need a transform, so that any data that comes in
31312 // will get processed, now that we've asked for it.
31313 ts.needTransform = true;
31314 }
31315 };
31316
31317 function done(stream, er, data) {
31318 if (er) return stream.emit('error', er);
31319
31320 if (data !== null && data !== undefined) stream.push(data);
31321
31322 // if there's nothing in the write buffer, then that means
31323 // that nothing more will ever be provided
31324 var ws = stream._writableState;
31325 var ts = stream._transformState;
31326
31327 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
31328
31329 if (ts.transforming) throw new Error('Calling transform done when still transforming');
31330
31331 return stream.push(null);
31332 }
31333 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
31334 (function (process){
31335 // A bit simpler than readable streams.
31336 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
31337 // the drain event emission and buffering.
31338
31339 'use strict';
31340
31341 module.exports = Writable;
31342
31343 /*<replacement>*/
31344 var processNextTick = require('process-nextick-args');
31345 /*</replacement>*/
31346
31347 /*<replacement>*/
31348 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
31349 /*</replacement>*/
31350
31351 /*<replacement>*/
31352 var Duplex;
31353 /*</replacement>*/
31354
31355 Writable.WritableState = WritableState;
31356
31357 /*<replacement>*/
31358 var util = require('core-util-is');
31359 util.inherits = require('inherits');
31360 /*</replacement>*/
31361
31362 /*<replacement>*/
31363 var internalUtil = {
31364 deprecate: require('util-deprecate')
31365 };
31366 /*</replacement>*/
31367
31368 /*<replacement>*/
31369 var Stream = require('./internal/streams/stream');
31370 /*</replacement>*/
31371
31372 var Buffer = require('buffer').Buffer;
31373 /*<replacement>*/
31374 var bufferShim = require('buffer-shims');
31375 /*</replacement>*/
31376
31377 util.inherits(Writable, Stream);
31378
31379 function nop() {}
31380
31381 function WriteReq(chunk, encoding, cb) {
31382 this.chunk = chunk;
31383 this.encoding = encoding;
31384 this.callback = cb;
31385 this.next = null;
31386 }
31387
31388 function WritableState(options, stream) {
31389 Duplex = Duplex || require('./_stream_duplex');
31390
31391 options = options || {};
31392
31393 // object stream flag to indicate whether or not this stream
31394 // contains buffers or objects.
31395 this.objectMode = !!options.objectMode;
31396
31397 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
31398
31399 // the point at which write() starts returning false
31400 // Note: 0 is a valid value, means that we always return false if
31401 // the entire buffer is not flushed immediately on write()
31402 var hwm = options.highWaterMark;
31403 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
31404 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
31405
31406 // cast to ints.
31407 this.highWaterMark = ~~this.highWaterMark;
31408
31409 // drain event flag.
31410 this.needDrain = false;
31411 // at the start of calling end()
31412 this.ending = false;
31413 // when end() has been called, and returned
31414 this.ended = false;
31415 // when 'finish' is emitted
31416 this.finished = false;
31417
31418 // should we decode strings into buffers before passing to _write?
31419 // this is here so that some node-core streams can optimize string
31420 // handling at a lower level.
31421 var noDecode = options.decodeStrings === false;
31422 this.decodeStrings = !noDecode;
31423
31424 // Crypto is kind of old and crusty. Historically, its default string
31425 // encoding is 'binary' so we have to make this configurable.
31426 // Everything else in the universe uses 'utf8', though.
31427 this.defaultEncoding = options.defaultEncoding || 'utf8';
31428
31429 // not an actual buffer we keep track of, but a measurement
31430 // of how much we're waiting to get pushed to some underlying
31431 // socket or file.
31432 this.length = 0;
31433
31434 // a flag to see when we're in the middle of a write.
31435 this.writing = false;
31436
31437 // when true all writes will be buffered until .uncork() call
31438 this.corked = 0;
31439
31440 // a flag to be able to tell if the onwrite cb is called immediately,
31441 // or on a later tick. We set this to true at first, because any
31442 // actions that shouldn't happen until "later" should generally also
31443 // not happen before the first write call.
31444 this.sync = true;
31445
31446 // a flag to know if we're processing previously buffered items, which
31447 // may call the _write() callback in the same tick, so that we don't
31448 // end up in an overlapped onwrite situation.
31449 this.bufferProcessing = false;
31450
31451 // the callback that's passed to _write(chunk,cb)
31452 this.onwrite = function (er) {
31453 onwrite(stream, er);
31454 };
31455
31456 // the callback that the user supplies to write(chunk,encoding,cb)
31457 this.writecb = null;
31458
31459 // the amount that is being written when _write is called.
31460 this.writelen = 0;
31461
31462 this.bufferedRequest = null;
31463 this.lastBufferedRequest = null;
31464
31465 // number of pending user-supplied write callbacks
31466 // this must be 0 before 'finish' can be emitted
31467 this.pendingcb = 0;
31468
31469 // emit prefinish if the only thing we're waiting for is _write cbs
31470 // This is relevant for synchronous Transform streams
31471 this.prefinished = false;
31472
31473 // True if the error was already emitted and should not be thrown again
31474 this.errorEmitted = false;
31475
31476 // count buffered requests
31477 this.bufferedRequestCount = 0;
31478
31479 // allocate the first CorkedRequest, there is always
31480 // one allocated and free to use, and we maintain at most two
31481 this.corkedRequestsFree = new CorkedRequest(this);
31482 }
31483
31484 WritableState.prototype.getBuffer = function getBuffer() {
31485 var current = this.bufferedRequest;
31486 var out = [];
31487 while (current) {
31488 out.push(current);
31489 current = current.next;
31490 }
31491 return out;
31492 };
31493
31494 (function () {
31495 try {
31496 Object.defineProperty(WritableState.prototype, 'buffer', {
31497 get: internalUtil.deprecate(function () {
31498 return this.getBuffer();
31499 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
31500 });
31501 } catch (_) {}
31502 })();
31503
31504 // Test _writableState for inheritance to account for Duplex streams,
31505 // whose prototype chain only points to Readable.
31506 var realHasInstance;
31507 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
31508 realHasInstance = Function.prototype[Symbol.hasInstance];
31509 Object.defineProperty(Writable, Symbol.hasInstance, {
31510 value: function (object) {
31511 if (realHasInstance.call(this, object)) return true;
31512
31513 return object && object._writableState instanceof WritableState;
31514 }
31515 });
31516 } else {
31517 realHasInstance = function (object) {
31518 return object instanceof this;
31519 };
31520 }
31521
31522 function Writable(options) {
31523 Duplex = Duplex || require('./_stream_duplex');
31524
31525 // Writable ctor is applied to Duplexes, too.
31526 // `realHasInstance` is necessary because using plain `instanceof`
31527 // would return false, as no `_writableState` property is attached.
31528
31529 // Trying to use the custom `instanceof` for Writable here will also break the
31530 // Node.js LazyTransform implementation, which has a non-trivial getter for
31531 // `_writableState` that would lead to infinite recursion.
31532 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
31533 return new Writable(options);
31534 }
31535
31536 this._writableState = new WritableState(options, this);
31537
31538 // legacy.
31539 this.writable = true;
31540
31541 if (options) {
31542 if (typeof options.write === 'function') this._write = options.write;
31543
31544 if (typeof options.writev === 'function') this._writev = options.writev;
31545 }
31546
31547 Stream.call(this);
31548 }
31549
31550 // Otherwise people can pipe Writable streams, which is just wrong.
31551 Writable.prototype.pipe = function () {
31552 this.emit('error', new Error('Cannot pipe, not readable'));
31553 };
31554
31555 function writeAfterEnd(stream, cb) {
31556 var er = new Error('write after end');
31557 // TODO: defer error events consistently everywhere, not just the cb
31558 stream.emit('error', er);
31559 processNextTick(cb, er);
31560 }
31561
31562 // Checks that a user-supplied chunk is valid, especially for the particular
31563 // mode the stream is in. Currently this means that `null` is never accepted
31564 // and undefined/non-string values are only allowed in object mode.
31565 function validChunk(stream, state, chunk, cb) {
31566 var valid = true;
31567 var er = false;
31568
31569 if (chunk === null) {
31570 er = new TypeError('May not write null values to stream');
31571 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
31572 er = new TypeError('Invalid non-string/buffer chunk');
31573 }
31574 if (er) {
31575 stream.emit('error', er);
31576 processNextTick(cb, er);
31577 valid = false;
31578 }
31579 return valid;
31580 }
31581
31582 Writable.prototype.write = function (chunk, encoding, cb) {
31583 var state = this._writableState;
31584 var ret = false;
31585 var isBuf = Buffer.isBuffer(chunk);
31586
31587 if (typeof encoding === 'function') {
31588 cb = encoding;
31589 encoding = null;
31590 }
31591
31592 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
31593
31594 if (typeof cb !== 'function') cb = nop;
31595
31596 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
31597 state.pendingcb++;
31598 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
31599 }
31600
31601 return ret;
31602 };
31603
31604 Writable.prototype.cork = function () {
31605 var state = this._writableState;
31606
31607 state.corked++;
31608 };
31609
31610 Writable.prototype.uncork = function () {
31611 var state = this._writableState;
31612
31613 if (state.corked) {
31614 state.corked--;
31615
31616 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
31617 }
31618 };
31619
31620 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
31621 // node::ParseEncoding() requires lower case.
31622 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
31623 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);
31624 this._writableState.defaultEncoding = encoding;
31625 return this;
31626 };
31627
31628 function decodeChunk(state, chunk, encoding) {
31629 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
31630 chunk = bufferShim.from(chunk, encoding);
31631 }
31632 return chunk;
31633 }
31634
31635 // if we're already writing something, then just put this
31636 // in the queue, and wait our turn. Otherwise, call _write
31637 // If we return false, then we need a drain event, so set that flag.
31638 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
31639 if (!isBuf) {
31640 chunk = decodeChunk(state, chunk, encoding);
31641 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
31642 }
31643 var len = state.objectMode ? 1 : chunk.length;
31644
31645 state.length += len;
31646
31647 var ret = state.length < state.highWaterMark;
31648 // we must ensure that previous needDrain will not be reset to false.
31649 if (!ret) state.needDrain = true;
31650
31651 if (state.writing || state.corked) {
31652 var last = state.lastBufferedRequest;
31653 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
31654 if (last) {
31655 last.next = state.lastBufferedRequest;
31656 } else {
31657 state.bufferedRequest = state.lastBufferedRequest;
31658 }
31659 state.bufferedRequestCount += 1;
31660 } else {
31661 doWrite(stream, state, false, len, chunk, encoding, cb);
31662 }
31663
31664 return ret;
31665 }
31666
31667 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
31668 state.writelen = len;
31669 state.writecb = cb;
31670 state.writing = true;
31671 state.sync = true;
31672 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
31673 state.sync = false;
31674 }
31675
31676 function onwriteError(stream, state, sync, er, cb) {
31677 --state.pendingcb;
31678 if (sync) processNextTick(cb, er);else cb(er);
31679
31680 stream._writableState.errorEmitted = true;
31681 stream.emit('error', er);
31682 }
31683
31684 function onwriteStateUpdate(state) {
31685 state.writing = false;
31686 state.writecb = null;
31687 state.length -= state.writelen;
31688 state.writelen = 0;
31689 }
31690
31691 function onwrite(stream, er) {
31692 var state = stream._writableState;
31693 var sync = state.sync;
31694 var cb = state.writecb;
31695
31696 onwriteStateUpdate(state);
31697
31698 if (er) onwriteError(stream, state, sync, er, cb);else {
31699 // Check if we're actually ready to finish, but don't emit yet
31700 var finished = needFinish(state);
31701
31702 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
31703 clearBuffer(stream, state);
31704 }
31705
31706 if (sync) {
31707 /*<replacement>*/
31708 asyncWrite(afterWrite, stream, state, finished, cb);
31709 /*</replacement>*/
31710 } else {
31711 afterWrite(stream, state, finished, cb);
31712 }
31713 }
31714 }
31715
31716 function afterWrite(stream, state, finished, cb) {
31717 if (!finished) onwriteDrain(stream, state);
31718 state.pendingcb--;
31719 cb();
31720 finishMaybe(stream, state);
31721 }
31722
31723 // Must force callback to be called on nextTick, so that we don't
31724 // emit 'drain' before the write() consumer gets the 'false' return
31725 // value, and has a chance to attach a 'drain' listener.
31726 function onwriteDrain(stream, state) {
31727 if (state.length === 0 && state.needDrain) {
31728 state.needDrain = false;
31729 stream.emit('drain');
31730 }
31731 }
31732
31733 // if there's something in the buffer waiting, then process it
31734 function clearBuffer(stream, state) {
31735 state.bufferProcessing = true;
31736 var entry = state.bufferedRequest;
31737
31738 if (stream._writev && entry && entry.next) {
31739 // Fast case, write everything using _writev()
31740 var l = state.bufferedRequestCount;
31741 var buffer = new Array(l);
31742 var holder = state.corkedRequestsFree;
31743 holder.entry = entry;
31744
31745 var count = 0;
31746 while (entry) {
31747 buffer[count] = entry;
31748 entry = entry.next;
31749 count += 1;
31750 }
31751
31752 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
31753
31754 // doWrite is almost always async, defer these to save a bit of time
31755 // as the hot path ends with doWrite
31756 state.pendingcb++;
31757 state.lastBufferedRequest = null;
31758 if (holder.next) {
31759 state.corkedRequestsFree = holder.next;
31760 holder.next = null;
31761 } else {
31762 state.corkedRequestsFree = new CorkedRequest(state);
31763 }
31764 } else {
31765 // Slow case, write chunks one-by-one
31766 while (entry) {
31767 var chunk = entry.chunk;
31768 var encoding = entry.encoding;
31769 var cb = entry.callback;
31770 var len = state.objectMode ? 1 : chunk.length;
31771
31772 doWrite(stream, state, false, len, chunk, encoding, cb);
31773 entry = entry.next;
31774 // if we didn't call the onwrite immediately, then
31775 // it means that we need to wait until it does.
31776 // also, that means that the chunk and cb are currently
31777 // being processed, so move the buffer counter past them.
31778 if (state.writing) {
31779 break;
31780 }
31781 }
31782
31783 if (entry === null) state.lastBufferedRequest = null;
31784 }
31785
31786 state.bufferedRequestCount = 0;
31787 state.bufferedRequest = entry;
31788 state.bufferProcessing = false;
31789 }
31790
31791 Writable.prototype._write = function (chunk, encoding, cb) {
31792 cb(new Error('_write() is not implemented'));
31793 };
31794
31795 Writable.prototype._writev = null;
31796
31797 Writable.prototype.end = function (chunk, encoding, cb) {
31798 var state = this._writableState;
31799
31800 if (typeof chunk === 'function') {
31801 cb = chunk;
31802 chunk = null;
31803 encoding = null;
31804 } else if (typeof encoding === 'function') {
31805 cb = encoding;
31806 encoding = null;
31807 }
31808
31809 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
31810
31811 // .end() fully uncorks
31812 if (state.corked) {
31813 state.corked = 1;
31814 this.uncork();
31815 }
31816
31817 // ignore unnecessary end() calls.
31818 if (!state.ending && !state.finished) endWritable(this, state, cb);
31819 };
31820
31821 function needFinish(state) {
31822 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
31823 }
31824
31825 function prefinish(stream, state) {
31826 if (!state.prefinished) {
31827 state.prefinished = true;
31828 stream.emit('prefinish');
31829 }
31830 }
31831
31832 function finishMaybe(stream, state) {
31833 var need = needFinish(state);
31834 if (need) {
31835 if (state.pendingcb === 0) {
31836 prefinish(stream, state);
31837 state.finished = true;
31838 stream.emit('finish');
31839 } else {
31840 prefinish(stream, state);
31841 }
31842 }
31843 return need;
31844 }
31845
31846 function endWritable(stream, state, cb) {
31847 state.ending = true;
31848 finishMaybe(stream, state);
31849 if (cb) {
31850 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
31851 }
31852 state.ended = true;
31853 stream.writable = false;
31854 }
31855
31856 // It seems a linked list but it is not
31857 // there will be only 2 of these for each stream
31858 function CorkedRequest(state) {
31859 var _this = this;
31860
31861 this.next = null;
31862 this.entry = null;
31863 this.finish = function (err) {
31864 var entry = _this.entry;
31865 _this.entry = null;
31866 while (entry) {
31867 var cb = entry.callback;
31868 state.pendingcb--;
31869 cb(err);
31870 entry = entry.next;
31871 }
31872 if (state.corkedRequestsFree) {
31873 state.corkedRequestsFree.next = _this;
31874 } else {
31875 state.corkedRequestsFree = _this;
31876 }
31877 };
31878 }
31879 }).call(this,require('_process'))
31880 },{"./_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){
31881 'use strict';
31882
31883 var Buffer = require('buffer').Buffer;
31884 /*<replacement>*/
31885 var bufferShim = require('buffer-shims');
31886 /*</replacement>*/
31887
31888 module.exports = BufferList;
31889
31890 function BufferList() {
31891 this.head = null;
31892 this.tail = null;
31893 this.length = 0;
31894 }
31895
31896 BufferList.prototype.push = function (v) {
31897 var entry = { data: v, next: null };
31898 if (this.length > 0) this.tail.next = entry;else this.head = entry;
31899 this.tail = entry;
31900 ++this.length;
31901 };
31902
31903 BufferList.prototype.unshift = function (v) {
31904 var entry = { data: v, next: this.head };
31905 if (this.length === 0) this.tail = entry;
31906 this.head = entry;
31907 ++this.length;
31908 };
31909
31910 BufferList.prototype.shift = function () {
31911 if (this.length === 0) return;
31912 var ret = this.head.data;
31913 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
31914 --this.length;
31915 return ret;
31916 };
31917
31918 BufferList.prototype.clear = function () {
31919 this.head = this.tail = null;
31920 this.length = 0;
31921 };
31922
31923 BufferList.prototype.join = function (s) {
31924 if (this.length === 0) return '';
31925 var p = this.head;
31926 var ret = '' + p.data;
31927 while (p = p.next) {
31928 ret += s + p.data;
31929 }return ret;
31930 };
31931
31932 BufferList.prototype.concat = function (n) {
31933 if (this.length === 0) return bufferShim.alloc(0);
31934 if (this.length === 1) return this.head.data;
31935 var ret = bufferShim.allocUnsafe(n >>> 0);
31936 var p = this.head;
31937 var i = 0;
31938 while (p) {
31939 p.data.copy(ret, i);
31940 i += p.data.length;
31941 p = p.next;
31942 }
31943 return ret;
31944 };
31945 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
31946 module.exports = require('events').EventEmitter;
31947
31948 },{"events":7}],22:[function(require,module,exports){
31949 'use strict';
31950
31951 var Buffer = require('safe-buffer').Buffer;
31952
31953 var isEncoding = Buffer.isEncoding || function (encoding) {
31954 encoding = '' + encoding;
31955 switch (encoding && encoding.toLowerCase()) {
31956 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':
31957 return true;
31958 default:
31959 return false;
31960 }
31961 };
31962
31963 function _normalizeEncoding(enc) {
31964 if (!enc) return 'utf8';
31965 var retried;
31966 while (true) {
31967 switch (enc) {
31968 case 'utf8':
31969 case 'utf-8':
31970 return 'utf8';
31971 case 'ucs2':
31972 case 'ucs-2':
31973 case 'utf16le':
31974 case 'utf-16le':
31975 return 'utf16le';
31976 case 'latin1':
31977 case 'binary':
31978 return 'latin1';
31979 case 'base64':
31980 case 'ascii':
31981 case 'hex':
31982 return enc;
31983 default:
31984 if (retried) return; // undefined
31985 enc = ('' + enc).toLowerCase();
31986 retried = true;
31987 }
31988 }
31989 };
31990
31991 // Do not cache `Buffer.isEncoding` when checking encoding names as some
31992 // modules monkey-patch it to support additional encodings
31993 function normalizeEncoding(enc) {
31994 var nenc = _normalizeEncoding(enc);
31995 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
31996 return nenc || enc;
31997 }
31998
31999 // StringDecoder provides an interface for efficiently splitting a series of
32000 // buffers into a series of JS strings without breaking apart multi-byte
32001 // characters.
32002 exports.StringDecoder = StringDecoder;
32003 function StringDecoder(encoding) {
32004 this.encoding = normalizeEncoding(encoding);
32005 var nb;
32006 switch (this.encoding) {
32007 case 'utf16le':
32008 this.text = utf16Text;
32009 this.end = utf16End;
32010 nb = 4;
32011 break;
32012 case 'utf8':
32013 this.fillLast = utf8FillLast;
32014 nb = 4;
32015 break;
32016 case 'base64':
32017 this.text = base64Text;
32018 this.end = base64End;
32019 nb = 3;
32020 break;
32021 default:
32022 this.write = simpleWrite;
32023 this.end = simpleEnd;
32024 return;
32025 }
32026 this.lastNeed = 0;
32027 this.lastTotal = 0;
32028 this.lastChar = Buffer.allocUnsafe(nb);
32029 }
32030
32031 StringDecoder.prototype.write = function (buf) {
32032 if (buf.length === 0) return '';
32033 var r;
32034 var i;
32035 if (this.lastNeed) {
32036 r = this.fillLast(buf);
32037 if (r === undefined) return '';
32038 i = this.lastNeed;
32039 this.lastNeed = 0;
32040 } else {
32041 i = 0;
32042 }
32043 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
32044 return r || '';
32045 };
32046
32047 StringDecoder.prototype.end = utf8End;
32048
32049 // Returns only complete characters in a Buffer
32050 StringDecoder.prototype.text = utf8Text;
32051
32052 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
32053 StringDecoder.prototype.fillLast = function (buf) {
32054 if (this.lastNeed <= buf.length) {
32055 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
32056 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32057 }
32058 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
32059 this.lastNeed -= buf.length;
32060 };
32061
32062 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
32063 // continuation byte.
32064 function utf8CheckByte(byte) {
32065 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;
32066 return -1;
32067 }
32068
32069 // Checks at most 3 bytes at the end of a Buffer in order to detect an
32070 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
32071 // needed to complete the UTF-8 character (if applicable) are returned.
32072 function utf8CheckIncomplete(self, buf, i) {
32073 var j = buf.length - 1;
32074 if (j < i) return 0;
32075 var nb = utf8CheckByte(buf[j]);
32076 if (nb >= 0) {
32077 if (nb > 0) self.lastNeed = nb - 1;
32078 return nb;
32079 }
32080 if (--j < i) return 0;
32081 nb = utf8CheckByte(buf[j]);
32082 if (nb >= 0) {
32083 if (nb > 0) self.lastNeed = nb - 2;
32084 return nb;
32085 }
32086 if (--j < i) return 0;
32087 nb = utf8CheckByte(buf[j]);
32088 if (nb >= 0) {
32089 if (nb > 0) {
32090 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
32091 }
32092 return nb;
32093 }
32094 return 0;
32095 }
32096
32097 // Validates as many continuation bytes for a multi-byte UTF-8 character as
32098 // needed or are available. If we see a non-continuation byte where we expect
32099 // one, we "replace" the validated continuation bytes we've seen so far with
32100 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
32101 // behavior. The continuation byte check is included three times in the case
32102 // where all of the continuation bytes for a character exist in the same buffer.
32103 // It is also done this way as a slight performance increase instead of using a
32104 // loop.
32105 function utf8CheckExtraBytes(self, buf, p) {
32106 if ((buf[0] & 0xC0) !== 0x80) {
32107 self.lastNeed = 0;
32108 return '\ufffd'.repeat(p);
32109 }
32110 if (self.lastNeed > 1 && buf.length > 1) {
32111 if ((buf[1] & 0xC0) !== 0x80) {
32112 self.lastNeed = 1;
32113 return '\ufffd'.repeat(p + 1);
32114 }
32115 if (self.lastNeed > 2 && buf.length > 2) {
32116 if ((buf[2] & 0xC0) !== 0x80) {
32117 self.lastNeed = 2;
32118 return '\ufffd'.repeat(p + 2);
32119 }
32120 }
32121 }
32122 }
32123
32124 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
32125 function utf8FillLast(buf) {
32126 var p = this.lastTotal - this.lastNeed;
32127 var r = utf8CheckExtraBytes(this, buf, p);
32128 if (r !== undefined) return r;
32129 if (this.lastNeed <= buf.length) {
32130 buf.copy(this.lastChar, p, 0, this.lastNeed);
32131 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
32132 }
32133 buf.copy(this.lastChar, p, 0, buf.length);
32134 this.lastNeed -= buf.length;
32135 }
32136
32137 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
32138 // partial character, the character's bytes are buffered until the required
32139 // number of bytes are available.
32140 function utf8Text(buf, i) {
32141 var total = utf8CheckIncomplete(this, buf, i);
32142 if (!this.lastNeed) return buf.toString('utf8', i);
32143 this.lastTotal = total;
32144 var end = buf.length - (total - this.lastNeed);
32145 buf.copy(this.lastChar, 0, end);
32146 return buf.toString('utf8', i, end);
32147 }
32148
32149 // For UTF-8, a replacement character for each buffered byte of a (partial)
32150 // character needs to be added to the output.
32151 function utf8End(buf) {
32152 var r = buf && buf.length ? this.write(buf) : '';
32153 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
32154 return r;
32155 }
32156
32157 // UTF-16LE typically needs two bytes per character, but even if we have an even
32158 // number of bytes available, we need to check if we end on a leading/high
32159 // surrogate. In that case, we need to wait for the next two bytes in order to
32160 // decode the last character properly.
32161 function utf16Text(buf, i) {
32162 if ((buf.length - i) % 2 === 0) {
32163 var r = buf.toString('utf16le', i);
32164 if (r) {
32165 var c = r.charCodeAt(r.length - 1);
32166 if (c >= 0xD800 && c <= 0xDBFF) {
32167 this.lastNeed = 2;
32168 this.lastTotal = 4;
32169 this.lastChar[0] = buf[buf.length - 2];
32170 this.lastChar[1] = buf[buf.length - 1];
32171 return r.slice(0, -1);
32172 }
32173 }
32174 return r;
32175 }
32176 this.lastNeed = 1;
32177 this.lastTotal = 2;
32178 this.lastChar[0] = buf[buf.length - 1];
32179 return buf.toString('utf16le', i, buf.length - 1);
32180 }
32181
32182 // For UTF-16LE we do not explicitly append special replacement characters if we
32183 // end on a partial character, we simply let v8 handle that.
32184 function utf16End(buf) {
32185 var r = buf && buf.length ? this.write(buf) : '';
32186 if (this.lastNeed) {
32187 var end = this.lastTotal - this.lastNeed;
32188 return r + this.lastChar.toString('utf16le', 0, end);
32189 }
32190 return r;
32191 }
32192
32193 function base64Text(buf, i) {
32194 var n = (buf.length - i) % 3;
32195 if (n === 0) return buf.toString('base64', i);
32196 this.lastNeed = 3 - n;
32197 this.lastTotal = 3;
32198 if (n === 1) {
32199 this.lastChar[0] = buf[buf.length - 1];
32200 } else {
32201 this.lastChar[0] = buf[buf.length - 2];
32202 this.lastChar[1] = buf[buf.length - 1];
32203 }
32204 return buf.toString('base64', i, buf.length - n);
32205 }
32206
32207 function base64End(buf) {
32208 var r = buf && buf.length ? this.write(buf) : '';
32209 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
32210 return r;
32211 }
32212
32213 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
32214 function simpleWrite(buf) {
32215 return buf.toString(this.encoding);
32216 }
32217
32218 function simpleEnd(buf) {
32219 return buf && buf.length ? this.write(buf) : '';
32220 }
32221 },{"safe-buffer":27}],23:[function(require,module,exports){
32222 module.exports = require('./readable').PassThrough
32223
32224 },{"./readable":24}],24:[function(require,module,exports){
32225 exports = module.exports = require('./lib/_stream_readable.js');
32226 exports.Stream = exports;
32227 exports.Readable = exports;
32228 exports.Writable = require('./lib/_stream_writable.js');
32229 exports.Duplex = require('./lib/_stream_duplex.js');
32230 exports.Transform = require('./lib/_stream_transform.js');
32231 exports.PassThrough = require('./lib/_stream_passthrough.js');
32232
32233 },{"./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){
32234 module.exports = require('./readable').Transform
32235
32236 },{"./readable":24}],26:[function(require,module,exports){
32237 module.exports = require('./lib/_stream_writable.js');
32238
32239 },{"./lib/_stream_writable.js":19}],27:[function(require,module,exports){
32240 module.exports = require('buffer')
32241
32242 },{"buffer":5}],28:[function(require,module,exports){
32243 // Copyright Joyent, Inc. and other Node contributors.
32244 //
32245 // Permission is hereby granted, free of charge, to any person obtaining a
32246 // copy of this software and associated documentation files (the
32247 // "Software"), to deal in the Software without restriction, including
32248 // without limitation the rights to use, copy, modify, merge, publish,
32249 // distribute, sublicense, and/or sell copies of the Software, and to permit
32250 // persons to whom the Software is furnished to do so, subject to the
32251 // following conditions:
32252 //
32253 // The above copyright notice and this permission notice shall be included
32254 // in all copies or substantial portions of the Software.
32255 //
32256 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32257 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32258 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32259 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32260 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32261 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32262 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32263
32264 module.exports = Stream;
32265
32266 var EE = require('events').EventEmitter;
32267 var inherits = require('inherits');
32268
32269 inherits(Stream, EE);
32270 Stream.Readable = require('readable-stream/readable.js');
32271 Stream.Writable = require('readable-stream/writable.js');
32272 Stream.Duplex = require('readable-stream/duplex.js');
32273 Stream.Transform = require('readable-stream/transform.js');
32274 Stream.PassThrough = require('readable-stream/passthrough.js');
32275
32276 // Backwards-compat with node 0.4.x
32277 Stream.Stream = Stream;
32278
32279
32280
32281 // old-style streams. Note that the pipe method (the only relevant
32282 // part of this class) is overridden in the Readable class.
32283
32284 function Stream() {
32285 EE.call(this);
32286 }
32287
32288 Stream.prototype.pipe = function(dest, options) {
32289 var source = this;
32290
32291 function ondata(chunk) {
32292 if (dest.writable) {
32293 if (false === dest.write(chunk) && source.pause) {
32294 source.pause();
32295 }
32296 }
32297 }
32298
32299 source.on('data', ondata);
32300
32301 function ondrain() {
32302 if (source.readable && source.resume) {
32303 source.resume();
32304 }
32305 }
32306
32307 dest.on('drain', ondrain);
32308
32309 // If the 'end' option is not supplied, dest.end() will be called when
32310 // source gets the 'end' or 'close' events. Only dest.end() once.
32311 if (!dest._isStdio && (!options || options.end !== false)) {
32312 source.on('end', onend);
32313 source.on('close', onclose);
32314 }
32315
32316 var didOnEnd = false;
32317 function onend() {
32318 if (didOnEnd) return;
32319 didOnEnd = true;
32320
32321 dest.end();
32322 }
32323
32324
32325 function onclose() {
32326 if (didOnEnd) return;
32327 didOnEnd = true;
32328
32329 if (typeof dest.destroy === 'function') dest.destroy();
32330 }
32331
32332 // don't leave dangling pipes when there are errors.
32333 function onerror(er) {
32334 cleanup();
32335 if (EE.listenerCount(this, 'error') === 0) {
32336 throw er; // Unhandled stream error in pipe.
32337 }
32338 }
32339
32340 source.on('error', onerror);
32341 dest.on('error', onerror);
32342
32343 // remove all the event listeners that were added.
32344 function cleanup() {
32345 source.removeListener('data', ondata);
32346 dest.removeListener('drain', ondrain);
32347
32348 source.removeListener('end', onend);
32349 source.removeListener('close', onclose);
32350
32351 source.removeListener('error', onerror);
32352 dest.removeListener('error', onerror);
32353
32354 source.removeListener('end', cleanup);
32355 source.removeListener('close', cleanup);
32356
32357 dest.removeListener('close', cleanup);
32358 }
32359
32360 source.on('end', cleanup);
32361 source.on('close', cleanup);
32362
32363 dest.on('close', cleanup);
32364
32365 dest.emit('pipe', source);
32366
32367 // Allow for unix-like usage: A.pipe(B).pipe(C)
32368 return dest;
32369 };
32370
32371 },{"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){
32372 // Copyright Joyent, Inc. and other Node contributors.
32373 //
32374 // Permission is hereby granted, free of charge, to any person obtaining a
32375 // copy of this software and associated documentation files (the
32376 // "Software"), to deal in the Software without restriction, including
32377 // without limitation the rights to use, copy, modify, merge, publish,
32378 // distribute, sublicense, and/or sell copies of the Software, and to permit
32379 // persons to whom the Software is furnished to do so, subject to the
32380 // following conditions:
32381 //
32382 // The above copyright notice and this permission notice shall be included
32383 // in all copies or substantial portions of the Software.
32384 //
32385 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32386 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32387 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32388 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32389 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32390 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32391 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32392
32393 var Buffer = require('buffer').Buffer;
32394
32395 var isBufferEncoding = Buffer.isEncoding
32396 || function(encoding) {
32397 switch (encoding && encoding.toLowerCase()) {
32398 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;
32399 default: return false;
32400 }
32401 }
32402
32403
32404 function assertEncoding(encoding) {
32405 if (encoding && !isBufferEncoding(encoding)) {
32406 throw new Error('Unknown encoding: ' + encoding);
32407 }
32408 }
32409
32410 // StringDecoder provides an interface for efficiently splitting a series of
32411 // buffers into a series of JS strings without breaking apart multi-byte
32412 // characters. CESU-8 is handled as part of the UTF-8 encoding.
32413 //
32414 // @TODO Handling all encodings inside a single object makes it very difficult
32415 // to reason about this code, so it should be split up in the future.
32416 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
32417 // points as used by CESU-8.
32418 var StringDecoder = exports.StringDecoder = function(encoding) {
32419 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
32420 assertEncoding(encoding);
32421 switch (this.encoding) {
32422 case 'utf8':
32423 // CESU-8 represents each of Surrogate Pair by 3-bytes
32424 this.surrogateSize = 3;
32425 break;
32426 case 'ucs2':
32427 case 'utf16le':
32428 // UTF-16 represents each of Surrogate Pair by 2-bytes
32429 this.surrogateSize = 2;
32430 this.detectIncompleteChar = utf16DetectIncompleteChar;
32431 break;
32432 case 'base64':
32433 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
32434 this.surrogateSize = 3;
32435 this.detectIncompleteChar = base64DetectIncompleteChar;
32436 break;
32437 default:
32438 this.write = passThroughWrite;
32439 return;
32440 }
32441
32442 // Enough space to store all bytes of a single character. UTF-8 needs 4
32443 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
32444 this.charBuffer = new Buffer(6);
32445 // Number of bytes received for the current incomplete multi-byte character.
32446 this.charReceived = 0;
32447 // Number of bytes expected for the current incomplete multi-byte character.
32448 this.charLength = 0;
32449 };
32450
32451
32452 // write decodes the given buffer and returns it as JS string that is
32453 // guaranteed to not contain any partial multi-byte characters. Any partial
32454 // character found at the end of the buffer is buffered up, and will be
32455 // returned when calling write again with the remaining bytes.
32456 //
32457 // Note: Converting a Buffer containing an orphan surrogate to a String
32458 // currently works, but converting a String to a Buffer (via `new Buffer`, or
32459 // Buffer#write) will replace incomplete surrogates with the unicode
32460 // replacement character. See https://codereview.chromium.org/121173009/ .
32461 StringDecoder.prototype.write = function(buffer) {
32462 var charStr = '';
32463 // if our last write ended with an incomplete multibyte character
32464 while (this.charLength) {
32465 // determine how many remaining bytes this buffer has to offer for this char
32466 var available = (buffer.length >= this.charLength - this.charReceived) ?
32467 this.charLength - this.charReceived :
32468 buffer.length;
32469
32470 // add the new bytes to the char buffer
32471 buffer.copy(this.charBuffer, this.charReceived, 0, available);
32472 this.charReceived += available;
32473
32474 if (this.charReceived < this.charLength) {
32475 // still not enough chars in this buffer? wait for more ...
32476 return '';
32477 }
32478
32479 // remove bytes belonging to the current character from the buffer
32480 buffer = buffer.slice(available, buffer.length);
32481
32482 // get the character that was split
32483 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
32484
32485 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32486 var charCode = charStr.charCodeAt(charStr.length - 1);
32487 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32488 this.charLength += this.surrogateSize;
32489 charStr = '';
32490 continue;
32491 }
32492 this.charReceived = this.charLength = 0;
32493
32494 // if there are no more bytes in this buffer, just emit our char
32495 if (buffer.length === 0) {
32496 return charStr;
32497 }
32498 break;
32499 }
32500
32501 // determine and set charLength / charReceived
32502 this.detectIncompleteChar(buffer);
32503
32504 var end = buffer.length;
32505 if (this.charLength) {
32506 // buffer the incomplete character bytes we got
32507 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
32508 end -= this.charReceived;
32509 }
32510
32511 charStr += buffer.toString(this.encoding, 0, end);
32512
32513 var end = charStr.length - 1;
32514 var charCode = charStr.charCodeAt(end);
32515 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
32516 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
32517 var size = this.surrogateSize;
32518 this.charLength += size;
32519 this.charReceived += size;
32520 this.charBuffer.copy(this.charBuffer, size, 0, size);
32521 buffer.copy(this.charBuffer, 0, 0, size);
32522 return charStr.substring(0, end);
32523 }
32524
32525 // or just emit the charStr
32526 return charStr;
32527 };
32528
32529 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
32530 // the end of the given buffer. If so, it sets this.charLength to the byte
32531 // length that character, and sets this.charReceived to the number of bytes
32532 // that are available for this character.
32533 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
32534 // determine how many bytes we have to check at the end of this buffer
32535 var i = (buffer.length >= 3) ? 3 : buffer.length;
32536
32537 // Figure out if one of the last i bytes of our buffer announces an
32538 // incomplete char.
32539 for (; i > 0; i--) {
32540 var c = buffer[buffer.length - i];
32541
32542 // See http://en.wikipedia.org/wiki/UTF-8#Description
32543
32544 // 110XXXXX
32545 if (i == 1 && c >> 5 == 0x06) {
32546 this.charLength = 2;
32547 break;
32548 }
32549
32550 // 1110XXXX
32551 if (i <= 2 && c >> 4 == 0x0E) {
32552 this.charLength = 3;
32553 break;
32554 }
32555
32556 // 11110XXX
32557 if (i <= 3 && c >> 3 == 0x1E) {
32558 this.charLength = 4;
32559 break;
32560 }
32561 }
32562 this.charReceived = i;
32563 };
32564
32565 StringDecoder.prototype.end = function(buffer) {
32566 var res = '';
32567 if (buffer && buffer.length)
32568 res = this.write(buffer);
32569
32570 if (this.charReceived) {
32571 var cr = this.charReceived;
32572 var buf = this.charBuffer;
32573 var enc = this.encoding;
32574 res += buf.slice(0, cr).toString(enc);
32575 }
32576
32577 return res;
32578 };
32579
32580 function passThroughWrite(buffer) {
32581 return buffer.toString(this.encoding);
32582 }
32583
32584 function utf16DetectIncompleteChar(buffer) {
32585 this.charReceived = buffer.length % 2;
32586 this.charLength = this.charReceived ? 2 : 0;
32587 }
32588
32589 function base64DetectIncompleteChar(buffer) {
32590 this.charReceived = buffer.length % 3;
32591 this.charLength = this.charReceived ? 3 : 0;
32592 }
32593
32594 },{"buffer":5}],30:[function(require,module,exports){
32595 (function (global){
32596
32597 /**
32598 * Module exports.
32599 */
32600
32601 module.exports = deprecate;
32602
32603 /**
32604 * Mark that a method should not be used.
32605 * Returns a modified function which warns once by default.
32606 *
32607 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
32608 *
32609 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
32610 * will throw an Error when invoked.
32611 *
32612 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
32613 * will invoke `console.trace()` instead of `console.error()`.
32614 *
32615 * @param {Function} fn - the function to deprecate
32616 * @param {String} msg - the string to print to the console when `fn` is invoked
32617 * @returns {Function} a new "deprecated" version of `fn`
32618 * @api public
32619 */
32620
32621 function deprecate (fn, msg) {
32622 if (config('noDeprecation')) {
32623 return fn;
32624 }
32625
32626 var warned = false;
32627 function deprecated() {
32628 if (!warned) {
32629 if (config('throwDeprecation')) {
32630 throw new Error(msg);
32631 } else if (config('traceDeprecation')) {
32632 console.trace(msg);
32633 } else {
32634 console.warn(msg);
32635 }
32636 warned = true;
32637 }
32638 return fn.apply(this, arguments);
32639 }
32640
32641 return deprecated;
32642 }
32643
32644 /**
32645 * Checks `localStorage` for boolean values for the given `name`.
32646 *
32647 * @param {String} name
32648 * @returns {Boolean}
32649 * @api private
32650 */
32651
32652 function config (name) {
32653 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
32654 try {
32655 if (!global.localStorage) return false;
32656 } catch (_) {
32657 return false;
32658 }
32659 var val = global.localStorage[name];
32660 if (null == val) return false;
32661 return String(val).toLowerCase() === 'true';
32662 }
32663
32664 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
32665 },{}],31:[function(require,module,exports){
32666 arguments[4][9][0].apply(exports,arguments)
32667 },{"dup":9}],32:[function(require,module,exports){
32668 module.exports = function isBuffer(arg) {
32669 return arg && typeof arg === 'object'
32670 && typeof arg.copy === 'function'
32671 && typeof arg.fill === 'function'
32672 && typeof arg.readUInt8 === 'function';
32673 }
32674 },{}],33:[function(require,module,exports){
32675 (function (process,global){
32676 // Copyright Joyent, Inc. and other Node contributors.
32677 //
32678 // Permission is hereby granted, free of charge, to any person obtaining a
32679 // copy of this software and associated documentation files (the
32680 // "Software"), to deal in the Software without restriction, including
32681 // without limitation the rights to use, copy, modify, merge, publish,
32682 // distribute, sublicense, and/or sell copies of the Software, and to permit
32683 // persons to whom the Software is furnished to do so, subject to the
32684 // following conditions:
32685 //
32686 // The above copyright notice and this permission notice shall be included
32687 // in all copies or substantial portions of the Software.
32688 //
32689 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32690 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
32691 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
32692 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
32693 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
32694 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
32695 // USE OR OTHER DEALINGS IN THE SOFTWARE.
32696
32697 var formatRegExp = /%[sdj%]/g;
32698 exports.format = function(f) {
32699 if (!isString(f)) {
32700 var objects = [];
32701 for (var i = 0; i < arguments.length; i++) {
32702 objects.push(inspect(arguments[i]));
32703 }
32704 return objects.join(' ');
32705 }
32706
32707 var i = 1;
32708 var args = arguments;
32709 var len = args.length;
32710 var str = String(f).replace(formatRegExp, function(x) {
32711 if (x === '%%') return '%';
32712 if (i >= len) return x;
32713 switch (x) {
32714 case '%s': return String(args[i++]);
32715 case '%d': return Number(args[i++]);
32716 case '%j':
32717 try {
32718 return JSON.stringify(args[i++]);
32719 } catch (_) {
32720 return '[Circular]';
32721 }
32722 default:
32723 return x;
32724 }
32725 });
32726 for (var x = args[i]; i < len; x = args[++i]) {
32727 if (isNull(x) || !isObject(x)) {
32728 str += ' ' + x;
32729 } else {
32730 str += ' ' + inspect(x);
32731 }
32732 }
32733 return str;
32734 };
32735
32736
32737 // Mark that a method should not be used.
32738 // Returns a modified function which warns once by default.
32739 // If --no-deprecation is set, then it is a no-op.
32740 exports.deprecate = function(fn, msg) {
32741 // Allow for deprecating things in the process of starting up.
32742 if (isUndefined(global.process)) {
32743 return function() {
32744 return exports.deprecate(fn, msg).apply(this, arguments);
32745 };
32746 }
32747
32748 if (process.noDeprecation === true) {
32749 return fn;
32750 }
32751
32752 var warned = false;
32753 function deprecated() {
32754 if (!warned) {
32755 if (process.throwDeprecation) {
32756 throw new Error(msg);
32757 } else if (process.traceDeprecation) {
32758 console.trace(msg);
32759 } else {
32760 console.error(msg);
32761 }
32762 warned = true;
32763 }
32764 return fn.apply(this, arguments);
32765 }
32766
32767 return deprecated;
32768 };
32769
32770
32771 var debugs = {};
32772 var debugEnviron;
32773 exports.debuglog = function(set) {
32774 if (isUndefined(debugEnviron))
32775 debugEnviron = process.env.NODE_DEBUG || '';
32776 set = set.toUpperCase();
32777 if (!debugs[set]) {
32778 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
32779 var pid = process.pid;
32780 debugs[set] = function() {
32781 var msg = exports.format.apply(exports, arguments);
32782 console.error('%s %d: %s', set, pid, msg);
32783 };
32784 } else {
32785 debugs[set] = function() {};
32786 }
32787 }
32788 return debugs[set];
32789 };
32790
32791
32792 /**
32793 * Echos the value of a value. Trys to print the value out
32794 * in the best way possible given the different types.
32795 *
32796 * @param {Object} obj The object to print out.
32797 * @param {Object} opts Optional options object that alters the output.
32798 */
32799 /* legacy: obj, showHidden, depth, colors*/
32800 function inspect(obj, opts) {
32801 // default options
32802 var ctx = {
32803 seen: [],
32804 stylize: stylizeNoColor
32805 };
32806 // legacy...
32807 if (arguments.length >= 3) ctx.depth = arguments[2];
32808 if (arguments.length >= 4) ctx.colors = arguments[3];
32809 if (isBoolean(opts)) {
32810 // legacy...
32811 ctx.showHidden = opts;
32812 } else if (opts) {
32813 // got an "options" object
32814 exports._extend(ctx, opts);
32815 }
32816 // set default options
32817 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
32818 if (isUndefined(ctx.depth)) ctx.depth = 2;
32819 if (isUndefined(ctx.colors)) ctx.colors = false;
32820 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
32821 if (ctx.colors) ctx.stylize = stylizeWithColor;
32822 return formatValue(ctx, obj, ctx.depth);
32823 }
32824 exports.inspect = inspect;
32825
32826
32827 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
32828 inspect.colors = {
32829 'bold' : [1, 22],
32830 'italic' : [3, 23],
32831 'underline' : [4, 24],
32832 'inverse' : [7, 27],
32833 'white' : [37, 39],
32834 'grey' : [90, 39],
32835 'black' : [30, 39],
32836 'blue' : [34, 39],
32837 'cyan' : [36, 39],
32838 'green' : [32, 39],
32839 'magenta' : [35, 39],
32840 'red' : [31, 39],
32841 'yellow' : [33, 39]
32842 };
32843
32844 // Don't use 'blue' not visible on cmd.exe
32845 inspect.styles = {
32846 'special': 'cyan',
32847 'number': 'yellow',
32848 'boolean': 'yellow',
32849 'undefined': 'grey',
32850 'null': 'bold',
32851 'string': 'green',
32852 'date': 'magenta',
32853 // "name": intentionally not styling
32854 'regexp': 'red'
32855 };
32856
32857
32858 function stylizeWithColor(str, styleType) {
32859 var style = inspect.styles[styleType];
32860
32861 if (style) {
32862 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
32863 '\u001b[' + inspect.colors[style][1] + 'm';
32864 } else {
32865 return str;
32866 }
32867 }
32868
32869
32870 function stylizeNoColor(str, styleType) {
32871 return str;
32872 }
32873
32874
32875 function arrayToHash(array) {
32876 var hash = {};
32877
32878 array.forEach(function(val, idx) {
32879 hash[val] = true;
32880 });
32881
32882 return hash;
32883 }
32884
32885
32886 function formatValue(ctx, value, recurseTimes) {
32887 // Provide a hook for user-specified inspect functions.
32888 // Check that value is an object with an inspect function on it
32889 if (ctx.customInspect &&
32890 value &&
32891 isFunction(value.inspect) &&
32892 // Filter out the util module, it's inspect function is special
32893 value.inspect !== exports.inspect &&
32894 // Also filter out any prototype objects using the circular check.
32895 !(value.constructor && value.constructor.prototype === value)) {
32896 var ret = value.inspect(recurseTimes, ctx);
32897 if (!isString(ret)) {
32898 ret = formatValue(ctx, ret, recurseTimes);
32899 }
32900 return ret;
32901 }
32902
32903 // Primitive types cannot have properties
32904 var primitive = formatPrimitive(ctx, value);
32905 if (primitive) {
32906 return primitive;
32907 }
32908
32909 // Look up the keys of the object.
32910 var keys = Object.keys(value);
32911 var visibleKeys = arrayToHash(keys);
32912
32913 if (ctx.showHidden) {
32914 keys = Object.getOwnPropertyNames(value);
32915 }
32916
32917 // IE doesn't make error fields non-enumerable
32918 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
32919 if (isError(value)
32920 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
32921 return formatError(value);
32922 }
32923
32924 // Some type of object without properties can be shortcutted.
32925 if (keys.length === 0) {
32926 if (isFunction(value)) {
32927 var name = value.name ? ': ' + value.name : '';
32928 return ctx.stylize('[Function' + name + ']', 'special');
32929 }
32930 if (isRegExp(value)) {
32931 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32932 }
32933 if (isDate(value)) {
32934 return ctx.stylize(Date.prototype.toString.call(value), 'date');
32935 }
32936 if (isError(value)) {
32937 return formatError(value);
32938 }
32939 }
32940
32941 var base = '', array = false, braces = ['{', '}'];
32942
32943 // Make Array say that they are Array
32944 if (isArray(value)) {
32945 array = true;
32946 braces = ['[', ']'];
32947 }
32948
32949 // Make functions say that they are functions
32950 if (isFunction(value)) {
32951 var n = value.name ? ': ' + value.name : '';
32952 base = ' [Function' + n + ']';
32953 }
32954
32955 // Make RegExps say that they are RegExps
32956 if (isRegExp(value)) {
32957 base = ' ' + RegExp.prototype.toString.call(value);
32958 }
32959
32960 // Make dates with properties first say the date
32961 if (isDate(value)) {
32962 base = ' ' + Date.prototype.toUTCString.call(value);
32963 }
32964
32965 // Make error with message first say the error
32966 if (isError(value)) {
32967 base = ' ' + formatError(value);
32968 }
32969
32970 if (keys.length === 0 && (!array || value.length == 0)) {
32971 return braces[0] + base + braces[1];
32972 }
32973
32974 if (recurseTimes < 0) {
32975 if (isRegExp(value)) {
32976 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
32977 } else {
32978 return ctx.stylize('[Object]', 'special');
32979 }
32980 }
32981
32982 ctx.seen.push(value);
32983
32984 var output;
32985 if (array) {
32986 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
32987 } else {
32988 output = keys.map(function(key) {
32989 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
32990 });
32991 }
32992
32993 ctx.seen.pop();
32994
32995 return reduceToSingleString(output, base, braces);
32996 }
32997
32998
32999 function formatPrimitive(ctx, value) {
33000 if (isUndefined(value))
33001 return ctx.stylize('undefined', 'undefined');
33002 if (isString(value)) {
33003 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
33004 .replace(/'/g, "\\'")
33005 .replace(/\\"/g, '"') + '\'';
33006 return ctx.stylize(simple, 'string');
33007 }
33008 if (isNumber(value))
33009 return ctx.stylize('' + value, 'number');
33010 if (isBoolean(value))
33011 return ctx.stylize('' + value, 'boolean');
33012 // For some reason typeof null is "object", so special case here.
33013 if (isNull(value))
33014 return ctx.stylize('null', 'null');
33015 }
33016
33017
33018 function formatError(value) {
33019 return '[' + Error.prototype.toString.call(value) + ']';
33020 }
33021
33022
33023 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
33024 var output = [];
33025 for (var i = 0, l = value.length; i < l; ++i) {
33026 if (hasOwnProperty(value, String(i))) {
33027 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
33028 String(i), true));
33029 } else {
33030 output.push('');
33031 }
33032 }
33033 keys.forEach(function(key) {
33034 if (!key.match(/^\d+$/)) {
33035 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
33036 key, true));
33037 }
33038 });
33039 return output;
33040 }
33041
33042
33043 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
33044 var name, str, desc;
33045 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
33046 if (desc.get) {
33047 if (desc.set) {
33048 str = ctx.stylize('[Getter/Setter]', 'special');
33049 } else {
33050 str = ctx.stylize('[Getter]', 'special');
33051 }
33052 } else {
33053 if (desc.set) {
33054 str = ctx.stylize('[Setter]', 'special');
33055 }
33056 }
33057 if (!hasOwnProperty(visibleKeys, key)) {
33058 name = '[' + key + ']';
33059 }
33060 if (!str) {
33061 if (ctx.seen.indexOf(desc.value) < 0) {
33062 if (isNull(recurseTimes)) {
33063 str = formatValue(ctx, desc.value, null);
33064 } else {
33065 str = formatValue(ctx, desc.value, recurseTimes - 1);
33066 }
33067 if (str.indexOf('\n') > -1) {
33068 if (array) {
33069 str = str.split('\n').map(function(line) {
33070 return ' ' + line;
33071 }).join('\n').substr(2);
33072 } else {
33073 str = '\n' + str.split('\n').map(function(line) {
33074 return ' ' + line;
33075 }).join('\n');
33076 }
33077 }
33078 } else {
33079 str = ctx.stylize('[Circular]', 'special');
33080 }
33081 }
33082 if (isUndefined(name)) {
33083 if (array && key.match(/^\d+$/)) {
33084 return str;
33085 }
33086 name = JSON.stringify('' + key);
33087 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
33088 name = name.substr(1, name.length - 2);
33089 name = ctx.stylize(name, 'name');
33090 } else {
33091 name = name.replace(/'/g, "\\'")
33092 .replace(/\\"/g, '"')
33093 .replace(/(^"|"$)/g, "'");
33094 name = ctx.stylize(name, 'string');
33095 }
33096 }
33097
33098 return name + ': ' + str;
33099 }
33100
33101
33102 function reduceToSingleString(output, base, braces) {
33103 var numLinesEst = 0;
33104 var length = output.reduce(function(prev, cur) {
33105 numLinesEst++;
33106 if (cur.indexOf('\n') >= 0) numLinesEst++;
33107 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
33108 }, 0);
33109
33110 if (length > 60) {
33111 return braces[0] +
33112 (base === '' ? '' : base + '\n ') +
33113 ' ' +
33114 output.join(',\n ') +
33115 ' ' +
33116 braces[1];
33117 }
33118
33119 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
33120 }
33121
33122
33123 // NOTE: These type checking functions intentionally don't use `instanceof`
33124 // because it is fragile and can be easily faked with `Object.create()`.
33125 function isArray(ar) {
33126 return Array.isArray(ar);
33127 }
33128 exports.isArray = isArray;
33129
33130 function isBoolean(arg) {
33131 return typeof arg === 'boolean';
33132 }
33133 exports.isBoolean = isBoolean;
33134
33135 function isNull(arg) {
33136 return arg === null;
33137 }
33138 exports.isNull = isNull;
33139
33140 function isNullOrUndefined(arg) {
33141 return arg == null;
33142 }
33143 exports.isNullOrUndefined = isNullOrUndefined;
33144
33145 function isNumber(arg) {
33146 return typeof arg === 'number';
33147 }
33148 exports.isNumber = isNumber;
33149
33150 function isString(arg) {
33151 return typeof arg === 'string';
33152 }
33153 exports.isString = isString;
33154
33155 function isSymbol(arg) {
33156 return typeof arg === 'symbol';
33157 }
33158 exports.isSymbol = isSymbol;
33159
33160 function isUndefined(arg) {
33161 return arg === void 0;
33162 }
33163 exports.isUndefined = isUndefined;
33164
33165 function isRegExp(re) {
33166 return isObject(re) && objectToString(re) === '[object RegExp]';
33167 }
33168 exports.isRegExp = isRegExp;
33169
33170 function isObject(arg) {
33171 return typeof arg === 'object' && arg !== null;
33172 }
33173 exports.isObject = isObject;
33174
33175 function isDate(d) {
33176 return isObject(d) && objectToString(d) === '[object Date]';
33177 }
33178 exports.isDate = isDate;
33179
33180 function isError(e) {
33181 return isObject(e) &&
33182 (objectToString(e) === '[object Error]' || e instanceof Error);
33183 }
33184 exports.isError = isError;
33185
33186 function isFunction(arg) {
33187 return typeof arg === 'function';
33188 }
33189 exports.isFunction = isFunction;
33190
33191 function isPrimitive(arg) {
33192 return arg === null ||
33193 typeof arg === 'boolean' ||
33194 typeof arg === 'number' ||
33195 typeof arg === 'string' ||
33196 typeof arg === 'symbol' || // ES6 symbol
33197 typeof arg === 'undefined';
33198 }
33199 exports.isPrimitive = isPrimitive;
33200
33201 exports.isBuffer = require('./support/isBuffer');
33202
33203 function objectToString(o) {
33204 return Object.prototype.toString.call(o);
33205 }
33206
33207
33208 function pad(n) {
33209 return n < 10 ? '0' + n.toString(10) : n.toString(10);
33210 }
33211
33212
33213 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
33214 'Oct', 'Nov', 'Dec'];
33215
33216 // 26 Feb 16:19:34
33217 function timestamp() {
33218 var d = new Date();
33219 var time = [pad(d.getHours()),
33220 pad(d.getMinutes()),
33221 pad(d.getSeconds())].join(':');
33222 return [d.getDate(), months[d.getMonth()], time].join(' ');
33223 }
33224
33225
33226 // log is just a thin wrapper to console.log that prepends a timestamp
33227 exports.log = function() {
33228 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
33229 };
33230
33231
33232 /**
33233 * Inherit the prototype methods from one constructor into another.
33234 *
33235 * The Function.prototype.inherits from lang.js rewritten as a standalone
33236 * function (not on Function.prototype). NOTE: If this file is to be loaded
33237 * during bootstrapping this function needs to be rewritten using some native
33238 * functions as prototype setup using normal JavaScript does not work as
33239 * expected during bootstrapping (see mirror.js in r114903).
33240 *
33241 * @param {function} ctor Constructor function which needs to inherit the
33242 * prototype.
33243 * @param {function} superCtor Constructor function to inherit prototype from.
33244 */
33245 exports.inherits = require('inherits');
33246
33247 exports._extend = function(origin, add) {
33248 // Don't do anything if add isn't an object
33249 if (!add || !isObject(add)) return origin;
33250
33251 var keys = Object.keys(add);
33252 var i = keys.length;
33253 while (i--) {
33254 origin[keys[i]] = add[keys[i]];
33255 }
33256 return origin;
33257 };
33258
33259 function hasOwnProperty(obj, prop) {
33260 return Object.prototype.hasOwnProperty.call(obj, prop);
33261 }
33262
33263 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
33264 },{"./support/isBuffer":32,"_process":13,"inherits":31}],34:[function(require,module,exports){
33265 let bitcoin = require('bitcoinjs-lib');
33266
33267 module.exports = {
33268 bitcoin
33269 }
33270
33271 },{"bitcoinjs-lib":52}],35:[function(require,module,exports){
33272 // base-x encoding
33273 // Forked from https://github.com/cryptocoinjs/bs58
33274 // Originally written by Mike Hearn for BitcoinJ
33275 // Copyright (c) 2011 Google Inc
33276 // Ported to JavaScript by Stefan Thomas
33277 // Merged Buffer refactorings from base58-native by Stephen Pair
33278 // Copyright (c) 2013 BitPay Inc
33279
33280 var Buffer = require('safe-buffer').Buffer
33281
33282 module.exports = function base (ALPHABET) {
33283 var ALPHABET_MAP = {}
33284 var BASE = ALPHABET.length
33285 var LEADER = ALPHABET.charAt(0)
33286
33287 // pre-compute lookup table
33288 for (var z = 0; z < ALPHABET.length; z++) {
33289 var x = ALPHABET.charAt(z)
33290
33291 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33292 ALPHABET_MAP[x] = z
33293 }
33294
33295 function encode (source) {
33296 if (source.length === 0) return ''
33297
33298 var digits = [0]
33299 for (var i = 0; i < source.length; ++i) {
33300 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
33301 carry += digits[j] << 8
33302 digits[j] = carry % BASE
33303 carry = (carry / BASE) | 0
33304 }
33305
33306 while (carry > 0) {
33307 digits.push(carry % BASE)
33308 carry = (carry / BASE) | 0
33309 }
33310 }
33311
33312 var string = ''
33313
33314 // deal with leading zeros
33315 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
33316 // convert digits to a string
33317 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
33318
33319 return string
33320 }
33321
33322 function decodeUnsafe (string) {
33323 if (typeof string !== 'string') throw new TypeError('Expected String')
33324 if (string.length === 0) return Buffer.allocUnsafe(0)
33325
33326 var bytes = [0]
33327 for (var i = 0; i < string.length; i++) {
33328 var value = ALPHABET_MAP[string[i]]
33329 if (value === undefined) return
33330
33331 for (var j = 0, carry = value; j < bytes.length; ++j) {
33332 carry += bytes[j] * BASE
33333 bytes[j] = carry & 0xff
33334 carry >>= 8
33335 }
33336
33337 while (carry > 0) {
33338 bytes.push(carry & 0xff)
33339 carry >>= 8
33340 }
33341 }
33342
33343 // deal with leading zeros
33344 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
33345 bytes.push(0)
33346 }
33347
33348 return Buffer.from(bytes.reverse())
33349 }
33350
33351 function decode (string) {
33352 var buffer = decodeUnsafe(string)
33353 if (buffer) return buffer
33354
33355 throw new Error('Non-base' + BASE + ' character')
33356 }
33357
33358 return {
33359 encode: encode,
33360 decodeUnsafe: decodeUnsafe,
33361 decode: decode
33362 }
33363 }
33364
33365 },{"safe-buffer":101}],36:[function(require,module,exports){
33366 'use strict'
33367 var ALPHABET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'
33368
33369 // pre-compute lookup table
33370 var ALPHABET_MAP = {}
33371 for (var z = 0; z < ALPHABET.length; z++) {
33372 var x = ALPHABET.charAt(z)
33373
33374 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
33375 ALPHABET_MAP[x] = z
33376 }
33377
33378 function polymodStep (pre) {
33379 var b = pre >> 25
33380 return ((pre & 0x1FFFFFF) << 5) ^
33381 (-((b >> 0) & 1) & 0x3b6a57b2) ^
33382 (-((b >> 1) & 1) & 0x26508e6d) ^
33383 (-((b >> 2) & 1) & 0x1ea119fa) ^
33384 (-((b >> 3) & 1) & 0x3d4233dd) ^
33385 (-((b >> 4) & 1) & 0x2a1462b3)
33386 }
33387
33388 function prefixChk (prefix) {
33389 var chk = 1
33390 for (var i = 0; i < prefix.length; ++i) {
33391 var c = prefix.charCodeAt(i)
33392 if (c < 33 || c > 126) throw new Error('Invalid prefix (' + prefix + ')')
33393
33394 chk = polymodStep(chk) ^ (c >> 5)
33395 }
33396 chk = polymodStep(chk)
33397
33398 for (i = 0; i < prefix.length; ++i) {
33399 var v = prefix.charCodeAt(i)
33400 chk = polymodStep(chk) ^ (v & 0x1f)
33401 }
33402 return chk
33403 }
33404
33405 function encode (prefix, words, LIMIT) {
33406 LIMIT = LIMIT || 90
33407 if ((prefix.length + 7 + words.length) > LIMIT) throw new TypeError('Exceeds length limit')
33408
33409 prefix = prefix.toLowerCase()
33410
33411 // determine chk mod
33412 var chk = prefixChk(prefix)
33413 var result = prefix + '1'
33414 for (var i = 0; i < words.length; ++i) {
33415 var x = words[i]
33416 if ((x >> 5) !== 0) throw new Error('Non 5-bit word')
33417
33418 chk = polymodStep(chk) ^ x
33419 result += ALPHABET.charAt(x)
33420 }
33421
33422 for (i = 0; i < 6; ++i) {
33423 chk = polymodStep(chk)
33424 }
33425 chk ^= 1
33426
33427 for (i = 0; i < 6; ++i) {
33428 var v = (chk >> ((5 - i) * 5)) & 0x1f
33429 result += ALPHABET.charAt(v)
33430 }
33431
33432 return result
33433 }
33434
33435 function decode (str, LIMIT) {
33436 LIMIT = LIMIT || 90
33437 if (str.length < 8) throw new TypeError(str + ' too short')
33438 if (str.length > LIMIT) throw new TypeError('Exceeds length limit')
33439
33440 // don't allow mixed case
33441 var lowered = str.toLowerCase()
33442 var uppered = str.toUpperCase()
33443 if (str !== lowered && str !== uppered) throw new Error('Mixed-case string ' + str)
33444 str = lowered
33445
33446 var split = str.lastIndexOf('1')
33447 if (split === -1) throw new Error('No separator character for ' + str)
33448 if (split === 0) throw new Error('Missing prefix for ' + str)
33449
33450 var prefix = str.slice(0, split)
33451 var wordChars = str.slice(split + 1)
33452 if (wordChars.length < 6) throw new Error('Data too short')
33453
33454 var chk = prefixChk(prefix)
33455 var words = []
33456 for (var i = 0; i < wordChars.length; ++i) {
33457 var c = wordChars.charAt(i)
33458 var v = ALPHABET_MAP[c]
33459 if (v === undefined) throw new Error('Unknown character ' + c)
33460 chk = polymodStep(chk) ^ v
33461
33462 // not in the checksum?
33463 if (i + 6 >= wordChars.length) continue
33464 words.push(v)
33465 }
33466
33467 if (chk !== 1) throw new Error('Invalid checksum for ' + str)
33468 return { prefix: prefix, words: words }
33469 }
33470
33471 function convert (data, inBits, outBits, pad) {
33472 var value = 0
33473 var bits = 0
33474 var maxV = (1 << outBits) - 1
33475
33476 var result = []
33477 for (var i = 0; i < data.length; ++i) {
33478 value = (value << inBits) | data[i]
33479 bits += inBits
33480
33481 while (bits >= outBits) {
33482 bits -= outBits
33483 result.push((value >> bits) & maxV)
33484 }
33485 }
33486
33487 if (pad) {
33488 if (bits > 0) {
33489 result.push((value << (outBits - bits)) & maxV)
33490 }
33491 } else {
33492 if (bits >= inBits) throw new Error('Excess padding')
33493 if ((value << (outBits - bits)) & maxV) throw new Error('Non-zero padding')
33494 }
33495
33496 return result
33497 }
33498
33499 function toWords (bytes) {
33500 return convert(bytes, 8, 5, true)
33501 }
33502
33503 function fromWords (words) {
33504 return convert(words, 5, 8, false)
33505 }
33506
33507 module.exports = {
33508 decode: decode,
33509 encode: encode,
33510 toWords: toWords,
33511 fromWords: fromWords
33512 }
33513
33514 },{}],37:[function(require,module,exports){
33515 // (public) Constructor
33516 function BigInteger(a, b, c) {
33517 if (!(this instanceof BigInteger))
33518 return new BigInteger(a, b, c)
33519
33520 if (a != null) {
33521 if ("number" == typeof a) this.fromNumber(a, b, c)
33522 else if (b == null && "string" != typeof a) this.fromString(a, 256)
33523 else this.fromString(a, b)
33524 }
33525 }
33526
33527 var proto = BigInteger.prototype
33528
33529 // duck-typed isBigInteger
33530 proto.__bigi = require('../package.json').version
33531 BigInteger.isBigInteger = function (obj, check_ver) {
33532 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
33533 }
33534
33535 // Bits per digit
33536 var dbits
33537
33538 // am: Compute w_j += (x*this_i), propagate carries,
33539 // c is initial carry, returns final carry.
33540 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
33541 // We need to select the fastest one that works in this environment.
33542
33543 // am1: use a single mult and divide to get the high bits,
33544 // max digit bits should be 26 because
33545 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
33546 function am1(i, x, w, j, c, n) {
33547 while (--n >= 0) {
33548 var v = x * this[i++] + w[j] + c
33549 c = Math.floor(v / 0x4000000)
33550 w[j++] = v & 0x3ffffff
33551 }
33552 return c
33553 }
33554 // am2 avoids a big mult-and-extract completely.
33555 // Max digit bits should be <= 30 because we do bitwise ops
33556 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
33557 function am2(i, x, w, j, c, n) {
33558 var xl = x & 0x7fff,
33559 xh = x >> 15
33560 while (--n >= 0) {
33561 var l = this[i] & 0x7fff
33562 var h = this[i++] >> 15
33563 var m = xh * l + h * xl
33564 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
33565 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
33566 w[j++] = l & 0x3fffffff
33567 }
33568 return c
33569 }
33570 // Alternately, set max digit bits to 28 since some
33571 // browsers slow down when dealing with 32-bit numbers.
33572 function am3(i, x, w, j, c, n) {
33573 var xl = x & 0x3fff,
33574 xh = x >> 14
33575 while (--n >= 0) {
33576 var l = this[i] & 0x3fff
33577 var h = this[i++] >> 14
33578 var m = xh * l + h * xl
33579 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
33580 c = (l >> 28) + (m >> 14) + xh * h
33581 w[j++] = l & 0xfffffff
33582 }
33583 return c
33584 }
33585
33586 // wtf?
33587 BigInteger.prototype.am = am1
33588 dbits = 26
33589
33590 BigInteger.prototype.DB = dbits
33591 BigInteger.prototype.DM = ((1 << dbits) - 1)
33592 var DV = BigInteger.prototype.DV = (1 << dbits)
33593
33594 var BI_FP = 52
33595 BigInteger.prototype.FV = Math.pow(2, BI_FP)
33596 BigInteger.prototype.F1 = BI_FP - dbits
33597 BigInteger.prototype.F2 = 2 * dbits - BI_FP
33598
33599 // Digit conversions
33600 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
33601 var BI_RC = new Array()
33602 var rr, vv
33603 rr = "0".charCodeAt(0)
33604 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
33605 rr = "a".charCodeAt(0)
33606 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33607 rr = "A".charCodeAt(0)
33608 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
33609
33610 function int2char(n) {
33611 return BI_RM.charAt(n)
33612 }
33613
33614 function intAt(s, i) {
33615 var c = BI_RC[s.charCodeAt(i)]
33616 return (c == null) ? -1 : c
33617 }
33618
33619 // (protected) copy this to r
33620 function bnpCopyTo(r) {
33621 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
33622 r.t = this.t
33623 r.s = this.s
33624 }
33625
33626 // (protected) set from integer value x, -DV <= x < DV
33627 function bnpFromInt(x) {
33628 this.t = 1
33629 this.s = (x < 0) ? -1 : 0
33630 if (x > 0) this[0] = x
33631 else if (x < -1) this[0] = x + DV
33632 else this.t = 0
33633 }
33634
33635 // return bigint initialized to value
33636 function nbv(i) {
33637 var r = new BigInteger()
33638 r.fromInt(i)
33639 return r
33640 }
33641
33642 // (protected) set from string and radix
33643 function bnpFromString(s, b) {
33644 var self = this
33645
33646 var k
33647 if (b == 16) k = 4
33648 else if (b == 8) k = 3
33649 else if (b == 256) k = 8; // byte array
33650 else if (b == 2) k = 1
33651 else if (b == 32) k = 5
33652 else if (b == 4) k = 2
33653 else {
33654 self.fromRadix(s, b)
33655 return
33656 }
33657 self.t = 0
33658 self.s = 0
33659 var i = s.length,
33660 mi = false,
33661 sh = 0
33662 while (--i >= 0) {
33663 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
33664 if (x < 0) {
33665 if (s.charAt(i) == "-") mi = true
33666 continue
33667 }
33668 mi = false
33669 if (sh == 0)
33670 self[self.t++] = x
33671 else if (sh + k > self.DB) {
33672 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
33673 self[self.t++] = (x >> (self.DB - sh))
33674 } else
33675 self[self.t - 1] |= x << sh
33676 sh += k
33677 if (sh >= self.DB) sh -= self.DB
33678 }
33679 if (k == 8 && (s[0] & 0x80) != 0) {
33680 self.s = -1
33681 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
33682 }
33683 self.clamp()
33684 if (mi) BigInteger.ZERO.subTo(self, self)
33685 }
33686
33687 // (protected) clamp off excess high words
33688 function bnpClamp() {
33689 var c = this.s & this.DM
33690 while (this.t > 0 && this[this.t - 1] == c)--this.t
33691 }
33692
33693 // (public) return string representation in given radix
33694 function bnToString(b) {
33695 var self = this
33696 if (self.s < 0) return "-" + self.negate()
33697 .toString(b)
33698 var k
33699 if (b == 16) k = 4
33700 else if (b == 8) k = 3
33701 else if (b == 2) k = 1
33702 else if (b == 32) k = 5
33703 else if (b == 4) k = 2
33704 else return self.toRadix(b)
33705 var km = (1 << k) - 1,
33706 d, m = false,
33707 r = "",
33708 i = self.t
33709 var p = self.DB - (i * self.DB) % k
33710 if (i-- > 0) {
33711 if (p < self.DB && (d = self[i] >> p) > 0) {
33712 m = true
33713 r = int2char(d)
33714 }
33715 while (i >= 0) {
33716 if (p < k) {
33717 d = (self[i] & ((1 << p) - 1)) << (k - p)
33718 d |= self[--i] >> (p += self.DB - k)
33719 } else {
33720 d = (self[i] >> (p -= k)) & km
33721 if (p <= 0) {
33722 p += self.DB
33723 --i
33724 }
33725 }
33726 if (d > 0) m = true
33727 if (m) r += int2char(d)
33728 }
33729 }
33730 return m ? r : "0"
33731 }
33732
33733 // (public) -this
33734 function bnNegate() {
33735 var r = new BigInteger()
33736 BigInteger.ZERO.subTo(this, r)
33737 return r
33738 }
33739
33740 // (public) |this|
33741 function bnAbs() {
33742 return (this.s < 0) ? this.negate() : this
33743 }
33744
33745 // (public) return + if this > a, - if this < a, 0 if equal
33746 function bnCompareTo(a) {
33747 var r = this.s - a.s
33748 if (r != 0) return r
33749 var i = this.t
33750 r = i - a.t
33751 if (r != 0) return (this.s < 0) ? -r : r
33752 while (--i >= 0)
33753 if ((r = this[i] - a[i]) != 0) return r
33754 return 0
33755 }
33756
33757 // returns bit length of the integer x
33758 function nbits(x) {
33759 var r = 1,
33760 t
33761 if ((t = x >>> 16) != 0) {
33762 x = t
33763 r += 16
33764 }
33765 if ((t = x >> 8) != 0) {
33766 x = t
33767 r += 8
33768 }
33769 if ((t = x >> 4) != 0) {
33770 x = t
33771 r += 4
33772 }
33773 if ((t = x >> 2) != 0) {
33774 x = t
33775 r += 2
33776 }
33777 if ((t = x >> 1) != 0) {
33778 x = t
33779 r += 1
33780 }
33781 return r
33782 }
33783
33784 // (public) return the number of bits in "this"
33785 function bnBitLength() {
33786 if (this.t <= 0) return 0
33787 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
33788 }
33789
33790 // (public) return the number of bytes in "this"
33791 function bnByteLength() {
33792 return this.bitLength() >> 3
33793 }
33794
33795 // (protected) r = this << n*DB
33796 function bnpDLShiftTo(n, r) {
33797 var i
33798 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
33799 for (i = n - 1; i >= 0; --i) r[i] = 0
33800 r.t = this.t + n
33801 r.s = this.s
33802 }
33803
33804 // (protected) r = this >> n*DB
33805 function bnpDRShiftTo(n, r) {
33806 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
33807 r.t = Math.max(this.t - n, 0)
33808 r.s = this.s
33809 }
33810
33811 // (protected) r = this << n
33812 function bnpLShiftTo(n, r) {
33813 var self = this
33814 var bs = n % self.DB
33815 var cbs = self.DB - bs
33816 var bm = (1 << cbs) - 1
33817 var ds = Math.floor(n / self.DB),
33818 c = (self.s << bs) & self.DM,
33819 i
33820 for (i = self.t - 1; i >= 0; --i) {
33821 r[i + ds + 1] = (self[i] >> cbs) | c
33822 c = (self[i] & bm) << bs
33823 }
33824 for (i = ds - 1; i >= 0; --i) r[i] = 0
33825 r[ds] = c
33826 r.t = self.t + ds + 1
33827 r.s = self.s
33828 r.clamp()
33829 }
33830
33831 // (protected) r = this >> n
33832 function bnpRShiftTo(n, r) {
33833 var self = this
33834 r.s = self.s
33835 var ds = Math.floor(n / self.DB)
33836 if (ds >= self.t) {
33837 r.t = 0
33838 return
33839 }
33840 var bs = n % self.DB
33841 var cbs = self.DB - bs
33842 var bm = (1 << bs) - 1
33843 r[0] = self[ds] >> bs
33844 for (var i = ds + 1; i < self.t; ++i) {
33845 r[i - ds - 1] |= (self[i] & bm) << cbs
33846 r[i - ds] = self[i] >> bs
33847 }
33848 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
33849 r.t = self.t - ds
33850 r.clamp()
33851 }
33852
33853 // (protected) r = this - a
33854 function bnpSubTo(a, r) {
33855 var self = this
33856 var i = 0,
33857 c = 0,
33858 m = Math.min(a.t, self.t)
33859 while (i < m) {
33860 c += self[i] - a[i]
33861 r[i++] = c & self.DM
33862 c >>= self.DB
33863 }
33864 if (a.t < self.t) {
33865 c -= a.s
33866 while (i < self.t) {
33867 c += self[i]
33868 r[i++] = c & self.DM
33869 c >>= self.DB
33870 }
33871 c += self.s
33872 } else {
33873 c += self.s
33874 while (i < a.t) {
33875 c -= a[i]
33876 r[i++] = c & self.DM
33877 c >>= self.DB
33878 }
33879 c -= a.s
33880 }
33881 r.s = (c < 0) ? -1 : 0
33882 if (c < -1) r[i++] = self.DV + c
33883 else if (c > 0) r[i++] = c
33884 r.t = i
33885 r.clamp()
33886 }
33887
33888 // (protected) r = this * a, r != this,a (HAC 14.12)
33889 // "this" should be the larger one if appropriate.
33890 function bnpMultiplyTo(a, r) {
33891 var x = this.abs(),
33892 y = a.abs()
33893 var i = x.t
33894 r.t = i + y.t
33895 while (--i >= 0) r[i] = 0
33896 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
33897 r.s = 0
33898 r.clamp()
33899 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
33900 }
33901
33902 // (protected) r = this^2, r != this (HAC 14.16)
33903 function bnpSquareTo(r) {
33904 var x = this.abs()
33905 var i = r.t = 2 * x.t
33906 while (--i >= 0) r[i] = 0
33907 for (i = 0; i < x.t - 1; ++i) {
33908 var c = x.am(i, x[i], r, 2 * i, 0, 1)
33909 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
33910 r[i + x.t] -= x.DV
33911 r[i + x.t + 1] = 1
33912 }
33913 }
33914 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
33915 r.s = 0
33916 r.clamp()
33917 }
33918
33919 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
33920 // r != q, this != m. q or r may be null.
33921 function bnpDivRemTo(m, q, r) {
33922 var self = this
33923 var pm = m.abs()
33924 if (pm.t <= 0) return
33925 var pt = self.abs()
33926 if (pt.t < pm.t) {
33927 if (q != null) q.fromInt(0)
33928 if (r != null) self.copyTo(r)
33929 return
33930 }
33931 if (r == null) r = new BigInteger()
33932 var y = new BigInteger(),
33933 ts = self.s,
33934 ms = m.s
33935 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
33936 if (nsh > 0) {
33937 pm.lShiftTo(nsh, y)
33938 pt.lShiftTo(nsh, r)
33939 } else {
33940 pm.copyTo(y)
33941 pt.copyTo(r)
33942 }
33943 var ys = y.t
33944 var y0 = y[ys - 1]
33945 if (y0 == 0) return
33946 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
33947 var d1 = self.FV / yt,
33948 d2 = (1 << self.F1) / yt,
33949 e = 1 << self.F2
33950 var i = r.t,
33951 j = i - ys,
33952 t = (q == null) ? new BigInteger() : q
33953 y.dlShiftTo(j, t)
33954 if (r.compareTo(t) >= 0) {
33955 r[r.t++] = 1
33956 r.subTo(t, r)
33957 }
33958 BigInteger.ONE.dlShiftTo(ys, t)
33959 t.subTo(y, y); // "negative" y so we can replace sub with am later
33960 while (y.t < ys) y[y.t++] = 0
33961 while (--j >= 0) {
33962 // Estimate quotient digit
33963 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
33964 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
33965 y.dlShiftTo(j, t)
33966 r.subTo(t, r)
33967 while (r[i] < --qd) r.subTo(t, r)
33968 }
33969 }
33970 if (q != null) {
33971 r.drShiftTo(ys, q)
33972 if (ts != ms) BigInteger.ZERO.subTo(q, q)
33973 }
33974 r.t = ys
33975 r.clamp()
33976 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
33977 if (ts < 0) BigInteger.ZERO.subTo(r, r)
33978 }
33979
33980 // (public) this mod a
33981 function bnMod(a) {
33982 var r = new BigInteger()
33983 this.abs()
33984 .divRemTo(a, null, r)
33985 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
33986 return r
33987 }
33988
33989 // Modular reduction using "classic" algorithm
33990 function Classic(m) {
33991 this.m = m
33992 }
33993
33994 function cConvert(x) {
33995 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
33996 else return x
33997 }
33998
33999 function cRevert(x) {
34000 return x
34001 }
34002
34003 function cReduce(x) {
34004 x.divRemTo(this.m, null, x)
34005 }
34006
34007 function cMulTo(x, y, r) {
34008 x.multiplyTo(y, r)
34009 this.reduce(r)
34010 }
34011
34012 function cSqrTo(x, r) {
34013 x.squareTo(r)
34014 this.reduce(r)
34015 }
34016
34017 Classic.prototype.convert = cConvert
34018 Classic.prototype.revert = cRevert
34019 Classic.prototype.reduce = cReduce
34020 Classic.prototype.mulTo = cMulTo
34021 Classic.prototype.sqrTo = cSqrTo
34022
34023 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
34024 // justification:
34025 // xy == 1 (mod m)
34026 // xy = 1+km
34027 // xy(2-xy) = (1+km)(1-km)
34028 // x[y(2-xy)] = 1-k^2m^2
34029 // x[y(2-xy)] == 1 (mod m^2)
34030 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
34031 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
34032 // JS multiply "overflows" differently from C/C++, so care is needed here.
34033 function bnpInvDigit() {
34034 if (this.t < 1) return 0
34035 var x = this[0]
34036 if ((x & 1) == 0) return 0
34037 var y = x & 3; // y == 1/x mod 2^2
34038 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
34039 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
34040 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
34041 // last step - calculate inverse mod DV directly
34042 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
34043 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
34044 // we really want the negative inverse, and -DV < y < DV
34045 return (y > 0) ? this.DV - y : -y
34046 }
34047
34048 // Montgomery reduction
34049 function Montgomery(m) {
34050 this.m = m
34051 this.mp = m.invDigit()
34052 this.mpl = this.mp & 0x7fff
34053 this.mph = this.mp >> 15
34054 this.um = (1 << (m.DB - 15)) - 1
34055 this.mt2 = 2 * m.t
34056 }
34057
34058 // xR mod m
34059 function montConvert(x) {
34060 var r = new BigInteger()
34061 x.abs()
34062 .dlShiftTo(this.m.t, r)
34063 r.divRemTo(this.m, null, r)
34064 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
34065 return r
34066 }
34067
34068 // x/R mod m
34069 function montRevert(x) {
34070 var r = new BigInteger()
34071 x.copyTo(r)
34072 this.reduce(r)
34073 return r
34074 }
34075
34076 // x = x/R mod m (HAC 14.32)
34077 function montReduce(x) {
34078 while (x.t <= this.mt2) // pad x so am has enough room later
34079 x[x.t++] = 0
34080 for (var i = 0; i < this.m.t; ++i) {
34081 // faster way of calculating u0 = x[i]*mp mod DV
34082 var j = x[i] & 0x7fff
34083 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
34084 // use am to combine the multiply-shift-add into one call
34085 j = i + this.m.t
34086 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
34087 // propagate carry
34088 while (x[j] >= x.DV) {
34089 x[j] -= x.DV
34090 x[++j]++
34091 }
34092 }
34093 x.clamp()
34094 x.drShiftTo(this.m.t, x)
34095 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
34096 }
34097
34098 // r = "x^2/R mod m"; x != r
34099 function montSqrTo(x, r) {
34100 x.squareTo(r)
34101 this.reduce(r)
34102 }
34103
34104 // r = "xy/R mod m"; x,y != r
34105 function montMulTo(x, y, r) {
34106 x.multiplyTo(y, r)
34107 this.reduce(r)
34108 }
34109
34110 Montgomery.prototype.convert = montConvert
34111 Montgomery.prototype.revert = montRevert
34112 Montgomery.prototype.reduce = montReduce
34113 Montgomery.prototype.mulTo = montMulTo
34114 Montgomery.prototype.sqrTo = montSqrTo
34115
34116 // (protected) true iff this is even
34117 function bnpIsEven() {
34118 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
34119 }
34120
34121 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
34122 function bnpExp(e, z) {
34123 if (e > 0xffffffff || e < 1) return BigInteger.ONE
34124 var r = new BigInteger(),
34125 r2 = new BigInteger(),
34126 g = z.convert(this),
34127 i = nbits(e) - 1
34128 g.copyTo(r)
34129 while (--i >= 0) {
34130 z.sqrTo(r, r2)
34131 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
34132 else {
34133 var t = r
34134 r = r2
34135 r2 = t
34136 }
34137 }
34138 return z.revert(r)
34139 }
34140
34141 // (public) this^e % m, 0 <= e < 2^32
34142 function bnModPowInt(e, m) {
34143 var z
34144 if (e < 256 || m.isEven()) z = new Classic(m)
34145 else z = new Montgomery(m)
34146 return this.exp(e, z)
34147 }
34148
34149 // protected
34150 proto.copyTo = bnpCopyTo
34151 proto.fromInt = bnpFromInt
34152 proto.fromString = bnpFromString
34153 proto.clamp = bnpClamp
34154 proto.dlShiftTo = bnpDLShiftTo
34155 proto.drShiftTo = bnpDRShiftTo
34156 proto.lShiftTo = bnpLShiftTo
34157 proto.rShiftTo = bnpRShiftTo
34158 proto.subTo = bnpSubTo
34159 proto.multiplyTo = bnpMultiplyTo
34160 proto.squareTo = bnpSquareTo
34161 proto.divRemTo = bnpDivRemTo
34162 proto.invDigit = bnpInvDigit
34163 proto.isEven = bnpIsEven
34164 proto.exp = bnpExp
34165
34166 // public
34167 proto.toString = bnToString
34168 proto.negate = bnNegate
34169 proto.abs = bnAbs
34170 proto.compareTo = bnCompareTo
34171 proto.bitLength = bnBitLength
34172 proto.byteLength = bnByteLength
34173 proto.mod = bnMod
34174 proto.modPowInt = bnModPowInt
34175
34176 // (public)
34177 function bnClone() {
34178 var r = new BigInteger()
34179 this.copyTo(r)
34180 return r
34181 }
34182
34183 // (public) return value as integer
34184 function bnIntValue() {
34185 if (this.s < 0) {
34186 if (this.t == 1) return this[0] - this.DV
34187 else if (this.t == 0) return -1
34188 } else if (this.t == 1) return this[0]
34189 else if (this.t == 0) return 0
34190 // assumes 16 < DB < 32
34191 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
34192 }
34193
34194 // (public) return value as byte
34195 function bnByteValue() {
34196 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
34197 }
34198
34199 // (public) return value as short (assumes DB>=16)
34200 function bnShortValue() {
34201 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
34202 }
34203
34204 // (protected) return x s.t. r^x < DV
34205 function bnpChunkSize(r) {
34206 return Math.floor(Math.LN2 * this.DB / Math.log(r))
34207 }
34208
34209 // (public) 0 if this == 0, 1 if this > 0
34210 function bnSigNum() {
34211 if (this.s < 0) return -1
34212 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
34213 else return 1
34214 }
34215
34216 // (protected) convert to radix string
34217 function bnpToRadix(b) {
34218 if (b == null) b = 10
34219 if (this.signum() == 0 || b < 2 || b > 36) return "0"
34220 var cs = this.chunkSize(b)
34221 var a = Math.pow(b, cs)
34222 var d = nbv(a),
34223 y = new BigInteger(),
34224 z = new BigInteger(),
34225 r = ""
34226 this.divRemTo(d, y, z)
34227 while (y.signum() > 0) {
34228 r = (a + z.intValue())
34229 .toString(b)
34230 .substr(1) + r
34231 y.divRemTo(d, y, z)
34232 }
34233 return z.intValue()
34234 .toString(b) + r
34235 }
34236
34237 // (protected) convert from radix string
34238 function bnpFromRadix(s, b) {
34239 var self = this
34240 self.fromInt(0)
34241 if (b == null) b = 10
34242 var cs = self.chunkSize(b)
34243 var d = Math.pow(b, cs),
34244 mi = false,
34245 j = 0,
34246 w = 0
34247 for (var i = 0; i < s.length; ++i) {
34248 var x = intAt(s, i)
34249 if (x < 0) {
34250 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
34251 continue
34252 }
34253 w = b * w + x
34254 if (++j >= cs) {
34255 self.dMultiply(d)
34256 self.dAddOffset(w, 0)
34257 j = 0
34258 w = 0
34259 }
34260 }
34261 if (j > 0) {
34262 self.dMultiply(Math.pow(b, j))
34263 self.dAddOffset(w, 0)
34264 }
34265 if (mi) BigInteger.ZERO.subTo(self, self)
34266 }
34267
34268 // (protected) alternate constructor
34269 function bnpFromNumber(a, b, c) {
34270 var self = this
34271 if ("number" == typeof b) {
34272 // new BigInteger(int,int,RNG)
34273 if (a < 2) self.fromInt(1)
34274 else {
34275 self.fromNumber(a, c)
34276 if (!self.testBit(a - 1)) // force MSB set
34277 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
34278 if (self.isEven()) self.dAddOffset(1, 0); // force odd
34279 while (!self.isProbablePrime(b)) {
34280 self.dAddOffset(2, 0)
34281 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
34282 }
34283 }
34284 } else {
34285 // new BigInteger(int,RNG)
34286 var x = new Array(),
34287 t = a & 7
34288 x.length = (a >> 3) + 1
34289 b.nextBytes(x)
34290 if (t > 0) x[0] &= ((1 << t) - 1)
34291 else x[0] = 0
34292 self.fromString(x, 256)
34293 }
34294 }
34295
34296 // (public) convert to bigendian byte array
34297 function bnToByteArray() {
34298 var self = this
34299 var i = self.t,
34300 r = new Array()
34301 r[0] = self.s
34302 var p = self.DB - (i * self.DB) % 8,
34303 d, k = 0
34304 if (i-- > 0) {
34305 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
34306 r[k++] = d | (self.s << (self.DB - p))
34307 while (i >= 0) {
34308 if (p < 8) {
34309 d = (self[i] & ((1 << p) - 1)) << (8 - p)
34310 d |= self[--i] >> (p += self.DB - 8)
34311 } else {
34312 d = (self[i] >> (p -= 8)) & 0xff
34313 if (p <= 0) {
34314 p += self.DB
34315 --i
34316 }
34317 }
34318 if ((d & 0x80) != 0) d |= -256
34319 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
34320 if (k > 0 || d != self.s) r[k++] = d
34321 }
34322 }
34323 return r
34324 }
34325
34326 function bnEquals(a) {
34327 return (this.compareTo(a) == 0)
34328 }
34329
34330 function bnMin(a) {
34331 return (this.compareTo(a) < 0) ? this : a
34332 }
34333
34334 function bnMax(a) {
34335 return (this.compareTo(a) > 0) ? this : a
34336 }
34337
34338 // (protected) r = this op a (bitwise)
34339 function bnpBitwiseTo(a, op, r) {
34340 var self = this
34341 var i, f, m = Math.min(a.t, self.t)
34342 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
34343 if (a.t < self.t) {
34344 f = a.s & self.DM
34345 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
34346 r.t = self.t
34347 } else {
34348 f = self.s & self.DM
34349 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
34350 r.t = a.t
34351 }
34352 r.s = op(self.s, a.s)
34353 r.clamp()
34354 }
34355
34356 // (public) this & a
34357 function op_and(x, y) {
34358 return x & y
34359 }
34360
34361 function bnAnd(a) {
34362 var r = new BigInteger()
34363 this.bitwiseTo(a, op_and, r)
34364 return r
34365 }
34366
34367 // (public) this | a
34368 function op_or(x, y) {
34369 return x | y
34370 }
34371
34372 function bnOr(a) {
34373 var r = new BigInteger()
34374 this.bitwiseTo(a, op_or, r)
34375 return r
34376 }
34377
34378 // (public) this ^ a
34379 function op_xor(x, y) {
34380 return x ^ y
34381 }
34382
34383 function bnXor(a) {
34384 var r = new BigInteger()
34385 this.bitwiseTo(a, op_xor, r)
34386 return r
34387 }
34388
34389 // (public) this & ~a
34390 function op_andnot(x, y) {
34391 return x & ~y
34392 }
34393
34394 function bnAndNot(a) {
34395 var r = new BigInteger()
34396 this.bitwiseTo(a, op_andnot, r)
34397 return r
34398 }
34399
34400 // (public) ~this
34401 function bnNot() {
34402 var r = new BigInteger()
34403 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
34404 r.t = this.t
34405 r.s = ~this.s
34406 return r
34407 }
34408
34409 // (public) this << n
34410 function bnShiftLeft(n) {
34411 var r = new BigInteger()
34412 if (n < 0) this.rShiftTo(-n, r)
34413 else this.lShiftTo(n, r)
34414 return r
34415 }
34416
34417 // (public) this >> n
34418 function bnShiftRight(n) {
34419 var r = new BigInteger()
34420 if (n < 0) this.lShiftTo(-n, r)
34421 else this.rShiftTo(n, r)
34422 return r
34423 }
34424
34425 // return index of lowest 1-bit in x, x < 2^31
34426 function lbit(x) {
34427 if (x == 0) return -1
34428 var r = 0
34429 if ((x & 0xffff) == 0) {
34430 x >>= 16
34431 r += 16
34432 }
34433 if ((x & 0xff) == 0) {
34434 x >>= 8
34435 r += 8
34436 }
34437 if ((x & 0xf) == 0) {
34438 x >>= 4
34439 r += 4
34440 }
34441 if ((x & 3) == 0) {
34442 x >>= 2
34443 r += 2
34444 }
34445 if ((x & 1) == 0)++r
34446 return r
34447 }
34448
34449 // (public) returns index of lowest 1-bit (or -1 if none)
34450 function bnGetLowestSetBit() {
34451 for (var i = 0; i < this.t; ++i)
34452 if (this[i] != 0) return i * this.DB + lbit(this[i])
34453 if (this.s < 0) return this.t * this.DB
34454 return -1
34455 }
34456
34457 // return number of 1 bits in x
34458 function cbit(x) {
34459 var r = 0
34460 while (x != 0) {
34461 x &= x - 1
34462 ++r
34463 }
34464 return r
34465 }
34466
34467 // (public) return number of set bits
34468 function bnBitCount() {
34469 var r = 0,
34470 x = this.s & this.DM
34471 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
34472 return r
34473 }
34474
34475 // (public) true iff nth bit is set
34476 function bnTestBit(n) {
34477 var j = Math.floor(n / this.DB)
34478 if (j >= this.t) return (this.s != 0)
34479 return ((this[j] & (1 << (n % this.DB))) != 0)
34480 }
34481
34482 // (protected) this op (1<<n)
34483 function bnpChangeBit(n, op) {
34484 var r = BigInteger.ONE.shiftLeft(n)
34485 this.bitwiseTo(r, op, r)
34486 return r
34487 }
34488
34489 // (public) this | (1<<n)
34490 function bnSetBit(n) {
34491 return this.changeBit(n, op_or)
34492 }
34493
34494 // (public) this & ~(1<<n)
34495 function bnClearBit(n) {
34496 return this.changeBit(n, op_andnot)
34497 }
34498
34499 // (public) this ^ (1<<n)
34500 function bnFlipBit(n) {
34501 return this.changeBit(n, op_xor)
34502 }
34503
34504 // (protected) r = this + a
34505 function bnpAddTo(a, r) {
34506 var self = this
34507
34508 var i = 0,
34509 c = 0,
34510 m = Math.min(a.t, self.t)
34511 while (i < m) {
34512 c += self[i] + a[i]
34513 r[i++] = c & self.DM
34514 c >>= self.DB
34515 }
34516 if (a.t < self.t) {
34517 c += a.s
34518 while (i < self.t) {
34519 c += self[i]
34520 r[i++] = c & self.DM
34521 c >>= self.DB
34522 }
34523 c += self.s
34524 } else {
34525 c += self.s
34526 while (i < a.t) {
34527 c += a[i]
34528 r[i++] = c & self.DM
34529 c >>= self.DB
34530 }
34531 c += a.s
34532 }
34533 r.s = (c < 0) ? -1 : 0
34534 if (c > 0) r[i++] = c
34535 else if (c < -1) r[i++] = self.DV + c
34536 r.t = i
34537 r.clamp()
34538 }
34539
34540 // (public) this + a
34541 function bnAdd(a) {
34542 var r = new BigInteger()
34543 this.addTo(a, r)
34544 return r
34545 }
34546
34547 // (public) this - a
34548 function bnSubtract(a) {
34549 var r = new BigInteger()
34550 this.subTo(a, r)
34551 return r
34552 }
34553
34554 // (public) this * a
34555 function bnMultiply(a) {
34556 var r = new BigInteger()
34557 this.multiplyTo(a, r)
34558 return r
34559 }
34560
34561 // (public) this^2
34562 function bnSquare() {
34563 var r = new BigInteger()
34564 this.squareTo(r)
34565 return r
34566 }
34567
34568 // (public) this / a
34569 function bnDivide(a) {
34570 var r = new BigInteger()
34571 this.divRemTo(a, r, null)
34572 return r
34573 }
34574
34575 // (public) this % a
34576 function bnRemainder(a) {
34577 var r = new BigInteger()
34578 this.divRemTo(a, null, r)
34579 return r
34580 }
34581
34582 // (public) [this/a,this%a]
34583 function bnDivideAndRemainder(a) {
34584 var q = new BigInteger(),
34585 r = new BigInteger()
34586 this.divRemTo(a, q, r)
34587 return new Array(q, r)
34588 }
34589
34590 // (protected) this *= n, this >= 0, 1 < n < DV
34591 function bnpDMultiply(n) {
34592 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
34593 ++this.t
34594 this.clamp()
34595 }
34596
34597 // (protected) this += n << w words, this >= 0
34598 function bnpDAddOffset(n, w) {
34599 if (n == 0) return
34600 while (this.t <= w) this[this.t++] = 0
34601 this[w] += n
34602 while (this[w] >= this.DV) {
34603 this[w] -= this.DV
34604 if (++w >= this.t) this[this.t++] = 0
34605 ++this[w]
34606 }
34607 }
34608
34609 // A "null" reducer
34610 function NullExp() {}
34611
34612 function nNop(x) {
34613 return x
34614 }
34615
34616 function nMulTo(x, y, r) {
34617 x.multiplyTo(y, r)
34618 }
34619
34620 function nSqrTo(x, r) {
34621 x.squareTo(r)
34622 }
34623
34624 NullExp.prototype.convert = nNop
34625 NullExp.prototype.revert = nNop
34626 NullExp.prototype.mulTo = nMulTo
34627 NullExp.prototype.sqrTo = nSqrTo
34628
34629 // (public) this^e
34630 function bnPow(e) {
34631 return this.exp(e, new NullExp())
34632 }
34633
34634 // (protected) r = lower n words of "this * a", a.t <= n
34635 // "this" should be the larger one if appropriate.
34636 function bnpMultiplyLowerTo(a, n, r) {
34637 var i = Math.min(this.t + a.t, n)
34638 r.s = 0; // assumes a,this >= 0
34639 r.t = i
34640 while (i > 0) r[--i] = 0
34641 var j
34642 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
34643 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
34644 r.clamp()
34645 }
34646
34647 // (protected) r = "this * a" without lower n words, n > 0
34648 // "this" should be the larger one if appropriate.
34649 function bnpMultiplyUpperTo(a, n, r) {
34650 --n
34651 var i = r.t = this.t + a.t - n
34652 r.s = 0; // assumes a,this >= 0
34653 while (--i >= 0) r[i] = 0
34654 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
34655 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
34656 r.clamp()
34657 r.drShiftTo(1, r)
34658 }
34659
34660 // Barrett modular reduction
34661 function Barrett(m) {
34662 // setup Barrett
34663 this.r2 = new BigInteger()
34664 this.q3 = new BigInteger()
34665 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
34666 this.mu = this.r2.divide(m)
34667 this.m = m
34668 }
34669
34670 function barrettConvert(x) {
34671 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
34672 else if (x.compareTo(this.m) < 0) return x
34673 else {
34674 var r = new BigInteger()
34675 x.copyTo(r)
34676 this.reduce(r)
34677 return r
34678 }
34679 }
34680
34681 function barrettRevert(x) {
34682 return x
34683 }
34684
34685 // x = x mod m (HAC 14.42)
34686 function barrettReduce(x) {
34687 var self = this
34688 x.drShiftTo(self.m.t - 1, self.r2)
34689 if (x.t > self.m.t + 1) {
34690 x.t = self.m.t + 1
34691 x.clamp()
34692 }
34693 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
34694 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
34695 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
34696 x.subTo(self.r2, x)
34697 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
34698 }
34699
34700 // r = x^2 mod m; x != r
34701 function barrettSqrTo(x, r) {
34702 x.squareTo(r)
34703 this.reduce(r)
34704 }
34705
34706 // r = x*y mod m; x,y != r
34707 function barrettMulTo(x, y, r) {
34708 x.multiplyTo(y, r)
34709 this.reduce(r)
34710 }
34711
34712 Barrett.prototype.convert = barrettConvert
34713 Barrett.prototype.revert = barrettRevert
34714 Barrett.prototype.reduce = barrettReduce
34715 Barrett.prototype.mulTo = barrettMulTo
34716 Barrett.prototype.sqrTo = barrettSqrTo
34717
34718 // (public) this^e % m (HAC 14.85)
34719 function bnModPow(e, m) {
34720 var i = e.bitLength(),
34721 k, r = nbv(1),
34722 z
34723 if (i <= 0) return r
34724 else if (i < 18) k = 1
34725 else if (i < 48) k = 3
34726 else if (i < 144) k = 4
34727 else if (i < 768) k = 5
34728 else k = 6
34729 if (i < 8)
34730 z = new Classic(m)
34731 else if (m.isEven())
34732 z = new Barrett(m)
34733 else
34734 z = new Montgomery(m)
34735
34736 // precomputation
34737 var g = new Array(),
34738 n = 3,
34739 k1 = k - 1,
34740 km = (1 << k) - 1
34741 g[1] = z.convert(this)
34742 if (k > 1) {
34743 var g2 = new BigInteger()
34744 z.sqrTo(g[1], g2)
34745 while (n <= km) {
34746 g[n] = new BigInteger()
34747 z.mulTo(g2, g[n - 2], g[n])
34748 n += 2
34749 }
34750 }
34751
34752 var j = e.t - 1,
34753 w, is1 = true,
34754 r2 = new BigInteger(),
34755 t
34756 i = nbits(e[j]) - 1
34757 while (j >= 0) {
34758 if (i >= k1) w = (e[j] >> (i - k1)) & km
34759 else {
34760 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
34761 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
34762 }
34763
34764 n = k
34765 while ((w & 1) == 0) {
34766 w >>= 1
34767 --n
34768 }
34769 if ((i -= n) < 0) {
34770 i += this.DB
34771 --j
34772 }
34773 if (is1) { // ret == 1, don't bother squaring or multiplying it
34774 g[w].copyTo(r)
34775 is1 = false
34776 } else {
34777 while (n > 1) {
34778 z.sqrTo(r, r2)
34779 z.sqrTo(r2, r)
34780 n -= 2
34781 }
34782 if (n > 0) z.sqrTo(r, r2)
34783 else {
34784 t = r
34785 r = r2
34786 r2 = t
34787 }
34788 z.mulTo(r2, g[w], r)
34789 }
34790
34791 while (j >= 0 && (e[j] & (1 << i)) == 0) {
34792 z.sqrTo(r, r2)
34793 t = r
34794 r = r2
34795 r2 = t
34796 if (--i < 0) {
34797 i = this.DB - 1
34798 --j
34799 }
34800 }
34801 }
34802 return z.revert(r)
34803 }
34804
34805 // (public) gcd(this,a) (HAC 14.54)
34806 function bnGCD(a) {
34807 var x = (this.s < 0) ? this.negate() : this.clone()
34808 var y = (a.s < 0) ? a.negate() : a.clone()
34809 if (x.compareTo(y) < 0) {
34810 var t = x
34811 x = y
34812 y = t
34813 }
34814 var i = x.getLowestSetBit(),
34815 g = y.getLowestSetBit()
34816 if (g < 0) return x
34817 if (i < g) g = i
34818 if (g > 0) {
34819 x.rShiftTo(g, x)
34820 y.rShiftTo(g, y)
34821 }
34822 while (x.signum() > 0) {
34823 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
34824 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
34825 if (x.compareTo(y) >= 0) {
34826 x.subTo(y, x)
34827 x.rShiftTo(1, x)
34828 } else {
34829 y.subTo(x, y)
34830 y.rShiftTo(1, y)
34831 }
34832 }
34833 if (g > 0) y.lShiftTo(g, y)
34834 return y
34835 }
34836
34837 // (protected) this % n, n < 2^26
34838 function bnpModInt(n) {
34839 if (n <= 0) return 0
34840 var d = this.DV % n,
34841 r = (this.s < 0) ? n - 1 : 0
34842 if (this.t > 0)
34843 if (d == 0) r = this[0] % n
34844 else
34845 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
34846 return r
34847 }
34848
34849 // (public) 1/this % m (HAC 14.61)
34850 function bnModInverse(m) {
34851 var ac = m.isEven()
34852 if (this.signum() === 0) throw new Error('division by zero')
34853 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
34854 var u = m.clone(),
34855 v = this.clone()
34856 var a = nbv(1),
34857 b = nbv(0),
34858 c = nbv(0),
34859 d = nbv(1)
34860 while (u.signum() != 0) {
34861 while (u.isEven()) {
34862 u.rShiftTo(1, u)
34863 if (ac) {
34864 if (!a.isEven() || !b.isEven()) {
34865 a.addTo(this, a)
34866 b.subTo(m, b)
34867 }
34868 a.rShiftTo(1, a)
34869 } else if (!b.isEven()) b.subTo(m, b)
34870 b.rShiftTo(1, b)
34871 }
34872 while (v.isEven()) {
34873 v.rShiftTo(1, v)
34874 if (ac) {
34875 if (!c.isEven() || !d.isEven()) {
34876 c.addTo(this, c)
34877 d.subTo(m, d)
34878 }
34879 c.rShiftTo(1, c)
34880 } else if (!d.isEven()) d.subTo(m, d)
34881 d.rShiftTo(1, d)
34882 }
34883 if (u.compareTo(v) >= 0) {
34884 u.subTo(v, u)
34885 if (ac) a.subTo(c, a)
34886 b.subTo(d, b)
34887 } else {
34888 v.subTo(u, v)
34889 if (ac) c.subTo(a, c)
34890 d.subTo(b, d)
34891 }
34892 }
34893 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
34894 while (d.compareTo(m) >= 0) d.subTo(m, d)
34895 while (d.signum() < 0) d.addTo(m, d)
34896 return d
34897 }
34898
34899 var lowprimes = [
34900 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
34901 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
34902 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
34903 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
34904 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
34905 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
34906 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
34907 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
34908 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
34909 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
34910 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
34911 ]
34912
34913 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
34914
34915 // (public) test primality with certainty >= 1-.5^t
34916 function bnIsProbablePrime(t) {
34917 var i, x = this.abs()
34918 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
34919 for (i = 0; i < lowprimes.length; ++i)
34920 if (x[0] == lowprimes[i]) return true
34921 return false
34922 }
34923 if (x.isEven()) return false
34924 i = 1
34925 while (i < lowprimes.length) {
34926 var m = lowprimes[i],
34927 j = i + 1
34928 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
34929 m = x.modInt(m)
34930 while (i < j) if (m % lowprimes[i++] == 0) return false
34931 }
34932 return x.millerRabin(t)
34933 }
34934
34935 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
34936 function bnpMillerRabin(t) {
34937 var n1 = this.subtract(BigInteger.ONE)
34938 var k = n1.getLowestSetBit()
34939 if (k <= 0) return false
34940 var r = n1.shiftRight(k)
34941 t = (t + 1) >> 1
34942 if (t > lowprimes.length) t = lowprimes.length
34943 var a = new BigInteger(null)
34944 var j, bases = []
34945 for (var i = 0; i < t; ++i) {
34946 for (;;) {
34947 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
34948 if (bases.indexOf(j) == -1) break
34949 }
34950 bases.push(j)
34951 a.fromInt(j)
34952 var y = a.modPow(r, this)
34953 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
34954 var j = 1
34955 while (j++ < k && y.compareTo(n1) != 0) {
34956 y = y.modPowInt(2, this)
34957 if (y.compareTo(BigInteger.ONE) == 0) return false
34958 }
34959 if (y.compareTo(n1) != 0) return false
34960 }
34961 }
34962 return true
34963 }
34964
34965 // protected
34966 proto.chunkSize = bnpChunkSize
34967 proto.toRadix = bnpToRadix
34968 proto.fromRadix = bnpFromRadix
34969 proto.fromNumber = bnpFromNumber
34970 proto.bitwiseTo = bnpBitwiseTo
34971 proto.changeBit = bnpChangeBit
34972 proto.addTo = bnpAddTo
34973 proto.dMultiply = bnpDMultiply
34974 proto.dAddOffset = bnpDAddOffset
34975 proto.multiplyLowerTo = bnpMultiplyLowerTo
34976 proto.multiplyUpperTo = bnpMultiplyUpperTo
34977 proto.modInt = bnpModInt
34978 proto.millerRabin = bnpMillerRabin
34979
34980 // public
34981 proto.clone = bnClone
34982 proto.intValue = bnIntValue
34983 proto.byteValue = bnByteValue
34984 proto.shortValue = bnShortValue
34985 proto.signum = bnSigNum
34986 proto.toByteArray = bnToByteArray
34987 proto.equals = bnEquals
34988 proto.min = bnMin
34989 proto.max = bnMax
34990 proto.and = bnAnd
34991 proto.or = bnOr
34992 proto.xor = bnXor
34993 proto.andNot = bnAndNot
34994 proto.not = bnNot
34995 proto.shiftLeft = bnShiftLeft
34996 proto.shiftRight = bnShiftRight
34997 proto.getLowestSetBit = bnGetLowestSetBit
34998 proto.bitCount = bnBitCount
34999 proto.testBit = bnTestBit
35000 proto.setBit = bnSetBit
35001 proto.clearBit = bnClearBit
35002 proto.flipBit = bnFlipBit
35003 proto.add = bnAdd
35004 proto.subtract = bnSubtract
35005 proto.multiply = bnMultiply
35006 proto.divide = bnDivide
35007 proto.remainder = bnRemainder
35008 proto.divideAndRemainder = bnDivideAndRemainder
35009 proto.modPow = bnModPow
35010 proto.modInverse = bnModInverse
35011 proto.pow = bnPow
35012 proto.gcd = bnGCD
35013 proto.isProbablePrime = bnIsProbablePrime
35014
35015 // JSBN-specific extension
35016 proto.square = bnSquare
35017
35018 // constants
35019 BigInteger.ZERO = nbv(0)
35020 BigInteger.ONE = nbv(1)
35021 BigInteger.valueOf = nbv
35022
35023 module.exports = BigInteger
35024
35025 },{"../package.json":40}],38:[function(require,module,exports){
35026 (function (Buffer){
35027 // FIXME: Kind of a weird way to throw exceptions, consider removing
35028 var assert = require('assert')
35029 var BigInteger = require('./bigi')
35030
35031 /**
35032 * Turns a byte array into a big integer.
35033 *
35034 * This function will interpret a byte array as a big integer in big
35035 * endian notation.
35036 */
35037 BigInteger.fromByteArrayUnsigned = function(byteArray) {
35038 // BigInteger expects a DER integer conformant byte array
35039 if (byteArray[0] & 0x80) {
35040 return new BigInteger([0].concat(byteArray))
35041 }
35042
35043 return new BigInteger(byteArray)
35044 }
35045
35046 /**
35047 * Returns a byte array representation of the big integer.
35048 *
35049 * This returns the absolute of the contained value in big endian
35050 * form. A value of zero results in an empty array.
35051 */
35052 BigInteger.prototype.toByteArrayUnsigned = function() {
35053 var byteArray = this.toByteArray()
35054 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
35055 }
35056
35057 BigInteger.fromDERInteger = function(byteArray) {
35058 return new BigInteger(byteArray)
35059 }
35060
35061 /*
35062 * Converts BigInteger to a DER integer representation.
35063 *
35064 * The format for this value uses the most significant bit as a sign
35065 * bit. If the most significant bit is already set and the integer is
35066 * positive, a 0x00 is prepended.
35067 *
35068 * Examples:
35069 *
35070 * 0 => 0x00
35071 * 1 => 0x01
35072 * -1 => 0xff
35073 * 127 => 0x7f
35074 * -127 => 0x81
35075 * 128 => 0x0080
35076 * -128 => 0x80
35077 * 255 => 0x00ff
35078 * -255 => 0xff01
35079 * 16300 => 0x3fac
35080 * -16300 => 0xc054
35081 * 62300 => 0x00f35c
35082 * -62300 => 0xff0ca4
35083 */
35084 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
35085
35086 BigInteger.fromBuffer = function(buffer) {
35087 // BigInteger expects a DER integer conformant byte array
35088 if (buffer[0] & 0x80) {
35089 var byteArray = Array.prototype.slice.call(buffer)
35090
35091 return new BigInteger([0].concat(byteArray))
35092 }
35093
35094 return new BigInteger(buffer)
35095 }
35096
35097 BigInteger.fromHex = function(hex) {
35098 if (hex === '') return BigInteger.ZERO
35099
35100 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
35101 assert.equal(hex.length % 2, 0, 'Incomplete hex')
35102 return new BigInteger(hex, 16)
35103 }
35104
35105 BigInteger.prototype.toBuffer = function(size) {
35106 var byteArray = this.toByteArrayUnsigned()
35107 var zeros = []
35108
35109 var padding = size - byteArray.length
35110 while (zeros.length < padding) zeros.push(0)
35111
35112 return new Buffer(zeros.concat(byteArray))
35113 }
35114
35115 BigInteger.prototype.toHex = function(size) {
35116 return this.toBuffer(size).toString('hex')
35117 }
35118
35119 }).call(this,require("buffer").Buffer)
35120 },{"./bigi":37,"assert":1,"buffer":5}],39:[function(require,module,exports){
35121 var BigInteger = require('./bigi')
35122
35123 //addons
35124 require('./convert')
35125
35126 module.exports = BigInteger
35127 },{"./bigi":37,"./convert":38}],40:[function(require,module,exports){
35128 module.exports={
35129 "_args": [
35130 [
35131 "bigi@^1.4.0",
35132 "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib"
35133 ]
35134 ],
35135 "_from": "bigi@>=1.4.0 <2.0.0",
35136 "_id": "bigi@1.4.2",
35137 "_inCache": true,
35138 "_installable": true,
35139 "_location": "/bigi",
35140 "_nodeVersion": "6.1.0",
35141 "_npmOperationalInternal": {
35142 "host": "packages-12-west.internal.npmjs.com",
35143 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
35144 },
35145 "_npmUser": {
35146 "email": "jprichardson@gmail.com",
35147 "name": "jprichardson"
35148 },
35149 "_npmVersion": "3.8.6",
35150 "_phantomChildren": {},
35151 "_requested": {
35152 "name": "bigi",
35153 "raw": "bigi@^1.4.0",
35154 "rawSpec": "^1.4.0",
35155 "scope": null,
35156 "spec": ">=1.4.0 <2.0.0",
35157 "type": "range"
35158 },
35159 "_requiredBy": [
35160 "/bitcoinjs-lib",
35161 "/ecurve"
35162 ],
35163 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
35164 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35165 "_shrinkwrap": null,
35166 "_spec": "bigi@^1.4.0",
35167 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser/node_modules/bitcoinjs-lib",
35168 "bugs": {
35169 "url": "https://github.com/cryptocoinjs/bigi/issues"
35170 },
35171 "dependencies": {},
35172 "description": "Big integers.",
35173 "devDependencies": {
35174 "coveralls": "^2.11.2",
35175 "istanbul": "^0.3.5",
35176 "jshint": "^2.5.1",
35177 "mocha": "^2.1.0",
35178 "mochify": "^2.1.0"
35179 },
35180 "directories": {},
35181 "dist": {
35182 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
35183 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
35184 },
35185 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
35186 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
35187 "keywords": [
35188 "cryptography",
35189 "math",
35190 "bitcoin",
35191 "arbitrary",
35192 "precision",
35193 "arithmetic",
35194 "big",
35195 "integer",
35196 "int",
35197 "number",
35198 "biginteger",
35199 "bigint",
35200 "bignumber",
35201 "decimal",
35202 "float"
35203 ],
35204 "main": "./lib/index.js",
35205 "maintainers": [
35206 {
35207 "email": "boydb@midnightdesign.ws",
35208 "name": "midnightlightning"
35209 },
35210 {
35211 "email": "sidazhang89@gmail.com",
35212 "name": "sidazhang"
35213 },
35214 {
35215 "email": "npm@shesek.info",
35216 "name": "nadav"
35217 },
35218 {
35219 "email": "jprichardson@gmail.com",
35220 "name": "jprichardson"
35221 }
35222 ],
35223 "name": "bigi",
35224 "optionalDependencies": {},
35225 "readme": "ERROR: No README data found!",
35226 "repository": {
35227 "type": "git",
35228 "url": "git+https://github.com/cryptocoinjs/bigi.git"
35229 },
35230 "scripts": {
35231 "browser-test": "mochify --wd -R spec",
35232 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
35233 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
35234 "jshint": "jshint --config jshint.json lib/*.js ; true",
35235 "test": "_mocha -- test/*.js",
35236 "unit": "mocha"
35237 },
35238 "testling": {
35239 "browsers": [
35240 "ie/9..latest",
35241 "firefox/latest",
35242 "chrome/latest",
35243 "safari/6.0..latest",
35244 "iphone/6.0..latest",
35245 "android-browser/4.2..latest"
35246 ],
35247 "files": "test/*.js",
35248 "harness": "mocha"
35249 },
35250 "version": "1.4.2"
35251 }
35252
35253 },{}],41:[function(require,module,exports){
35254 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
35255 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35256 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
35257
35258 var Buffer = require('safe-buffer').Buffer
35259
35260 function check (buffer) {
35261 if (buffer.length < 8) return false
35262 if (buffer.length > 72) return false
35263 if (buffer[0] !== 0x30) return false
35264 if (buffer[1] !== buffer.length - 2) return false
35265 if (buffer[2] !== 0x02) return false
35266
35267 var lenR = buffer[3]
35268 if (lenR === 0) return false
35269 if (5 + lenR >= buffer.length) return false
35270 if (buffer[4 + lenR] !== 0x02) return false
35271
35272 var lenS = buffer[5 + lenR]
35273 if (lenS === 0) return false
35274 if ((6 + lenR + lenS) !== buffer.length) return false
35275
35276 if (buffer[4] & 0x80) return false
35277 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
35278
35279 if (buffer[lenR + 6] & 0x80) return false
35280 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
35281 return true
35282 }
35283
35284 function decode (buffer) {
35285 if (buffer.length < 8) throw new Error('DER sequence length is too short')
35286 if (buffer.length > 72) throw new Error('DER sequence length is too long')
35287 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
35288 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
35289 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
35290
35291 var lenR = buffer[3]
35292 if (lenR === 0) throw new Error('R length is zero')
35293 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
35294 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
35295
35296 var lenS = buffer[5 + lenR]
35297 if (lenS === 0) throw new Error('S length is zero')
35298 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
35299
35300 if (buffer[4] & 0x80) throw new Error('R value is negative')
35301 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
35302
35303 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
35304 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
35305
35306 // non-BIP66 - extract R, S values
35307 return {
35308 r: buffer.slice(4, 4 + lenR),
35309 s: buffer.slice(6 + lenR)
35310 }
35311 }
35312
35313 /*
35314 * Expects r and s to be positive DER integers.
35315 *
35316 * The DER format uses the most significant bit as a sign bit (& 0x80).
35317 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
35318 *
35319 * Examples:
35320 *
35321 * 0 => 0x00
35322 * 1 => 0x01
35323 * -1 => 0xff
35324 * 127 => 0x7f
35325 * -127 => 0x81
35326 * 128 => 0x0080
35327 * -128 => 0x80
35328 * 255 => 0x00ff
35329 * -255 => 0xff01
35330 * 16300 => 0x3fac
35331 * -16300 => 0xc054
35332 * 62300 => 0x00f35c
35333 * -62300 => 0xff0ca4
35334 */
35335 function encode (r, s) {
35336 var lenR = r.length
35337 var lenS = s.length
35338 if (lenR === 0) throw new Error('R length is zero')
35339 if (lenS === 0) throw new Error('S length is zero')
35340 if (lenR > 33) throw new Error('R length is too long')
35341 if (lenS > 33) throw new Error('S length is too long')
35342 if (r[0] & 0x80) throw new Error('R value is negative')
35343 if (s[0] & 0x80) throw new Error('S value is negative')
35344 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
35345 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
35346
35347 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
35348
35349 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
35350 signature[0] = 0x30
35351 signature[1] = signature.length - 2
35352 signature[2] = 0x02
35353 signature[3] = r.length
35354 r.copy(signature, 4)
35355 signature[4 + lenR] = 0x02
35356 signature[5 + lenR] = s.length
35357 s.copy(signature, 6 + lenR)
35358
35359 return signature
35360 }
35361
35362 module.exports = {
35363 check: check,
35364 decode: decode,
35365 encode: encode
35366 }
35367
35368 },{"safe-buffer":101}],42:[function(require,module,exports){
35369 module.exports={
35370 "OP_FALSE": 0,
35371 "OP_0": 0,
35372 "OP_PUSHDATA1": 76,
35373 "OP_PUSHDATA2": 77,
35374 "OP_PUSHDATA4": 78,
35375 "OP_1NEGATE": 79,
35376 "OP_RESERVED": 80,
35377 "OP_TRUE": 81,
35378 "OP_1": 81,
35379 "OP_2": 82,
35380 "OP_3": 83,
35381 "OP_4": 84,
35382 "OP_5": 85,
35383 "OP_6": 86,
35384 "OP_7": 87,
35385 "OP_8": 88,
35386 "OP_9": 89,
35387 "OP_10": 90,
35388 "OP_11": 91,
35389 "OP_12": 92,
35390 "OP_13": 93,
35391 "OP_14": 94,
35392 "OP_15": 95,
35393 "OP_16": 96,
35394
35395 "OP_NOP": 97,
35396 "OP_VER": 98,
35397 "OP_IF": 99,
35398 "OP_NOTIF": 100,
35399 "OP_VERIF": 101,
35400 "OP_VERNOTIF": 102,
35401 "OP_ELSE": 103,
35402 "OP_ENDIF": 104,
35403 "OP_VERIFY": 105,
35404 "OP_RETURN": 106,
35405
35406 "OP_TOALTSTACK": 107,
35407 "OP_FROMALTSTACK": 108,
35408 "OP_2DROP": 109,
35409 "OP_2DUP": 110,
35410 "OP_3DUP": 111,
35411 "OP_2OVER": 112,
35412 "OP_2ROT": 113,
35413 "OP_2SWAP": 114,
35414 "OP_IFDUP": 115,
35415 "OP_DEPTH": 116,
35416 "OP_DROP": 117,
35417 "OP_DUP": 118,
35418 "OP_NIP": 119,
35419 "OP_OVER": 120,
35420 "OP_PICK": 121,
35421 "OP_ROLL": 122,
35422 "OP_ROT": 123,
35423 "OP_SWAP": 124,
35424 "OP_TUCK": 125,
35425
35426 "OP_CAT": 126,
35427 "OP_SUBSTR": 127,
35428 "OP_LEFT": 128,
35429 "OP_RIGHT": 129,
35430 "OP_SIZE": 130,
35431
35432 "OP_INVERT": 131,
35433 "OP_AND": 132,
35434 "OP_OR": 133,
35435 "OP_XOR": 134,
35436 "OP_EQUAL": 135,
35437 "OP_EQUALVERIFY": 136,
35438 "OP_RESERVED1": 137,
35439 "OP_RESERVED2": 138,
35440
35441 "OP_1ADD": 139,
35442 "OP_1SUB": 140,
35443 "OP_2MUL": 141,
35444 "OP_2DIV": 142,
35445 "OP_NEGATE": 143,
35446 "OP_ABS": 144,
35447 "OP_NOT": 145,
35448 "OP_0NOTEQUAL": 146,
35449 "OP_ADD": 147,
35450 "OP_SUB": 148,
35451 "OP_MUL": 149,
35452 "OP_DIV": 150,
35453 "OP_MOD": 151,
35454 "OP_LSHIFT": 152,
35455 "OP_RSHIFT": 153,
35456
35457 "OP_BOOLAND": 154,
35458 "OP_BOOLOR": 155,
35459 "OP_NUMEQUAL": 156,
35460 "OP_NUMEQUALVERIFY": 157,
35461 "OP_NUMNOTEQUAL": 158,
35462 "OP_LESSTHAN": 159,
35463 "OP_GREATERTHAN": 160,
35464 "OP_LESSTHANOREQUAL": 161,
35465 "OP_GREATERTHANOREQUAL": 162,
35466 "OP_MIN": 163,
35467 "OP_MAX": 164,
35468
35469 "OP_WITHIN": 165,
35470
35471 "OP_RIPEMD160": 166,
35472 "OP_SHA1": 167,
35473 "OP_SHA256": 168,
35474 "OP_HASH160": 169,
35475 "OP_HASH256": 170,
35476 "OP_CODESEPARATOR": 171,
35477 "OP_CHECKSIG": 172,
35478 "OP_CHECKSIGVERIFY": 173,
35479 "OP_CHECKMULTISIG": 174,
35480 "OP_CHECKMULTISIGVERIFY": 175,
35481
35482 "OP_NOP1": 176,
35483
35484 "OP_NOP2": 177,
35485 "OP_CHECKLOCKTIMEVERIFY": 177,
35486
35487 "OP_NOP3": 178,
35488 "OP_CHECKSEQUENCEVERIFY": 178,
35489
35490 "OP_NOP4": 179,
35491 "OP_NOP5": 180,
35492 "OP_NOP6": 181,
35493 "OP_NOP7": 182,
35494 "OP_NOP8": 183,
35495 "OP_NOP9": 184,
35496 "OP_NOP10": 185,
35497
35498 "OP_PUBKEYHASH": 253,
35499 "OP_PUBKEY": 254,
35500 "OP_INVALIDOPCODE": 255
35501 }
35502
35503 },{}],43:[function(require,module,exports){
35504 var OPS = require('./index.json')
35505
35506 var map = {}
35507 for (var op in OPS) {
35508 var code = OPS[op]
35509 map[code] = op
35510 }
35511
35512 module.exports = map
35513
35514 },{"./index.json":42}],44:[function(require,module,exports){
35515 var Buffer = require('safe-buffer').Buffer
35516 var bech32 = require('bech32')
35517 var bs58check = require('bs58check')
35518 var bscript = require('./script')
35519 var btemplates = require('./templates')
35520 var networks = require('./networks')
35521 var typeforce = require('typeforce')
35522 var types = require('./types')
35523
35524 function fromBase58Check (address) {
35525 var payload = bs58check.decode(address)
35526
35527 // TODO: 4.0.0, move to "toOutputScript"
35528 if (payload.length < 21) throw new TypeError(address + ' is too short')
35529 if (payload.length > 21) throw new TypeError(address + ' is too long')
35530
35531 var version = payload.readUInt8(0)
35532 var hash = payload.slice(1)
35533
35534 return { version: version, hash: hash }
35535 }
35536
35537 function fromBech32 (address) {
35538 var result = bech32.decode(address)
35539 var data = bech32.fromWords(result.words.slice(1))
35540
35541 return {
35542 version: result.words[0],
35543 prefix: result.prefix,
35544 data: Buffer.from(data)
35545 }
35546 }
35547
35548 function toBase58Check (hash, version) {
35549 if (version < 256){
35550 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
35551
35552 var payload = Buffer.allocUnsafe(21)
35553 payload.writeUInt8(version, 0)
35554 hash.copy(payload, 1)
35555
35556 return bs58check.encode(payload)
35557 }
35558 else{
35559 typeforce(types.tuple(types.Hash160bit, types.UInt16), arguments)
35560
35561 var payload = Buffer.allocUnsafe(22)
35562 payload.writeUInt16BE(version, 0)
35563 hash.copy(payload, 2)
35564
35565 return bs58check.encode(payload)
35566 }
35567 }
35568
35569 function toBech32 (data, version, prefix) {
35570 var words = bech32.toWords(data)
35571 words.unshift(version)
35572
35573 return bech32.encode(prefix, words)
35574 }
35575
35576 function fromOutputScript (outputScript, network) {
35577 network = network || networks.bitcoin
35578
35579 if (btemplates.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
35580 if (btemplates.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
35581 if (btemplates.witnessPubKeyHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 22), 0, network.bech32)
35582 if (btemplates.witnessScriptHash.output.check(outputScript)) return toBech32(bscript.compile(outputScript).slice(2, 34), 0, network.bech32)
35583
35584 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
35585 }
35586
35587 function toOutputScript (address, network) {
35588 network = network || networks.bitcoin
35589
35590 var decode
35591 try {
35592 decode = fromBase58Check(address)
35593 } catch (e) {}
35594
35595 if (decode) {
35596 if (decode.version === network.pubKeyHash) return btemplates.pubKeyHash.output.encode(decode.hash)
35597 if (decode.version === network.scriptHash) return btemplates.scriptHash.output.encode(decode.hash)
35598 } else {
35599 try {
35600 decode = fromBech32(address)
35601 } catch (e) {}
35602
35603 if (decode) {
35604 if (decode.prefix !== network.bech32) throw new Error(address + ' has an invalid prefix')
35605 if (decode.version === 0) {
35606 if (decode.data.length === 20) return btemplates.witnessPubKeyHash.output.encode(decode.data)
35607 if (decode.data.length === 32) return btemplates.witnessScriptHash.output.encode(decode.data)
35608 }
35609 }
35610 }
35611
35612 throw new Error(address + ' has no matching Script')
35613 }
35614
35615 module.exports = {
35616 fromBase58Check: fromBase58Check,
35617 fromBech32: fromBech32,
35618 fromOutputScript: fromOutputScript,
35619 toBase58Check: toBase58Check,
35620 toBech32: toBech32,
35621 toOutputScript: toOutputScript
35622 }
35623
35624 },{"./networks":53,"./script":54,"./templates":56,"./types":80,"bech32":36,"bs58check":83,"safe-buffer":101,"typeforce":112}],45:[function(require,module,exports){
35625 var Buffer = require('safe-buffer').Buffer
35626 var bcrypto = require('./crypto')
35627 var fastMerkleRoot = require('merkle-lib/fastRoot')
35628 var typeforce = require('typeforce')
35629 var types = require('./types')
35630 var varuint = require('varuint-bitcoin')
35631
35632 var Transaction = require('./transaction')
35633
35634 function Block () {
35635 this.version = 1
35636 this.prevHash = null
35637 this.merkleRoot = null
35638 this.timestamp = 0
35639 this.bits = 0
35640 this.nonce = 0
35641 }
35642
35643 Block.fromBuffer = function (buffer) {
35644 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
35645
35646 var offset = 0
35647 function readSlice (n) {
35648 offset += n
35649 return buffer.slice(offset - n, offset)
35650 }
35651
35652 function readUInt32 () {
35653 var i = buffer.readUInt32LE(offset)
35654 offset += 4
35655 return i
35656 }
35657
35658 function readInt32 () {
35659 var i = buffer.readInt32LE(offset)
35660 offset += 4
35661 return i
35662 }
35663
35664 var block = new Block()
35665 block.version = readInt32()
35666 block.prevHash = readSlice(32)
35667 block.merkleRoot = readSlice(32)
35668 block.timestamp = readUInt32()
35669 block.bits = readUInt32()
35670 block.nonce = readUInt32()
35671
35672 if (buffer.length === 80) return block
35673
35674 function readVarInt () {
35675 var vi = varuint.decode(buffer, offset)
35676 offset += varuint.decode.bytes
35677 return vi
35678 }
35679
35680 function readTransaction () {
35681 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
35682 offset += tx.byteLength()
35683 return tx
35684 }
35685
35686 var nTransactions = readVarInt()
35687 block.transactions = []
35688
35689 for (var i = 0; i < nTransactions; ++i) {
35690 var tx = readTransaction()
35691 block.transactions.push(tx)
35692 }
35693
35694 return block
35695 }
35696
35697 Block.prototype.byteLength = function (headersOnly) {
35698 if (headersOnly || !this.transactions) return 80
35699
35700 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
35701 return a + x.byteLength()
35702 }, 0)
35703 }
35704
35705 Block.fromHex = function (hex) {
35706 return Block.fromBuffer(Buffer.from(hex, 'hex'))
35707 }
35708
35709 Block.prototype.getHash = function () {
35710 return bcrypto.hash256(this.toBuffer(true))
35711 }
35712
35713 Block.prototype.getId = function () {
35714 return this.getHash().reverse().toString('hex')
35715 }
35716
35717 Block.prototype.getUTCDate = function () {
35718 var date = new Date(0) // epoch
35719 date.setUTCSeconds(this.timestamp)
35720
35721 return date
35722 }
35723
35724 // TODO: buffer, offset compatibility
35725 Block.prototype.toBuffer = function (headersOnly) {
35726 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
35727
35728 var offset = 0
35729 function writeSlice (slice) {
35730 slice.copy(buffer, offset)
35731 offset += slice.length
35732 }
35733
35734 function writeInt32 (i) {
35735 buffer.writeInt32LE(i, offset)
35736 offset += 4
35737 }
35738 function writeUInt32 (i) {
35739 buffer.writeUInt32LE(i, offset)
35740 offset += 4
35741 }
35742
35743 writeInt32(this.version)
35744 writeSlice(this.prevHash)
35745 writeSlice(this.merkleRoot)
35746 writeUInt32(this.timestamp)
35747 writeUInt32(this.bits)
35748 writeUInt32(this.nonce)
35749
35750 if (headersOnly || !this.transactions) return buffer
35751
35752 varuint.encode(this.transactions.length, buffer, offset)
35753 offset += varuint.encode.bytes
35754
35755 this.transactions.forEach(function (tx) {
35756 var txSize = tx.byteLength() // TODO: extract from toBuffer?
35757 tx.toBuffer(buffer, offset)
35758 offset += txSize
35759 })
35760
35761 return buffer
35762 }
35763
35764 Block.prototype.toHex = function (headersOnly) {
35765 return this.toBuffer(headersOnly).toString('hex')
35766 }
35767
35768 Block.calculateTarget = function (bits) {
35769 var exponent = ((bits & 0xff000000) >> 24) - 3
35770 var mantissa = bits & 0x007fffff
35771 var target = Buffer.alloc(32, 0)
35772 target.writeUInt32BE(mantissa, 28 - exponent)
35773 return target
35774 }
35775
35776 Block.calculateMerkleRoot = function (transactions) {
35777 typeforce([{ getHash: types.Function }], transactions)
35778 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
35779
35780 var hashes = transactions.map(function (transaction) {
35781 return transaction.getHash()
35782 })
35783
35784 return fastMerkleRoot(hashes, bcrypto.hash256)
35785 }
35786
35787 Block.prototype.checkMerkleRoot = function () {
35788 if (!this.transactions) return false
35789
35790 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
35791 return this.merkleRoot.compare(actualMerkleRoot) === 0
35792 }
35793
35794 Block.prototype.checkProofOfWork = function () {
35795 var hash = this.getHash().reverse()
35796 var target = Block.calculateTarget(this.bits)
35797
35798 return hash.compare(target) <= 0
35799 }
35800
35801 module.exports = Block
35802
35803 },{"./crypto":47,"./transaction":78,"./types":80,"merkle-lib/fastRoot":97,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],46:[function(require,module,exports){
35804 var pushdata = require('pushdata-bitcoin')
35805 var varuint = require('varuint-bitcoin')
35806
35807 // https://github.com/feross/buffer/blob/master/index.js#L1127
35808 function verifuint (value, max) {
35809 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
35810 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
35811 if (value > max) throw new Error('RangeError: value out of range')
35812 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
35813 }
35814
35815 function readUInt64LE (buffer, offset) {
35816 var a = buffer.readUInt32LE(offset)
35817 var b = buffer.readUInt32LE(offset + 4)
35818 b *= 0x100000000
35819
35820 verifuint(b + a, 0x001fffffffffffff)
35821
35822 return b + a
35823 }
35824
35825 function writeUInt64LE (buffer, value, offset) {
35826 verifuint(value, 0x001fffffffffffff)
35827
35828 buffer.writeInt32LE(value & -1, offset)
35829 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
35830 return offset + 8
35831 }
35832
35833 // TODO: remove in 4.0.0?
35834 function readVarInt (buffer, offset) {
35835 var result = varuint.decode(buffer, offset)
35836
35837 return {
35838 number: result,
35839 size: varuint.decode.bytes
35840 }
35841 }
35842
35843 // TODO: remove in 4.0.0?
35844 function writeVarInt (buffer, number, offset) {
35845 varuint.encode(number, buffer, offset)
35846 return varuint.encode.bytes
35847 }
35848
35849 module.exports = {
35850 pushDataSize: pushdata.encodingLength,
35851 readPushDataInt: pushdata.decode,
35852 readUInt64LE: readUInt64LE,
35853 readVarInt: readVarInt,
35854 varIntBuffer: varuint.encode,
35855 varIntSize: varuint.encodingLength,
35856 writePushDataInt: pushdata.encode,
35857 writeUInt64LE: writeUInt64LE,
35858 writeVarInt: writeVarInt
35859 }
35860
35861 },{"pushdata-bitcoin":98,"varuint-bitcoin":114}],47:[function(require,module,exports){
35862 var createHash = require('create-hash')
35863
35864 function ripemd160 (buffer) {
35865 return createHash('rmd160').update(buffer).digest()
35866 }
35867
35868 function sha1 (buffer) {
35869 return createHash('sha1').update(buffer).digest()
35870 }
35871
35872 function sha256 (buffer) {
35873 return createHash('sha256').update(buffer).digest()
35874 }
35875
35876 function hash160 (buffer) {
35877 return ripemd160(sha256(buffer))
35878 }
35879
35880 function hash256 (buffer) {
35881 return sha256(sha256(buffer))
35882 }
35883
35884 module.exports = {
35885 hash160: hash160,
35886 hash256: hash256,
35887 ripemd160: ripemd160,
35888 sha1: sha1,
35889 sha256: sha256
35890 }
35891
35892 },{"create-hash":85}],48:[function(require,module,exports){
35893 var Buffer = require('safe-buffer').Buffer
35894 var createHmac = require('create-hmac')
35895 var typeforce = require('typeforce')
35896 var types = require('./types')
35897
35898 var BigInteger = require('bigi')
35899 var ECSignature = require('./ecsignature')
35900
35901 var ZERO = Buffer.alloc(1, 0)
35902 var ONE = Buffer.alloc(1, 1)
35903
35904 var ecurve = require('ecurve')
35905 var secp256k1 = ecurve.getCurveByName('secp256k1')
35906
35907 // https://tools.ietf.org/html/rfc6979#section-3.2
35908 function deterministicGenerateK (hash, x, checkSig) {
35909 typeforce(types.tuple(
35910 types.Hash256bit,
35911 types.Buffer256bit,
35912 types.Function
35913 ), arguments)
35914
35915 // Step A, ignored as hash already provided
35916 // Step B
35917 // Step C
35918 var k = Buffer.alloc(32, 0)
35919 var v = Buffer.alloc(32, 1)
35920
35921 // Step D
35922 k = createHmac('sha256', k)
35923 .update(v)
35924 .update(ZERO)
35925 .update(x)
35926 .update(hash)
35927 .digest()
35928
35929 // Step E
35930 v = createHmac('sha256', k).update(v).digest()
35931
35932 // Step F
35933 k = createHmac('sha256', k)
35934 .update(v)
35935 .update(ONE)
35936 .update(x)
35937 .update(hash)
35938 .digest()
35939
35940 // Step G
35941 v = createHmac('sha256', k).update(v).digest()
35942
35943 // Step H1/H2a, ignored as tlen === qlen (256 bit)
35944 // Step H2b
35945 v = createHmac('sha256', k).update(v).digest()
35946
35947 var T = BigInteger.fromBuffer(v)
35948
35949 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
35950 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
35951 k = createHmac('sha256', k)
35952 .update(v)
35953 .update(ZERO)
35954 .digest()
35955
35956 v = createHmac('sha256', k).update(v).digest()
35957
35958 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
35959 // Step H2b again
35960 v = createHmac('sha256', k).update(v).digest()
35961 T = BigInteger.fromBuffer(v)
35962 }
35963
35964 return T
35965 }
35966
35967 var N_OVER_TWO = secp256k1.n.shiftRight(1)
35968
35969 function sign (hash, d) {
35970 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
35971
35972 var x = d.toBuffer(32)
35973 var e = BigInteger.fromBuffer(hash)
35974 var n = secp256k1.n
35975 var G = secp256k1.G
35976
35977 var r, s
35978 deterministicGenerateK(hash, x, function (k) {
35979 var Q = G.multiply(k)
35980
35981 if (secp256k1.isInfinity(Q)) return false
35982
35983 r = Q.affineX.mod(n)
35984 if (r.signum() === 0) return false
35985
35986 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
35987 if (s.signum() === 0) return false
35988
35989 return true
35990 })
35991
35992 // enforce low S values, see bip62: 'low s values in signatures'
35993 if (s.compareTo(N_OVER_TWO) > 0) {
35994 s = n.subtract(s)
35995 }
35996
35997 return new ECSignature(r, s)
35998 }
35999
36000 function verify (hash, signature, Q) {
36001 typeforce(types.tuple(
36002 types.Hash256bit,
36003 types.ECSignature,
36004 types.ECPoint
36005 ), arguments)
36006
36007 var n = secp256k1.n
36008 var G = secp256k1.G
36009
36010 var r = signature.r
36011 var s = signature.s
36012
36013 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
36014 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
36015 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
36016
36017 // 1.4.2 H = Hash(M), already done by the user
36018 // 1.4.3 e = H
36019 var e = BigInteger.fromBuffer(hash)
36020
36021 // Compute s^-1
36022 var sInv = s.modInverse(n)
36023
36024 // 1.4.4 Compute u1 = es^−1 mod n
36025 // u2 = rs^−1 mod n
36026 var u1 = e.multiply(sInv).mod(n)
36027 var u2 = r.multiply(sInv).mod(n)
36028
36029 // 1.4.5 Compute R = (xR, yR)
36030 // R = u1G + u2Q
36031 var R = G.multiplyTwo(u1, Q, u2)
36032
36033 // 1.4.5 (cont.) Enforce R is not at infinity
36034 if (secp256k1.isInfinity(R)) return false
36035
36036 // 1.4.6 Convert the field element R.x to an integer
36037 var xR = R.affineX
36038
36039 // 1.4.7 Set v = xR mod n
36040 var v = xR.mod(n)
36041
36042 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
36043 return v.equals(r)
36044 }
36045
36046 module.exports = {
36047 deterministicGenerateK: deterministicGenerateK,
36048 sign: sign,
36049 verify: verify,
36050
36051 // TODO: remove
36052 __curve: secp256k1
36053 }
36054
36055 },{"./ecsignature":50,"./types":80,"bigi":39,"create-hmac":88,"ecurve":92,"safe-buffer":101,"typeforce":112}],49:[function(require,module,exports){
36056 var baddress = require('./address')
36057 var bcrypto = require('./crypto')
36058 var ecdsa = require('./ecdsa')
36059 var randomBytes = require('randombytes')
36060 var typeforce = require('typeforce')
36061 var types = require('./types')
36062 var wif = require('wif')
36063
36064 var NETWORKS = require('./networks')
36065 var BigInteger = require('bigi')
36066
36067 var ecurve = require('ecurve')
36068 var secp256k1 = ecdsa.__curve
36069
36070 function ECPair (d, Q, options) {
36071 if (options) {
36072 typeforce({
36073 compressed: types.maybe(types.Boolean),
36074 network: types.maybe(types.Network)
36075 }, options)
36076 }
36077
36078 options = options || {}
36079
36080 if (d) {
36081 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
36082 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
36083 if (Q) throw new TypeError('Unexpected publicKey parameter')
36084
36085 this.d = d
36086 } else {
36087 typeforce(types.ECPoint, Q)
36088
36089 this.__Q = Q
36090 }
36091
36092 this.compressed = options.compressed === undefined ? true : options.compressed
36093 this.network = options.network || NETWORKS.bitcoin
36094 }
36095
36096 Object.defineProperty(ECPair.prototype, 'Q', {
36097 get: function () {
36098 if (!this.__Q && this.d) {
36099 this.__Q = secp256k1.G.multiply(this.d)
36100 }
36101
36102 return this.__Q
36103 }
36104 })
36105
36106 ECPair.fromPublicKeyBuffer = function (buffer, network) {
36107 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
36108
36109 return new ECPair(null, Q, {
36110 compressed: Q.compressed,
36111 network: network
36112 })
36113 }
36114
36115 ECPair.fromWIF = function (string, network) {
36116 var decoded = wif.decode(string)
36117 var version = decoded.version
36118
36119 // list of networks?
36120 if (types.Array(network)) {
36121 network = network.filter(function (x) {
36122 return version === x.wif
36123 }).pop()
36124
36125 if (!network) throw new Error('Unknown network version')
36126
36127 // otherwise, assume a network object (or default to bitcoin)
36128 } else {
36129 network = network || NETWORKS.bitcoin
36130
36131 if (version !== network.wif) throw new Error('Invalid network version')
36132 }
36133
36134 var d = BigInteger.fromBuffer(decoded.privateKey)
36135
36136 return new ECPair(d, null, {
36137 compressed: decoded.compressed,
36138 network: network
36139 })
36140 }
36141
36142 ECPair.makeRandom = function (options) {
36143 options = options || {}
36144
36145 var rng = options.rng || randomBytes
36146
36147 var d
36148 do {
36149 var buffer = rng(32)
36150 typeforce(types.Buffer256bit, buffer)
36151
36152 d = BigInteger.fromBuffer(buffer)
36153 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
36154
36155 return new ECPair(d, null, options)
36156 }
36157
36158 ECPair.prototype.getAddress = function () {
36159 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
36160 }
36161
36162 ECPair.prototype.getNetwork = function () {
36163 return this.network
36164 }
36165
36166 ECPair.prototype.getPublicKeyBuffer = function () {
36167 return this.Q.getEncoded(this.compressed)
36168 }
36169
36170 ECPair.prototype.sign = function (hash) {
36171 if (!this.d) throw new Error('Missing private key')
36172
36173 return ecdsa.sign(hash, this.d)
36174 }
36175
36176 ECPair.prototype.toWIF = function () {
36177 if (!this.d) throw new Error('Missing private key')
36178
36179 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
36180 }
36181
36182 ECPair.prototype.verify = function (hash, signature) {
36183 return ecdsa.verify(hash, signature, this.Q)
36184 }
36185
36186 module.exports = ECPair
36187
36188 },{"./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){
36189 (function (Buffer){
36190 var bip66 = require('bip66')
36191 var typeforce = require('typeforce')
36192 var types = require('./types')
36193
36194 var BigInteger = require('bigi')
36195
36196 function ECSignature (r, s) {
36197 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
36198
36199 this.r = r
36200 this.s = s
36201 }
36202
36203 ECSignature.parseCompact = function (buffer) {
36204 typeforce(types.BufferN(65), buffer)
36205
36206 var flagByte = buffer.readUInt8(0) - 27
36207 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
36208
36209 var compressed = !!(flagByte & 4)
36210 var recoveryParam = flagByte & 3
36211 var signature = ECSignature.fromRSBuffer(buffer.slice(1))
36212
36213 return {
36214 compressed: compressed,
36215 i: recoveryParam,
36216 signature: signature
36217 }
36218 }
36219
36220 ECSignature.fromRSBuffer = function (buffer) {
36221 typeforce(types.BufferN(64), buffer)
36222
36223 var r = BigInteger.fromBuffer(buffer.slice(0, 32))
36224 var s = BigInteger.fromBuffer(buffer.slice(32, 64))
36225 return new ECSignature(r, s)
36226 }
36227
36228 ECSignature.fromDER = function (buffer) {
36229 var decode = bip66.decode(buffer)
36230 var r = BigInteger.fromDERInteger(decode.r)
36231 var s = BigInteger.fromDERInteger(decode.s)
36232
36233 return new ECSignature(r, s)
36234 }
36235
36236 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
36237 ECSignature.parseScriptSignature = function (buffer) {
36238 var hashType = buffer.readUInt8(buffer.length - 1)
36239 var hashTypeMod = hashType & ~0x80
36240
36241 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
36242
36243 return {
36244 signature: ECSignature.fromDER(buffer.slice(0, -1)),
36245 hashType: hashType
36246 }
36247 }
36248
36249 ECSignature.prototype.toCompact = function (i, compressed) {
36250 if (compressed) {
36251 i += 4
36252 }
36253
36254 i += 27
36255
36256 var buffer = Buffer.alloc(65)
36257 buffer.writeUInt8(i, 0)
36258 this.toRSBuffer(buffer, 1)
36259 return buffer
36260 }
36261
36262 ECSignature.prototype.toDER = function () {
36263 var r = Buffer.from(this.r.toDERInteger())
36264 var s = Buffer.from(this.s.toDERInteger())
36265
36266 return bip66.encode(r, s)
36267 }
36268
36269 ECSignature.prototype.toRSBuffer = function (buffer, offset) {
36270 buffer = buffer || Buffer.alloc(64)
36271 this.r.toBuffer(32).copy(buffer, offset)
36272 this.s.toBuffer(32).copy(buffer, offset + 32)
36273 return buffer
36274 }
36275
36276 ECSignature.prototype.toScriptSignature = function (hashType) {
36277 var hashTypeMod = hashType & ~0x80
36278 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
36279
36280 var hashTypeBuffer = Buffer.alloc(1)
36281 hashTypeBuffer.writeUInt8(hashType, 0)
36282
36283 return Buffer.concat([this.toDER(), hashTypeBuffer])
36284 }
36285
36286 module.exports = ECSignature
36287
36288 }).call(this,require("buffer").Buffer)
36289 },{"./types":80,"bigi":39,"bip66":41,"buffer":5,"typeforce":112}],51:[function(require,module,exports){
36290 var Buffer = require('safe-buffer').Buffer
36291 var base58check = require('bs58check')
36292 var bcrypto = require('./crypto')
36293 var createHmac = require('create-hmac')
36294 var typeforce = require('typeforce')
36295 var types = require('./types')
36296 var NETWORKS = require('./networks')
36297
36298 var BigInteger = require('bigi')
36299 var ECPair = require('./ecpair')
36300
36301 var ecurve = require('ecurve')
36302 var curve = ecurve.getCurveByName('secp256k1')
36303
36304 function HDNode (keyPair, chainCode) {
36305 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
36306
36307 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
36308
36309 this.keyPair = keyPair
36310 this.chainCode = chainCode
36311 this.depth = 0
36312 this.index = 0
36313 this.parentFingerprint = 0x00000000
36314 }
36315
36316 HDNode.HIGHEST_BIT = 0x80000000
36317 HDNode.LENGTH = 78
36318 HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
36319
36320 HDNode.fromSeedBuffer = function (seed, network) {
36321 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
36322
36323 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
36324 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
36325
36326 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
36327 var IL = I.slice(0, 32)
36328 var IR = I.slice(32)
36329
36330 // In case IL is 0 or >= n, the master key is invalid
36331 // This is handled by the ECPair constructor
36332 var pIL = BigInteger.fromBuffer(IL)
36333 var keyPair = new ECPair(pIL, null, {
36334 network: network
36335 })
36336
36337 return new HDNode(keyPair, IR)
36338 }
36339
36340 HDNode.fromSeedHex = function (hex, network) {
36341 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
36342 }
36343
36344 HDNode.fromBase58 = function (string, networks) {
36345 var buffer = base58check.decode(string)
36346 if (buffer.length !== 78) throw new Error('Invalid buffer length')
36347
36348 // 4 bytes: version bytes
36349 var version = buffer.readUInt32BE(0)
36350 var network
36351
36352 // list of networks?
36353 if (Array.isArray(networks)) {
36354 network = networks.filter(function (x) {
36355 return version === x.bip32.private ||
36356 version === x.bip32.public
36357 }).pop()
36358
36359 if (!network) throw new Error('Unknown network version')
36360
36361 // otherwise, assume a network object (or default to bitcoin)
36362 } else {
36363 network = networks || NETWORKS.bitcoin
36364 }
36365
36366 if (version !== network.bip32.private &&
36367 version !== network.bip32.public) throw new Error('Invalid network version')
36368
36369 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
36370 var depth = buffer[4]
36371
36372 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36373 var parentFingerprint = buffer.readUInt32BE(5)
36374 if (depth === 0) {
36375 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
36376 }
36377
36378 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36379 // This is encoded in MSB order. (0x00000000 if master key)
36380 var index = buffer.readUInt32BE(9)
36381 if (depth === 0 && index !== 0) throw new Error('Invalid index')
36382
36383 // 32 bytes: the chain code
36384 var chainCode = buffer.slice(13, 45)
36385 var keyPair
36386
36387 // 33 bytes: private key data (0x00 + k)
36388 if (version === network.bip32.private) {
36389 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
36390
36391 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
36392 keyPair = new ECPair(d, null, { network: network })
36393
36394 // 33 bytes: public key data (0x02 + X or 0x03 + X)
36395 } else {
36396 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
36397 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
36398
36399 // Verify that the X coordinate in the public point corresponds to a point on the curve.
36400 // If not, the extended public key is invalid.
36401 curve.validate(Q)
36402
36403 keyPair = new ECPair(null, Q, { network: network })
36404 }
36405
36406 var hd = new HDNode(keyPair, chainCode)
36407 hd.depth = depth
36408 hd.index = index
36409 hd.parentFingerprint = parentFingerprint
36410
36411 return hd
36412 }
36413
36414 HDNode.prototype.getAddress = function () {
36415 return this.keyPair.getAddress()
36416 }
36417
36418 HDNode.prototype.getIdentifier = function () {
36419 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
36420 }
36421
36422 HDNode.prototype.getFingerprint = function () {
36423 return this.getIdentifier().slice(0, 4)
36424 }
36425
36426 HDNode.prototype.getNetwork = function () {
36427 return this.keyPair.getNetwork()
36428 }
36429
36430 HDNode.prototype.getPublicKeyBuffer = function () {
36431 return this.keyPair.getPublicKeyBuffer()
36432 }
36433
36434 HDNode.prototype.neutered = function () {
36435 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
36436 network: this.keyPair.network
36437 })
36438
36439 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
36440 neutered.depth = this.depth
36441 neutered.index = this.index
36442 neutered.parentFingerprint = this.parentFingerprint
36443
36444 return neutered
36445 }
36446
36447 HDNode.prototype.sign = function (hash) {
36448 return this.keyPair.sign(hash)
36449 }
36450
36451 HDNode.prototype.verify = function (hash, signature) {
36452 return this.keyPair.verify(hash, signature)
36453 }
36454
36455 HDNode.prototype.toBase58 = function (__isPrivate) {
36456 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
36457
36458 // Version
36459 var network = this.keyPair.network
36460 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
36461 var buffer = Buffer.allocUnsafe(78)
36462
36463 // 4 bytes: version bytes
36464 buffer.writeUInt32BE(version, 0)
36465
36466 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
36467 buffer.writeUInt8(this.depth, 4)
36468
36469 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
36470 buffer.writeUInt32BE(this.parentFingerprint, 5)
36471
36472 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
36473 // This is encoded in big endian. (0x00000000 if master key)
36474 buffer.writeUInt32BE(this.index, 9)
36475
36476 // 32 bytes: the chain code
36477 this.chainCode.copy(buffer, 13)
36478
36479 // 33 bytes: the public key or private key data
36480 if (!this.isNeutered()) {
36481 // 0x00 + k for private keys
36482 buffer.writeUInt8(0, 45)
36483 this.keyPair.d.toBuffer(32).copy(buffer, 46)
36484
36485 // 33 bytes: the public key
36486 } else {
36487 // X9.62 encoding for public keys
36488 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
36489 }
36490
36491 return base58check.encode(buffer)
36492 }
36493
36494 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
36495 HDNode.prototype.derive = function (index) {
36496 typeforce(types.UInt32, index)
36497
36498 var isHardened = index >= HDNode.HIGHEST_BIT
36499 var data = Buffer.allocUnsafe(37)
36500
36501 // Hardened child
36502 if (isHardened) {
36503 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
36504
36505 // data = 0x00 || ser256(kpar) || ser32(index)
36506 data[0] = 0x00
36507 this.keyPair.d.toBuffer(32).copy(data, 1)
36508 data.writeUInt32BE(index, 33)
36509
36510 // Normal child
36511 } else {
36512 // data = serP(point(kpar)) || ser32(index)
36513 // = serP(Kpar) || ser32(index)
36514 this.keyPair.getPublicKeyBuffer().copy(data, 0)
36515 data.writeUInt32BE(index, 33)
36516 }
36517
36518 var I = createHmac('sha512', this.chainCode).update(data).digest()
36519 var IL = I.slice(0, 32)
36520 var IR = I.slice(32)
36521
36522 var pIL = BigInteger.fromBuffer(IL)
36523
36524 // In case parse256(IL) >= n, proceed with the next value for i
36525 if (pIL.compareTo(curve.n) >= 0) {
36526 return this.derive(index + 1)
36527 }
36528
36529 // Private parent key -> private child key
36530 var derivedKeyPair
36531 if (!this.isNeutered()) {
36532 // ki = parse256(IL) + kpar (mod n)
36533 var ki = pIL.add(this.keyPair.d).mod(curve.n)
36534
36535 // In case ki == 0, proceed with the next value for i
36536 if (ki.signum() === 0) {
36537 return this.derive(index + 1)
36538 }
36539
36540 derivedKeyPair = new ECPair(ki, null, {
36541 network: this.keyPair.network
36542 })
36543
36544 // Public parent key -> public child key
36545 } else {
36546 // Ki = point(parse256(IL)) + Kpar
36547 // = G*IL + Kpar
36548 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
36549
36550 // In case Ki is the point at infinity, proceed with the next value for i
36551 if (curve.isInfinity(Ki)) {
36552 return this.derive(index + 1)
36553 }
36554
36555 derivedKeyPair = new ECPair(null, Ki, {
36556 network: this.keyPair.network
36557 })
36558 }
36559
36560 var hd = new HDNode(derivedKeyPair, IR)
36561 hd.depth = this.depth + 1
36562 hd.index = index
36563 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
36564
36565 return hd
36566 }
36567
36568 HDNode.prototype.deriveHardened = function (index) {
36569 typeforce(types.UInt31, index)
36570
36571 // Only derives hardened private keys by default
36572 return this.derive(index + HDNode.HIGHEST_BIT)
36573 }
36574
36575 // Private === not neutered
36576 // Public === neutered
36577 HDNode.prototype.isNeutered = function () {
36578 return !(this.keyPair.d)
36579 }
36580
36581 HDNode.prototype.derivePath = function (path) {
36582 typeforce(types.BIP32Path, path)
36583
36584 var splitPath = path.split('/')
36585 if (splitPath[0] === 'm') {
36586 if (this.parentFingerprint) {
36587 throw new Error('Not a master node')
36588 }
36589
36590 splitPath = splitPath.slice(1)
36591 }
36592
36593 return splitPath.reduce(function (prevHd, indexStr) {
36594 var index
36595 if (indexStr.slice(-1) === "'") {
36596 index = parseInt(indexStr.slice(0, -1), 10)
36597 return prevHd.deriveHardened(index)
36598 } else {
36599 index = parseInt(indexStr, 10)
36600 return prevHd.derive(index)
36601 }
36602 }, this)
36603 }
36604
36605 module.exports = HDNode
36606
36607 },{"./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){
36608 var script = require('./script')
36609
36610 var templates = require('./templates')
36611 for (var key in templates) {
36612 script[key] = templates[key]
36613 }
36614
36615 module.exports = {
36616 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
36617
36618 Block: require('./block'),
36619 ECPair: require('./ecpair'),
36620 ECSignature: require('./ecsignature'),
36621 HDNode: require('./hdnode'),
36622 Transaction: require('./transaction'),
36623 TransactionBuilder: require('./transaction_builder'),
36624
36625 address: require('./address'),
36626 crypto: require('./crypto'),
36627 networks: require('./networks'),
36628 opcodes: require('bitcoin-ops'),
36629 script: script
36630 }
36631
36632 },{"./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){
36633 // https://en.bitcoin.it/wiki/List_of_address_prefixes
36634 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
36635
36636 module.exports = {
36637 bitcoin: {
36638 messagePrefix: '\x18Bitcoin Signed Message:\n',
36639 bech32: 'bc',
36640 bip32: {
36641 public: 0x0488b21e,
36642 private: 0x0488ade4
36643 },
36644 pubKeyHash: 0x00,
36645 scriptHash: 0x05,
36646 wif: 0x80
36647 },
36648 testnet: {
36649 messagePrefix: '\x18Bitcoin Signed Message:\n',
36650 bech32: 'tb',
36651 bip32: {
36652 public: 0x043587cf,
36653 private: 0x04358394
36654 },
36655 pubKeyHash: 0x6f,
36656 scriptHash: 0xc4,
36657 wif: 0xef
36658 },
36659 litecoin: {
36660 messagePrefix: '\x19Litecoin Signed Message:\n',
36661 bip32: {
36662 public: 0x019da462,
36663 private: 0x019d9cfe
36664 },
36665 pubKeyHash: 0x30,
36666 scriptHash: 0x32,
36667 wif: 0xb0
36668 }
36669 }
36670
36671 },{}],54:[function(require,module,exports){
36672 var Buffer = require('safe-buffer').Buffer
36673 var bip66 = require('bip66')
36674 var pushdata = require('pushdata-bitcoin')
36675 var typeforce = require('typeforce')
36676 var types = require('./types')
36677 var scriptNumber = require('./script_number')
36678
36679 var OPS = require('bitcoin-ops')
36680 var REVERSE_OPS = require('bitcoin-ops/map')
36681 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
36682
36683 function isOPInt (value) {
36684 return types.Number(value) &&
36685 ((value === OPS.OP_0) ||
36686 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
36687 (value === OPS.OP_1NEGATE))
36688 }
36689
36690 function isPushOnlyChunk (value) {
36691 return types.Buffer(value) || isOPInt(value)
36692 }
36693
36694 function isPushOnly (value) {
36695 return types.Array(value) && value.every(isPushOnlyChunk)
36696 }
36697
36698 function asMinimalOP (buffer) {
36699 if (buffer.length === 0) return OPS.OP_0
36700 if (buffer.length !== 1) return
36701 if (buffer[0] >= 1 && buffer[0] <= 16) return OP_INT_BASE + buffer[0]
36702 if (buffer[0] === 0x81) return OPS.OP_1NEGATE
36703 }
36704
36705 function compile (chunks) {
36706 // TODO: remove me
36707 if (Buffer.isBuffer(chunks)) return chunks
36708
36709 typeforce(types.Array, chunks)
36710
36711 var bufferSize = chunks.reduce(function (accum, chunk) {
36712 // data chunk
36713 if (Buffer.isBuffer(chunk)) {
36714 // adhere to BIP62.3, minimal push policy
36715 if (chunk.length === 1 && asMinimalOP(chunk) !== undefined) {
36716 return accum + 1
36717 }
36718
36719 return accum + pushdata.encodingLength(chunk.length) + chunk.length
36720 }
36721
36722 // opcode
36723 return accum + 1
36724 }, 0.0)
36725
36726 var buffer = Buffer.allocUnsafe(bufferSize)
36727 var offset = 0
36728
36729 chunks.forEach(function (chunk) {
36730 // data chunk
36731 if (Buffer.isBuffer(chunk)) {
36732 // adhere to BIP62.3, minimal push policy
36733 var opcode = asMinimalOP(chunk)
36734 if (opcode !== undefined) {
36735 buffer.writeUInt8(opcode, offset)
36736 offset += 1
36737 return
36738 }
36739
36740 offset += pushdata.encode(buffer, chunk.length, offset)
36741 chunk.copy(buffer, offset)
36742 offset += chunk.length
36743
36744 // opcode
36745 } else {
36746 buffer.writeUInt8(chunk, offset)
36747 offset += 1
36748 }
36749 })
36750
36751 if (offset !== buffer.length) throw new Error('Could not decode chunks')
36752 return buffer
36753 }
36754
36755 function decompile (buffer) {
36756 // TODO: remove me
36757 if (types.Array(buffer)) return buffer
36758
36759 typeforce(types.Buffer, buffer)
36760
36761 var chunks = []
36762 var i = 0
36763
36764 while (i < buffer.length) {
36765 var opcode = buffer[i]
36766
36767 // data chunk
36768 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
36769 var d = pushdata.decode(buffer, i)
36770
36771 // did reading a pushDataInt fail? empty script
36772 if (d === null) return []
36773 i += d.size
36774
36775 // attempt to read too much data? empty script
36776 if (i + d.number > buffer.length) return []
36777
36778 var data = buffer.slice(i, i + d.number)
36779 i += d.number
36780
36781 // decompile minimally
36782 var op = asMinimalOP(data)
36783 if (op !== undefined) {
36784 chunks.push(op)
36785 } else {
36786 chunks.push(data)
36787 }
36788
36789 // opcode
36790 } else {
36791 chunks.push(opcode)
36792
36793 i += 1
36794 }
36795 }
36796
36797 return chunks
36798 }
36799
36800 function toASM (chunks) {
36801 if (Buffer.isBuffer(chunks)) {
36802 chunks = decompile(chunks)
36803 }
36804
36805 return chunks.map(function (chunk) {
36806 // data?
36807 if (Buffer.isBuffer(chunk)) {
36808 var op = asMinimalOP(chunk)
36809 if (op === undefined) return chunk.toString('hex')
36810 chunk = op
36811 }
36812
36813 // opcode!
36814 return REVERSE_OPS[chunk]
36815 }).join(' ')
36816 }
36817
36818 function fromASM (asm) {
36819 typeforce(types.String, asm)
36820
36821 return compile(asm.split(' ').map(function (chunkStr) {
36822 // opcode?
36823 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
36824 typeforce(types.Hex, chunkStr)
36825
36826 // data!
36827 return Buffer.from(chunkStr, 'hex')
36828 }))
36829 }
36830
36831 function toStack (chunks) {
36832 chunks = decompile(chunks)
36833 typeforce(isPushOnly, chunks)
36834
36835 return chunks.map(function (op) {
36836 if (Buffer.isBuffer(op)) return op
36837 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
36838
36839 return scriptNumber.encode(op - OP_INT_BASE)
36840 })
36841 }
36842
36843 function isCanonicalPubKey (buffer) {
36844 if (!Buffer.isBuffer(buffer)) return false
36845 if (buffer.length < 33) return false
36846
36847 switch (buffer[0]) {
36848 case 0x02:
36849 case 0x03:
36850 return buffer.length === 33
36851 case 0x04:
36852 return buffer.length === 65
36853 }
36854
36855 return false
36856 }
36857
36858 function isDefinedHashType (hashType) {
36859 var hashTypeMod = hashType & ~0x80
36860
36861 // return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
36862 return hashTypeMod > 0x00 && hashTypeMod < 0x04
36863 }
36864
36865 function isCanonicalSignature (buffer) {
36866 if (!Buffer.isBuffer(buffer)) return false
36867 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
36868
36869 return bip66.check(buffer.slice(0, -1))
36870 }
36871
36872 module.exports = {
36873 compile: compile,
36874 decompile: decompile,
36875 fromASM: fromASM,
36876 toASM: toASM,
36877 toStack: toStack,
36878
36879 number: require('./script_number'),
36880
36881 isCanonicalPubKey: isCanonicalPubKey,
36882 isCanonicalSignature: isCanonicalSignature,
36883 isPushOnly: isPushOnly,
36884 isDefinedHashType: isDefinedHashType
36885 }
36886
36887 },{"./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){
36888 var Buffer = require('safe-buffer').Buffer
36889
36890 function decode (buffer, maxLength, minimal) {
36891 maxLength = maxLength || 4
36892 minimal = minimal === undefined ? true : minimal
36893
36894 var length = buffer.length
36895 if (length === 0) return 0
36896 if (length > maxLength) throw new TypeError('Script number overflow')
36897 if (minimal) {
36898 if ((buffer[length - 1] & 0x7f) === 0) {
36899 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
36900 }
36901 }
36902
36903 // 40-bit
36904 if (length === 5) {
36905 var a = buffer.readUInt32LE(0)
36906 var b = buffer.readUInt8(4)
36907
36908 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
36909 return (b * 0x100000000) + a
36910 }
36911
36912 var result = 0
36913
36914 // 32-bit / 24-bit / 16-bit / 8-bit
36915 for (var i = 0; i < length; ++i) {
36916 result |= buffer[i] << (8 * i)
36917 }
36918
36919 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
36920 return result
36921 }
36922
36923 function scriptNumSize (i) {
36924 return i > 0x7fffffff ? 5
36925 : i > 0x7fffff ? 4
36926 : i > 0x7fff ? 3
36927 : i > 0x7f ? 2
36928 : i > 0x00 ? 1
36929 : 0
36930 }
36931
36932 function encode (number) {
36933 var value = Math.abs(number)
36934 var size = scriptNumSize(value)
36935 var buffer = Buffer.allocUnsafe(size)
36936 var negative = number < 0
36937
36938 for (var i = 0; i < size; ++i) {
36939 buffer.writeUInt8(value & 0xff, i)
36940 value >>= 8
36941 }
36942
36943 if (buffer[size - 1] & 0x80) {
36944 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
36945 } else if (negative) {
36946 buffer[size - 1] |= 0x80
36947 }
36948
36949 return buffer
36950 }
36951
36952 module.exports = {
36953 decode: decode,
36954 encode: encode
36955 }
36956
36957 },{"safe-buffer":101}],56:[function(require,module,exports){
36958 var decompile = require('../script').decompile
36959 var multisig = require('./multisig')
36960 var nullData = require('./nulldata')
36961 var pubKey = require('./pubkey')
36962 var pubKeyHash = require('./pubkeyhash')
36963 var scriptHash = require('./scripthash')
36964 var witnessPubKeyHash = require('./witnesspubkeyhash')
36965 var witnessScriptHash = require('./witnessscripthash')
36966 var witnessCommitment = require('./witnesscommitment')
36967
36968 var types = {
36969 MULTISIG: 'multisig',
36970 NONSTANDARD: 'nonstandard',
36971 NULLDATA: 'nulldata',
36972 P2PK: 'pubkey',
36973 P2PKH: 'pubkeyhash',
36974 P2SH: 'scripthash',
36975 P2WPKH: 'witnesspubkeyhash',
36976 P2WSH: 'witnessscripthash',
36977 WITNESS_COMMITMENT: 'witnesscommitment'
36978 }
36979
36980 function classifyOutput (script) {
36981 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
36982 if (witnessScriptHash.output.check(script)) return types.P2WSH
36983 if (pubKeyHash.output.check(script)) return types.P2PKH
36984 if (scriptHash.output.check(script)) return types.P2SH
36985
36986 // XXX: optimization, below functions .decompile before use
36987 var chunks = decompile(script)
36988 if (multisig.output.check(chunks)) return types.MULTISIG
36989 if (pubKey.output.check(chunks)) return types.P2PK
36990 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
36991 if (nullData.output.check(chunks)) return types.NULLDATA
36992
36993 return types.NONSTANDARD
36994 }
36995
36996 function classifyInput (script, allowIncomplete) {
36997 // XXX: optimization, below functions .decompile before use
36998 var chunks = decompile(script)
36999
37000 if (pubKeyHash.input.check(chunks)) return types.P2PKH
37001 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
37002 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
37003 if (pubKey.input.check(chunks)) return types.P2PK
37004
37005 return types.NONSTANDARD
37006 }
37007
37008 function classifyWitness (script, allowIncomplete) {
37009 // XXX: optimization, below functions .decompile before use
37010 var chunks = decompile(script)
37011
37012 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
37013 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
37014
37015 return types.NONSTANDARD
37016 }
37017
37018 module.exports = {
37019 classifyInput: classifyInput,
37020 classifyOutput: classifyOutput,
37021 classifyWitness: classifyWitness,
37022 multisig: multisig,
37023 nullData: nullData,
37024 pubKey: pubKey,
37025 pubKeyHash: pubKeyHash,
37026 scriptHash: scriptHash,
37027 witnessPubKeyHash: witnessPubKeyHash,
37028 witnessScriptHash: witnessScriptHash,
37029 witnessCommitment: witnessCommitment,
37030 types: types
37031 }
37032
37033 },{"../script":54,"./multisig":57,"./nulldata":60,"./pubkey":61,"./pubkeyhash":64,"./scripthash":67,"./witnesscommitment":70,"./witnesspubkeyhash":72,"./witnessscripthash":75}],57:[function(require,module,exports){
37034 module.exports = {
37035 input: require('./input'),
37036 output: require('./output')
37037 }
37038
37039 },{"./input":58,"./output":59}],58:[function(require,module,exports){
37040 // OP_0 [signatures ...]
37041
37042 var Buffer = require('safe-buffer').Buffer
37043 var bscript = require('../../script')
37044 var p2mso = require('./output')
37045 var typeforce = require('typeforce')
37046 var OPS = require('bitcoin-ops')
37047
37048 function partialSignature (value) {
37049 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
37050 }
37051
37052 function check (script, allowIncomplete) {
37053 var chunks = bscript.decompile(script)
37054 if (chunks.length < 2) return false
37055 if (chunks[0] !== OPS.OP_0) return false
37056
37057 if (allowIncomplete) {
37058 return chunks.slice(1).every(partialSignature)
37059 }
37060
37061 return chunks.slice(1).every(bscript.isCanonicalSignature)
37062 }
37063 check.toJSON = function () { return 'multisig input' }
37064
37065 var EMPTY_BUFFER = Buffer.allocUnsafe(0)
37066
37067 function encodeStack (signatures, scriptPubKey) {
37068 typeforce([partialSignature], signatures)
37069
37070 if (scriptPubKey) {
37071 var scriptData = p2mso.decode(scriptPubKey)
37072
37073 if (signatures.length < scriptData.m) {
37074 throw new TypeError('Not enough signatures provided')
37075 }
37076
37077 if (signatures.length > scriptData.pubKeys.length) {
37078 throw new TypeError('Too many signatures provided')
37079 }
37080 }
37081
37082 return [].concat(EMPTY_BUFFER, signatures.map(function (sig) {
37083 if (sig === OPS.OP_0) {
37084 return EMPTY_BUFFER
37085 }
37086 return sig
37087 }))
37088 }
37089
37090 function encode (signatures, scriptPubKey) {
37091 return bscript.compile(encodeStack(signatures, scriptPubKey))
37092 }
37093
37094 function decodeStack (stack, allowIncomplete) {
37095 typeforce(typeforce.Array, stack)
37096 typeforce(check, stack, allowIncomplete)
37097 return stack.slice(1)
37098 }
37099
37100 function decode (buffer, allowIncomplete) {
37101 var stack = bscript.decompile(buffer)
37102 return decodeStack(stack, allowIncomplete)
37103 }
37104
37105 module.exports = {
37106 check: check,
37107 decode: decode,
37108 decodeStack: decodeStack,
37109 encode: encode,
37110 encodeStack: encodeStack
37111 }
37112
37113 },{"../../script":54,"./output":59,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],59:[function(require,module,exports){
37114 // m [pubKeys ...] n OP_CHECKMULTISIG
37115
37116 var bscript = require('../../script')
37117 var types = require('../../types')
37118 var typeforce = require('typeforce')
37119 var OPS = require('bitcoin-ops')
37120 var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
37121
37122 function check (script, allowIncomplete) {
37123 var chunks = bscript.decompile(script)
37124
37125 if (chunks.length < 4) return false
37126 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
37127 if (!types.Number(chunks[0])) return false
37128 if (!types.Number(chunks[chunks.length - 2])) return false
37129 var m = chunks[0] - OP_INT_BASE
37130 var n = chunks[chunks.length - 2] - OP_INT_BASE
37131
37132 if (m <= 0) return false
37133 if (n > 16) return false
37134 if (m > n) return false
37135 if (n !== chunks.length - 3) return false
37136 if (allowIncomplete) return true
37137
37138 var keys = chunks.slice(1, -2)
37139 return keys.every(bscript.isCanonicalPubKey)
37140 }
37141 check.toJSON = function () { return 'multi-sig output' }
37142
37143 function encode (m, pubKeys) {
37144 typeforce({
37145 m: types.Number,
37146 pubKeys: [bscript.isCanonicalPubKey]
37147 }, {
37148 m: m,
37149 pubKeys: pubKeys
37150 })
37151
37152 var n = pubKeys.length
37153 if (n < m) throw new TypeError('Not enough pubKeys provided')
37154
37155 return bscript.compile([].concat(
37156 OP_INT_BASE + m,
37157 pubKeys,
37158 OP_INT_BASE + n,
37159 OPS.OP_CHECKMULTISIG
37160 ))
37161 }
37162
37163 function decode (buffer, allowIncomplete) {
37164 var chunks = bscript.decompile(buffer)
37165 typeforce(check, chunks, allowIncomplete)
37166
37167 return {
37168 m: chunks[0] - OP_INT_BASE,
37169 pubKeys: chunks.slice(1, -2)
37170 }
37171 }
37172
37173 module.exports = {
37174 check: check,
37175 decode: decode,
37176 encode: encode
37177 }
37178
37179 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],60:[function(require,module,exports){
37180 // OP_RETURN {data}
37181
37182 var bscript = require('../script')
37183 var types = require('../types')
37184 var typeforce = require('typeforce')
37185 var OPS = require('bitcoin-ops')
37186
37187 function check (script) {
37188 var buffer = bscript.compile(script)
37189
37190 return buffer.length > 1 &&
37191 buffer[0] === OPS.OP_RETURN
37192 }
37193 check.toJSON = function () { return 'null data output' }
37194
37195 function encode (data) {
37196 typeforce(types.Buffer, data)
37197
37198 return bscript.compile([OPS.OP_RETURN, data])
37199 }
37200
37201 function decode (buffer) {
37202 typeforce(check, buffer)
37203
37204 return buffer.slice(2)
37205 }
37206
37207 module.exports = {
37208 output: {
37209 check: check,
37210 decode: decode,
37211 encode: encode
37212 }
37213 }
37214
37215 },{"../script":54,"../types":80,"bitcoin-ops":42,"typeforce":112}],61:[function(require,module,exports){
37216 arguments[4][57][0].apply(exports,arguments)
37217 },{"./input":62,"./output":63,"dup":57}],62:[function(require,module,exports){
37218 // {signature}
37219
37220 var bscript = require('../../script')
37221 var typeforce = require('typeforce')
37222
37223 function check (script) {
37224 var chunks = bscript.decompile(script)
37225
37226 return chunks.length === 1 &&
37227 bscript.isCanonicalSignature(chunks[0])
37228 }
37229 check.toJSON = function () { return 'pubKey input' }
37230
37231 function encodeStack (signature) {
37232 typeforce(bscript.isCanonicalSignature, signature)
37233 return [signature]
37234 }
37235
37236 function encode (signature) {
37237 return bscript.compile(encodeStack(signature))
37238 }
37239
37240 function decodeStack (stack) {
37241 typeforce(typeforce.Array, stack)
37242 typeforce(check, stack)
37243 return stack[0]
37244 }
37245
37246 function decode (buffer) {
37247 var stack = bscript.decompile(buffer)
37248 return decodeStack(stack)
37249 }
37250
37251 module.exports = {
37252 check: check,
37253 decode: decode,
37254 decodeStack: decodeStack,
37255 encode: encode,
37256 encodeStack: encodeStack
37257 }
37258
37259 },{"../../script":54,"typeforce":112}],63:[function(require,module,exports){
37260 // {pubKey} OP_CHECKSIG
37261
37262 var bscript = require('../../script')
37263 var typeforce = require('typeforce')
37264 var OPS = require('bitcoin-ops')
37265
37266 function check (script) {
37267 var chunks = bscript.decompile(script)
37268
37269 return chunks.length === 2 &&
37270 bscript.isCanonicalPubKey(chunks[0]) &&
37271 chunks[1] === OPS.OP_CHECKSIG
37272 }
37273 check.toJSON = function () { return 'pubKey output' }
37274
37275 function encode (pubKey) {
37276 typeforce(bscript.isCanonicalPubKey, pubKey)
37277
37278 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
37279 }
37280
37281 function decode (buffer) {
37282 var chunks = bscript.decompile(buffer)
37283 typeforce(check, chunks)
37284
37285 return chunks[0]
37286 }
37287
37288 module.exports = {
37289 check: check,
37290 decode: decode,
37291 encode: encode
37292 }
37293
37294 },{"../../script":54,"bitcoin-ops":42,"typeforce":112}],64:[function(require,module,exports){
37295 arguments[4][57][0].apply(exports,arguments)
37296 },{"./input":65,"./output":66,"dup":57}],65:[function(require,module,exports){
37297 // {signature} {pubKey}
37298
37299 var bscript = require('../../script')
37300 var typeforce = require('typeforce')
37301
37302 function check (script) {
37303 var chunks = bscript.decompile(script)
37304
37305 return chunks.length === 2 &&
37306 bscript.isCanonicalSignature(chunks[0]) &&
37307 bscript.isCanonicalPubKey(chunks[1])
37308 }
37309 check.toJSON = function () { return 'pubKeyHash input' }
37310
37311 function encodeStack (signature, pubKey) {
37312 typeforce({
37313 signature: bscript.isCanonicalSignature,
37314 pubKey: bscript.isCanonicalPubKey
37315 }, {
37316 signature: signature,
37317 pubKey: pubKey
37318 })
37319
37320 return [signature, pubKey]
37321 }
37322
37323 function encode (signature, pubKey) {
37324 return bscript.compile(encodeStack(signature, pubKey))
37325 }
37326
37327 function decodeStack (stack) {
37328 typeforce(typeforce.Array, stack)
37329 typeforce(check, stack)
37330
37331 return {
37332 signature: stack[0],
37333 pubKey: stack[1]
37334 }
37335 }
37336
37337 function decode (buffer) {
37338 var stack = bscript.decompile(buffer)
37339 return decodeStack(stack)
37340 }
37341
37342 module.exports = {
37343 check: check,
37344 decode: decode,
37345 decodeStack: decodeStack,
37346 encode: encode,
37347 encodeStack: encodeStack
37348 }
37349
37350 },{"../../script":54,"typeforce":112}],66:[function(require,module,exports){
37351 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
37352
37353 var bscript = require('../../script')
37354 var types = require('../../types')
37355 var typeforce = require('typeforce')
37356 var OPS = require('bitcoin-ops')
37357
37358 function check (script) {
37359 var buffer = bscript.compile(script)
37360
37361 return buffer.length === 25 &&
37362 buffer[0] === OPS.OP_DUP &&
37363 buffer[1] === OPS.OP_HASH160 &&
37364 buffer[2] === 0x14 &&
37365 buffer[23] === OPS.OP_EQUALVERIFY &&
37366 buffer[24] === OPS.OP_CHECKSIG
37367 }
37368 check.toJSON = function () { return 'pubKeyHash output' }
37369
37370 function encode (pubKeyHash) {
37371 typeforce(types.Hash160bit, pubKeyHash)
37372
37373 return bscript.compile([
37374 OPS.OP_DUP,
37375 OPS.OP_HASH160,
37376 pubKeyHash,
37377 OPS.OP_EQUALVERIFY,
37378 OPS.OP_CHECKSIG
37379 ])
37380 }
37381
37382 function decode (buffer) {
37383 typeforce(check, buffer)
37384
37385 return buffer.slice(3, 23)
37386 }
37387
37388 module.exports = {
37389 check: check,
37390 decode: decode,
37391 encode: encode
37392 }
37393
37394 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],67:[function(require,module,exports){
37395 arguments[4][57][0].apply(exports,arguments)
37396 },{"./input":68,"./output":69,"dup":57}],68:[function(require,module,exports){
37397 // <scriptSig> {serialized scriptPubKey script}
37398
37399 var Buffer = require('safe-buffer').Buffer
37400 var bscript = require('../../script')
37401 var typeforce = require('typeforce')
37402
37403 var p2ms = require('../multisig/')
37404 var p2pk = require('../pubkey/')
37405 var p2pkh = require('../pubkeyhash/')
37406 var p2wpkho = require('../witnesspubkeyhash/output')
37407 var p2wsho = require('../witnessscripthash/output')
37408
37409 function check (script, allowIncomplete) {
37410 var chunks = bscript.decompile(script)
37411 if (chunks.length < 1) return false
37412
37413 var lastChunk = chunks[chunks.length - 1]
37414 if (!Buffer.isBuffer(lastChunk)) return false
37415
37416 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
37417 var redeemScriptChunks = bscript.decompile(lastChunk)
37418
37419 // is redeemScript a valid script?
37420 if (redeemScriptChunks.length === 0) return false
37421
37422 // is redeemScriptSig push only?
37423 if (!bscript.isPushOnly(scriptSigChunks)) return false
37424
37425 // is witness?
37426 if (chunks.length === 1) {
37427 return p2wsho.check(redeemScriptChunks) ||
37428 p2wpkho.check(redeemScriptChunks)
37429 }
37430
37431 // match types
37432 if (p2pkh.input.check(scriptSigChunks) &&
37433 p2pkh.output.check(redeemScriptChunks)) return true
37434
37435 if (p2ms.input.check(scriptSigChunks, allowIncomplete) &&
37436 p2ms.output.check(redeemScriptChunks)) return true
37437
37438 if (p2pk.input.check(scriptSigChunks) &&
37439 p2pk.output.check(redeemScriptChunks)) return true
37440
37441 return false
37442 }
37443 check.toJSON = function () { return 'scriptHash input' }
37444
37445 function encodeStack (redeemScriptStack, redeemScript) {
37446 var serializedScriptPubKey = bscript.compile(redeemScript)
37447
37448 return [].concat(redeemScriptStack, serializedScriptPubKey)
37449 }
37450
37451 function encode (redeemScriptSig, redeemScript) {
37452 var redeemScriptStack = bscript.decompile(redeemScriptSig)
37453
37454 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
37455 }
37456
37457 function decodeStack (stack) {
37458 typeforce(typeforce.Array, stack)
37459 typeforce(check, stack)
37460
37461 return {
37462 redeemScriptStack: stack.slice(0, -1),
37463 redeemScript: stack[stack.length - 1]
37464 }
37465 }
37466
37467 function decode (buffer) {
37468 var stack = bscript.decompile(buffer)
37469 var result = decodeStack(stack)
37470 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
37471 delete result.redeemScriptStack
37472 return result
37473 }
37474
37475 module.exports = {
37476 check: check,
37477 decode: decode,
37478 decodeStack: decodeStack,
37479 encode: encode,
37480 encodeStack: encodeStack
37481 }
37482
37483 },{"../../script":54,"../multisig/":57,"../pubkey/":61,"../pubkeyhash/":64,"../witnesspubkeyhash/output":74,"../witnessscripthash/output":77,"safe-buffer":101,"typeforce":112}],69:[function(require,module,exports){
37484 // OP_HASH160 {scriptHash} OP_EQUAL
37485
37486 var bscript = require('../../script')
37487 var types = require('../../types')
37488 var typeforce = require('typeforce')
37489 var OPS = require('bitcoin-ops')
37490
37491 function check (script) {
37492 var buffer = bscript.compile(script)
37493
37494 return buffer.length === 23 &&
37495 buffer[0] === OPS.OP_HASH160 &&
37496 buffer[1] === 0x14 &&
37497 buffer[22] === OPS.OP_EQUAL
37498 }
37499 check.toJSON = function () { return 'scriptHash output' }
37500
37501 function encode (scriptHash) {
37502 typeforce(types.Hash160bit, scriptHash)
37503
37504 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
37505 }
37506
37507 function decode (buffer) {
37508 typeforce(check, buffer)
37509
37510 return buffer.slice(2, 22)
37511 }
37512
37513 module.exports = {
37514 check: check,
37515 decode: decode,
37516 encode: encode
37517 }
37518
37519 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],70:[function(require,module,exports){
37520 module.exports = {
37521 output: require('./output')
37522 }
37523
37524 },{"./output":71}],71:[function(require,module,exports){
37525 // OP_RETURN {aa21a9ed} {commitment}
37526
37527 var Buffer = require('safe-buffer').Buffer
37528 var bscript = require('../../script')
37529 var types = require('../../types')
37530 var typeforce = require('typeforce')
37531 var OPS = require('bitcoin-ops')
37532
37533 var HEADER = Buffer.from('aa21a9ed', 'hex')
37534
37535 function check (script) {
37536 var buffer = bscript.compile(script)
37537
37538 return buffer.length > 37 &&
37539 buffer[0] === OPS.OP_RETURN &&
37540 buffer[1] === 0x24 &&
37541 buffer.slice(2, 6).equals(HEADER)
37542 }
37543
37544 check.toJSON = function () { return 'Witness commitment output' }
37545
37546 function encode (commitment) {
37547 typeforce(types.Hash256bit, commitment)
37548
37549 var buffer = Buffer.allocUnsafe(36)
37550 HEADER.copy(buffer, 0)
37551 commitment.copy(buffer, 4)
37552
37553 return bscript.compile([OPS.OP_RETURN, buffer])
37554 }
37555
37556 function decode (buffer) {
37557 typeforce(check, buffer)
37558
37559 return bscript.decompile(buffer)[1].slice(4, 36)
37560 }
37561
37562 module.exports = {
37563 check: check,
37564 decode: decode,
37565 encode: encode
37566 }
37567
37568 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112}],72:[function(require,module,exports){
37569 arguments[4][57][0].apply(exports,arguments)
37570 },{"./input":73,"./output":74,"dup":57}],73:[function(require,module,exports){
37571 // {signature} {pubKey}
37572
37573 var bscript = require('../../script')
37574 var typeforce = require('typeforce')
37575
37576 function isCompressedCanonicalPubKey (pubKey) {
37577 return bscript.isCanonicalPubKey(pubKey) && pubKey.length === 33
37578 }
37579
37580 function check (script) {
37581 var chunks = bscript.decompile(script)
37582
37583 return chunks.length === 2 &&
37584 bscript.isCanonicalSignature(chunks[0]) &&
37585 isCompressedCanonicalPubKey(chunks[1])
37586 }
37587 check.toJSON = function () { return 'witnessPubKeyHash input' }
37588
37589 function encodeStack (signature, pubKey) {
37590 typeforce({
37591 signature: bscript.isCanonicalSignature,
37592 pubKey: isCompressedCanonicalPubKey
37593 }, {
37594 signature: signature,
37595 pubKey: pubKey
37596 })
37597
37598 return [signature, pubKey]
37599 }
37600
37601 function decodeStack (stack) {
37602 typeforce(typeforce.Array, stack)
37603 typeforce(check, stack)
37604
37605 return {
37606 signature: stack[0],
37607 pubKey: stack[1]
37608 }
37609 }
37610
37611 module.exports = {
37612 check: check,
37613 decodeStack: decodeStack,
37614 encodeStack: encodeStack
37615 }
37616
37617 },{"../../script":54,"typeforce":112}],74:[function(require,module,exports){
37618 // OP_0 {pubKeyHash}
37619
37620 var bscript = require('../../script')
37621 var types = require('../../types')
37622 var typeforce = require('typeforce')
37623 var OPS = require('bitcoin-ops')
37624
37625 function check (script) {
37626 var buffer = bscript.compile(script)
37627
37628 return buffer.length === 22 &&
37629 buffer[0] === OPS.OP_0 &&
37630 buffer[1] === 0x14
37631 }
37632 check.toJSON = function () { return 'Witness pubKeyHash output' }
37633
37634 function encode (pubKeyHash) {
37635 typeforce(types.Hash160bit, pubKeyHash)
37636
37637 return bscript.compile([OPS.OP_0, pubKeyHash])
37638 }
37639
37640 function decode (buffer) {
37641 typeforce(check, buffer)
37642
37643 return buffer.slice(2)
37644 }
37645
37646 module.exports = {
37647 check: check,
37648 decode: decode,
37649 encode: encode
37650 }
37651
37652 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],75:[function(require,module,exports){
37653 arguments[4][57][0].apply(exports,arguments)
37654 },{"./input":76,"./output":77,"dup":57}],76:[function(require,module,exports){
37655 (function (Buffer){
37656 // <scriptSig> {serialized scriptPubKey script}
37657
37658 var bscript = require('../../script')
37659 var types = require('../../types')
37660 var typeforce = require('typeforce')
37661
37662 var p2ms = require('../multisig/')
37663 var p2pk = require('../pubkey/')
37664 var p2pkh = require('../pubkeyhash/')
37665
37666 function check (chunks, allowIncomplete) {
37667 typeforce(types.Array, chunks)
37668 if (chunks.length < 1) return false
37669
37670 var witnessScript = chunks[chunks.length - 1]
37671 if (!Buffer.isBuffer(witnessScript)) return false
37672
37673 var witnessScriptChunks = bscript.decompile(witnessScript)
37674
37675 // is witnessScript a valid script?
37676 if (witnessScriptChunks.length === 0) return false
37677
37678 var witnessRawScriptSig = bscript.compile(chunks.slice(0, -1))
37679
37680 // match types
37681 if (p2pkh.input.check(witnessRawScriptSig) &&
37682 p2pkh.output.check(witnessScriptChunks)) return true
37683
37684 if (p2ms.input.check(witnessRawScriptSig, allowIncomplete) &&
37685 p2ms.output.check(witnessScriptChunks)) return true
37686
37687 if (p2pk.input.check(witnessRawScriptSig) &&
37688 p2pk.output.check(witnessScriptChunks)) return true
37689
37690 return false
37691 }
37692 check.toJSON = function () { return 'witnessScriptHash input' }
37693
37694 function encodeStack (witnessData, witnessScript) {
37695 typeforce({
37696 witnessData: [types.Buffer],
37697 witnessScript: types.Buffer
37698 }, {
37699 witnessData: witnessData,
37700 witnessScript: witnessScript
37701 })
37702
37703 return [].concat(witnessData, witnessScript)
37704 }
37705
37706 function decodeStack (stack) {
37707 typeforce(typeforce.Array, stack)
37708 typeforce(check, stack)
37709 return {
37710 witnessData: stack.slice(0, -1),
37711 witnessScript: stack[stack.length - 1]
37712 }
37713 }
37714
37715 module.exports = {
37716 check: check,
37717 decodeStack: decodeStack,
37718 encodeStack: encodeStack
37719 }
37720
37721 }).call(this,{"isBuffer":require("../../../../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37722 },{"../../../../../../../../.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){
37723 // OP_0 {scriptHash}
37724
37725 var bscript = require('../../script')
37726 var types = require('../../types')
37727 var typeforce = require('typeforce')
37728 var OPS = require('bitcoin-ops')
37729
37730 function check (script) {
37731 var buffer = bscript.compile(script)
37732
37733 return buffer.length === 34 &&
37734 buffer[0] === OPS.OP_0 &&
37735 buffer[1] === 0x20
37736 }
37737 check.toJSON = function () { return 'Witness scriptHash output' }
37738
37739 function encode (scriptHash) {
37740 typeforce(types.Hash256bit, scriptHash)
37741
37742 return bscript.compile([OPS.OP_0, scriptHash])
37743 }
37744
37745 function decode (buffer) {
37746 typeforce(check, buffer)
37747
37748 return buffer.slice(2)
37749 }
37750
37751 module.exports = {
37752 check: check,
37753 decode: decode,
37754 encode: encode
37755 }
37756
37757 },{"../../script":54,"../../types":80,"bitcoin-ops":42,"typeforce":112}],78:[function(require,module,exports){
37758 var Buffer = require('safe-buffer').Buffer
37759 var bcrypto = require('./crypto')
37760 var bscript = require('./script')
37761 var bufferutils = require('./bufferutils')
37762 var opcodes = require('bitcoin-ops')
37763 var typeforce = require('typeforce')
37764 var types = require('./types')
37765 var varuint = require('varuint-bitcoin')
37766
37767 function varSliceSize (someScript) {
37768 var length = someScript.length
37769
37770 return varuint.encodingLength(length) + length
37771 }
37772
37773 function vectorSize (someVector) {
37774 var length = someVector.length
37775
37776 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
37777 return sum + varSliceSize(witness)
37778 }, 0)
37779 }
37780
37781 function Transaction () {
37782 this.version = 1
37783 this.locktime = 0
37784 this.ins = []
37785 this.outs = []
37786 }
37787
37788 Transaction.DEFAULT_SEQUENCE = 0xffffffff
37789 Transaction.SIGHASH_ALL = 0x01
37790 Transaction.SIGHASH_NONE = 0x02
37791 Transaction.SIGHASH_SINGLE = 0x03
37792 Transaction.SIGHASH_ANYONECANPAY = 0x80
37793 Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
37794 Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
37795
37796 var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
37797 var EMPTY_WITNESS = []
37798 var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
37799 var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
37800 var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
37801 var BLANK_OUTPUT = {
37802 script: EMPTY_SCRIPT,
37803 valueBuffer: VALUE_UINT64_MAX
37804 }
37805
37806 Transaction.fromBuffer = function (buffer, __noStrict) {
37807 var offset = 0
37808 function readSlice (n) {
37809 offset += n
37810 return buffer.slice(offset - n, offset)
37811 }
37812
37813 function readUInt32 () {
37814 var i = buffer.readUInt32LE(offset)
37815 offset += 4
37816 return i
37817 }
37818
37819 function readInt32 () {
37820 var i = buffer.readInt32LE(offset)
37821 offset += 4
37822 return i
37823 }
37824
37825 function readUInt64 () {
37826 var i = bufferutils.readUInt64LE(buffer, offset)
37827 offset += 8
37828 return i
37829 }
37830
37831 function readVarInt () {
37832 var vi = varuint.decode(buffer, offset)
37833 offset += varuint.decode.bytes
37834 return vi
37835 }
37836
37837 function readVarSlice () {
37838 return readSlice(readVarInt())
37839 }
37840
37841 function readVector () {
37842 var count = readVarInt()
37843 var vector = []
37844 for (var i = 0; i < count; i++) vector.push(readVarSlice())
37845 return vector
37846 }
37847
37848 var tx = new Transaction()
37849 tx.version = readInt32()
37850
37851 var marker = buffer.readUInt8(offset)
37852 var flag = buffer.readUInt8(offset + 1)
37853
37854 var hasWitnesses = false
37855 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
37856 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
37857 offset += 2
37858 hasWitnesses = true
37859 }
37860
37861 var vinLen = readVarInt()
37862 for (var i = 0; i < vinLen; ++i) {
37863 tx.ins.push({
37864 hash: readSlice(32),
37865 index: readUInt32(),
37866 script: readVarSlice(),
37867 sequence: readUInt32(),
37868 witness: EMPTY_WITNESS
37869 })
37870 }
37871
37872 var voutLen = readVarInt()
37873 for (i = 0; i < voutLen; ++i) {
37874 tx.outs.push({
37875 value: readUInt64(),
37876 script: readVarSlice()
37877 })
37878 }
37879
37880 if (hasWitnesses) {
37881 for (i = 0; i < vinLen; ++i) {
37882 tx.ins[i].witness = readVector()
37883 }
37884
37885 // was this pointless?
37886 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
37887 }
37888
37889 tx.locktime = readUInt32()
37890
37891 if (__noStrict) return tx
37892 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
37893
37894 return tx
37895 }
37896
37897 Transaction.fromHex = function (hex) {
37898 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
37899 }
37900
37901 Transaction.isCoinbaseHash = function (buffer) {
37902 typeforce(types.Hash256bit, buffer)
37903 for (var i = 0; i < 32; ++i) {
37904 if (buffer[i] !== 0) return false
37905 }
37906 return true
37907 }
37908
37909 Transaction.prototype.isCoinbase = function () {
37910 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
37911 }
37912
37913 Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
37914 typeforce(types.tuple(
37915 types.Hash256bit,
37916 types.UInt32,
37917 types.maybe(types.UInt32),
37918 types.maybe(types.Buffer)
37919 ), arguments)
37920
37921 if (types.Null(sequence)) {
37922 sequence = Transaction.DEFAULT_SEQUENCE
37923 }
37924
37925 // Add the input and return the input's index
37926 return (this.ins.push({
37927 hash: hash,
37928 index: index,
37929 script: scriptSig || EMPTY_SCRIPT,
37930 sequence: sequence,
37931 witness: EMPTY_WITNESS
37932 }) - 1)
37933 }
37934
37935 Transaction.prototype.addOutput = function (scriptPubKey, value) {
37936 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
37937
37938 // Add the output and return the output's index
37939 return (this.outs.push({
37940 script: scriptPubKey,
37941 value: value
37942 }) - 1)
37943 }
37944
37945 Transaction.prototype.hasWitnesses = function () {
37946 return this.ins.some(function (x) {
37947 return x.witness.length !== 0
37948 })
37949 }
37950
37951 Transaction.prototype.weight = function () {
37952 var base = this.__byteLength(false)
37953 var total = this.__byteLength(true)
37954 return base * 3 + total
37955 }
37956
37957 Transaction.prototype.virtualSize = function () {
37958 return Math.ceil(this.weight() / 4)
37959 }
37960
37961 Transaction.prototype.byteLength = function () {
37962 return this.__byteLength(true)
37963 }
37964
37965 Transaction.prototype.__byteLength = function (__allowWitness) {
37966 var hasWitnesses = __allowWitness && this.hasWitnesses()
37967
37968 return (
37969 (hasWitnesses ? 10 : 8) +
37970 varuint.encodingLength(this.ins.length) +
37971 varuint.encodingLength(this.outs.length) +
37972 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
37973 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
37974 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
37975 )
37976 }
37977
37978 Transaction.prototype.clone = function () {
37979 var newTx = new Transaction()
37980 newTx.version = this.version
37981 newTx.locktime = this.locktime
37982
37983 newTx.ins = this.ins.map(function (txIn) {
37984 return {
37985 hash: txIn.hash,
37986 index: txIn.index,
37987 script: txIn.script,
37988 sequence: txIn.sequence,
37989 witness: txIn.witness
37990 }
37991 })
37992
37993 newTx.outs = this.outs.map(function (txOut) {
37994 return {
37995 script: txOut.script,
37996 value: txOut.value
37997 }
37998 })
37999
38000 return newTx
38001 }
38002
38003 /**
38004 * Hash transaction for signing a specific input.
38005 *
38006 * Bitcoin uses a different hash for each signed transaction input.
38007 * This method copies the transaction, makes the necessary changes based on the
38008 * hashType, and then hashes the result.
38009 * This hash can then be used to sign the provided transaction input.
38010 */
38011 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
38012 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
38013
38014 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
38015 if (inIndex >= this.ins.length) return ONE
38016
38017 // ignore OP_CODESEPARATOR
38018 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
38019 return x !== opcodes.OP_CODESEPARATOR
38020 }))
38021
38022 var txTmp = this.clone()
38023
38024 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
38025 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
38026 txTmp.outs = []
38027
38028 // ignore sequence numbers (except at inIndex)
38029 txTmp.ins.forEach(function (input, i) {
38030 if (i === inIndex) return
38031
38032 input.sequence = 0
38033 })
38034
38035 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
38036 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
38037 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
38038 if (inIndex >= this.outs.length) return ONE
38039
38040 // truncate outputs after
38041 txTmp.outs.length = inIndex + 1
38042
38043 // "blank" outputs before
38044 for (var i = 0; i < inIndex; i++) {
38045 txTmp.outs[i] = BLANK_OUTPUT
38046 }
38047
38048 // ignore sequence numbers (except at inIndex)
38049 txTmp.ins.forEach(function (input, y) {
38050 if (y === inIndex) return
38051
38052 input.sequence = 0
38053 })
38054 }
38055
38056 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
38057 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
38058 txTmp.ins = [txTmp.ins[inIndex]]
38059 txTmp.ins[0].script = ourScript
38060
38061 // SIGHASH_ALL: only ignore input scripts
38062 } else {
38063 // "blank" others input scripts
38064 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
38065 txTmp.ins[inIndex].script = ourScript
38066 }
38067
38068 // serialize and hash
38069 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
38070 buffer.writeInt32LE(hashType, buffer.length - 4)
38071 txTmp.__toBuffer(buffer, 0, false)
38072
38073 return bcrypto.hash256(buffer)
38074 }
38075
38076 Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
38077 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
38078
38079 var tbuffer, toffset
38080 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
38081 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
38082 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
38083 function writeVarInt (i) {
38084 varuint.encode(i, tbuffer, toffset)
38085 toffset += varuint.encode.bytes
38086 }
38087 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38088
38089 var hashOutputs = ZERO
38090 var hashPrevouts = ZERO
38091 var hashSequence = ZERO
38092
38093 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
38094 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
38095 toffset = 0
38096
38097 this.ins.forEach(function (txIn) {
38098 writeSlice(txIn.hash)
38099 writeUInt32(txIn.index)
38100 })
38101
38102 hashPrevouts = bcrypto.hash256(tbuffer)
38103 }
38104
38105 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
38106 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38107 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38108 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
38109 toffset = 0
38110
38111 this.ins.forEach(function (txIn) {
38112 writeUInt32(txIn.sequence)
38113 })
38114
38115 hashSequence = bcrypto.hash256(tbuffer)
38116 }
38117
38118 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
38119 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
38120 var txOutsSize = this.outs.reduce(function (sum, output) {
38121 return sum + 8 + varSliceSize(output.script)
38122 }, 0)
38123
38124 tbuffer = Buffer.allocUnsafe(txOutsSize)
38125 toffset = 0
38126
38127 this.outs.forEach(function (out) {
38128 writeUInt64(out.value)
38129 writeVarSlice(out.script)
38130 })
38131
38132 hashOutputs = bcrypto.hash256(tbuffer)
38133 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
38134 var output = this.outs[inIndex]
38135
38136 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
38137 toffset = 0
38138 writeUInt64(output.value)
38139 writeVarSlice(output.script)
38140
38141 hashOutputs = bcrypto.hash256(tbuffer)
38142 }
38143
38144 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
38145 toffset = 0
38146
38147 var input = this.ins[inIndex]
38148 writeUInt32(this.version)
38149 writeSlice(hashPrevouts)
38150 writeSlice(hashSequence)
38151 writeSlice(input.hash)
38152 writeUInt32(input.index)
38153 writeVarSlice(prevOutScript)
38154 writeUInt64(value)
38155 writeUInt32(input.sequence)
38156 writeSlice(hashOutputs)
38157 writeUInt32(this.locktime)
38158 writeUInt32(hashType)
38159 return bcrypto.hash256(tbuffer)
38160 }
38161
38162 Transaction.prototype.getHash = function () {
38163 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
38164 }
38165
38166 Transaction.prototype.getId = function () {
38167 // transaction hash's are displayed in reverse order
38168 return this.getHash().reverse().toString('hex')
38169 }
38170
38171 Transaction.prototype.toBuffer = function (buffer, initialOffset) {
38172 return this.__toBuffer(buffer, initialOffset, true)
38173 }
38174
38175 Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
38176 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
38177
38178 var offset = initialOffset || 0
38179 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
38180 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
38181 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
38182 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
38183 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
38184 function writeVarInt (i) {
38185 varuint.encode(i, buffer, offset)
38186 offset += varuint.encode.bytes
38187 }
38188 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
38189 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
38190
38191 writeInt32(this.version)
38192
38193 var hasWitnesses = __allowWitness && this.hasWitnesses()
38194
38195 if (hasWitnesses) {
38196 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
38197 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
38198 }
38199
38200 writeVarInt(this.ins.length)
38201
38202 this.ins.forEach(function (txIn) {
38203 writeSlice(txIn.hash)
38204 writeUInt32(txIn.index)
38205 writeVarSlice(txIn.script)
38206 writeUInt32(txIn.sequence)
38207 })
38208
38209 writeVarInt(this.outs.length)
38210 this.outs.forEach(function (txOut) {
38211 if (!txOut.valueBuffer) {
38212 writeUInt64(txOut.value)
38213 } else {
38214 writeSlice(txOut.valueBuffer)
38215 }
38216
38217 writeVarSlice(txOut.script)
38218 })
38219
38220 if (hasWitnesses) {
38221 this.ins.forEach(function (input) {
38222 writeVector(input.witness)
38223 })
38224 }
38225
38226 writeUInt32(this.locktime)
38227
38228 // avoid slicing unless necessary
38229 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
38230 return buffer
38231 }
38232
38233 Transaction.prototype.toHex = function () {
38234 return this.toBuffer().toString('hex')
38235 }
38236
38237 Transaction.prototype.setInputScript = function (index, scriptSig) {
38238 typeforce(types.tuple(types.Number, types.Buffer), arguments)
38239
38240 this.ins[index].script = scriptSig
38241 }
38242
38243 Transaction.prototype.setWitness = function (index, witness) {
38244 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
38245
38246 this.ins[index].witness = witness
38247 }
38248
38249 module.exports = Transaction
38250
38251 },{"./bufferutils":46,"./crypto":47,"./script":54,"./types":80,"bitcoin-ops":42,"safe-buffer":101,"typeforce":112,"varuint-bitcoin":114}],79:[function(require,module,exports){
38252 var Buffer = require('safe-buffer').Buffer
38253 var baddress = require('./address')
38254 var bcrypto = require('./crypto')
38255 var bscript = require('./script')
38256 var btemplates = require('./templates')
38257 var networks = require('./networks')
38258 var ops = require('bitcoin-ops')
38259 var typeforce = require('typeforce')
38260 var types = require('./types')
38261 var scriptTypes = btemplates.types
38262 var SIGNABLE = [btemplates.types.P2PKH, btemplates.types.P2PK, btemplates.types.MULTISIG]
38263 var P2SH = SIGNABLE.concat([btemplates.types.P2WPKH, btemplates.types.P2WSH])
38264
38265 var ECPair = require('./ecpair')
38266 var ECSignature = require('./ecsignature')
38267 var Transaction = require('./transaction')
38268
38269 function supportedType (type) {
38270 return SIGNABLE.indexOf(type) !== -1
38271 }
38272
38273 function supportedP2SHType (type) {
38274 return P2SH.indexOf(type) !== -1
38275 }
38276
38277 function extractChunks (type, chunks, script) {
38278 var pubKeys = []
38279 var signatures = []
38280 switch (type) {
38281 case scriptTypes.P2PKH:
38282 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
38283 pubKeys = chunks.slice(1)
38284 signatures = chunks.slice(0, 1)
38285 break
38286
38287 case scriptTypes.P2PK:
38288 pubKeys[0] = script ? btemplates.pubKey.output.decode(script) : undefined
38289 signatures = chunks.slice(0, 1)
38290 break
38291
38292 case scriptTypes.MULTISIG:
38293 if (script) {
38294 var multisig = btemplates.multisig.output.decode(script)
38295 pubKeys = multisig.pubKeys
38296 }
38297
38298 signatures = chunks.slice(1).map(function (chunk) {
38299 return chunk.length === 0 ? undefined : chunk
38300 })
38301 break
38302 }
38303
38304 return {
38305 pubKeys: pubKeys,
38306 signatures: signatures
38307 }
38308 }
38309 function expandInput (scriptSig, witnessStack) {
38310 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
38311
38312 var prevOutScript
38313 var prevOutType
38314 var scriptType
38315 var script
38316 var redeemScript
38317 var witnessScript
38318 var witnessScriptType
38319 var redeemScriptType
38320 var witness = false
38321 var p2wsh = false
38322 var p2sh = false
38323 var witnessProgram
38324 var chunks
38325
38326 var scriptSigChunks = bscript.decompile(scriptSig)
38327 var sigType = btemplates.classifyInput(scriptSigChunks, true)
38328 if (sigType === scriptTypes.P2SH) {
38329 p2sh = true
38330 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
38331 redeemScriptType = btemplates.classifyOutput(redeemScript)
38332 prevOutScript = btemplates.scriptHash.output.encode(bcrypto.hash160(redeemScript))
38333 prevOutType = scriptTypes.P2SH
38334 script = redeemScript
38335 }
38336
38337 var classifyWitness = btemplates.classifyWitness(witnessStack, true)
38338 if (classifyWitness === scriptTypes.P2WSH) {
38339 witnessScript = witnessStack[witnessStack.length - 1]
38340 witnessScriptType = btemplates.classifyOutput(witnessScript)
38341 p2wsh = true
38342 witness = true
38343 if (scriptSig.length === 0) {
38344 prevOutScript = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38345 prevOutType = scriptTypes.P2WSH
38346 if (redeemScript !== undefined) {
38347 throw new Error('Redeem script given when unnecessary')
38348 }
38349 // bare witness
38350 } else {
38351 if (!redeemScript) {
38352 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
38353 }
38354 witnessProgram = btemplates.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
38355 if (!redeemScript.equals(witnessProgram)) {
38356 throw new Error('Redeem script didn\'t match witnessScript')
38357 }
38358 }
38359
38360 if (!supportedType(btemplates.classifyOutput(witnessScript))) {
38361 throw new Error('unsupported witness script')
38362 }
38363
38364 script = witnessScript
38365 scriptType = witnessScriptType
38366 chunks = witnessStack.slice(0, -1)
38367 } else if (classifyWitness === scriptTypes.P2WPKH) {
38368 witness = true
38369 var key = witnessStack[witnessStack.length - 1]
38370 var keyHash = bcrypto.hash160(key)
38371 if (scriptSig.length === 0) {
38372 prevOutScript = btemplates.witnessPubKeyHash.output.encode(keyHash)
38373 prevOutType = scriptTypes.P2WPKH
38374 if (typeof redeemScript !== 'undefined') {
38375 throw new Error('Redeem script given when unnecessary')
38376 }
38377 } else {
38378 if (!redeemScript) {
38379 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
38380 }
38381 witnessProgram = btemplates.witnessPubKeyHash.output.encode(keyHash)
38382 if (!redeemScript.equals(witnessProgram)) {
38383 throw new Error('Redeem script did not have the right witness program')
38384 }
38385 }
38386
38387 scriptType = scriptTypes.P2PKH
38388 chunks = witnessStack
38389 } else if (redeemScript) {
38390 if (!supportedP2SHType(redeemScriptType)) {
38391 throw new Error('Bad redeemscript!')
38392 }
38393
38394 script = redeemScript
38395 scriptType = redeemScriptType
38396 chunks = scriptSigChunks.slice(0, -1)
38397 } else {
38398 prevOutType = scriptType = btemplates.classifyInput(scriptSig)
38399 chunks = scriptSigChunks
38400 }
38401
38402 var expanded = extractChunks(scriptType, chunks, script)
38403
38404 var result = {
38405 pubKeys: expanded.pubKeys,
38406 signatures: expanded.signatures,
38407 prevOutScript: prevOutScript,
38408 prevOutType: prevOutType,
38409 signType: scriptType,
38410 signScript: script,
38411 witness: Boolean(witness)
38412 }
38413
38414 if (p2sh) {
38415 result.redeemScript = redeemScript
38416 result.redeemScriptType = redeemScriptType
38417 }
38418
38419 if (p2wsh) {
38420 result.witnessScript = witnessScript
38421 result.witnessScriptType = witnessScriptType
38422 }
38423
38424 return result
38425 }
38426
38427 // could be done in expandInput, but requires the original Transaction for hashForSignature
38428 function fixMultisigOrder (input, transaction, vin) {
38429 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
38430 if (input.pubKeys.length === input.signatures.length) return
38431
38432 var unmatched = input.signatures.concat()
38433
38434 input.signatures = input.pubKeys.map(function (pubKey) {
38435 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
38436 var match
38437
38438 // check for a signature
38439 unmatched.some(function (signature, i) {
38440 // skip if undefined || OP_0
38441 if (!signature) return false
38442
38443 // TODO: avoid O(n) hashForSignature
38444 var parsed = ECSignature.parseScriptSignature(signature)
38445 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
38446
38447 // skip if signature does not match pubKey
38448 if (!keyPair.verify(hash, parsed.signature)) return false
38449
38450 // remove matched signature from unmatched
38451 unmatched[i] = undefined
38452 match = signature
38453
38454 return true
38455 })
38456
38457 return match
38458 })
38459 }
38460
38461 function expandOutput (script, scriptType, ourPubKey) {
38462 typeforce(types.Buffer, script)
38463
38464 var scriptChunks = bscript.decompile(script)
38465 if (!scriptType) {
38466 scriptType = btemplates.classifyOutput(script)
38467 }
38468
38469 var pubKeys = []
38470
38471 switch (scriptType) {
38472 // does our hash160(pubKey) match the output scripts?
38473 case scriptTypes.P2PKH:
38474 if (!ourPubKey) break
38475
38476 var pkh1 = scriptChunks[2]
38477 var pkh2 = bcrypto.hash160(ourPubKey)
38478 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
38479 break
38480
38481 // does our hash160(pubKey) match the output scripts?
38482 case scriptTypes.P2WPKH:
38483 if (!ourPubKey) break
38484
38485 var wpkh1 = scriptChunks[1]
38486 var wpkh2 = bcrypto.hash160(ourPubKey)
38487 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
38488 break
38489
38490 case scriptTypes.P2PK:
38491 pubKeys = scriptChunks.slice(0, 1)
38492 break
38493
38494 case scriptTypes.MULTISIG:
38495 pubKeys = scriptChunks.slice(1, -2)
38496 break
38497
38498 default: return { scriptType: scriptType }
38499 }
38500
38501 return {
38502 pubKeys: pubKeys,
38503 scriptType: scriptType,
38504 signatures: pubKeys.map(function () { return undefined })
38505 }
38506 }
38507
38508 function checkP2SHInput (input, redeemScriptHash) {
38509 if (input.prevOutType) {
38510 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
38511
38512 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
38513 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
38514 }
38515 }
38516
38517 function checkP2WSHInput (input, witnessScriptHash) {
38518 if (input.prevOutType) {
38519 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
38520
38521 var scriptHash = bscript.decompile(input.prevOutScript)[1]
38522 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
38523 }
38524 }
38525
38526 function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
38527 var expanded
38528 var prevOutType
38529 var prevOutScript
38530
38531 var p2sh = false
38532 var p2shType
38533 var redeemScriptHash
38534
38535 var witness = false
38536 var p2wsh = false
38537 var witnessType
38538 var witnessScriptHash
38539
38540 var signType
38541 var signScript
38542
38543 if (redeemScript && witnessScript) {
38544 redeemScriptHash = bcrypto.hash160(redeemScript)
38545 witnessScriptHash = bcrypto.sha256(witnessScript)
38546 checkP2SHInput(input, redeemScriptHash)
38547
38548 if (!redeemScript.equals(btemplates.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
38549
38550 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38551 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38552
38553 prevOutType = btemplates.types.P2SH
38554 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38555 p2sh = witness = p2wsh = true
38556 p2shType = btemplates.types.P2WSH
38557 signType = witnessType = expanded.scriptType
38558 signScript = witnessScript
38559 } else if (redeemScript) {
38560 redeemScriptHash = bcrypto.hash160(redeemScript)
38561 checkP2SHInput(input, redeemScriptHash)
38562
38563 expanded = expandOutput(redeemScript, undefined, kpPubKey)
38564 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
38565
38566 prevOutType = btemplates.types.P2SH
38567 prevOutScript = btemplates.scriptHash.output.encode(redeemScriptHash)
38568 p2sh = true
38569 signType = p2shType = expanded.scriptType
38570 signScript = redeemScript
38571 witness = signType === btemplates.types.P2WPKH
38572 } else if (witnessScript) {
38573 witnessScriptHash = bcrypto.sha256(witnessScript)
38574 checkP2WSHInput(input, witnessScriptHash)
38575
38576 expanded = expandOutput(witnessScript, undefined, kpPubKey)
38577 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
38578
38579 prevOutType = btemplates.types.P2WSH
38580 prevOutScript = btemplates.witnessScriptHash.output.encode(witnessScriptHash)
38581 witness = p2wsh = true
38582 signType = witnessType = expanded.scriptType
38583 signScript = witnessScript
38584 } else if (input.prevOutType) {
38585 // embedded scripts are not possible without a redeemScript
38586 if (input.prevOutType === scriptTypes.P2SH ||
38587 input.prevOutType === scriptTypes.P2WSH) {
38588 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
38589 }
38590
38591 prevOutType = input.prevOutType
38592 prevOutScript = input.prevOutScript
38593 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
38594 if (!expanded.pubKeys) return
38595
38596 witness = (input.prevOutType === scriptTypes.P2WPKH)
38597 signType = prevOutType
38598 signScript = prevOutScript
38599 } else {
38600 prevOutScript = btemplates.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
38601 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
38602
38603 prevOutType = scriptTypes.P2PKH
38604 witness = false
38605 signType = prevOutType
38606 signScript = prevOutScript
38607 }
38608
38609 if (signType === scriptTypes.P2WPKH) {
38610 signScript = btemplates.pubKeyHash.output.encode(btemplates.witnessPubKeyHash.output.decode(signScript))
38611 }
38612
38613 if (p2sh) {
38614 input.redeemScript = redeemScript
38615 input.redeemScriptType = p2shType
38616 }
38617
38618 if (p2wsh) {
38619 input.witnessScript = witnessScript
38620 input.witnessScriptType = witnessType
38621 }
38622
38623 input.pubKeys = expanded.pubKeys
38624 input.signatures = expanded.signatures
38625 input.signScript = signScript
38626 input.signType = signType
38627 input.prevOutScript = prevOutScript
38628 input.prevOutType = prevOutType
38629 input.witness = witness
38630 }
38631
38632 function buildStack (type, signatures, pubKeys, allowIncomplete) {
38633 if (type === scriptTypes.P2PKH) {
38634 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return btemplates.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
38635 } else if (type === scriptTypes.P2PK) {
38636 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return btemplates.pubKey.input.encodeStack(signatures[0])
38637 } else if (type === scriptTypes.MULTISIG) {
38638 if (signatures.length > 0) {
38639 signatures = signatures.map(function (signature) {
38640 return signature || ops.OP_0
38641 })
38642 if (!allowIncomplete) {
38643 // remove blank signatures
38644 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
38645 }
38646
38647 return btemplates.multisig.input.encodeStack(signatures)
38648 }
38649 } else {
38650 throw new Error('Not yet supported')
38651 }
38652
38653 if (!allowIncomplete) throw new Error('Not enough signatures provided')
38654 return []
38655 }
38656
38657 function buildInput (input, allowIncomplete) {
38658 var scriptType = input.prevOutType
38659 var sig = []
38660 var witness = []
38661
38662 if (supportedType(scriptType)) {
38663 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
38664 }
38665
38666 var p2sh = false
38667 if (scriptType === btemplates.types.P2SH) {
38668 // We can remove this error later when we have a guarantee prepareInput
38669 // rejects unsignable scripts - it MUST be signable at this point.
38670 if (!allowIncomplete && !supportedP2SHType(input.redeemScriptType)) {
38671 throw new Error('Impossible to sign this type')
38672 }
38673
38674 if (supportedType(input.redeemScriptType)) {
38675 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
38676 }
38677
38678 // If it wasn't SIGNABLE, it's witness, defer to that
38679 if (input.redeemScriptType) {
38680 p2sh = true
38681 scriptType = input.redeemScriptType
38682 }
38683 }
38684
38685 switch (scriptType) {
38686 // P2WPKH is a special case of P2PKH
38687 case btemplates.types.P2WPKH:
38688 witness = buildStack(btemplates.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
38689 break
38690
38691 case btemplates.types.P2WSH:
38692 // We can remove this check later
38693 if (!allowIncomplete && !supportedType(input.witnessScriptType)) {
38694 throw new Error('Impossible to sign this type')
38695 }
38696
38697 if (supportedType(input.witnessScriptType)) {
38698 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
38699 witness.push(input.witnessScript)
38700 scriptType = input.witnessScriptType
38701 }
38702
38703 break
38704 }
38705
38706 // append redeemScript if necessary
38707 if (p2sh) {
38708 sig.push(input.redeemScript)
38709 }
38710
38711 return {
38712 type: scriptType,
38713 script: bscript.compile(sig),
38714 witness: witness
38715 }
38716 }
38717
38718 function TransactionBuilder (network, maximumFeeRate) {
38719 this.prevTxMap = {}
38720 this.network = network || networks.bitcoin
38721
38722 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
38723 this.maximumFeeRate = maximumFeeRate || 2500
38724
38725 this.inputs = []
38726 this.tx = new Transaction()
38727 }
38728
38729 TransactionBuilder.prototype.setLockTime = function (locktime) {
38730 typeforce(types.UInt32, locktime)
38731
38732 // if any signatures exist, throw
38733 if (this.inputs.some(function (input) {
38734 if (!input.signatures) return false
38735
38736 return input.signatures.some(function (s) { return s })
38737 })) {
38738 throw new Error('No, this would invalidate signatures')
38739 }
38740
38741 this.tx.locktime = locktime
38742 }
38743
38744 TransactionBuilder.prototype.setVersion = function (version) {
38745 typeforce(types.UInt32, version)
38746
38747 // XXX: this might eventually become more complex depending on what the versions represent
38748 this.tx.version = version
38749 }
38750
38751 TransactionBuilder.fromTransaction = function (transaction, network) {
38752 var txb = new TransactionBuilder(network)
38753
38754 // Copy transaction fields
38755 txb.setVersion(transaction.version)
38756 txb.setLockTime(transaction.locktime)
38757
38758 // Copy outputs (done first to avoid signature invalidation)
38759 transaction.outs.forEach(function (txOut) {
38760 txb.addOutput(txOut.script, txOut.value)
38761 })
38762
38763 // Copy inputs
38764 transaction.ins.forEach(function (txIn) {
38765 txb.__addInputUnsafe(txIn.hash, txIn.index, {
38766 sequence: txIn.sequence,
38767 script: txIn.script,
38768 witness: txIn.witness
38769 })
38770 })
38771
38772 // fix some things not possible through the public API
38773 txb.inputs.forEach(function (input, i) {
38774 fixMultisigOrder(input, transaction, i)
38775 })
38776
38777 return txb
38778 }
38779
38780 TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
38781 if (!this.__canModifyInputs()) {
38782 throw new Error('No, this would invalidate signatures')
38783 }
38784
38785 var value
38786
38787 // is it a hex string?
38788 if (typeof txHash === 'string') {
38789 // transaction hashs's are displayed in reverse order, un-reverse it
38790 txHash = Buffer.from(txHash, 'hex').reverse()
38791
38792 // is it a Transaction object?
38793 } else if (txHash instanceof Transaction) {
38794 var txOut = txHash.outs[vout]
38795 prevOutScript = txOut.script
38796 value = txOut.value
38797
38798 txHash = txHash.getHash()
38799 }
38800
38801 return this.__addInputUnsafe(txHash, vout, {
38802 sequence: sequence,
38803 prevOutScript: prevOutScript,
38804 value: value
38805 })
38806 }
38807
38808 TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
38809 if (Transaction.isCoinbaseHash(txHash)) {
38810 throw new Error('coinbase inputs not supported')
38811 }
38812
38813 var prevTxOut = txHash.toString('hex') + ':' + vout
38814 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
38815
38816 var input = {}
38817
38818 // derive what we can from the scriptSig
38819 if (options.script !== undefined) {
38820 input = expandInput(options.script, options.witness || [])
38821 }
38822
38823 // if an input value was given, retain it
38824 if (options.value !== undefined) {
38825 input.value = options.value
38826 }
38827
38828 // derive what we can from the previous transactions output script
38829 if (!input.prevOutScript && options.prevOutScript) {
38830 var prevOutType
38831
38832 if (!input.pubKeys && !input.signatures) {
38833 var expanded = expandOutput(options.prevOutScript)
38834
38835 if (expanded.pubKeys) {
38836 input.pubKeys = expanded.pubKeys
38837 input.signatures = expanded.signatures
38838 }
38839
38840 prevOutType = expanded.scriptType
38841 }
38842
38843 input.prevOutScript = options.prevOutScript
38844 input.prevOutType = prevOutType || btemplates.classifyOutput(options.prevOutScript)
38845 }
38846
38847 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
38848 this.inputs[vin] = input
38849 this.prevTxMap[prevTxOut] = vin
38850 return vin
38851 }
38852
38853 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
38854 if (!this.__canModifyOutputs()) {
38855 throw new Error('No, this would invalidate signatures')
38856 }
38857
38858 // Attempt to get a script if it's a base58 address string
38859 if (typeof scriptPubKey === 'string') {
38860 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
38861 }
38862
38863 return this.tx.addOutput(scriptPubKey, value)
38864 }
38865
38866 TransactionBuilder.prototype.build = function () {
38867 return this.__build(false)
38868 }
38869 TransactionBuilder.prototype.buildIncomplete = function () {
38870 return this.__build(true)
38871 }
38872
38873 TransactionBuilder.prototype.__build = function (allowIncomplete) {
38874 if (!allowIncomplete) {
38875 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
38876 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
38877 }
38878
38879 var tx = this.tx.clone()
38880 // Create script signatures from inputs
38881 this.inputs.forEach(function (input, i) {
38882 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
38883 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
38884 var result = buildInput(input, allowIncomplete)
38885
38886 // skip if no result
38887 if (!allowIncomplete) {
38888 if (!supportedType(result.type) && result.type !== btemplates.types.P2WPKH) {
38889 throw new Error(result.type + ' not supported')
38890 }
38891 }
38892
38893 tx.setInputScript(i, result.script)
38894 tx.setWitness(i, result.witness)
38895 })
38896
38897 if (!allowIncomplete) {
38898 // do not rely on this, its merely a last resort
38899 if (this.__overMaximumFees(tx.virtualSize())) {
38900 throw new Error('Transaction has absurd fees')
38901 }
38902 }
38903
38904 return tx
38905 }
38906
38907 function canSign (input) {
38908 return input.prevOutScript !== undefined &&
38909 input.signScript !== undefined &&
38910 input.pubKeys !== undefined &&
38911 input.signatures !== undefined &&
38912 input.signatures.length === input.pubKeys.length &&
38913 input.pubKeys.length > 0 &&
38914 (
38915 input.witness === false ||
38916 (input.witness === true && input.value !== undefined)
38917 )
38918 }
38919
38920 TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
38921 // TODO: remove keyPair.network matching in 4.0.0
38922 if (keyPair.network && keyPair.network !== this.network) throw new TypeError('Inconsistent network')
38923 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
38924 hashType = hashType || Transaction.SIGHASH_ALL
38925
38926 var input = this.inputs[vin]
38927
38928 // if redeemScript was previously provided, enforce consistency
38929 if (input.redeemScript !== undefined &&
38930 redeemScript &&
38931 !input.redeemScript.equals(redeemScript)) {
38932 throw new Error('Inconsistent redeemScript')
38933 }
38934
38935 var kpPubKey = keyPair.publicKey || keyPair.getPublicKeyBuffer()
38936 if (!canSign(input)) {
38937 if (witnessValue !== undefined) {
38938 if (input.value !== undefined && input.value !== witnessValue) throw new Error('Input didn\'t match witnessValue')
38939 typeforce(types.Satoshi, witnessValue)
38940 input.value = witnessValue
38941 }
38942
38943 if (!canSign(input)) prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
38944 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
38945 }
38946
38947 // ready to sign
38948 var signatureHash
38949 if (input.witness) {
38950 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, input.value, hashType)
38951 } else {
38952 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
38953 }
38954
38955 // enforce in order signing of public keys
38956 var signed = input.pubKeys.some(function (pubKey, i) {
38957 if (!kpPubKey.equals(pubKey)) return false
38958 if (input.signatures[i]) throw new Error('Signature already exists')
38959 if (kpPubKey.length !== 33 &&
38960 input.signType === scriptTypes.P2WPKH) throw new Error('BIP143 rejects uncompressed public keys in P2WPKH or P2WSH')
38961
38962 var signature = keyPair.sign(signatureHash)
38963 if (Buffer.isBuffer(signature)) signature = ECSignature.fromRSBuffer(signature)
38964
38965 input.signatures[i] = signature.toScriptSignature(hashType)
38966 return true
38967 })
38968
38969 if (!signed) throw new Error('Key pair cannot sign for this input')
38970 }
38971
38972 function signatureHashType (buffer) {
38973 return buffer.readUInt8(buffer.length - 1)
38974 }
38975
38976 TransactionBuilder.prototype.__canModifyInputs = function () {
38977 return this.inputs.every(function (input) {
38978 // any signatures?
38979 if (input.signatures === undefined) return true
38980
38981 return input.signatures.every(function (signature) {
38982 if (!signature) return true
38983 var hashType = signatureHashType(signature)
38984
38985 // if SIGHASH_ANYONECANPAY is set, signatures would not
38986 // be invalidated by more inputs
38987 return hashType & Transaction.SIGHASH_ANYONECANPAY
38988 })
38989 })
38990 }
38991
38992 TransactionBuilder.prototype.__canModifyOutputs = function () {
38993 var nInputs = this.tx.ins.length
38994 var nOutputs = this.tx.outs.length
38995
38996 return this.inputs.every(function (input) {
38997 if (input.signatures === undefined) return true
38998
38999 return input.signatures.every(function (signature) {
39000 if (!signature) return true
39001 var hashType = signatureHashType(signature)
39002
39003 var hashTypeMod = hashType & 0x1f
39004 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
39005 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
39006 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
39007 // some signatures would be invalidated by the addition
39008 // of more outputs
39009 return nInputs <= nOutputs
39010 }
39011 })
39012 })
39013 }
39014
39015 TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
39016 // not all inputs will have .value defined
39017 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
39018
39019 // but all outputs do, and if we have any input value
39020 // we can immediately determine if the outputs are too small
39021 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
39022 var fee = incoming - outgoing
39023 var feeRate = fee / bytes
39024
39025 return feeRate > this.maximumFeeRate
39026 }
39027
39028 module.exports = TransactionBuilder
39029
39030 },{"./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){
39031 var typeforce = require('typeforce')
39032
39033 var UINT31_MAX = Math.pow(2, 31) - 1
39034 function UInt31 (value) {
39035 return typeforce.UInt32(value) && value <= UINT31_MAX
39036 }
39037
39038 function BIP32Path (value) {
39039 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
39040 }
39041 BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
39042
39043 var SATOSHI_MAX = 21 * 1e14
39044 function Satoshi (value) {
39045 return typeforce.UInt53(value) && value <= SATOSHI_MAX
39046 }
39047
39048 // external dependent types
39049 var BigInt = typeforce.quacksLike('BigInteger')
39050 var ECPoint = typeforce.quacksLike('Point')
39051
39052 // exposed, external API
39053 var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
39054 var Network = typeforce.compile({
39055 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
39056 bip32: {
39057 public: typeforce.UInt32,
39058 private: typeforce.UInt32
39059 },
39060 pubKeyHash: typeforce.oneOf(typeforce.UInt8, typeforce.UInt16),
39061 scriptHash: typeforce.oneOf(typeforce.UInt8, typeforce.UInt16),
39062 wif: typeforce.UInt8
39063 })
39064
39065 // extend typeforce types with ours
39066 var types = {
39067 BigInt: BigInt,
39068 BIP32Path: BIP32Path,
39069 Buffer256bit: typeforce.BufferN(32),
39070 ECPoint: ECPoint,
39071 ECSignature: ECSignature,
39072 Hash160bit: typeforce.BufferN(20),
39073 Hash256bit: typeforce.BufferN(32),
39074 Network: Network,
39075 Satoshi: Satoshi,
39076 UInt31: UInt31
39077 }
39078
39079 for (var typeName in typeforce) {
39080 types[typeName] = typeforce[typeName]
39081 }
39082
39083 module.exports = types
39084
39085 },{"typeforce":112}],81:[function(require,module,exports){
39086 var basex = require('base-x')
39087 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
39088
39089 module.exports = basex(ALPHABET)
39090
39091 },{"base-x":35}],82:[function(require,module,exports){
39092 'use strict'
39093
39094 var base58 = require('bs58')
39095 var Buffer = require('safe-buffer').Buffer
39096
39097 module.exports = function (checksumFn) {
39098 // Encode a buffer as a base58-check encoded string
39099 function encode (payload) {
39100 var checksum = checksumFn(payload)
39101
39102 return base58.encode(Buffer.concat([
39103 payload,
39104 checksum
39105 ], payload.length + 4))
39106 }
39107
39108 function decodeRaw (buffer) {
39109 var payload = buffer.slice(0, -4)
39110 var checksum = buffer.slice(-4)
39111 var newChecksum = checksumFn(payload)
39112
39113 if (checksum[0] ^ newChecksum[0] |
39114 checksum[1] ^ newChecksum[1] |
39115 checksum[2] ^ newChecksum[2] |
39116 checksum[3] ^ newChecksum[3]) return
39117
39118 return payload
39119 }
39120
39121 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
39122 function decodeUnsafe (string) {
39123 var buffer = base58.decodeUnsafe(string)
39124 if (!buffer) return
39125
39126 return decodeRaw(buffer)
39127 }
39128
39129 function decode (string) {
39130 var buffer = base58.decode(string)
39131 var payload = decodeRaw(buffer, checksumFn)
39132 if (!payload) throw new Error('Invalid checksum')
39133 return payload
39134 }
39135
39136 return {
39137 encode: encode,
39138 decode: decode,
39139 decodeUnsafe: decodeUnsafe
39140 }
39141 }
39142
39143 },{"bs58":81,"safe-buffer":101}],83:[function(require,module,exports){
39144 'use strict'
39145
39146 var createHash = require('create-hash')
39147 var bs58checkBase = require('./base')
39148
39149 // SHA256(SHA256(buffer))
39150 function sha256x2 (buffer) {
39151 var tmp = createHash('sha256').update(buffer).digest()
39152 return createHash('sha256').update(tmp).digest()
39153 }
39154
39155 module.exports = bs58checkBase(sha256x2)
39156
39157 },{"./base":82,"create-hash":85}],84:[function(require,module,exports){
39158 var Buffer = require('safe-buffer').Buffer
39159 var Transform = require('stream').Transform
39160 var StringDecoder = require('string_decoder').StringDecoder
39161 var inherits = require('inherits')
39162
39163 function CipherBase (hashMode) {
39164 Transform.call(this)
39165 this.hashMode = typeof hashMode === 'string'
39166 if (this.hashMode) {
39167 this[hashMode] = this._finalOrDigest
39168 } else {
39169 this.final = this._finalOrDigest
39170 }
39171 if (this._final) {
39172 this.__final = this._final
39173 this._final = null
39174 }
39175 this._decoder = null
39176 this._encoding = null
39177 }
39178 inherits(CipherBase, Transform)
39179
39180 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
39181 if (typeof data === 'string') {
39182 data = Buffer.from(data, inputEnc)
39183 }
39184
39185 var outData = this._update(data)
39186 if (this.hashMode) return this
39187
39188 if (outputEnc) {
39189 outData = this._toString(outData, outputEnc)
39190 }
39191
39192 return outData
39193 }
39194
39195 CipherBase.prototype.setAutoPadding = function () {}
39196 CipherBase.prototype.getAuthTag = function () {
39197 throw new Error('trying to get auth tag in unsupported state')
39198 }
39199
39200 CipherBase.prototype.setAuthTag = function () {
39201 throw new Error('trying to set auth tag in unsupported state')
39202 }
39203
39204 CipherBase.prototype.setAAD = function () {
39205 throw new Error('trying to set aad in unsupported state')
39206 }
39207
39208 CipherBase.prototype._transform = function (data, _, next) {
39209 var err
39210 try {
39211 if (this.hashMode) {
39212 this._update(data)
39213 } else {
39214 this.push(this._update(data))
39215 }
39216 } catch (e) {
39217 err = e
39218 } finally {
39219 next(err)
39220 }
39221 }
39222 CipherBase.prototype._flush = function (done) {
39223 var err
39224 try {
39225 this.push(this.__final())
39226 } catch (e) {
39227 err = e
39228 }
39229
39230 done(err)
39231 }
39232 CipherBase.prototype._finalOrDigest = function (outputEnc) {
39233 var outData = this.__final() || Buffer.alloc(0)
39234 if (outputEnc) {
39235 outData = this._toString(outData, outputEnc, true)
39236 }
39237 return outData
39238 }
39239
39240 CipherBase.prototype._toString = function (value, enc, fin) {
39241 if (!this._decoder) {
39242 this._decoder = new StringDecoder(enc)
39243 this._encoding = enc
39244 }
39245
39246 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
39247
39248 var out = this._decoder.write(value)
39249 if (fin) {
39250 out += this._decoder.end()
39251 }
39252
39253 return out
39254 }
39255
39256 module.exports = CipherBase
39257
39258 },{"inherits":96,"safe-buffer":101,"stream":28,"string_decoder":29}],85:[function(require,module,exports){
39259 (function (Buffer){
39260 'use strict'
39261 var inherits = require('inherits')
39262 var md5 = require('./md5')
39263 var RIPEMD160 = require('ripemd160')
39264 var sha = require('sha.js')
39265
39266 var Base = require('cipher-base')
39267
39268 function HashNoConstructor (hash) {
39269 Base.call(this, 'digest')
39270
39271 this._hash = hash
39272 this.buffers = []
39273 }
39274
39275 inherits(HashNoConstructor, Base)
39276
39277 HashNoConstructor.prototype._update = function (data) {
39278 this.buffers.push(data)
39279 }
39280
39281 HashNoConstructor.prototype._final = function () {
39282 var buf = Buffer.concat(this.buffers)
39283 var r = this._hash(buf)
39284 this.buffers = null
39285
39286 return r
39287 }
39288
39289 function Hash (hash) {
39290 Base.call(this, 'digest')
39291
39292 this._hash = hash
39293 }
39294
39295 inherits(Hash, Base)
39296
39297 Hash.prototype._update = function (data) {
39298 this._hash.update(data)
39299 }
39300
39301 Hash.prototype._final = function () {
39302 return this._hash.digest()
39303 }
39304
39305 module.exports = function createHash (alg) {
39306 alg = alg.toLowerCase()
39307 if (alg === 'md5') return new HashNoConstructor(md5)
39308 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
39309
39310 return new Hash(sha(alg))
39311 }
39312
39313 }).call(this,require("buffer").Buffer)
39314 },{"./md5":87,"buffer":5,"cipher-base":84,"inherits":96,"ripemd160":100,"sha.js":103}],86:[function(require,module,exports){
39315 (function (Buffer){
39316 'use strict'
39317 var intSize = 4
39318 var zeroBuffer = new Buffer(intSize)
39319 zeroBuffer.fill(0)
39320
39321 var charSize = 8
39322 var hashSize = 16
39323
39324 function toArray (buf) {
39325 if ((buf.length % intSize) !== 0) {
39326 var len = buf.length + (intSize - (buf.length % intSize))
39327 buf = Buffer.concat([buf, zeroBuffer], len)
39328 }
39329
39330 var arr = new Array(buf.length >>> 2)
39331 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
39332 arr[j] = buf.readInt32LE(i)
39333 }
39334
39335 return arr
39336 }
39337
39338 module.exports = function hash (buf, fn) {
39339 var arr = fn(toArray(buf), buf.length * charSize)
39340 buf = new Buffer(hashSize)
39341 for (var i = 0; i < arr.length; i++) {
39342 buf.writeInt32LE(arr[i], i << 2, true)
39343 }
39344 return buf
39345 }
39346
39347 }).call(this,require("buffer").Buffer)
39348 },{"buffer":5}],87:[function(require,module,exports){
39349 'use strict'
39350 /*
39351 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
39352 * Digest Algorithm, as defined in RFC 1321.
39353 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
39354 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
39355 * Distributed under the BSD License
39356 * See http://pajhome.org.uk/crypt/md5 for more info.
39357 */
39358
39359 var makeHash = require('./make-hash')
39360
39361 /*
39362 * Calculate the MD5 of an array of little-endian words, and a bit length
39363 */
39364 function core_md5 (x, len) {
39365 /* append padding */
39366 x[len >> 5] |= 0x80 << ((len) % 32)
39367 x[(((len + 64) >>> 9) << 4) + 14] = len
39368
39369 var a = 1732584193
39370 var b = -271733879
39371 var c = -1732584194
39372 var d = 271733878
39373
39374 for (var i = 0; i < x.length; i += 16) {
39375 var olda = a
39376 var oldb = b
39377 var oldc = c
39378 var oldd = d
39379
39380 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
39381 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
39382 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
39383 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
39384 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
39385 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
39386 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
39387 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
39388 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
39389 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
39390 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
39391 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
39392 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
39393 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
39394 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
39395 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
39396
39397 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
39398 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
39399 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
39400 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
39401 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
39402 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
39403 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
39404 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
39405 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
39406 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
39407 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
39408 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
39409 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
39410 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
39411 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
39412 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
39413
39414 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
39415 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
39416 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
39417 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
39418 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
39419 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
39420 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
39421 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
39422 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
39423 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
39424 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
39425 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
39426 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
39427 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
39428 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
39429 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
39430
39431 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
39432 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
39433 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
39434 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
39435 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
39436 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
39437 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
39438 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
39439 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
39440 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
39441 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
39442 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
39443 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
39444 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
39445 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
39446 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
39447
39448 a = safe_add(a, olda)
39449 b = safe_add(b, oldb)
39450 c = safe_add(c, oldc)
39451 d = safe_add(d, oldd)
39452 }
39453
39454 return [a, b, c, d]
39455 }
39456
39457 /*
39458 * These functions implement the four basic operations the algorithm uses.
39459 */
39460 function md5_cmn (q, a, b, x, s, t) {
39461 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
39462 }
39463
39464 function md5_ff (a, b, c, d, x, s, t) {
39465 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
39466 }
39467
39468 function md5_gg (a, b, c, d, x, s, t) {
39469 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
39470 }
39471
39472 function md5_hh (a, b, c, d, x, s, t) {
39473 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
39474 }
39475
39476 function md5_ii (a, b, c, d, x, s, t) {
39477 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
39478 }
39479
39480 /*
39481 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
39482 * to work around bugs in some JS interpreters.
39483 */
39484 function safe_add (x, y) {
39485 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
39486 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
39487 return (msw << 16) | (lsw & 0xFFFF)
39488 }
39489
39490 /*
39491 * Bitwise rotate a 32-bit number to the left.
39492 */
39493 function bit_rol (num, cnt) {
39494 return (num << cnt) | (num >>> (32 - cnt))
39495 }
39496
39497 module.exports = function md5 (buf) {
39498 return makeHash(buf, core_md5)
39499 }
39500
39501 },{"./make-hash":86}],88:[function(require,module,exports){
39502 'use strict'
39503 var inherits = require('inherits')
39504 var Legacy = require('./legacy')
39505 var Base = require('cipher-base')
39506 var Buffer = require('safe-buffer').Buffer
39507 var md5 = require('create-hash/md5')
39508 var RIPEMD160 = require('ripemd160')
39509
39510 var sha = require('sha.js')
39511
39512 var ZEROS = Buffer.alloc(128)
39513
39514 function Hmac (alg, key) {
39515 Base.call(this, 'digest')
39516 if (typeof key === 'string') {
39517 key = Buffer.from(key)
39518 }
39519
39520 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
39521
39522 this._alg = alg
39523 this._key = key
39524 if (key.length > blocksize) {
39525 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39526 key = hash.update(key).digest()
39527 } else if (key.length < blocksize) {
39528 key = Buffer.concat([key, ZEROS], blocksize)
39529 }
39530
39531 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39532 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39533
39534 for (var i = 0; i < blocksize; i++) {
39535 ipad[i] = key[i] ^ 0x36
39536 opad[i] = key[i] ^ 0x5C
39537 }
39538 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
39539 this._hash.update(ipad)
39540 }
39541
39542 inherits(Hmac, Base)
39543
39544 Hmac.prototype._update = function (data) {
39545 this._hash.update(data)
39546 }
39547
39548 Hmac.prototype._final = function () {
39549 var h = this._hash.digest()
39550 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
39551 return hash.update(this._opad).update(h).digest()
39552 }
39553
39554 module.exports = function createHmac (alg, key) {
39555 alg = alg.toLowerCase()
39556 if (alg === 'rmd160' || alg === 'ripemd160') {
39557 return new Hmac('rmd160', key)
39558 }
39559 if (alg === 'md5') {
39560 return new Legacy(md5, key)
39561 }
39562 return new Hmac(alg, key)
39563 }
39564
39565 },{"./legacy":89,"cipher-base":84,"create-hash/md5":87,"inherits":96,"ripemd160":100,"safe-buffer":101,"sha.js":103}],89:[function(require,module,exports){
39566 'use strict'
39567 var inherits = require('inherits')
39568 var Buffer = require('safe-buffer').Buffer
39569
39570 var Base = require('cipher-base')
39571
39572 var ZEROS = Buffer.alloc(128)
39573 var blocksize = 64
39574
39575 function Hmac (alg, key) {
39576 Base.call(this, 'digest')
39577 if (typeof key === 'string') {
39578 key = Buffer.from(key)
39579 }
39580
39581 this._alg = alg
39582 this._key = key
39583
39584 if (key.length > blocksize) {
39585 key = alg(key)
39586 } else if (key.length < blocksize) {
39587 key = Buffer.concat([key, ZEROS], blocksize)
39588 }
39589
39590 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
39591 var opad = this._opad = Buffer.allocUnsafe(blocksize)
39592
39593 for (var i = 0; i < blocksize; i++) {
39594 ipad[i] = key[i] ^ 0x36
39595 opad[i] = key[i] ^ 0x5C
39596 }
39597
39598 this._hash = [ipad]
39599 }
39600
39601 inherits(Hmac, Base)
39602
39603 Hmac.prototype._update = function (data) {
39604 this._hash.push(data)
39605 }
39606
39607 Hmac.prototype._final = function () {
39608 var h = this._alg(Buffer.concat(this._hash))
39609 return this._alg(Buffer.concat([this._opad, h]))
39610 }
39611 module.exports = Hmac
39612
39613 },{"cipher-base":84,"inherits":96,"safe-buffer":101}],90:[function(require,module,exports){
39614 var assert = require('assert')
39615 var BigInteger = require('bigi')
39616
39617 var Point = require('./point')
39618
39619 function Curve (p, a, b, Gx, Gy, n, h) {
39620 this.p = p
39621 this.a = a
39622 this.b = b
39623 this.G = Point.fromAffine(this, Gx, Gy)
39624 this.n = n
39625 this.h = h
39626
39627 this.infinity = new Point(this, null, null, BigInteger.ZERO)
39628
39629 // result caching
39630 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
39631
39632 // determine size of p in bytes
39633 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
39634 }
39635
39636 Curve.prototype.pointFromX = function (isOdd, x) {
39637 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
39638 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
39639
39640 var y = beta
39641 if (beta.isEven() ^ !isOdd) {
39642 y = this.p.subtract(y) // -y % p
39643 }
39644
39645 return Point.fromAffine(this, x, y)
39646 }
39647
39648 Curve.prototype.isInfinity = function (Q) {
39649 if (Q === this.infinity) return true
39650
39651 return Q.z.signum() === 0 && Q.y.signum() !== 0
39652 }
39653
39654 Curve.prototype.isOnCurve = function (Q) {
39655 if (this.isInfinity(Q)) return true
39656
39657 var x = Q.affineX
39658 var y = Q.affineY
39659 var a = this.a
39660 var b = this.b
39661 var p = this.p
39662
39663 // Check that xQ and yQ are integers in the interval [0, p - 1]
39664 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
39665 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
39666
39667 // and check that y^2 = x^3 + ax + b (mod p)
39668 var lhs = y.square().mod(p)
39669 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
39670 return lhs.equals(rhs)
39671 }
39672
39673 /**
39674 * Validate an elliptic curve point.
39675 *
39676 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
39677 */
39678 Curve.prototype.validate = function (Q) {
39679 // Check Q != O
39680 assert(!this.isInfinity(Q), 'Point is at infinity')
39681 assert(this.isOnCurve(Q), 'Point is not on the curve')
39682
39683 // Check nQ = O (where Q is a scalar multiple of G)
39684 var nQ = Q.multiply(this.n)
39685 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
39686
39687 return true
39688 }
39689
39690 module.exports = Curve
39691
39692 },{"./point":94,"assert":1,"bigi":39}],91:[function(require,module,exports){
39693 module.exports={
39694 "secp128r1": {
39695 "p": "fffffffdffffffffffffffffffffffff",
39696 "a": "fffffffdfffffffffffffffffffffffc",
39697 "b": "e87579c11079f43dd824993c2cee5ed3",
39698 "n": "fffffffe0000000075a30d1b9038a115",
39699 "h": "01",
39700 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
39701 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
39702 },
39703 "secp160k1": {
39704 "p": "fffffffffffffffffffffffffffffffeffffac73",
39705 "a": "00",
39706 "b": "07",
39707 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
39708 "h": "01",
39709 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
39710 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
39711 },
39712 "secp160r1": {
39713 "p": "ffffffffffffffffffffffffffffffff7fffffff",
39714 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
39715 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
39716 "n": "0100000000000000000001f4c8f927aed3ca752257",
39717 "h": "01",
39718 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
39719 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
39720 },
39721 "secp192k1": {
39722 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
39723 "a": "00",
39724 "b": "03",
39725 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
39726 "h": "01",
39727 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
39728 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
39729 },
39730 "secp192r1": {
39731 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
39732 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
39733 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
39734 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
39735 "h": "01",
39736 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
39737 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
39738 },
39739 "secp256k1": {
39740 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
39741 "a": "00",
39742 "b": "07",
39743 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
39744 "h": "01",
39745 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
39746 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
39747 },
39748 "secp256r1": {
39749 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
39750 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
39751 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
39752 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
39753 "h": "01",
39754 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
39755 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
39756 }
39757 }
39758
39759 },{}],92:[function(require,module,exports){
39760 var Point = require('./point')
39761 var Curve = require('./curve')
39762
39763 var getCurveByName = require('./names')
39764
39765 module.exports = {
39766 Curve: Curve,
39767 Point: Point,
39768 getCurveByName: getCurveByName
39769 }
39770
39771 },{"./curve":90,"./names":93,"./point":94}],93:[function(require,module,exports){
39772 var BigInteger = require('bigi')
39773
39774 var curves = require('./curves.json')
39775 var Curve = require('./curve')
39776
39777 function getCurveByName (name) {
39778 var curve = curves[name]
39779 if (!curve) return null
39780
39781 var p = new BigInteger(curve.p, 16)
39782 var a = new BigInteger(curve.a, 16)
39783 var b = new BigInteger(curve.b, 16)
39784 var n = new BigInteger(curve.n, 16)
39785 var h = new BigInteger(curve.h, 16)
39786 var Gx = new BigInteger(curve.Gx, 16)
39787 var Gy = new BigInteger(curve.Gy, 16)
39788
39789 return new Curve(p, a, b, Gx, Gy, n, h)
39790 }
39791
39792 module.exports = getCurveByName
39793
39794 },{"./curve":90,"./curves.json":91,"bigi":39}],94:[function(require,module,exports){
39795 var assert = require('assert')
39796 var Buffer = require('safe-buffer').Buffer
39797 var BigInteger = require('bigi')
39798
39799 var THREE = BigInteger.valueOf(3)
39800
39801 function Point (curve, x, y, z) {
39802 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
39803
39804 this.curve = curve
39805 this.x = x
39806 this.y = y
39807 this.z = z
39808 this._zInv = null
39809
39810 this.compressed = true
39811 }
39812
39813 Object.defineProperty(Point.prototype, 'zInv', {
39814 get: function () {
39815 if (this._zInv === null) {
39816 this._zInv = this.z.modInverse(this.curve.p)
39817 }
39818
39819 return this._zInv
39820 }
39821 })
39822
39823 Object.defineProperty(Point.prototype, 'affineX', {
39824 get: function () {
39825 return this.x.multiply(this.zInv).mod(this.curve.p)
39826 }
39827 })
39828
39829 Object.defineProperty(Point.prototype, 'affineY', {
39830 get: function () {
39831 return this.y.multiply(this.zInv).mod(this.curve.p)
39832 }
39833 })
39834
39835 Point.fromAffine = function (curve, x, y) {
39836 return new Point(curve, x, y, BigInteger.ONE)
39837 }
39838
39839 Point.prototype.equals = function (other) {
39840 if (other === this) return true
39841 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
39842 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
39843
39844 // u = Y2 * Z1 - Y1 * Z2
39845 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
39846
39847 if (u.signum() !== 0) return false
39848
39849 // v = X2 * Z1 - X1 * Z2
39850 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
39851
39852 return v.signum() === 0
39853 }
39854
39855 Point.prototype.negate = function () {
39856 var y = this.curve.p.subtract(this.y)
39857
39858 return new Point(this.curve, this.x, y, this.z)
39859 }
39860
39861 Point.prototype.add = function (b) {
39862 if (this.curve.isInfinity(this)) return b
39863 if (this.curve.isInfinity(b)) return this
39864
39865 var x1 = this.x
39866 var y1 = this.y
39867 var x2 = b.x
39868 var y2 = b.y
39869
39870 // u = Y2 * Z1 - Y1 * Z2
39871 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
39872 // v = X2 * Z1 - X1 * Z2
39873 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
39874
39875 if (v.signum() === 0) {
39876 if (u.signum() === 0) {
39877 return this.twice() // this == b, so double
39878 }
39879
39880 return this.curve.infinity // this = -b, so infinity
39881 }
39882
39883 var v2 = v.square()
39884 var v3 = v2.multiply(v)
39885 var x1v2 = x1.multiply(v2)
39886 var zu2 = u.square().multiply(this.z)
39887
39888 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
39889 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
39890 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
39891 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)
39892 // z3 = v^3 * z1 * z2
39893 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
39894
39895 return new Point(this.curve, x3, y3, z3)
39896 }
39897
39898 Point.prototype.twice = function () {
39899 if (this.curve.isInfinity(this)) return this
39900 if (this.y.signum() === 0) return this.curve.infinity
39901
39902 var x1 = this.x
39903 var y1 = this.y
39904
39905 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
39906 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
39907 var a = this.curve.a
39908
39909 // w = 3 * x1^2 + a * z1^2
39910 var w = x1.square().multiply(THREE)
39911
39912 if (a.signum() !== 0) {
39913 w = w.add(this.z.square().multiply(a))
39914 }
39915
39916 w = w.mod(this.curve.p)
39917 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
39918 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
39919 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
39920 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
39921 // z3 = 8 * (y1 * z1)^3
39922 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
39923
39924 return new Point(this.curve, x3, y3, z3)
39925 }
39926
39927 // Simple NAF (Non-Adjacent Form) multiplication algorithm
39928 // TODO: modularize the multiplication algorithm
39929 Point.prototype.multiply = function (k) {
39930 if (this.curve.isInfinity(this)) return this
39931 if (k.signum() === 0) return this.curve.infinity
39932
39933 var e = k
39934 var h = e.multiply(THREE)
39935
39936 var neg = this.negate()
39937 var R = this
39938
39939 for (var i = h.bitLength() - 2; i > 0; --i) {
39940 var hBit = h.testBit(i)
39941 var eBit = e.testBit(i)
39942
39943 R = R.twice()
39944
39945 if (hBit !== eBit) {
39946 R = R.add(hBit ? this : neg)
39947 }
39948 }
39949
39950 return R
39951 }
39952
39953 // Compute this*j + x*k (simultaneous multiplication)
39954 Point.prototype.multiplyTwo = function (j, x, k) {
39955 var i = Math.max(j.bitLength(), k.bitLength()) - 1
39956 var R = this.curve.infinity
39957 var both = this.add(x)
39958
39959 while (i >= 0) {
39960 var jBit = j.testBit(i)
39961 var kBit = k.testBit(i)
39962
39963 R = R.twice()
39964
39965 if (jBit) {
39966 if (kBit) {
39967 R = R.add(both)
39968 } else {
39969 R = R.add(this)
39970 }
39971 } else if (kBit) {
39972 R = R.add(x)
39973 }
39974 --i
39975 }
39976
39977 return R
39978 }
39979
39980 Point.prototype.getEncoded = function (compressed) {
39981 if (compressed == null) compressed = this.compressed
39982 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
39983
39984 var x = this.affineX
39985 var y = this.affineY
39986 var byteLength = this.curve.pLength
39987 var buffer
39988
39989 // 0x02/0x03 | X
39990 if (compressed) {
39991 buffer = Buffer.allocUnsafe(1 + byteLength)
39992 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
39993
39994 // 0x04 | X | Y
39995 } else {
39996 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
39997 buffer.writeUInt8(0x04, 0)
39998
39999 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
40000 }
40001
40002 x.toBuffer(byteLength).copy(buffer, 1)
40003
40004 return buffer
40005 }
40006
40007 Point.decodeFrom = function (curve, buffer) {
40008 var type = buffer.readUInt8(0)
40009 var compressed = (type !== 4)
40010
40011 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
40012 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
40013
40014 var Q
40015 if (compressed) {
40016 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
40017 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
40018
40019 var isOdd = (type === 0x03)
40020 Q = curve.pointFromX(isOdd, x)
40021 } else {
40022 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
40023
40024 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
40025 Q = Point.fromAffine(curve, x, y)
40026 }
40027
40028 Q.compressed = compressed
40029 return Q
40030 }
40031
40032 Point.prototype.toString = function () {
40033 if (this.curve.isInfinity(this)) return '(INFINITY)'
40034
40035 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
40036 }
40037
40038 module.exports = Point
40039
40040 },{"assert":1,"bigi":39,"safe-buffer":101}],95:[function(require,module,exports){
40041 (function (Buffer){
40042 'use strict'
40043 var Transform = require('stream').Transform
40044 var inherits = require('inherits')
40045
40046 function HashBase (blockSize) {
40047 Transform.call(this)
40048
40049 this._block = new Buffer(blockSize)
40050 this._blockSize = blockSize
40051 this._blockOffset = 0
40052 this._length = [0, 0, 0, 0]
40053
40054 this._finalized = false
40055 }
40056
40057 inherits(HashBase, Transform)
40058
40059 HashBase.prototype._transform = function (chunk, encoding, callback) {
40060 var error = null
40061 try {
40062 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
40063 this.update(chunk)
40064 } catch (err) {
40065 error = err
40066 }
40067
40068 callback(error)
40069 }
40070
40071 HashBase.prototype._flush = function (callback) {
40072 var error = null
40073 try {
40074 this.push(this._digest())
40075 } catch (err) {
40076 error = err
40077 }
40078
40079 callback(error)
40080 }
40081
40082 HashBase.prototype.update = function (data, encoding) {
40083 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
40084 if (this._finalized) throw new Error('Digest already called')
40085 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
40086
40087 // consume data
40088 var block = this._block
40089 var offset = 0
40090 while (this._blockOffset + data.length - offset >= this._blockSize) {
40091 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
40092 this._update()
40093 this._blockOffset = 0
40094 }
40095 while (offset < data.length) block[this._blockOffset++] = data[offset++]
40096
40097 // update length
40098 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
40099 this._length[j] += carry
40100 carry = (this._length[j] / 0x0100000000) | 0
40101 if (carry > 0) this._length[j] -= 0x0100000000 * carry
40102 }
40103
40104 return this
40105 }
40106
40107 HashBase.prototype._update = function (data) {
40108 throw new Error('_update is not implemented')
40109 }
40110
40111 HashBase.prototype.digest = function (encoding) {
40112 if (this._finalized) throw new Error('Digest already called')
40113 this._finalized = true
40114
40115 var digest = this._digest()
40116 if (encoding !== undefined) digest = digest.toString(encoding)
40117 return digest
40118 }
40119
40120 HashBase.prototype._digest = function () {
40121 throw new Error('_digest is not implemented')
40122 }
40123
40124 module.exports = HashBase
40125
40126 }).call(this,require("buffer").Buffer)
40127 },{"buffer":5,"inherits":96,"stream":28}],96:[function(require,module,exports){
40128 arguments[4][9][0].apply(exports,arguments)
40129 },{"dup":9}],97:[function(require,module,exports){
40130 (function (Buffer){
40131 // constant-space merkle root calculation algorithm
40132 module.exports = function fastRoot (values, digestFn) {
40133 if (!Array.isArray(values)) throw TypeError('Expected values Array')
40134 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
40135
40136 var length = values.length
40137 var results = values.concat()
40138
40139 while (length > 1) {
40140 var j = 0
40141
40142 for (var i = 0; i < length; i += 2, ++j) {
40143 var left = results[i]
40144 var right = i + 1 === length ? left : results[i + 1]
40145 var data = Buffer.concat([left, right])
40146
40147 results[j] = digestFn(data)
40148 }
40149
40150 length = j
40151 }
40152
40153 return results[0]
40154 }
40155
40156 }).call(this,require("buffer").Buffer)
40157 },{"buffer":5}],98:[function(require,module,exports){
40158 var OPS = require('bitcoin-ops')
40159
40160 function encodingLength (i) {
40161 return i < OPS.OP_PUSHDATA1 ? 1
40162 : i <= 0xff ? 2
40163 : i <= 0xffff ? 3
40164 : 5
40165 }
40166
40167 function encode (buffer, number, offset) {
40168 var size = encodingLength(number)
40169
40170 // ~6 bit
40171 if (size === 1) {
40172 buffer.writeUInt8(number, offset)
40173
40174 // 8 bit
40175 } else if (size === 2) {
40176 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
40177 buffer.writeUInt8(number, offset + 1)
40178
40179 // 16 bit
40180 } else if (size === 3) {
40181 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
40182 buffer.writeUInt16LE(number, offset + 1)
40183
40184 // 32 bit
40185 } else {
40186 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
40187 buffer.writeUInt32LE(number, offset + 1)
40188 }
40189
40190 return size
40191 }
40192
40193 function decode (buffer, offset) {
40194 var opcode = buffer.readUInt8(offset)
40195 var number, size
40196
40197 // ~6 bit
40198 if (opcode < OPS.OP_PUSHDATA1) {
40199 number = opcode
40200 size = 1
40201
40202 // 8 bit
40203 } else if (opcode === OPS.OP_PUSHDATA1) {
40204 if (offset + 2 > buffer.length) return null
40205 number = buffer.readUInt8(offset + 1)
40206 size = 2
40207
40208 // 16 bit
40209 } else if (opcode === OPS.OP_PUSHDATA2) {
40210 if (offset + 3 > buffer.length) return null
40211 number = buffer.readUInt16LE(offset + 1)
40212 size = 3
40213
40214 // 32 bit
40215 } else {
40216 if (offset + 5 > buffer.length) return null
40217 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
40218
40219 number = buffer.readUInt32LE(offset + 1)
40220 size = 5
40221 }
40222
40223 return {
40224 opcode: opcode,
40225 number: number,
40226 size: size
40227 }
40228 }
40229
40230 module.exports = {
40231 encodingLength: encodingLength,
40232 encode: encode,
40233 decode: decode
40234 }
40235
40236 },{"bitcoin-ops":42}],99:[function(require,module,exports){
40237 (function (process,global){
40238 'use strict'
40239
40240 function oldBrowser () {
40241 throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11')
40242 }
40243
40244 var Buffer = require('safe-buffer').Buffer
40245 var crypto = global.crypto || global.msCrypto
40246
40247 if (crypto && crypto.getRandomValues) {
40248 module.exports = randomBytes
40249 } else {
40250 module.exports = oldBrowser
40251 }
40252
40253 function randomBytes (size, cb) {
40254 // phantomjs needs to throw
40255 if (size > 65536) throw new Error('requested too many random bytes')
40256 // in case browserify isn't using the Uint8Array version
40257 var rawBytes = new global.Uint8Array(size)
40258
40259 // This will not work in older browsers.
40260 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
40261 if (size > 0) { // getRandomValues fails on IE if size == 0
40262 crypto.getRandomValues(rawBytes)
40263 }
40264
40265 // XXX: phantomjs doesn't like a buffer being passed here
40266 var bytes = Buffer.from(rawBytes.buffer)
40267
40268 if (typeof cb === 'function') {
40269 return process.nextTick(function () {
40270 cb(null, bytes)
40271 })
40272 }
40273
40274 return bytes
40275 }
40276
40277 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
40278 },{"_process":13,"safe-buffer":101}],100:[function(require,module,exports){
40279 (function (Buffer){
40280 'use strict'
40281 var inherits = require('inherits')
40282 var HashBase = require('hash-base')
40283
40284 function RIPEMD160 () {
40285 HashBase.call(this, 64)
40286
40287 // state
40288 this._a = 0x67452301
40289 this._b = 0xefcdab89
40290 this._c = 0x98badcfe
40291 this._d = 0x10325476
40292 this._e = 0xc3d2e1f0
40293 }
40294
40295 inherits(RIPEMD160, HashBase)
40296
40297 RIPEMD160.prototype._update = function () {
40298 var m = new Array(16)
40299 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
40300
40301 var al = this._a
40302 var bl = this._b
40303 var cl = this._c
40304 var dl = this._d
40305 var el = this._e
40306
40307 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
40308 // K = 0x00000000
40309 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
40310 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
40311 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
40312 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
40313 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
40314 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
40315 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
40316 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
40317 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
40318 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
40319 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
40320 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
40321 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
40322 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
40323 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
40324 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
40325 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
40326
40327 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
40328 // K = 0x5a827999
40329 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
40330 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
40331 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
40332 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
40333 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
40334 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
40335 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
40336 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
40337 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
40338 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
40339 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
40340 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
40341 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
40342 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
40343 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
40344 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
40345 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
40346
40347 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
40348 // K = 0x6ed9eba1
40349 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
40350 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
40351 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
40352 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
40353 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
40354 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
40355 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
40356 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
40357 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
40358 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
40359 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
40360 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
40361 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
40362 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
40363 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
40364 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
40365 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
40366
40367 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
40368 // K = 0x8f1bbcdc
40369 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
40370 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
40371 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
40372 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
40373 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
40374 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
40375 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
40376 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
40377 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40378 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
40379 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
40380 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
40381 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
40382 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
40383 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
40384 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
40385 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
40386
40387 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
40388 // K = 0xa953fd4e
40389 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
40390 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
40391 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
40392 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
40393 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
40394 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
40395 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
40396 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
40397 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
40398 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
40399 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
40400 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
40401 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
40402 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
40403 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
40404 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
40405 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
40406
40407 var ar = this._a
40408 var br = this._b
40409 var cr = this._c
40410 var dr = this._d
40411 var er = this._e
40412
40413 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
40414 // K' = 0x50a28be6
40415 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
40416 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
40417 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
40418 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
40419 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
40420 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
40421 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
40422 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
40423 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
40424 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
40425 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
40426 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
40427 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
40428 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
40429 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
40430 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
40431 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
40432
40433 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
40434 // K' = 0x5c4dd124
40435 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
40436 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
40437 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
40438 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
40439 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
40440 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
40441 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
40442 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
40443 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
40444 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
40445 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
40446 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
40447 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
40448 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
40449 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
40450 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
40451 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
40452
40453 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
40454 // K' = 0x6d703ef3
40455 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
40456 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
40457 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
40458 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
40459 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
40460 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
40461 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
40462 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
40463 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
40464 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
40465 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
40466 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
40467 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
40468 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
40469 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
40470 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
40471 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
40472
40473 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
40474 // K' = 0x7a6d76e9
40475 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
40476 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
40477 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
40478 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
40479 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
40480 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
40481 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
40482 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
40483 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
40484 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
40485 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
40486 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
40487 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
40488 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
40489 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
40490 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
40491 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
40492
40493 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
40494 // K' = 0x00000000
40495 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
40496 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
40497 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
40498 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
40499 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
40500 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
40501 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
40502 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
40503 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
40504 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
40505 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
40506 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
40507 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
40508 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
40509 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
40510 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
40511 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
40512
40513 // change state
40514 var t = (this._b + cl + dr) | 0
40515 this._b = (this._c + dl + er) | 0
40516 this._c = (this._d + el + ar) | 0
40517 this._d = (this._e + al + br) | 0
40518 this._e = (this._a + bl + cr) | 0
40519 this._a = t
40520 }
40521
40522 RIPEMD160.prototype._digest = function () {
40523 // create padding and handle blocks
40524 this._block[this._blockOffset++] = 0x80
40525 if (this._blockOffset > 56) {
40526 this._block.fill(0, this._blockOffset, 64)
40527 this._update()
40528 this._blockOffset = 0
40529 }
40530
40531 this._block.fill(0, this._blockOffset, 56)
40532 this._block.writeUInt32LE(this._length[0], 56)
40533 this._block.writeUInt32LE(this._length[1], 60)
40534 this._update()
40535
40536 // produce result
40537 var buffer = new Buffer(20)
40538 buffer.writeInt32LE(this._a, 0)
40539 buffer.writeInt32LE(this._b, 4)
40540 buffer.writeInt32LE(this._c, 8)
40541 buffer.writeInt32LE(this._d, 12)
40542 buffer.writeInt32LE(this._e, 16)
40543 return buffer
40544 }
40545
40546 function rotl (x, n) {
40547 return (x << n) | (x >>> (32 - n))
40548 }
40549
40550 function fn1 (a, b, c, d, e, m, k, s) {
40551 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
40552 }
40553
40554 function fn2 (a, b, c, d, e, m, k, s) {
40555 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
40556 }
40557
40558 function fn3 (a, b, c, d, e, m, k, s) {
40559 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
40560 }
40561
40562 function fn4 (a, b, c, d, e, m, k, s) {
40563 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
40564 }
40565
40566 function fn5 (a, b, c, d, e, m, k, s) {
40567 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
40568 }
40569
40570 module.exports = RIPEMD160
40571
40572 }).call(this,require("buffer").Buffer)
40573 },{"buffer":5,"hash-base":95,"inherits":96}],101:[function(require,module,exports){
40574 /* eslint-disable node/no-deprecated-api */
40575 var buffer = require('buffer')
40576 var Buffer = buffer.Buffer
40577
40578 // alternative to using Object.keys for old browsers
40579 function copyProps (src, dst) {
40580 for (var key in src) {
40581 dst[key] = src[key]
40582 }
40583 }
40584 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
40585 module.exports = buffer
40586 } else {
40587 // Copy properties from require('buffer')
40588 copyProps(buffer, exports)
40589 exports.Buffer = SafeBuffer
40590 }
40591
40592 function SafeBuffer (arg, encodingOrOffset, length) {
40593 return Buffer(arg, encodingOrOffset, length)
40594 }
40595
40596 // Copy static methods from Buffer
40597 copyProps(Buffer, SafeBuffer)
40598
40599 SafeBuffer.from = function (arg, encodingOrOffset, length) {
40600 if (typeof arg === 'number') {
40601 throw new TypeError('Argument must not be a number')
40602 }
40603 return Buffer(arg, encodingOrOffset, length)
40604 }
40605
40606 SafeBuffer.alloc = function (size, fill, encoding) {
40607 if (typeof size !== 'number') {
40608 throw new TypeError('Argument must be a number')
40609 }
40610 var buf = Buffer(size)
40611 if (fill !== undefined) {
40612 if (typeof encoding === 'string') {
40613 buf.fill(fill, encoding)
40614 } else {
40615 buf.fill(fill)
40616 }
40617 } else {
40618 buf.fill(0)
40619 }
40620 return buf
40621 }
40622
40623 SafeBuffer.allocUnsafe = function (size) {
40624 if (typeof size !== 'number') {
40625 throw new TypeError('Argument must be a number')
40626 }
40627 return Buffer(size)
40628 }
40629
40630 SafeBuffer.allocUnsafeSlow = function (size) {
40631 if (typeof size !== 'number') {
40632 throw new TypeError('Argument must be a number')
40633 }
40634 return buffer.SlowBuffer(size)
40635 }
40636
40637 },{"buffer":5}],102:[function(require,module,exports){
40638 var Buffer = require('safe-buffer').Buffer
40639
40640 // prototype class for hash functions
40641 function Hash (blockSize, finalSize) {
40642 this._block = Buffer.alloc(blockSize)
40643 this._finalSize = finalSize
40644 this._blockSize = blockSize
40645 this._len = 0
40646 }
40647
40648 Hash.prototype.update = function (data, enc) {
40649 if (typeof data === 'string') {
40650 enc = enc || 'utf8'
40651 data = Buffer.from(data, enc)
40652 }
40653
40654 var block = this._block
40655 var blockSize = this._blockSize
40656 var length = data.length
40657 var accum = this._len
40658
40659 for (var offset = 0; offset < length;) {
40660 var assigned = accum % blockSize
40661 var remainder = Math.min(length - offset, blockSize - assigned)
40662
40663 for (var i = 0; i < remainder; i++) {
40664 block[assigned + i] = data[offset + i]
40665 }
40666
40667 accum += remainder
40668 offset += remainder
40669
40670 if ((accum % blockSize) === 0) {
40671 this._update(block)
40672 }
40673 }
40674
40675 this._len += length
40676 return this
40677 }
40678
40679 Hash.prototype.digest = function (enc) {
40680 var rem = this._len % this._blockSize
40681
40682 this._block[rem] = 0x80
40683
40684 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
40685 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
40686 this._block.fill(0, rem + 1)
40687
40688 if (rem >= this._finalSize) {
40689 this._update(this._block)
40690 this._block.fill(0)
40691 }
40692
40693 var bits = this._len * 8
40694
40695 // uint32
40696 if (bits <= 0xffffffff) {
40697 this._block.writeUInt32BE(bits, this._blockSize - 4)
40698
40699 // uint64
40700 } else {
40701 var lowBits = (bits & 0xffffffff) >>> 0
40702 var highBits = (bits - lowBits) / 0x100000000
40703
40704 this._block.writeUInt32BE(highBits, this._blockSize - 8)
40705 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
40706 }
40707
40708 this._update(this._block)
40709 var hash = this._hash()
40710
40711 return enc ? hash.toString(enc) : hash
40712 }
40713
40714 Hash.prototype._update = function () {
40715 throw new Error('_update must be implemented by subclass')
40716 }
40717
40718 module.exports = Hash
40719
40720 },{"safe-buffer":101}],103:[function(require,module,exports){
40721 var exports = module.exports = function SHA (algorithm) {
40722 algorithm = algorithm.toLowerCase()
40723
40724 var Algorithm = exports[algorithm]
40725 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40726
40727 return new Algorithm()
40728 }
40729
40730 exports.sha = require('./sha')
40731 exports.sha1 = require('./sha1')
40732 exports.sha224 = require('./sha224')
40733 exports.sha256 = require('./sha256')
40734 exports.sha384 = require('./sha384')
40735 exports.sha512 = require('./sha512')
40736
40737 },{"./sha":104,"./sha1":105,"./sha224":106,"./sha256":107,"./sha384":108,"./sha512":109}],104:[function(require,module,exports){
40738 /*
40739 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40740 * in FIPS PUB 180-1
40741 * This source code is derived from sha1.js of the same repository.
40742 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40743 * operation was added.
40744 */
40745
40746 var inherits = require('inherits')
40747 var Hash = require('./hash')
40748 var Buffer = require('safe-buffer').Buffer
40749
40750 var K = [
40751 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40752 ]
40753
40754 var W = new Array(80)
40755
40756 function Sha () {
40757 this.init()
40758 this._w = W
40759
40760 Hash.call(this, 64, 56)
40761 }
40762
40763 inherits(Sha, Hash)
40764
40765 Sha.prototype.init = function () {
40766 this._a = 0x67452301
40767 this._b = 0xefcdab89
40768 this._c = 0x98badcfe
40769 this._d = 0x10325476
40770 this._e = 0xc3d2e1f0
40771
40772 return this
40773 }
40774
40775 function rotl5 (num) {
40776 return (num << 5) | (num >>> 27)
40777 }
40778
40779 function rotl30 (num) {
40780 return (num << 30) | (num >>> 2)
40781 }
40782
40783 function ft (s, b, c, d) {
40784 if (s === 0) return (b & c) | ((~b) & d)
40785 if (s === 2) return (b & c) | (b & d) | (c & d)
40786 return b ^ c ^ d
40787 }
40788
40789 Sha.prototype._update = function (M) {
40790 var W = this._w
40791
40792 var a = this._a | 0
40793 var b = this._b | 0
40794 var c = this._c | 0
40795 var d = this._d | 0
40796 var e = this._e | 0
40797
40798 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40799 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
40800
40801 for (var j = 0; j < 80; ++j) {
40802 var s = ~~(j / 20)
40803 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40804
40805 e = d
40806 d = c
40807 c = rotl30(b)
40808 b = a
40809 a = t
40810 }
40811
40812 this._a = (a + this._a) | 0
40813 this._b = (b + this._b) | 0
40814 this._c = (c + this._c) | 0
40815 this._d = (d + this._d) | 0
40816 this._e = (e + this._e) | 0
40817 }
40818
40819 Sha.prototype._hash = function () {
40820 var H = Buffer.allocUnsafe(20)
40821
40822 H.writeInt32BE(this._a | 0, 0)
40823 H.writeInt32BE(this._b | 0, 4)
40824 H.writeInt32BE(this._c | 0, 8)
40825 H.writeInt32BE(this._d | 0, 12)
40826 H.writeInt32BE(this._e | 0, 16)
40827
40828 return H
40829 }
40830
40831 module.exports = Sha
40832
40833 },{"./hash":102,"inherits":96,"safe-buffer":101}],105:[function(require,module,exports){
40834 /*
40835 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40836 * in FIPS PUB 180-1
40837 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40838 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40839 * Distributed under the BSD License
40840 * See http://pajhome.org.uk/crypt/md5 for details.
40841 */
40842
40843 var inherits = require('inherits')
40844 var Hash = require('./hash')
40845 var Buffer = require('safe-buffer').Buffer
40846
40847 var K = [
40848 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40849 ]
40850
40851 var W = new Array(80)
40852
40853 function Sha1 () {
40854 this.init()
40855 this._w = W
40856
40857 Hash.call(this, 64, 56)
40858 }
40859
40860 inherits(Sha1, Hash)
40861
40862 Sha1.prototype.init = function () {
40863 this._a = 0x67452301
40864 this._b = 0xefcdab89
40865 this._c = 0x98badcfe
40866 this._d = 0x10325476
40867 this._e = 0xc3d2e1f0
40868
40869 return this
40870 }
40871
40872 function rotl1 (num) {
40873 return (num << 1) | (num >>> 31)
40874 }
40875
40876 function rotl5 (num) {
40877 return (num << 5) | (num >>> 27)
40878 }
40879
40880 function rotl30 (num) {
40881 return (num << 30) | (num >>> 2)
40882 }
40883
40884 function ft (s, b, c, d) {
40885 if (s === 0) return (b & c) | ((~b) & d)
40886 if (s === 2) return (b & c) | (b & d) | (c & d)
40887 return b ^ c ^ d
40888 }
40889
40890 Sha1.prototype._update = function (M) {
40891 var W = this._w
40892
40893 var a = this._a | 0
40894 var b = this._b | 0
40895 var c = this._c | 0
40896 var d = this._d | 0
40897 var e = this._e | 0
40898
40899 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40900 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40901
40902 for (var j = 0; j < 80; ++j) {
40903 var s = ~~(j / 20)
40904 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40905
40906 e = d
40907 d = c
40908 c = rotl30(b)
40909 b = a
40910 a = t
40911 }
40912
40913 this._a = (a + this._a) | 0
40914 this._b = (b + this._b) | 0
40915 this._c = (c + this._c) | 0
40916 this._d = (d + this._d) | 0
40917 this._e = (e + this._e) | 0
40918 }
40919
40920 Sha1.prototype._hash = function () {
40921 var H = Buffer.allocUnsafe(20)
40922
40923 H.writeInt32BE(this._a | 0, 0)
40924 H.writeInt32BE(this._b | 0, 4)
40925 H.writeInt32BE(this._c | 0, 8)
40926 H.writeInt32BE(this._d | 0, 12)
40927 H.writeInt32BE(this._e | 0, 16)
40928
40929 return H
40930 }
40931
40932 module.exports = Sha1
40933
40934 },{"./hash":102,"inherits":96,"safe-buffer":101}],106:[function(require,module,exports){
40935 /**
40936 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40937 * in FIPS 180-2
40938 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40939 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40940 *
40941 */
40942
40943 var inherits = require('inherits')
40944 var Sha256 = require('./sha256')
40945 var Hash = require('./hash')
40946 var Buffer = require('safe-buffer').Buffer
40947
40948 var W = new Array(64)
40949
40950 function Sha224 () {
40951 this.init()
40952
40953 this._w = W // new Array(64)
40954
40955 Hash.call(this, 64, 56)
40956 }
40957
40958 inherits(Sha224, Sha256)
40959
40960 Sha224.prototype.init = function () {
40961 this._a = 0xc1059ed8
40962 this._b = 0x367cd507
40963 this._c = 0x3070dd17
40964 this._d = 0xf70e5939
40965 this._e = 0xffc00b31
40966 this._f = 0x68581511
40967 this._g = 0x64f98fa7
40968 this._h = 0xbefa4fa4
40969
40970 return this
40971 }
40972
40973 Sha224.prototype._hash = function () {
40974 var H = Buffer.allocUnsafe(28)
40975
40976 H.writeInt32BE(this._a, 0)
40977 H.writeInt32BE(this._b, 4)
40978 H.writeInt32BE(this._c, 8)
40979 H.writeInt32BE(this._d, 12)
40980 H.writeInt32BE(this._e, 16)
40981 H.writeInt32BE(this._f, 20)
40982 H.writeInt32BE(this._g, 24)
40983
40984 return H
40985 }
40986
40987 module.exports = Sha224
40988
40989 },{"./hash":102,"./sha256":107,"inherits":96,"safe-buffer":101}],107:[function(require,module,exports){
40990 /**
40991 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40992 * in FIPS 180-2
40993 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40994 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40995 *
40996 */
40997
40998 var inherits = require('inherits')
40999 var Hash = require('./hash')
41000 var Buffer = require('safe-buffer').Buffer
41001
41002 var K = [
41003 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
41004 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
41005 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
41006 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
41007 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
41008 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
41009 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
41010 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
41011 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
41012 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
41013 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
41014 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
41015 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
41016 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
41017 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
41018 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
41019 ]
41020
41021 var W = new Array(64)
41022
41023 function Sha256 () {
41024 this.init()
41025
41026 this._w = W // new Array(64)
41027
41028 Hash.call(this, 64, 56)
41029 }
41030
41031 inherits(Sha256, Hash)
41032
41033 Sha256.prototype.init = function () {
41034 this._a = 0x6a09e667
41035 this._b = 0xbb67ae85
41036 this._c = 0x3c6ef372
41037 this._d = 0xa54ff53a
41038 this._e = 0x510e527f
41039 this._f = 0x9b05688c
41040 this._g = 0x1f83d9ab
41041 this._h = 0x5be0cd19
41042
41043 return this
41044 }
41045
41046 function ch (x, y, z) {
41047 return z ^ (x & (y ^ z))
41048 }
41049
41050 function maj (x, y, z) {
41051 return (x & y) | (z & (x | y))
41052 }
41053
41054 function sigma0 (x) {
41055 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
41056 }
41057
41058 function sigma1 (x) {
41059 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
41060 }
41061
41062 function gamma0 (x) {
41063 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
41064 }
41065
41066 function gamma1 (x) {
41067 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
41068 }
41069
41070 Sha256.prototype._update = function (M) {
41071 var W = this._w
41072
41073 var a = this._a | 0
41074 var b = this._b | 0
41075 var c = this._c | 0
41076 var d = this._d | 0
41077 var e = this._e | 0
41078 var f = this._f | 0
41079 var g = this._g | 0
41080 var h = this._h | 0
41081
41082 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
41083 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
41084
41085 for (var j = 0; j < 64; ++j) {
41086 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
41087 var T2 = (sigma0(a) + maj(a, b, c)) | 0
41088
41089 h = g
41090 g = f
41091 f = e
41092 e = (d + T1) | 0
41093 d = c
41094 c = b
41095 b = a
41096 a = (T1 + T2) | 0
41097 }
41098
41099 this._a = (a + this._a) | 0
41100 this._b = (b + this._b) | 0
41101 this._c = (c + this._c) | 0
41102 this._d = (d + this._d) | 0
41103 this._e = (e + this._e) | 0
41104 this._f = (f + this._f) | 0
41105 this._g = (g + this._g) | 0
41106 this._h = (h + this._h) | 0
41107 }
41108
41109 Sha256.prototype._hash = function () {
41110 var H = Buffer.allocUnsafe(32)
41111
41112 H.writeInt32BE(this._a, 0)
41113 H.writeInt32BE(this._b, 4)
41114 H.writeInt32BE(this._c, 8)
41115 H.writeInt32BE(this._d, 12)
41116 H.writeInt32BE(this._e, 16)
41117 H.writeInt32BE(this._f, 20)
41118 H.writeInt32BE(this._g, 24)
41119 H.writeInt32BE(this._h, 28)
41120
41121 return H
41122 }
41123
41124 module.exports = Sha256
41125
41126 },{"./hash":102,"inherits":96,"safe-buffer":101}],108:[function(require,module,exports){
41127 var inherits = require('inherits')
41128 var SHA512 = require('./sha512')
41129 var Hash = require('./hash')
41130 var Buffer = require('safe-buffer').Buffer
41131
41132 var W = new Array(160)
41133
41134 function Sha384 () {
41135 this.init()
41136 this._w = W
41137
41138 Hash.call(this, 128, 112)
41139 }
41140
41141 inherits(Sha384, SHA512)
41142
41143 Sha384.prototype.init = function () {
41144 this._ah = 0xcbbb9d5d
41145 this._bh = 0x629a292a
41146 this._ch = 0x9159015a
41147 this._dh = 0x152fecd8
41148 this._eh = 0x67332667
41149 this._fh = 0x8eb44a87
41150 this._gh = 0xdb0c2e0d
41151 this._hh = 0x47b5481d
41152
41153 this._al = 0xc1059ed8
41154 this._bl = 0x367cd507
41155 this._cl = 0x3070dd17
41156 this._dl = 0xf70e5939
41157 this._el = 0xffc00b31
41158 this._fl = 0x68581511
41159 this._gl = 0x64f98fa7
41160 this._hl = 0xbefa4fa4
41161
41162 return this
41163 }
41164
41165 Sha384.prototype._hash = function () {
41166 var H = Buffer.allocUnsafe(48)
41167
41168 function writeInt64BE (h, l, offset) {
41169 H.writeInt32BE(h, offset)
41170 H.writeInt32BE(l, offset + 4)
41171 }
41172
41173 writeInt64BE(this._ah, this._al, 0)
41174 writeInt64BE(this._bh, this._bl, 8)
41175 writeInt64BE(this._ch, this._cl, 16)
41176 writeInt64BE(this._dh, this._dl, 24)
41177 writeInt64BE(this._eh, this._el, 32)
41178 writeInt64BE(this._fh, this._fl, 40)
41179
41180 return H
41181 }
41182
41183 module.exports = Sha384
41184
41185 },{"./hash":102,"./sha512":109,"inherits":96,"safe-buffer":101}],109:[function(require,module,exports){
41186 var inherits = require('inherits')
41187 var Hash = require('./hash')
41188 var Buffer = require('safe-buffer').Buffer
41189
41190 var K = [
41191 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
41192 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41193 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
41194 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41195 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
41196 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41197 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
41198 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41199 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
41200 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41201 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
41202 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41203 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
41204 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41205 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
41206 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41207 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
41208 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41209 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
41210 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41211 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
41212 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41213 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
41214 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41215 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
41216 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41217 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
41218 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41219 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
41220 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41221 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
41222 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41223 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
41224 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41225 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
41226 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41227 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
41228 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41229 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
41230 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
41231 ]
41232
41233 var W = new Array(160)
41234
41235 function Sha512 () {
41236 this.init()
41237 this._w = W
41238
41239 Hash.call(this, 128, 112)
41240 }
41241
41242 inherits(Sha512, Hash)
41243
41244 Sha512.prototype.init = function () {
41245 this._ah = 0x6a09e667
41246 this._bh = 0xbb67ae85
41247 this._ch = 0x3c6ef372
41248 this._dh = 0xa54ff53a
41249 this._eh = 0x510e527f
41250 this._fh = 0x9b05688c
41251 this._gh = 0x1f83d9ab
41252 this._hh = 0x5be0cd19
41253
41254 this._al = 0xf3bcc908
41255 this._bl = 0x84caa73b
41256 this._cl = 0xfe94f82b
41257 this._dl = 0x5f1d36f1
41258 this._el = 0xade682d1
41259 this._fl = 0x2b3e6c1f
41260 this._gl = 0xfb41bd6b
41261 this._hl = 0x137e2179
41262
41263 return this
41264 }
41265
41266 function Ch (x, y, z) {
41267 return z ^ (x & (y ^ z))
41268 }
41269
41270 function maj (x, y, z) {
41271 return (x & y) | (z & (x | y))
41272 }
41273
41274 function sigma0 (x, xl) {
41275 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
41276 }
41277
41278 function sigma1 (x, xl) {
41279 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
41280 }
41281
41282 function Gamma0 (x, xl) {
41283 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
41284 }
41285
41286 function Gamma0l (x, xl) {
41287 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
41288 }
41289
41290 function Gamma1 (x, xl) {
41291 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
41292 }
41293
41294 function Gamma1l (x, xl) {
41295 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
41296 }
41297
41298 function getCarry (a, b) {
41299 return (a >>> 0) < (b >>> 0) ? 1 : 0
41300 }
41301
41302 Sha512.prototype._update = function (M) {
41303 var W = this._w
41304
41305 var ah = this._ah | 0
41306 var bh = this._bh | 0
41307 var ch = this._ch | 0
41308 var dh = this._dh | 0
41309 var eh = this._eh | 0
41310 var fh = this._fh | 0
41311 var gh = this._gh | 0
41312 var hh = this._hh | 0
41313
41314 var al = this._al | 0
41315 var bl = this._bl | 0
41316 var cl = this._cl | 0
41317 var dl = this._dl | 0
41318 var el = this._el | 0
41319 var fl = this._fl | 0
41320 var gl = this._gl | 0
41321 var hl = this._hl | 0
41322
41323 for (var i = 0; i < 32; i += 2) {
41324 W[i] = M.readInt32BE(i * 4)
41325 W[i + 1] = M.readInt32BE(i * 4 + 4)
41326 }
41327 for (; i < 160; i += 2) {
41328 var xh = W[i - 15 * 2]
41329 var xl = W[i - 15 * 2 + 1]
41330 var gamma0 = Gamma0(xh, xl)
41331 var gamma0l = Gamma0l(xl, xh)
41332
41333 xh = W[i - 2 * 2]
41334 xl = W[i - 2 * 2 + 1]
41335 var gamma1 = Gamma1(xh, xl)
41336 var gamma1l = Gamma1l(xl, xh)
41337
41338 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41339 var Wi7h = W[i - 7 * 2]
41340 var Wi7l = W[i - 7 * 2 + 1]
41341
41342 var Wi16h = W[i - 16 * 2]
41343 var Wi16l = W[i - 16 * 2 + 1]
41344
41345 var Wil = (gamma0l + Wi7l) | 0
41346 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41347 Wil = (Wil + gamma1l) | 0
41348 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41349 Wil = (Wil + Wi16l) | 0
41350 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
41351
41352 W[i] = Wih
41353 W[i + 1] = Wil
41354 }
41355
41356 for (var j = 0; j < 160; j += 2) {
41357 Wih = W[j]
41358 Wil = W[j + 1]
41359
41360 var majh = maj(ah, bh, ch)
41361 var majl = maj(al, bl, cl)
41362
41363 var sigma0h = sigma0(ah, al)
41364 var sigma0l = sigma0(al, ah)
41365 var sigma1h = sigma1(eh, el)
41366 var sigma1l = sigma1(el, eh)
41367
41368 // t1 = h + sigma1 + ch + K[j] + W[j]
41369 var Kih = K[j]
41370 var Kil = K[j + 1]
41371
41372 var chh = Ch(eh, fh, gh)
41373 var chl = Ch(el, fl, gl)
41374
41375 var t1l = (hl + sigma1l) | 0
41376 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41377 t1l = (t1l + chl) | 0
41378 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41379 t1l = (t1l + Kil) | 0
41380 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41381 t1l = (t1l + Wil) | 0
41382 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
41383
41384 // t2 = sigma0 + maj
41385 var t2l = (sigma0l + majl) | 0
41386 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
41387
41388 hh = gh
41389 hl = gl
41390 gh = fh
41391 gl = fl
41392 fh = eh
41393 fl = el
41394 el = (dl + t1l) | 0
41395 eh = (dh + t1h + getCarry(el, dl)) | 0
41396 dh = ch
41397 dl = cl
41398 ch = bh
41399 cl = bl
41400 bh = ah
41401 bl = al
41402 al = (t1l + t2l) | 0
41403 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41404 }
41405
41406 this._al = (this._al + al) | 0
41407 this._bl = (this._bl + bl) | 0
41408 this._cl = (this._cl + cl) | 0
41409 this._dl = (this._dl + dl) | 0
41410 this._el = (this._el + el) | 0
41411 this._fl = (this._fl + fl) | 0
41412 this._gl = (this._gl + gl) | 0
41413 this._hl = (this._hl + hl) | 0
41414
41415 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41416 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41417 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41418 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41419 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41420 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41421 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41422 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
41423 }
41424
41425 Sha512.prototype._hash = function () {
41426 var H = Buffer.allocUnsafe(64)
41427
41428 function writeInt64BE (h, l, offset) {
41429 H.writeInt32BE(h, offset)
41430 H.writeInt32BE(l, offset + 4)
41431 }
41432
41433 writeInt64BE(this._ah, this._al, 0)
41434 writeInt64BE(this._bh, this._bl, 8)
41435 writeInt64BE(this._ch, this._cl, 16)
41436 writeInt64BE(this._dh, this._dl, 24)
41437 writeInt64BE(this._eh, this._el, 32)
41438 writeInt64BE(this._fh, this._fl, 40)
41439 writeInt64BE(this._gh, this._gl, 48)
41440 writeInt64BE(this._hh, this._hl, 56)
41441
41442 return H
41443 }
41444
41445 module.exports = Sha512
41446
41447 },{"./hash":102,"inherits":96,"safe-buffer":101}],110:[function(require,module,exports){
41448 var native = require('./native')
41449
41450 function getTypeName (fn) {
41451 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
41452 }
41453
41454 function getValueTypeName (value) {
41455 return native.Nil(value) ? '' : getTypeName(value.constructor)
41456 }
41457
41458 function getValue (value) {
41459 if (native.Function(value)) return ''
41460 if (native.String(value)) return JSON.stringify(value)
41461 if (value && native.Object(value)) return ''
41462 return value
41463 }
41464
41465 function tfJSON (type) {
41466 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
41467 if (native.Array(type)) return 'Array'
41468 if (type && native.Object(type)) return 'Object'
41469
41470 return type !== undefined ? type : ''
41471 }
41472
41473 function tfErrorString (type, value, valueTypeName) {
41474 var valueJson = getValue(value)
41475
41476 return 'Expected ' + tfJSON(type) + ', got' +
41477 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
41478 (valueJson !== '' ? ' ' + valueJson : '')
41479 }
41480
41481 function TfTypeError (type, value, valueTypeName) {
41482 valueTypeName = valueTypeName || getValueTypeName(value)
41483 this.message = tfErrorString(type, value, valueTypeName)
41484
41485 Error.captureStackTrace(this, TfTypeError)
41486 this.__type = type
41487 this.__value = value
41488 this.__valueTypeName = valueTypeName
41489 }
41490
41491 TfTypeError.prototype = Object.create(Error.prototype)
41492 TfTypeError.prototype.constructor = TfTypeError
41493
41494 function tfPropertyErrorString (type, label, name, value, valueTypeName) {
41495 var description = '" of type '
41496 if (label === 'key') description = '" with key type '
41497
41498 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
41499 }
41500
41501 function TfPropertyTypeError (type, property, label, value, valueTypeName) {
41502 if (type) {
41503 valueTypeName = valueTypeName || getValueTypeName(value)
41504 this.message = tfPropertyErrorString(type, label, property, value, valueTypeName)
41505 } else {
41506 this.message = 'Unexpected property "' + property + '"'
41507 }
41508
41509 Error.captureStackTrace(this, TfTypeError)
41510 this.__label = label
41511 this.__property = property
41512 this.__type = type
41513 this.__value = value
41514 this.__valueTypeName = valueTypeName
41515 }
41516
41517 TfPropertyTypeError.prototype = Object.create(Error.prototype)
41518 TfPropertyTypeError.prototype.constructor = TfTypeError
41519
41520 function tfCustomError (expected, actual) {
41521 return new TfTypeError(expected, {}, actual)
41522 }
41523
41524 function tfSubError (e, property, label) {
41525 // sub child?
41526 if (e instanceof TfPropertyTypeError) {
41527 property = property + '.' + e.__property
41528
41529 e = new TfPropertyTypeError(
41530 e.__type, property, e.__label, e.__value, e.__valueTypeName
41531 )
41532
41533 // child?
41534 } else if (e instanceof TfTypeError) {
41535 e = new TfPropertyTypeError(
41536 e.__type, property, label, e.__value, e.__valueTypeName
41537 )
41538 }
41539
41540 Error.captureStackTrace(e)
41541 return e
41542 }
41543
41544 module.exports = {
41545 TfTypeError: TfTypeError,
41546 TfPropertyTypeError: TfPropertyTypeError,
41547 tfCustomError: tfCustomError,
41548 tfSubError: tfSubError,
41549 tfJSON: tfJSON,
41550 getValueTypeName: getValueTypeName
41551 }
41552
41553 },{"./native":113}],111:[function(require,module,exports){
41554 (function (Buffer){
41555 var NATIVE = require('./native')
41556 var ERRORS = require('./errors')
41557
41558 function _Buffer (value) {
41559 return Buffer.isBuffer(value)
41560 }
41561
41562 function Hex (value) {
41563 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
41564 }
41565
41566 function _LengthN (type, length) {
41567 var name = type.toJSON()
41568
41569 function Length (value) {
41570 if (!type(value)) return false
41571 if (value.length === length) return true
41572
41573 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
41574 }
41575 Length.toJSON = function () { return name }
41576
41577 return Length
41578 }
41579
41580 var _ArrayN = _LengthN.bind(null, NATIVE.Array)
41581 var _BufferN = _LengthN.bind(null, _Buffer)
41582 var _HexN = _LengthN.bind(null, Hex)
41583 var _StringN = _LengthN.bind(null, NATIVE.String)
41584
41585 var UINT53_MAX = Math.pow(2, 53) - 1
41586
41587 function Finite (value) {
41588 return typeof value === 'number' && isFinite(value)
41589 }
41590 function Int8 (value) { return ((value << 24) >> 24) === value }
41591 function Int16 (value) { return ((value << 16) >> 16) === value }
41592 function Int32 (value) { return (value | 0) === value }
41593 function UInt8 (value) { return (value & 0xff) === value }
41594 function UInt16 (value) { return (value & 0xffff) === value }
41595 function UInt32 (value) { return (value >>> 0) === value }
41596 function UInt53 (value) {
41597 return typeof value === 'number' &&
41598 value >= 0 &&
41599 value <= UINT53_MAX &&
41600 Math.floor(value) === value
41601 }
41602
41603 var types = {
41604 ArrayN: _ArrayN,
41605 Buffer: _Buffer,
41606 BufferN: _BufferN,
41607 Finite: Finite,
41608 Hex: Hex,
41609 HexN: _HexN,
41610 Int8: Int8,
41611 Int16: Int16,
41612 Int32: Int32,
41613 StringN: _StringN,
41614 UInt8: UInt8,
41615 UInt16: UInt16,
41616 UInt32: UInt32,
41617 UInt53: UInt53
41618 }
41619
41620 for (var typeName in types) {
41621 types[typeName].toJSON = function (t) {
41622 return t
41623 }.bind(null, typeName)
41624 }
41625
41626 module.exports = types
41627
41628 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
41629 },{"../../../../../.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){
41630 var ERRORS = require('./errors')
41631 var NATIVE = require('./native')
41632
41633 // short-hand
41634 var tfJSON = ERRORS.tfJSON
41635 var TfTypeError = ERRORS.TfTypeError
41636 var TfPropertyTypeError = ERRORS.TfPropertyTypeError
41637 var tfSubError = ERRORS.tfSubError
41638 var getValueTypeName = ERRORS.getValueTypeName
41639
41640 var TYPES = {
41641 arrayOf: function arrayOf (type) {
41642 type = compile(type)
41643
41644 function _arrayOf (array, strict) {
41645 if (!NATIVE.Array(array)) return false
41646 if (NATIVE.Nil(array)) return false
41647
41648 return array.every(function (value, i) {
41649 try {
41650 return typeforce(type, value, strict)
41651 } catch (e) {
41652 throw tfSubError(e, i)
41653 }
41654 })
41655 }
41656 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
41657
41658 return _arrayOf
41659 },
41660
41661 maybe: function maybe (type) {
41662 type = compile(type)
41663
41664 function _maybe (value, strict) {
41665 return NATIVE.Nil(value) || type(value, strict, maybe)
41666 }
41667 _maybe.toJSON = function () { return '?' + tfJSON(type) }
41668
41669 return _maybe
41670 },
41671
41672 map: function map (propertyType, propertyKeyType) {
41673 propertyType = compile(propertyType)
41674 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
41675
41676 function _map (value, strict) {
41677 if (!NATIVE.Object(value)) return false
41678 if (NATIVE.Nil(value)) return false
41679
41680 for (var propertyName in value) {
41681 try {
41682 if (propertyKeyType) {
41683 typeforce(propertyKeyType, propertyName, strict)
41684 }
41685 } catch (e) {
41686 throw tfSubError(e, propertyName, 'key')
41687 }
41688
41689 try {
41690 var propertyValue = value[propertyName]
41691 typeforce(propertyType, propertyValue, strict)
41692 } catch (e) {
41693 throw tfSubError(e, propertyName)
41694 }
41695 }
41696
41697 return true
41698 }
41699
41700 if (propertyKeyType) {
41701 _map.toJSON = function () {
41702 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
41703 }
41704 } else {
41705 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
41706 }
41707
41708 return _map
41709 },
41710
41711 object: function object (uncompiled) {
41712 var type = {}
41713
41714 for (var typePropertyName in uncompiled) {
41715 type[typePropertyName] = compile(uncompiled[typePropertyName])
41716 }
41717
41718 function _object (value, strict) {
41719 if (!NATIVE.Object(value)) return false
41720 if (NATIVE.Nil(value)) return false
41721
41722 var propertyName
41723
41724 try {
41725 for (propertyName in type) {
41726 var propertyType = type[propertyName]
41727 var propertyValue = value[propertyName]
41728
41729 typeforce(propertyType, propertyValue, strict)
41730 }
41731 } catch (e) {
41732 throw tfSubError(e, propertyName)
41733 }
41734
41735 if (strict) {
41736 for (propertyName in value) {
41737 if (type[propertyName]) continue
41738
41739 throw new TfPropertyTypeError(undefined, propertyName)
41740 }
41741 }
41742
41743 return true
41744 }
41745 _object.toJSON = function () { return tfJSON(type) }
41746
41747 return _object
41748 },
41749
41750 oneOf: function oneOf () {
41751 var types = [].slice.call(arguments).map(compile)
41752
41753 function _oneOf (value, strict) {
41754 return types.some(function (type) {
41755 try {
41756 return typeforce(type, value, strict)
41757 } catch (e) {
41758 return false
41759 }
41760 })
41761 }
41762 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
41763
41764 return _oneOf
41765 },
41766
41767 quacksLike: function quacksLike (type) {
41768 function _quacksLike (value) {
41769 return type === getValueTypeName(value)
41770 }
41771 _quacksLike.toJSON = function () { return type }
41772
41773 return _quacksLike
41774 },
41775
41776 tuple: function tuple () {
41777 var types = [].slice.call(arguments).map(compile)
41778
41779 function _tuple (values, strict) {
41780 if (NATIVE.Nil(values)) return false
41781 if (NATIVE.Nil(values.length)) return false
41782 if (strict && (values.length !== types.length)) return false
41783
41784 return types.every(function (type, i) {
41785 try {
41786 return typeforce(type, values[i], strict)
41787 } catch (e) {
41788 throw tfSubError(e, i)
41789 }
41790 })
41791 }
41792 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
41793
41794 return _tuple
41795 },
41796
41797 value: function value (expected) {
41798 function _value (actual) {
41799 return actual === expected
41800 }
41801 _value.toJSON = function () { return expected }
41802
41803 return _value
41804 }
41805 }
41806
41807 function compile (type) {
41808 if (NATIVE.String(type)) {
41809 if (type[0] === '?') return TYPES.maybe(type.slice(1))
41810
41811 return NATIVE[type] || TYPES.quacksLike(type)
41812 } else if (type && NATIVE.Object(type)) {
41813 if (NATIVE.Array(type)) return TYPES.arrayOf(type[0])
41814
41815 return TYPES.object(type)
41816 } else if (NATIVE.Function(type)) {
41817 return type
41818 }
41819
41820 return TYPES.value(type)
41821 }
41822
41823 function typeforce (type, value, strict, surrogate) {
41824 if (NATIVE.Function(type)) {
41825 if (type(value, strict)) return true
41826
41827 throw new TfTypeError(surrogate || type, value)
41828 }
41829
41830 // JIT
41831 return typeforce(compile(type), value, strict)
41832 }
41833
41834 // assign types to typeforce function
41835 for (var typeName in NATIVE) {
41836 typeforce[typeName] = NATIVE[typeName]
41837 }
41838
41839 for (typeName in TYPES) {
41840 typeforce[typeName] = TYPES[typeName]
41841 }
41842
41843 var EXTRA = require('./extra')
41844 for (typeName in EXTRA) {
41845 typeforce[typeName] = EXTRA[typeName]
41846 }
41847
41848 // async wrapper
41849 function __async (type, value, strict, callback) {
41850 // default to falsy strict if using shorthand overload
41851 if (typeof strict === 'function') return __async(type, value, false, strict)
41852
41853 try {
41854 typeforce(type, value, strict)
41855 } catch (e) {
41856 return callback(e)
41857 }
41858
41859 callback()
41860 }
41861
41862 typeforce.async = __async
41863 typeforce.compile = compile
41864 typeforce.TfTypeError = TfTypeError
41865 typeforce.TfPropertyTypeError = TfPropertyTypeError
41866
41867 module.exports = typeforce
41868
41869 },{"./errors":110,"./extra":111,"./native":113}],113:[function(require,module,exports){
41870 var types = {
41871 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
41872 Boolean: function (value) { return typeof value === 'boolean' },
41873 Function: function (value) { return typeof value === 'function' },
41874 Nil: function (value) { return value === undefined || value === null },
41875 Number: function (value) { return typeof value === 'number' },
41876 Object: function (value) { return typeof value === 'object' },
41877 String: function (value) { return typeof value === 'string' },
41878 '': function () { return true }
41879 }
41880
41881 // TODO: deprecate
41882 types.Null = types.Nil
41883
41884 for (var typeName in types) {
41885 types[typeName].toJSON = function (t) {
41886 return t
41887 }.bind(null, typeName)
41888 }
41889
41890 module.exports = types
41891
41892 },{}],114:[function(require,module,exports){
41893 'use strict'
41894 var Buffer = require('safe-buffer').Buffer
41895
41896 // Number.MAX_SAFE_INTEGER
41897 var MAX_SAFE_INTEGER = 9007199254740991
41898
41899 function checkUInt53 (n) {
41900 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
41901 }
41902
41903 function encode (number, buffer, offset) {
41904 checkUInt53(number)
41905
41906 if (!buffer) buffer = Buffer.allocUnsafe(encodingLength(number))
41907 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41908 if (!offset) offset = 0
41909
41910 // 8 bit
41911 if (number < 0xfd) {
41912 buffer.writeUInt8(number, offset)
41913 encode.bytes = 1
41914
41915 // 16 bit
41916 } else if (number <= 0xffff) {
41917 buffer.writeUInt8(0xfd, offset)
41918 buffer.writeUInt16LE(number, offset + 1)
41919 encode.bytes = 3
41920
41921 // 32 bit
41922 } else if (number <= 0xffffffff) {
41923 buffer.writeUInt8(0xfe, offset)
41924 buffer.writeUInt32LE(number, offset + 1)
41925 encode.bytes = 5
41926
41927 // 64 bit
41928 } else {
41929 buffer.writeUInt8(0xff, offset)
41930 buffer.writeUInt32LE(number >>> 0, offset + 1)
41931 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
41932 encode.bytes = 9
41933 }
41934
41935 return buffer
41936 }
41937
41938 function decode (buffer, offset) {
41939 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
41940 if (!offset) offset = 0
41941
41942 var first = buffer.readUInt8(offset)
41943
41944 // 8 bit
41945 if (first < 0xfd) {
41946 decode.bytes = 1
41947 return first
41948
41949 // 16 bit
41950 } else if (first === 0xfd) {
41951 decode.bytes = 3
41952 return buffer.readUInt16LE(offset + 1)
41953
41954 // 32 bit
41955 } else if (first === 0xfe) {
41956 decode.bytes = 5
41957 return buffer.readUInt32LE(offset + 1)
41958
41959 // 64 bit
41960 } else {
41961 decode.bytes = 9
41962 var lo = buffer.readUInt32LE(offset + 1)
41963 var hi = buffer.readUInt32LE(offset + 5)
41964 var number = hi * 0x0100000000 + lo
41965 checkUInt53(number)
41966
41967 return number
41968 }
41969 }
41970
41971 function encodingLength (number) {
41972 checkUInt53(number)
41973
41974 return (
41975 number < 0xfd ? 1
41976 : number <= 0xffff ? 3
41977 : number <= 0xffffffff ? 5
41978 : 9
41979 )
41980 }
41981
41982 module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
41983
41984 },{"safe-buffer":101}],115:[function(require,module,exports){
41985 (function (Buffer){
41986 var bs58check = require('bs58check')
41987
41988 function decodeRaw (buffer, version) {
41989 // check version only if defined
41990 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
41991
41992 // uncompressed
41993 if (buffer.length === 33) {
41994 return {
41995 version: buffer[0],
41996 privateKey: buffer.slice(1, 33),
41997 compressed: false
41998 }
41999 }
42000
42001 // invalid length
42002 if (buffer.length !== 34) throw new Error('Invalid WIF length')
42003
42004 // invalid compression flag
42005 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
42006
42007 return {
42008 version: buffer[0],
42009 privateKey: buffer.slice(1, 33),
42010 compressed: true
42011 }
42012 }
42013
42014 function encodeRaw (version, privateKey, compressed) {
42015 var result = new Buffer(compressed ? 34 : 33)
42016
42017 result.writeUInt8(version, 0)
42018 privateKey.copy(result, 1)
42019
42020 if (compressed) {
42021 result[33] = 0x01
42022 }
42023
42024 return result
42025 }
42026
42027 function decode (string, version) {
42028 return decodeRaw(bs58check.decode(string), version)
42029 }
42030
42031 function encode (version, privateKey, compressed) {
42032 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
42033
42034 return bs58check.encode(
42035 encodeRaw(
42036 version.version,
42037 version.privateKey,
42038 version.compressed
42039 )
42040 )
42041 }
42042
42043 module.exports = {
42044 decode: decode,
42045 decodeRaw: decodeRaw,
42046 encode: encode,
42047 encodeRaw: encodeRaw
42048 }
42049
42050 }).call(this,require("buffer").Buffer)
42051 },{"bs58check":83,"buffer":5}]},{},[34])(34)
42052 });</script>
42053 <script>bitcoinjs.bitcoin.networks.shadow = {
42054 messagePrefix: 'unused',
42055 bip32: {
42056 public: 0xEE80286A,
42057 private: 0xEE8031E8
42058 },
42059 pubKeyHash: 0x3f,
42060 scriptHash: 0x7d,
42061 wif: 0xbf
42062 };
42063
42064 bitcoinjs.bitcoin.networks.shadowtn = {
42065 messagePrefix: 'unused',
42066 bip32: {
42067 public: 0x76C0FDFB,
42068 private: 0x76C1077A
42069 },
42070 pubKeyHash: 0x7f,
42071 scriptHash: 0xc4,
42072 wif: 0xff
42073 };
42074
42075 bitcoinjs.bitcoin.networks.clam = {
42076 messagePrefix: 'unused',
42077 bip32: {
42078 public: 0xa8c26d64,
42079 private: 0xa8c17826
42080 },
42081 pubKeyHash: 0x89,
42082 scriptHash: 0x00, // TODO set this correctly
42083 wif: 0x85
42084 };
42085
42086 bitcoinjs.bitcoin.networks.crown = {
42087 messagePrefix: 'unused',
42088 bip32: {
42089 public: 0x0488b21e,
42090 private: 0x0488ade4
42091 },
42092 pubKeyHash: 0x00,
42093 scriptHash: 0x05,
42094 wif: 0x80
42095 };
42096
42097 bitcoinjs.bitcoin.networks.dash = {
42098 messagePrefix: 'unused',
42099 bip32: {
42100 public: 0x0488b21e,
42101 private: 0x0488ade4
42102 },
42103 pubKeyHash: 0x4c,
42104 scriptHash: 0x10,
42105 wif: 0xcc
42106 };
42107
42108 bitcoinjs.bitcoin.networks.maza = {
42109 messagePrefix: 'unused',
42110 bip32: {
42111 public: 0x0488b21e,
42112 private: 0x0488ade4
42113 },
42114 pubKeyHash: 0x32,
42115 scriptHash: 0x09,
42116 wif: 0xe0
42117 };
42118
42119 bitcoinjs.bitcoin.networks.dashtn = {
42120 messagePrefix: 'unused',
42121 bip32: {
42122 public: 0x043587cf,
42123 private: 0x04358394
42124 },
42125 pubKeyHash: 0x8c,
42126 scriptHash: 0x13,
42127 wif: 0xef
42128 };
42129
42130 bitcoinjs.bitcoin.networks.game = {
42131 messagePrefix: 'unused',
42132 bip32: {
42133 public: 0x0488b21e,
42134 private: 0x0488ade4
42135 },
42136 pubKeyHash: 0x26,
42137 scriptHash: 0x05,
42138 wif: 0xa6
42139 };
42140
42141 bitcoinjs.bitcoin.networks.namecoin = {
42142 messagePrefix: 'unused',
42143 bip32: {
42144 public: 0x0488b21e,
42145 private: 0x0488ade4
42146 },
42147 pubKeyHash: 0x34,
42148 scriptHash: 0x00, // TODO set this correctly
42149 wif: 0x80
42150 };
42151
42152 bitcoinjs.bitcoin.networks.peercoin = {
42153 messagePrefix: 'unused',
42154 bip32: {
42155 public: 0x0488b21e,
42156 private: 0x0488ade4
42157 },
42158 pubKeyHash: 0x37,
42159 scriptHash: 0x00, // TODO set this correctly
42160 wif: 0xb7
42161 };
42162
42163 bitcoinjs.bitcoin.networks.axe = {
42164 messagePrefix: 'unused',
42165 bip32: {
42166 public: 0x0488b21e,
42167 private: 0x0488ade4
42168 },
42169 pubKeyHash: 0x37,
42170 scriptHash: 0x10, // TODO set this correctly
42171 wif: 0xcc
42172 };
42173
42174 bitcoinjs.bitcoin.networks.slimcoin = {
42175 messagePrefix: 'unused',
42176 bip32: {
42177 public: 0xef6adf10,
42178 private: 0xef69ea80
42179 },
42180 pubKeyHash: 0x3f,
42181 scriptHash: 0x7d,
42182 wif: 0x46
42183 };
42184
42185 bitcoinjs.bitcoin.networks.slimcointn = {
42186 messagePrefix: 'unused',
42187 bip32: {
42188 public: 0x043587CF,
42189 private: 0x04358394
42190 },
42191 pubKeyHash: 0x6f,
42192 scriptHash: 0xc4,
42193 wif: 0x57
42194 };
42195
42196 bitcoinjs.bitcoin.networks.dogecoin = {
42197 messagePrefix: '\x19Dogecoin Signed Message:\n',
42198 bip32: {
42199 public: 0x02facafd,
42200 private: 0x02fac398
42201 },
42202 pubKeyHash: 0x1e,
42203 scriptHash: 0x16,
42204 wif: 0x9e
42205 };
42206
42207 bitcoinjs.bitcoin.networks.denarius = {
42208 messagePrefix: '\x19Denarius Signed Message:\n',
42209 bip32: {
42210 public: 0x0488b21e,
42211 private: 0x0488ade4
42212 },
42213 pubKeyHash: 0x1e,
42214 scriptHash: 0x5a,
42215 wif: 0x9e
42216 };
42217
42218 bitcoinjs.bitcoin.networks.neblio = {
42219 messagePrefix: '\x18Neblio Signed Message:\n',
42220 bip32: {
42221 public: 0x0488b21e,
42222 private: 0x0488ade4
42223 },
42224 pubKeyHash: 0x35,
42225 scriptHash: 0x70,
42226 wif: 0xb5
42227 };
42228
42229 bitcoinjs.bitcoin.networks.viacoin = {
42230 messagePrefix: '\x18Viacoin Signed Message:\n',
42231 bip32: {
42232 public: 0x0488b21e,
42233 private: 0x0488ade4
42234 },
42235 pubKeyHash: 0x47,
42236 scriptHash: 0x21,
42237 wif: 0xc7
42238 };
42239
42240 bitcoinjs.bitcoin.networks.viacointestnet = {
42241 messagePrefix: '\x18Viacoin Signed Message:\n',
42242 bip32: {
42243 public: 0x043587cf,
42244 private: 0x04358394
42245 },
42246 pubKeyHash: 0x7f,
42247 scriptHash: 0xc4,
42248 wif: 0xff
42249 };
42250
42251 bitcoinjs.bitcoin.networks.gamerscoin = {
42252 messagePrefix: '\x19Gamerscoin Signed Message:\n',
42253 bip32: {
42254 public: 0x019da462,
42255 private: 0x019d9cfe
42256 },
42257 pubKeyHash: 0x26,
42258 scriptHash: 0x05,
42259 wif: 0xA6
42260 };
42261
42262 bitcoinjs.bitcoin.networks.jumbucks = {
42263 messagePrefix: '\x19Jumbucks Signed Message:\n',
42264 bip32: {
42265 public: 0x037a689a,
42266 private: 0x037a6460
42267 },
42268 pubKeyHash: 0x2b,
42269 scriptHash: 0x05,
42270 wif: 0xab
42271 };
42272
42273 bitcoinjs.bitcoin.networks.zetacoin = {
42274 messagePrefix: '\x18Zetacoin Signed Message:\n',
42275 bip32: {
42276 public: 0x0488b21e,
42277 private: 0x0488ade4
42278 },
42279 pubKeyHash: 0x50,
42280 scriptHash: 0x09,
42281 wif: 0xe0
42282 };
42283
42284 bitcoinjs.bitcoin.networks.myriadcoin = {
42285 messagePrefix: 'unused',
42286 bip32: {
42287 public: 0x0488b21e,
42288 private: 0x0488ade4
42289 },
42290 pubKeyHash: 0x32,
42291 scriptHash: 0x00, // TODO set this correctly
42292 wif: 0xb2
42293 };
42294
42295
42296 bitcoinjs.bitcoin.networks.onixcoin = {
42297 messagePrefix: 'unused',
42298 bip32: {
42299 public: 0x049d7cb2,
42300 private: 0x049d7878
42301 },
42302 pubKeyHash: 0x4B,
42303 scriptHash: 0x05,
42304 wif: 0x80
42305 };
42306
42307 bitcoinjs.bitcoin.networks.pivx = {
42308 messagePrefix: 'unused',
42309 bip32: {
42310 public: 0x022d2533,
42311 private: 0x0221312b
42312 },
42313 pubKeyHash: 0x1e,
42314 scriptHash: 0x0d,
42315 wif: 0xd4
42316 };
42317
42318 bitcoinjs.bitcoin.networks.pivxtestnet = {
42319 messagePrefix: 'unused',
42320 bip32: {
42321 public: 0x3a8061a0,
42322 private: 0x3a805837
42323 },
42324 pubKeyHash: 0x8b,
42325 scriptHash: 0x13,
42326 wif: 0xef
42327 };
42328
42329 bitcoinjs.bitcoin.networks.fujicoin = {
42330 messagePrefix: '\x19FujiCoin Signed Message:\n',
42331 bip32: {
42332 public: 0x0488b21e,
42333 private: 0x0488ade4
42334 },
42335 pubKeyHash: 0x24,
42336 scriptHash: 0x10,
42337 wif: 0xa4
42338 };
42339
42340 bitcoinjs.bitcoin.networks.nubits = {
42341 messagePrefix: '\x18Nu Signed Message:\n',
42342 bip32: {
42343 public: 0x0488b21e,
42344 private: 0x0488ade4
42345 },
42346 pubKeyHash: 0x19,
42347 scriptHash: 0x1a,
42348 wif: 0x96,
42349 };
42350
42351 bitcoinjs.bitcoin.networks.bgold = {
42352 messagePrefix: 'unused',
42353 bip32: {
42354 public: 0x0488b21e,
42355 private: 0x0488ade4
42356 },
42357 pubKeyHash: 38,
42358 scriptHash: 23,
42359 wif: 128
42360 };
42361
42362 bitcoinjs.bitcoin.networks.monacoin = {
42363 messagePrefix: '\x18Monacoin Signed Message:\n',
42364 bip32: {
42365 public: 0x0488b21e,
42366 private: 0x0488ade4
42367 },
42368 pubKeyHash: 0x32,
42369 scriptHash: 0x37,
42370 wif: 0xb0
42371 };
42372
42373 bitcoinjs.bitcoin.networks.litecoinXprv = {
42374 messagePrefix: '\x19Litecoin Signed Message:\n',
42375 bip32: {
42376 public: 0x0488b21e,
42377 private: 0x0488ade4,
42378 },
42379 pubKeyHash: 0x30,
42380 scriptHash: 0x32,
42381 wif: 0xb0
42382 };
42383
42384 bitcoinjs.bitcoin.networks.komodo = {
42385 messagePrefix: '\x18Komodo Signed Message:\n',
42386 bip32: {
42387 public: 0x0488B21E,
42388 private: 0x0488ADE4
42389 },
42390 pubKeyHash: 0x3c,
42391 scriptHash: 0x55,
42392 wif: 0xbc
42393 };
42394
42395 bitcoinjs.bitcoin.networks.blackcoin = {
42396 messagePrefix: '\x18BlackCoin Signed Message:\n',
42397 bip32: {
42398 public: 0x02CFBEDE,
42399 private: 0x02CFBF60
42400 },
42401 pubKeyHash: 0x19,
42402 scriptHash: 0x55,
42403 wif: 0x99
42404 };
42405
42406 bitcoinjs.bitcoin.networks.beetlecoin = {
42407 messagePrefix: '\x19Beetlecoin Signed Message:\n',
42408 bip32: {
42409 public: 0x0488b21e,
42410 private: 0x0488ade4
42411 },
42412 pubKeyHash: 0x1A,
42413 scriptHash: 0x55,
42414 wif: 0x99,
42415 };
42416
42417
42418 bitcoinjs.bitcoin.networks.adcoin = {
42419 messagePrefix: '\x18AdCoin Signed Message:\n',
42420 bip32: {
42421 public: 0x0488B21E,
42422 private: 0x0488ADE4,
42423 },
42424 pubKeyHash: 0x17,
42425 scriptHash: 0x05,
42426 wif: 0xb0,
42427 };
42428
42429 bitcoinjs.bitcoin.networks.asiacoin = {
42430 messagePrefix: '\x18AsiaCoin Signed Message:\n',
42431 bip32: {
42432 public: 0x0488b21e,
42433 private: 0x0488ade4,
42434 },
42435 pubKeyHash: 0x17,
42436 scriptHash: 0x08,
42437 wif: 0x97,
42438 };
42439
42440 bitcoinjs.bitcoin.networks.auroracoin = {
42441 messagePrefix: '\x18AuroraCoin Signed Message:\n',
42442 bip32: {
42443 public: 0x0488b21e,
42444 private: 0x0488ade4,
42445 },
42446 pubKeyHash: 0x17,
42447 scriptHash: 0x05,
42448 wif: 0x97,
42449 };
42450
42451 bitcoinjs.bitcoin.networks.bata = {
42452 messagePrefix: '\x18Bata Signed Message:\n',
42453 bip32: {
42454 public: 0xA40C86FA,
42455 private: 0xA40B91BD,
42456 },
42457 pubKeyHash: 0x19,
42458 scriptHash: 0x05,
42459 wif: 0xa4,
42460 };
42461
42462 bitcoinjs.bitcoin.networks.belacoin = {
42463 messagePrefix: '\x18BelaCoin Signed Message:\n',
42464 bip32: {
42465 public: 0x0488b21e,
42466 private: 0x0488ade4,
42467 },
42468 pubKeyHash: 0x19,
42469 scriptHash: 0x05,
42470 wif: 0x99,
42471 };
42472
42473 bitcoinjs.bitcoin.networks.atom = {
42474 messagePrefix: '\x18Bitcoin Signed Message:\n',
42475 bip32: {
42476 public: 0x0488B21E,
42477 private: 0x0488ADE4,
42478 },
42479 pubKeyHash: 0x17,
42480 scriptHash: 0x0a,
42481 wif: 0x80,
42482 };
42483
42484 bitcoinjs.bitcoin.networks.bitcoinplus = {
42485 messagePrefix: '\x18BitcoinPlus Signed Message:\n',
42486 bip32: {
42487 public: 0x0488b21e,
42488 private: 0x0488ade4,
42489 },
42490 pubKeyHash: 0x19,
42491 scriptHash: 0x08,
42492 wif: 0x99,
42493 };
42494
42495 bitcoinjs.bitcoin.networks.bitcore = {
42496 messagePrefix: '\x18BitCore Signed Message:\n',
42497 bip32: {
42498 public: 0x0488B21E,
42499 private: 0x0488ADE4,
42500 },
42501 pubKeyHash: 0x00,
42502 scriptHash: 0x05,
42503 wif: 0x80,
42504 };
42505
42506 bitcoinjs.bitcoin.networks.bitsend = {
42507 messagePrefix: '\x18Bitsend Signed Message:\n',
42508 bip32: {
42509 public: 0x0488B21E,
42510 private: 0x0488ADE4,
42511 },
42512 pubKeyHash: 0x66,
42513 scriptHash: 0x05,
42514 wif: 0xcc,
42515 };
42516
42517 bitcoinjs.bitcoin.networks.britcoin = {
42518 messagePrefix: '\x18BritCoin Signed Message:\n',
42519 bip32: {
42520 public: 0x0488b21e,
42521 private: 0x0488ade4,
42522 },
42523 pubKeyHash: 0x19,
42524 scriptHash: 0x55,
42525 wif: 0x99,
42526 };
42527
42528 bitcoinjs.bitcoin.networks.canadaecoin = {
42529 messagePrefix: '\x18Canada eCoin Signed Message:\n',
42530 bip32: {
42531 public: 0x0488b21e,
42532 private: 0x0488ade4,
42533 },
42534 pubKeyHash: 0x1c,
42535 scriptHash: 0x05,
42536 wif: 0x9c,
42537 };
42538
42539 bitcoinjs.bitcoin.networks.cannacoin = {
42540 messagePrefix: '\x18Cannacoin Signed Message:\n',
42541 bip32: {
42542 public: 0x0488b21e,
42543 private: 0x0488ade4,
42544 },
42545 pubKeyHash: 0x1c,
42546 scriptHash: 0x05,
42547 wif: 0x9c,
42548 };
42549
42550 bitcoinjs.bitcoin.networks.clubcoin = {
42551 messagePrefix: '\x18ClubCoin Signed Message:\n',
42552 bip32: {
42553 public: 0x0488B21E,
42554 private: 0x0488ADE4,
42555 },
42556 pubKeyHash: 0x1c,
42557 scriptHash: 0x55,
42558 wif: 0x99,
42559 };
42560
42561 bitcoinjs.bitcoin.networks.compcoin = {
42562 messagePrefix: '\x18CompCoin Signed Message:\n',
42563 bip32: {
42564 public: 0x0488b21e,
42565 private: 0x0488ade4,
42566 },
42567 pubKeyHash: 0x1c,
42568 scriptHash: 0x55,
42569 wif: 0x9c,
42570 };
42571
42572 bitcoinjs.bitcoin.networks.crave = {
42573 messagePrefix: '\x18DarkNet Signed Message:\n',
42574 bip32: {
42575 public: 0x0488B21E,
42576 private: 0x0488ADE4,
42577 },
42578 pubKeyHash: 0x46,
42579 scriptHash: 0x55,
42580 wif: 0x99,
42581 };
42582
42583 bitcoinjs.bitcoin.networks.defcoin = {
42584 messagePrefix: '\x18defcoin Signed Message:\n',
42585 bip32: {
42586 public: 0x0488b21e,
42587 private: 0x0488ade4,
42588 },
42589 pubKeyHash: 0x1e,
42590 scriptHash: 0x05,
42591 wif: 0x9e,
42592 };
42593
42594 bitcoinjs.bitcoin.networks.diamond = {
42595 messagePrefix: '\x18Diamond Signed Message:\n',
42596 bip32: {
42597 public: 0x0488B21E,
42598 private: 0x0488ADE4,
42599 },
42600 pubKeyHash: 0x5a,
42601 scriptHash: 0x08,
42602 wif: 0xda,
42603 };
42604
42605 bitcoinjs.bitcoin.networks.digibyte = {
42606 messagePrefix: '\x18DigiByte Signed Message:\n',
42607 bip32: {
42608 public: 0x0488B21E,
42609 private: 0x0488ADE4,
42610 },
42611 pubKeyHash: 0x1e,
42612 scriptHash: 0x05,
42613 wif: 0x80,
42614 };
42615
42616 bitcoinjs.bitcoin.networks.digitalcoin = {
42617 messagePrefix: '\x18Digitalcoin Signed Message:\n',
42618 bip32: {
42619 public: 0x9e0488B2,
42620 private: 0x0488ADE4,
42621 },
42622 pubKeyHash: 0x1e,
42623 scriptHash: 0x05,
42624 wif: 0x9e,
42625 };
42626
42627 bitcoinjs.bitcoin.networks.ecoin = {
42628 messagePrefix: '\x18eCoin Signed Message:\n',
42629 bip32: {
42630 public: 0x0488b21e,
42631 private: 0x0488ade4,
42632 },
42633 pubKeyHash: 0x5c,
42634 scriptHash: 0x14,
42635 wif: 0xdc,
42636 };
42637
42638 bitcoinjs.bitcoin.networks.edrcoin = {
42639 messagePrefix: '\x18EDRcoin Signed Message:\n',
42640 bip32: {
42641 public: 0x0488b21e,
42642 private: 0x0488ade4,
42643 },
42644 pubKeyHash: 0x5d,
42645 scriptHash: 0x1c,
42646 wif: 0xdd,
42647 };
42648
42649 bitcoinjs.bitcoin.networks.egulden = {
42650 messagePrefix: '\x18Egulden Signed Message:\n',
42651 bip32: {
42652 public: 0x0488B21E,
42653 private: 0x0488ADE4,
42654 },
42655 pubKeyHash: 0x30,
42656 scriptHash: 0x05,
42657 wif: 0xb0,
42658 };
42659
42660 bitcoinjs.bitcoin.networks.einsteinium = {
42661 messagePrefix: '\x18Einsteinium Signed Message:\n',
42662 bip32: {
42663 public: 0x0488b21e,
42664 private: 0x0488ade4,
42665 },
42666 pubKeyHash: 0x21,
42667 scriptHash: 0x05,
42668 wif: 0xa1,
42669 };
42670
42671 bitcoinjs.bitcoin.networks.europecoin = {
42672 messagePrefix: '\x18Bitcoin Signed Message:\n',
42673 bip32: {
42674 public: 0x0488B21E,
42675 private: 0x0488ADE4,
42676 },
42677 pubKeyHash: 0x21,
42678 scriptHash: 0x05,
42679 wif: 0xa8,
42680 };
42681
42682 bitcoinjs.bitcoin.networks.exclusivecoin = {
42683 messagePrefix: '\x18ExclusiveCoin Signed Message:\n',
42684 bip32: {
42685 public: 0x0488B21E,
42686 private: 0x0488ADE4,
42687 },
42688 pubKeyHash: 0x21,
42689 scriptHash: 0x89,
42690 wif: 0xa1,
42691 };
42692
42693 bitcoinjs.bitcoin.networks.feathercoin = {
42694 messagePrefix: '\x18Feathercoin Signed Message:\n',
42695 bip32: {
42696 public: 0x0488BC26,
42697 private: 0x0488DAEE,
42698 },
42699 pubKeyHash: 0x0e,
42700 scriptHash: 0x05,
42701 wif: 0x8e,
42702 };
42703
42704 bitcoinjs.bitcoin.networks.firstcoin = {
42705 messagePrefix: '\x18FirstCoin Signed Message:\n',
42706 bip32: {
42707 public: 0x0488b21e,
42708 private: 0x0488ade4,
42709 },
42710 pubKeyHash: 0x23,
42711 scriptHash: 0x05,
42712 wif: 0xa3,
42713 };
42714
42715 bitcoinjs.bitcoin.networks.flashcoin = {
42716 messagePrefix: '\x18Flashcoin Signed Message:\n',
42717 bip32: {
42718 public: 0x0488b21e,
42719 private: 0x0488ade4,
42720 },
42721 pubKeyHash: 0x44,
42722 scriptHash: 0x82,
42723 wif: 0xc4,
42724 };
42725
42726 bitcoinjs.bitcoin.networks.gcr = {
42727 messagePrefix: '\x18GCR Signed Message:\n',
42728 bip32: {
42729 public: 0x0488B21E,
42730 private: 0x0488ADE4,
42731 },
42732 pubKeyHash: 0x26,
42733 scriptHash: 0x61,
42734 wif: 0x9a,
42735 };
42736
42737 bitcoinjs.bitcoin.networks.gobyte = {
42738 messagePrefix: '\x18DarkCoin Signed Message:\n',
42739 bip32: {
42740 public: 0x0488B21E,
42741 private: 0x0488ADE4,
42742 },
42743 pubKeyHash: 0x26,
42744 scriptHash: 0x0a,
42745 wif: 0xc6,
42746 };
42747
42748 bitcoinjs.bitcoin.networks.gridcoin = {
42749 messagePrefix: '\x18Gridcoin Signed Message:\n',
42750 bip32: {
42751 public: 0x0488b21e,
42752 private: 0x0488ade4,
42753 },
42754 pubKeyHash: 0x3e,
42755 scriptHash: 0x55,
42756 wif: 0xbe,
42757 };
42758
42759 bitcoinjs.bitcoin.networks.gulden = {
42760 messagePrefix: '\x18Guldencoin Signed Message:\n',
42761 bip32: {
42762 public: 0x0488B21E,
42763 private: 0x0488ADE4,
42764 },
42765 pubKeyHash: 0x26,
42766 scriptHash: 0x62,
42767 wif: 0x62,
42768 };
42769
42770 bitcoinjs.bitcoin.networks.helleniccoin = {
42771 messagePrefix: '\x18helleniccoin Signed Message:\n',
42772 bip32: {
42773 public: 0x0488b21e,
42774 private: 0x0488ade4,
42775 },
42776 pubKeyHash: 0x30,
42777 scriptHash: 0x05,
42778 wif: 0xb0,
42779 };
42780
42781 bitcoinjs.bitcoin.networks.hempcoin = {
42782 messagePrefix: '\x18Hempcoin Signed Message:\n',
42783 bip32: {
42784 public: 0x0488b21e,
42785 private: 0x0488ade4,
42786 },
42787 pubKeyHash: 0x28,
42788 scriptHash: 0x08,
42789 wif: 0xa8,
42790 };
42791
42792 bitcoinjs.bitcoin.networks.insane = {
42793 messagePrefix: '\x18INSaNe Signed Message:\n',
42794 bip32: {
42795 public: 0x0488B21E,
42796 private: 0x0488ADE4,
42797 },
42798 pubKeyHash: 0x66,
42799 scriptHash: 0x39,
42800 wif: 0x37,
42801 };
42802
42803 bitcoinjs.bitcoin.networks.iop = {
42804 messagePrefix: '\x18IoP Signed Message:\n',
42805 bip32: {
42806 public: 0x2780915F,
42807 private: 0xAE3416F6,
42808 },
42809 pubKeyHash: 0x75,
42810 scriptHash: 0xae,
42811 wif: 0x31,
42812 };
42813
42814 bitcoinjs.bitcoin.networks.ixcoin = {
42815 messagePrefix: '\x18Ixcoin Signed Message:\n',
42816 bip32: {
42817 public: 0x0488B21E,
42818 private: 0x0488ADE4,
42819 },
42820 pubKeyHash: 0x8a,
42821 scriptHash: 0x05,
42822 wif: 0x80,
42823 };
42824
42825 bitcoinjs.bitcoin.networks.kobocoin = {
42826 messagePrefix: '\x18Kobocoin Signed Message:\n',
42827 bip32: {
42828 public: 0x0488B21E,
42829 private: 0x0488ADE4,
42830 },
42831 pubKeyHash: 0x23,
42832 scriptHash: 0x1c,
42833 wif: 0xa3,
42834 };
42835
42836 bitcoinjs.bitcoin.networks.landcoin = {
42837 messagePrefix: '\x18Landcoin Signed Message:\n',
42838 bip32: {
42839 public: 0x0488B21E,
42840 private: 0x0488ADE4,
42841 },
42842 pubKeyHash: 0x30,
42843 scriptHash: 0x7a,
42844 wif: 0xb0,
42845 };
42846
42847 bitcoinjs.bitcoin.networks.lbry = {
42848 messagePrefix: '\x18LBRYcrd Signed Message:\n',
42849 bip32: {
42850 public: 0x0488B21E,
42851 private: 0x0488ADE4,
42852 },
42853 pubKeyHash: 0x55,
42854 scriptHash: 0x7a,
42855 wif: 0x1c,
42856 };
42857
42858 bitcoinjs.bitcoin.networks.linx = {
42859 messagePrefix: '\x18LinX Signed Message:\n',
42860 bip32: {
42861 public: 0x0488b21e,
42862 private: 0x0488ade4,
42863 },
42864 pubKeyHash: 0x4b,
42865 scriptHash: 0x05,
42866 wif: 0xcb,
42867 };
42868
42869 bitcoinjs.bitcoin.networks.litecoincash = {
42870 messagePrefix: '\x18Litecoin Signed Message:\n',
42871 bip32: {
42872 public: 0x0488B21E,
42873 private: 0x0488ADE4,
42874 },
42875 pubKeyHash: 0x1c,
42876 scriptHash: 0x05,
42877 wif: 0xb0,
42878 };
42879
42880 bitcoinjs.bitcoin.networks.lynx = {
42881 messagePrefix: '\x18Lynx Signed Message:\n',
42882 bip32: {
42883 public: 0x0488B21E,
42884 private: 0x0488ADE4,
42885 },
42886 pubKeyHash: 0x2d,
42887 scriptHash: 0x32,
42888 wif: 0xad,
42889 };
42890
42891 bitcoinjs.bitcoin.networks.minexcoin = {
42892 messagePrefix: '\x18Bitcoin Signed Message:\n',
42893 bip32: {
42894 public: 0x0488B21E,
42895 private: 0x0488ADE4,
42896 },
42897 pubKeyHash: 0x4b,
42898 scriptHash: 0x05,
42899 wif: 0x80,
42900 };
42901
42902 bitcoinjs.bitcoin.networks.navcoin = {
42903 messagePrefix: '\x18Navcoin Signed Message:\n',
42904 bip32: {
42905 public: 0x0488B21E,
42906 private: 0x0488ADE4,
42907 },
42908 pubKeyHash: 0x35,
42909 scriptHash: 0x55,
42910 wif: 0x96,
42911 };
42912
42913 bitcoinjs.bitcoin.networks.neoscoin = {
42914 messagePrefix: '\x18NeosCoin Signed Message:\n',
42915 bip32: {
42916 public: 0x0488B21E,
42917 private: 0x0488ADE4,
42918 },
42919 pubKeyHash: 0x35,
42920 scriptHash: 0x05,
42921 wif: 0xb1,
42922 };
42923
42924 bitcoinjs.bitcoin.networks.neurocoin = {
42925 messagePrefix: '\x18PPCoin Signed Message:\n',
42926 bip32: {
42927 public: 0x0488B21E,
42928 private: 0x0488ADE4,
42929 },
42930 pubKeyHash: 0x35,
42931 scriptHash: 0x75,
42932 wif: 0xb5,
42933 };
42934
42935 bitcoinjs.bitcoin.networks.newyorkc = {
42936 messagePrefix: '\x18newyorkc Signed Message:\n',
42937 bip32: {
42938 public: 0x0488b21e,
42939 private: 0x0488ade4,
42940 },
42941 pubKeyHash: 0x3c,
42942 scriptHash: 0x16,
42943 wif: 0xbc,
42944 };
42945
42946 bitcoinjs.bitcoin.networks.novacoin = {
42947 messagePrefix: '\x18NovaCoin Signed Message:\n',
42948 bip32: {
42949 public: 0x0488b21e,
42950 private: 0x0488ade4,
42951 },
42952 pubKeyHash: 0x08,
42953 scriptHash: 0x14,
42954 wif: 0x88,
42955 };
42956
42957 bitcoinjs.bitcoin.networks.nushares = {
42958 messagePrefix: '\x18Nu Signed Message:\n',
42959 bip32: {
42960 public: 0x0488b21e,
42961 private: 0x0488ade4,
42962 },
42963 pubKeyHash: 0x3f,
42964 scriptHash: 0x40,
42965 wif: 0x95,
42966 };
42967
42968 bitcoinjs.bitcoin.networks.okcash = {
42969 messagePrefix: '\x18OKCash Signed Message:\n',
42970 bip32: {
42971 public: 0x03CC23D7,
42972 private: 0x03CC1C73,
42973 },
42974 pubKeyHash: 0x37,
42975 scriptHash: 0x1c,
42976 wif: 0x03,
42977 };
42978
42979 bitcoinjs.bitcoin.networks.omnicore = {
42980 messagePrefix: '\x18Bitcoin Signed Message:\n',
42981 bip32: {
42982 public: 0x0488B21E,
42983 private: 0x0488ADE4,
42984 },
42985 pubKeyHash: 0x00,
42986 scriptHash: 0x05,
42987 wif: 0x80,
42988 };
42989
42990 bitcoinjs.bitcoin.networks.pesobit = {
42991 messagePrefix: '\x18Pesobit Signed Message:\n',
42992 bip32: {
42993 public: 0x0488b21e,
42994 private: 0x0488ade4,
42995 },
42996 pubKeyHash: 0x37,
42997 scriptHash: 0x55,
42998 wif: 0xb7,
42999 };
43000
43001 bitcoinjs.bitcoin.networks.pinkcoin = {
43002 messagePrefix: '\x18Pinkcoin Signed Message:\n',
43003 bip32: {
43004 public: 0x0488b21e,
43005 private: 0x0488ade4,
43006 },
43007 pubKeyHash: 0x03,
43008 scriptHash: 0x1c,
43009 wif: 0x83,
43010 };
43011
43012 bitcoinjs.bitcoin.networks.poswcoin = {
43013 messagePrefix: '\x18Poswcoin Signed Message:\n',
43014 bip32: {
43015 public: 0x0488b21e,
43016 private: 0x0488ade4,
43017 },
43018 pubKeyHash: 0x37,
43019 scriptHash: 0x55,
43020 wif: 0xb7,
43021 };
43022
43023 bitcoinjs.bitcoin.networks.potcoin = {
43024 messagePrefix: '\x18Potcoin Signed Message:\n',
43025 bip32: {
43026 public: 0x0488b21e,
43027 private: 0x0488ade4,
43028 },
43029 pubKeyHash: 0x37,
43030 scriptHash: 0x05,
43031 wif: 0xb7,
43032 };
43033
43034 bitcoinjs.bitcoin.networks.putincoin = {
43035 messagePrefix: '\x18PutinCoin Signed Message:\n',
43036 bip32: {
43037 public: 0x0488b21e,
43038 private: 0x0488ade4,
43039 },
43040 pubKeyHash: 0x37,
43041 scriptHash: 0x14,
43042 wif: 0xb7,
43043 };
43044
43045 bitcoinjs.bitcoin.networks.reddcoin = {
43046 messagePrefix: '\x18Reddcoin Signed Message:\n',
43047 bip32: {
43048 public: 0x0488B21E,
43049 private: 0x0488ADE4,
43050 },
43051 pubKeyHash: 0x3d,
43052 scriptHash: 0x05,
43053 wif: 0xbd,
43054 };
43055
43056 bitcoinjs.bitcoin.networks.revolutionvr = {
43057 messagePrefix: '\x18Voxels Signed Message:\n',
43058 bip32: {
43059 public: 0x0488B21E,
43060 private: 0x0488ADE4,
43061 },
43062 pubKeyHash: 0x46,
43063 scriptHash: 0x05,
43064 wif: 0xc6,
43065 };
43066
43067 bitcoinjs.bitcoin.networks.rubycoin = {
43068 messagePrefix: '\x18Rubycoin Signed Message:\n',
43069 bip32: {
43070 public: 0x0488B21E,
43071 private: 0x0488ADE4,
43072 },
43073 pubKeyHash: 0x3c,
43074 scriptHash: 0x55,
43075 wif: 0xbc,
43076 };
43077
43078 bitcoinjs.bitcoin.networks.smileycoin = {
43079 messagePrefix: '\x18Smileycoin Signed Message:\n',
43080 bip32: {
43081 public: 0x1E562D9A,
43082 private: 0x1E5631BC,
43083 },
43084 pubKeyHash: 0x19,
43085 scriptHash: 0x05,
43086 wif: 0x05,
43087 };
43088
43089 bitcoinjs.bitcoin.networks.solarcoin = {
43090 messagePrefix: '\x18SolarCoin Signed Message:\n',
43091 bip32: {
43092 public: 0x0488b21e,
43093 private: 0x0488ade4,
43094 },
43095 pubKeyHash: 0x12,
43096 scriptHash: 0x05,
43097 wif: 0x92,
43098 };
43099
43100 bitcoinjs.bitcoin.networks.stratis = {
43101 messagePrefix: '\x18Stratis Signed Message:\n',
43102 bip32: {
43103 public: 0x0488B21E,
43104 private: 0x0488ADE4,
43105 },
43106 pubKeyHash: 0x3f,
43107 scriptHash: 0x7d,
43108 wif: 0xbf,
43109 };
43110
43111 bitcoinjs.bitcoin.networks.syscoin = {
43112 messagePrefix: '\x18Syscoin Signed Message:\n',
43113 bip32: {
43114 public: 0x0488B21E,
43115 private: 0x0488ADE4,
43116 },
43117 pubKeyHash: 0x3f,
43118 scriptHash: 0x05,
43119 wif: 0xbf,
43120 };
43121
43122
43123 bitcoinjs.bitcoin.networks.toa = {
43124 messagePrefix: '\x18TOA Signed Message:\n',
43125 bip32: {
43126 public: 0x0488b21e,
43127 private: 0x0488ade4,
43128 },
43129 pubKeyHash: 0x41,
43130 scriptHash: 0x17,
43131 wif: 0xc1,
43132 };
43133
43134 bitcoinjs.bitcoin.networks.ultimatesecurecash = {
43135 messagePrefix: '\x18UltimateSecureCash Signed Message:\n',
43136 bip32: {
43137 public: 0xEE80286A,
43138 private: 0xEE8031E8,
43139 },
43140 pubKeyHash: 0x44,
43141 scriptHash: 0x7d,
43142 wif: 0xbf,
43143 };
43144
43145 bitcoinjs.bitcoin.networks.unobtanium = {
43146 messagePrefix: '\x18Unobtanium Signed Message:\n',
43147 bip32: {
43148 public: 0x0488B21E,
43149 private: 0x0488ADE4,
43150 },
43151 pubKeyHash: 0x82,
43152 scriptHash: 0x1e,
43153 wif: 0xe0,
43154 };
43155
43156 bitcoinjs.bitcoin.networks.vcash = {
43157 messagePrefix: '\x18Vcash Signed Message:\n',
43158 bip32: {
43159 public: 0x0488b21e,
43160 private: 0x0488ade4,
43161 },
43162 pubKeyHash: 0x47,
43163 scriptHash: 0x08,
43164 wif: 0xc7,
43165 };
43166
43167 bitcoinjs.bitcoin.networks.verge = {
43168 messagePrefix: '\x18VERGE Signed Message:\n',
43169 bip32: {
43170 public: 0x0488b21e,
43171 private: 0x0488ade4,
43172 },
43173 pubKeyHash: 0x1e,
43174 scriptHash: 0x21,
43175 wif: 0x9e,
43176 };
43177
43178 bitcoinjs.bitcoin.networks.vertcoin = {
43179 messagePrefix: '\x18Vertcoin Signed Message:\n',
43180 bip32: {
43181 public: 0x0488b21e,
43182 private: 0x0488ade4,
43183 },
43184 pubKeyHash: 0x47,
43185 scriptHash: 0x05,
43186 wif: 0x80,
43187 };
43188
43189 bitcoinjs.bitcoin.networks.vivo = {
43190 messagePrefix: '\x18DarkCoin Signed Message:\n',
43191 bip32: {
43192 public: 0x0488B21E,
43193 private: 0x0488ADE4,
43194 },
43195 pubKeyHash: 0x46,
43196 scriptHash: 0x0a,
43197 wif: 0xc6,
43198 };
43199
43200 bitcoinjs.bitcoin.networks.vpncoin = {
43201 messagePrefix: '\x18VpnCoin Signed Message:\n',
43202 bip32: {
43203 public: 0x0488b21e,
43204 private: 0x0488ade4,
43205 },
43206 pubKeyHash: 0x47,
43207 scriptHash: 0x05,
43208 wif: 0xc7,
43209 };
43210
43211 bitcoinjs.bitcoin.networks.whitecoin = {
43212 messagePrefix: '\x18Whitecoin Signed Message:\n',
43213 bip32: {
43214 public: 0x04887F1E,
43215 private: 0x048894ED,
43216 },
43217 pubKeyHash: 0x49,
43218 scriptHash: 0x57,
43219 wif: 0xc9,
43220 };
43221
43222 bitcoinjs.bitcoin.networks.wincoin = {
43223 messagePrefix: '\x18WinCoin Signed Message:\n',
43224 bip32: {
43225 public: 0x0488b21e,
43226 private: 0x0488ade4,
43227 },
43228 pubKeyHash: 0x49,
43229 scriptHash: 0x1c,
43230 wif: 0xc9,
43231 };
43232
43233 bitcoinjs.bitcoin.networks.zcoin = {
43234 messagePrefix: '\x18Zcoin Signed Message:\n',
43235 bip32: {
43236 public: 0x0488B21E,
43237 private: 0x0488ADE4,
43238 },
43239 pubKeyHash: 0x52,
43240 scriptHash: 0x07,
43241 wif: 0xd2,
43242 };
43243
43244 bitcoinjs.bitcoin.networks.zcash = {
43245 messagePrefix: '\x18Zcash Signed Message:\n',
43246 bip32: {
43247 public: 0x0488B21E,
43248 private: 0x0488ADE4,
43249 },
43250 pubKeyHash: 0x1CB8,
43251 scriptHash: 0x1CBD,
43252 wif: 0x80,
43253 };
43254
43255 bitcoinjs.bitcoin.networks.xuez = {
43256 messagePrefix: 'unused',
43257 bip32: {
43258 public: 0x022d2533,
43259 private: 0x0221312b
43260 },
43261 pubKeyHash: 0x4b,
43262 scriptHash: 0x12,
43263 wif: 0xd4
43264 };
43265
43266 bitcoinjs.bitcoin.networks.bitcoinprivate = {
43267 messagePrefix: '\x18BitcoinPrivate Signed Message:\n',
43268 bip32: {
43269 public: 0x0488B21E,
43270 private: 0x0488ADE4,
43271 },
43272 pubKeyHash: 0x1325,
43273 scriptHash: 0x13AF,
43274 wif: 0x80,
43275 };
43276
43277 bitcoinjs.bitcoin.networks.bitcoinz = {
43278 messagePrefix: '\x18BitcoinZ Signed Message:\n',
43279 bip32: {
43280 public: 0x0488B21E,
43281 private: 0x0488ADE4,
43282 },
43283 pubKeyHash: 0x1CB8,
43284 scriptHash: 0x1CBD,
43285 wif: 0x80,
43286 };
43287
43288 bitcoinjs.bitcoin.networks.zclassic = {
43289 messagePrefix: '\x18Zcash Signed Message:\n',
43290 bip32: {
43291 public: 0x0488B21E,
43292 private: 0x0488ADE4,
43293 },
43294 pubKeyHash: 0x1CB8,
43295 scriptHash: 0x1CBD,
43296 wif: 0x80,
43297 };
43298
43299 bitcoinjs.bitcoin.networks.zencash = {
43300 messagePrefix: '\x18Zcash Signed Message:\n',
43301 bip32: {
43302 public: 0x0488B21E,
43303 private: 0x0488ADE4,
43304 },
43305 pubKeyHash: 0x2089,
43306 scriptHash: 0x2096,
43307 wif: 0x80,
43308 };
43309
43310 bitcoinjs.bitcoin.networks.energi = {
43311 messagePrefix: 'DarkCoin Signed Message:\n',
43312 bip32: {
43313 public: 0x03B8C856,
43314 private: 0xD7DC6E9F,
43315 },
43316 pubKeyHash: 0x21,
43317 scriptHash: 0x35,
43318 wif: 0x6a,
43319 };</script>
43320 <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){
43321 var asn1 = exports;
43322
43323 asn1.bignum = require('bn.js');
43324
43325 asn1.define = require('./asn1/api').define;
43326 asn1.base = require('./asn1/base');
43327 asn1.constants = require('./asn1/constants');
43328 asn1.decoders = require('./asn1/decoders');
43329 asn1.encoders = require('./asn1/encoders');
43330
43331 },{"./asn1/api":2,"./asn1/base":4,"./asn1/constants":8,"./asn1/decoders":10,"./asn1/encoders":13,"bn.js":17}],2:[function(require,module,exports){
43332 var asn1 = require('../asn1');
43333 var inherits = require('inherits');
43334
43335 var api = exports;
43336
43337 api.define = function define(name, body) {
43338 return new Entity(name, body);
43339 };
43340
43341 function Entity(name, body) {
43342 this.name = name;
43343 this.body = body;
43344
43345 this.decoders = {};
43346 this.encoders = {};
43347 };
43348
43349 Entity.prototype._createNamed = function createNamed(base) {
43350 var named;
43351 try {
43352 named = require('vm').runInThisContext(
43353 '(function ' + this.name + '(entity) {\n' +
43354 ' this._initNamed(entity);\n' +
43355 '})'
43356 );
43357 } catch (e) {
43358 named = function (entity) {
43359 this._initNamed(entity);
43360 };
43361 }
43362 inherits(named, base);
43363 named.prototype._initNamed = function initnamed(entity) {
43364 base.call(this, entity);
43365 };
43366
43367 return new named(this);
43368 };
43369
43370 Entity.prototype._getDecoder = function _getDecoder(enc) {
43371 enc = enc || 'der';
43372 // Lazily create decoder
43373 if (!this.decoders.hasOwnProperty(enc))
43374 this.decoders[enc] = this._createNamed(asn1.decoders[enc]);
43375 return this.decoders[enc];
43376 };
43377
43378 Entity.prototype.decode = function decode(data, enc, options) {
43379 return this._getDecoder(enc).decode(data, options);
43380 };
43381
43382 Entity.prototype._getEncoder = function _getEncoder(enc) {
43383 enc = enc || 'der';
43384 // Lazily create encoder
43385 if (!this.encoders.hasOwnProperty(enc))
43386 this.encoders[enc] = this._createNamed(asn1.encoders[enc]);
43387 return this.encoders[enc];
43388 };
43389
43390 Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
43391 return this._getEncoder(enc).encode(data, reporter);
43392 };
43393
43394 },{"../asn1":1,"inherits":95,"vm":149}],3:[function(require,module,exports){
43395 var inherits = require('inherits');
43396 var Reporter = require('../base').Reporter;
43397 var Buffer = require('buffer').Buffer;
43398
43399 function DecoderBuffer(base, options) {
43400 Reporter.call(this, options);
43401 if (!Buffer.isBuffer(base)) {
43402 this.error('Input not Buffer');
43403 return;
43404 }
43405
43406 this.base = base;
43407 this.offset = 0;
43408 this.length = base.length;
43409 }
43410 inherits(DecoderBuffer, Reporter);
43411 exports.DecoderBuffer = DecoderBuffer;
43412
43413 DecoderBuffer.prototype.save = function save() {
43414 return { offset: this.offset, reporter: Reporter.prototype.save.call(this) };
43415 };
43416
43417 DecoderBuffer.prototype.restore = function restore(save) {
43418 // Return skipped data
43419 var res = new DecoderBuffer(this.base);
43420 res.offset = save.offset;
43421 res.length = this.offset;
43422
43423 this.offset = save.offset;
43424 Reporter.prototype.restore.call(this, save.reporter);
43425
43426 return res;
43427 };
43428
43429 DecoderBuffer.prototype.isEmpty = function isEmpty() {
43430 return this.offset === this.length;
43431 };
43432
43433 DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {
43434 if (this.offset + 1 <= this.length)
43435 return this.base.readUInt8(this.offset++, true);
43436 else
43437 return this.error(fail || 'DecoderBuffer overrun');
43438 }
43439
43440 DecoderBuffer.prototype.skip = function skip(bytes, fail) {
43441 if (!(this.offset + bytes <= this.length))
43442 return this.error(fail || 'DecoderBuffer overrun');
43443
43444 var res = new DecoderBuffer(this.base);
43445
43446 // Share reporter state
43447 res._reporterState = this._reporterState;
43448
43449 res.offset = this.offset;
43450 res.length = this.offset + bytes;
43451 this.offset += bytes;
43452 return res;
43453 }
43454
43455 DecoderBuffer.prototype.raw = function raw(save) {
43456 return this.base.slice(save ? save.offset : this.offset, this.length);
43457 }
43458
43459 function EncoderBuffer(value, reporter) {
43460 if (Array.isArray(value)) {
43461 this.length = 0;
43462 this.value = value.map(function(item) {
43463 if (!(item instanceof EncoderBuffer))
43464 item = new EncoderBuffer(item, reporter);
43465 this.length += item.length;
43466 return item;
43467 }, this);
43468 } else if (typeof value === 'number') {
43469 if (!(0 <= value && value <= 0xff))
43470 return reporter.error('non-byte EncoderBuffer value');
43471 this.value = value;
43472 this.length = 1;
43473 } else if (typeof value === 'string') {
43474 this.value = value;
43475 this.length = Buffer.byteLength(value);
43476 } else if (Buffer.isBuffer(value)) {
43477 this.value = value;
43478 this.length = value.length;
43479 } else {
43480 return reporter.error('Unsupported type: ' + typeof value);
43481 }
43482 }
43483 exports.EncoderBuffer = EncoderBuffer;
43484
43485 EncoderBuffer.prototype.join = function join(out, offset) {
43486 if (!out)
43487 out = new Buffer(this.length);
43488 if (!offset)
43489 offset = 0;
43490
43491 if (this.length === 0)
43492 return out;
43493
43494 if (Array.isArray(this.value)) {
43495 this.value.forEach(function(item) {
43496 item.join(out, offset);
43497 offset += item.length;
43498 });
43499 } else {
43500 if (typeof this.value === 'number')
43501 out[offset] = this.value;
43502 else if (typeof this.value === 'string')
43503 out.write(this.value, offset);
43504 else if (Buffer.isBuffer(this.value))
43505 this.value.copy(out, offset);
43506 offset += this.length;
43507 }
43508
43509 return out;
43510 };
43511
43512 },{"../base":4,"buffer":47,"inherits":95}],4:[function(require,module,exports){
43513 var base = exports;
43514
43515 base.Reporter = require('./reporter').Reporter;
43516 base.DecoderBuffer = require('./buffer').DecoderBuffer;
43517 base.EncoderBuffer = require('./buffer').EncoderBuffer;
43518 base.Node = require('./node');
43519
43520 },{"./buffer":3,"./node":5,"./reporter":6}],5:[function(require,module,exports){
43521 var Reporter = require('../base').Reporter;
43522 var EncoderBuffer = require('../base').EncoderBuffer;
43523 var DecoderBuffer = require('../base').DecoderBuffer;
43524 var assert = require('minimalistic-assert');
43525
43526 // Supported tags
43527 var tags = [
43528 'seq', 'seqof', 'set', 'setof', 'objid', 'bool',
43529 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc',
43530 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str',
43531 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr'
43532 ];
43533
43534 // Public methods list
43535 var methods = [
43536 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice',
43537 'any', 'contains'
43538 ].concat(tags);
43539
43540 // Overrided methods list
43541 var overrided = [
43542 '_peekTag', '_decodeTag', '_use',
43543 '_decodeStr', '_decodeObjid', '_decodeTime',
43544 '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList',
43545
43546 '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime',
43547 '_encodeNull', '_encodeInt', '_encodeBool'
43548 ];
43549
43550 function Node(enc, parent) {
43551 var state = {};
43552 this._baseState = state;
43553
43554 state.enc = enc;
43555
43556 state.parent = parent || null;
43557 state.children = null;
43558
43559 // State
43560 state.tag = null;
43561 state.args = null;
43562 state.reverseArgs = null;
43563 state.choice = null;
43564 state.optional = false;
43565 state.any = false;
43566 state.obj = false;
43567 state.use = null;
43568 state.useDecoder = null;
43569 state.key = null;
43570 state['default'] = null;
43571 state.explicit = null;
43572 state.implicit = null;
43573 state.contains = null;
43574
43575 // Should create new instance on each method
43576 if (!state.parent) {
43577 state.children = [];
43578 this._wrap();
43579 }
43580 }
43581 module.exports = Node;
43582
43583 var stateProps = [
43584 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice',
43585 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit',
43586 'implicit', 'contains'
43587 ];
43588
43589 Node.prototype.clone = function clone() {
43590 var state = this._baseState;
43591 var cstate = {};
43592 stateProps.forEach(function(prop) {
43593 cstate[prop] = state[prop];
43594 });
43595 var res = new this.constructor(cstate.parent);
43596 res._baseState = cstate;
43597 return res;
43598 };
43599
43600 Node.prototype._wrap = function wrap() {
43601 var state = this._baseState;
43602 methods.forEach(function(method) {
43603 this[method] = function _wrappedMethod() {
43604 var clone = new this.constructor(this);
43605 state.children.push(clone);
43606 return clone[method].apply(clone, arguments);
43607 };
43608 }, this);
43609 };
43610
43611 Node.prototype._init = function init(body) {
43612 var state = this._baseState;
43613
43614 assert(state.parent === null);
43615 body.call(this);
43616
43617 // Filter children
43618 state.children = state.children.filter(function(child) {
43619 return child._baseState.parent === this;
43620 }, this);
43621 assert.equal(state.children.length, 1, 'Root node can have only one child');
43622 };
43623
43624 Node.prototype._useArgs = function useArgs(args) {
43625 var state = this._baseState;
43626
43627 // Filter children and args
43628 var children = args.filter(function(arg) {
43629 return arg instanceof this.constructor;
43630 }, this);
43631 args = args.filter(function(arg) {
43632 return !(arg instanceof this.constructor);
43633 }, this);
43634
43635 if (children.length !== 0) {
43636 assert(state.children === null);
43637 state.children = children;
43638
43639 // Replace parent to maintain backward link
43640 children.forEach(function(child) {
43641 child._baseState.parent = this;
43642 }, this);
43643 }
43644 if (args.length !== 0) {
43645 assert(state.args === null);
43646 state.args = args;
43647 state.reverseArgs = args.map(function(arg) {
43648 if (typeof arg !== 'object' || arg.constructor !== Object)
43649 return arg;
43650
43651 var res = {};
43652 Object.keys(arg).forEach(function(key) {
43653 if (key == (key | 0))
43654 key |= 0;
43655 var value = arg[key];
43656 res[value] = key;
43657 });
43658 return res;
43659 });
43660 }
43661 };
43662
43663 //
43664 // Overrided methods
43665 //
43666
43667 overrided.forEach(function(method) {
43668 Node.prototype[method] = function _overrided() {
43669 var state = this._baseState;
43670 throw new Error(method + ' not implemented for encoding: ' + state.enc);
43671 };
43672 });
43673
43674 //
43675 // Public methods
43676 //
43677
43678 tags.forEach(function(tag) {
43679 Node.prototype[tag] = function _tagMethod() {
43680 var state = this._baseState;
43681 var args = Array.prototype.slice.call(arguments);
43682
43683 assert(state.tag === null);
43684 state.tag = tag;
43685
43686 this._useArgs(args);
43687
43688 return this;
43689 };
43690 });
43691
43692 Node.prototype.use = function use(item) {
43693 assert(item);
43694 var state = this._baseState;
43695
43696 assert(state.use === null);
43697 state.use = item;
43698
43699 return this;
43700 };
43701
43702 Node.prototype.optional = function optional() {
43703 var state = this._baseState;
43704
43705 state.optional = true;
43706
43707 return this;
43708 };
43709
43710 Node.prototype.def = function def(val) {
43711 var state = this._baseState;
43712
43713 assert(state['default'] === null);
43714 state['default'] = val;
43715 state.optional = true;
43716
43717 return this;
43718 };
43719
43720 Node.prototype.explicit = function explicit(num) {
43721 var state = this._baseState;
43722
43723 assert(state.explicit === null && state.implicit === null);
43724 state.explicit = num;
43725
43726 return this;
43727 };
43728
43729 Node.prototype.implicit = function implicit(num) {
43730 var state = this._baseState;
43731
43732 assert(state.explicit === null && state.implicit === null);
43733 state.implicit = num;
43734
43735 return this;
43736 };
43737
43738 Node.prototype.obj = function obj() {
43739 var state = this._baseState;
43740 var args = Array.prototype.slice.call(arguments);
43741
43742 state.obj = true;
43743
43744 if (args.length !== 0)
43745 this._useArgs(args);
43746
43747 return this;
43748 };
43749
43750 Node.prototype.key = function key(newKey) {
43751 var state = this._baseState;
43752
43753 assert(state.key === null);
43754 state.key = newKey;
43755
43756 return this;
43757 };
43758
43759 Node.prototype.any = function any() {
43760 var state = this._baseState;
43761
43762 state.any = true;
43763
43764 return this;
43765 };
43766
43767 Node.prototype.choice = function choice(obj) {
43768 var state = this._baseState;
43769
43770 assert(state.choice === null);
43771 state.choice = obj;
43772 this._useArgs(Object.keys(obj).map(function(key) {
43773 return obj[key];
43774 }));
43775
43776 return this;
43777 };
43778
43779 Node.prototype.contains = function contains(item) {
43780 var state = this._baseState;
43781
43782 assert(state.use === null);
43783 state.contains = item;
43784
43785 return this;
43786 };
43787
43788 //
43789 // Decoding
43790 //
43791
43792 Node.prototype._decode = function decode(input, options) {
43793 var state = this._baseState;
43794
43795 // Decode root node
43796 if (state.parent === null)
43797 return input.wrapResult(state.children[0]._decode(input, options));
43798
43799 var result = state['default'];
43800 var present = true;
43801
43802 var prevKey = null;
43803 if (state.key !== null)
43804 prevKey = input.enterKey(state.key);
43805
43806 // Check if tag is there
43807 if (state.optional) {
43808 var tag = null;
43809 if (state.explicit !== null)
43810 tag = state.explicit;
43811 else if (state.implicit !== null)
43812 tag = state.implicit;
43813 else if (state.tag !== null)
43814 tag = state.tag;
43815
43816 if (tag === null && !state.any) {
43817 // Trial and Error
43818 var save = input.save();
43819 try {
43820 if (state.choice === null)
43821 this._decodeGeneric(state.tag, input, options);
43822 else
43823 this._decodeChoice(input, options);
43824 present = true;
43825 } catch (e) {
43826 present = false;
43827 }
43828 input.restore(save);
43829 } else {
43830 present = this._peekTag(input, tag, state.any);
43831
43832 if (input.isError(present))
43833 return present;
43834 }
43835 }
43836
43837 // Push object on stack
43838 var prevObj;
43839 if (state.obj && present)
43840 prevObj = input.enterObject();
43841
43842 if (present) {
43843 // Unwrap explicit values
43844 if (state.explicit !== null) {
43845 var explicit = this._decodeTag(input, state.explicit);
43846 if (input.isError(explicit))
43847 return explicit;
43848 input = explicit;
43849 }
43850
43851 var start = input.offset;
43852
43853 // Unwrap implicit and normal values
43854 if (state.use === null && state.choice === null) {
43855 if (state.any)
43856 var save = input.save();
43857 var body = this._decodeTag(
43858 input,
43859 state.implicit !== null ? state.implicit : state.tag,
43860 state.any
43861 );
43862 if (input.isError(body))
43863 return body;
43864
43865 if (state.any)
43866 result = input.raw(save);
43867 else
43868 input = body;
43869 }
43870
43871 if (options && options.track && state.tag !== null)
43872 options.track(input.path(), start, input.length, 'tagged');
43873
43874 if (options && options.track && state.tag !== null)
43875 options.track(input.path(), input.offset, input.length, 'content');
43876
43877 // Select proper method for tag
43878 if (state.any)
43879 result = result;
43880 else if (state.choice === null)
43881 result = this._decodeGeneric(state.tag, input, options);
43882 else
43883 result = this._decodeChoice(input, options);
43884
43885 if (input.isError(result))
43886 return result;
43887
43888 // Decode children
43889 if (!state.any && state.choice === null && state.children !== null) {
43890 state.children.forEach(function decodeChildren(child) {
43891 // NOTE: We are ignoring errors here, to let parser continue with other
43892 // parts of encoded data
43893 child._decode(input, options);
43894 });
43895 }
43896
43897 // Decode contained/encoded by schema, only in bit or octet strings
43898 if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {
43899 var data = new DecoderBuffer(result);
43900 result = this._getUse(state.contains, input._reporterState.obj)
43901 ._decode(data, options);
43902 }
43903 }
43904
43905 // Pop object
43906 if (state.obj && present)
43907 result = input.leaveObject(prevObj);
43908
43909 // Set key
43910 if (state.key !== null && (result !== null || present === true))
43911 input.leaveKey(prevKey, state.key, result);
43912 else if (prevKey !== null)
43913 input.exitKey(prevKey);
43914
43915 return result;
43916 };
43917
43918 Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {
43919 var state = this._baseState;
43920
43921 if (tag === 'seq' || tag === 'set')
43922 return null;
43923 if (tag === 'seqof' || tag === 'setof')
43924 return this._decodeList(input, tag, state.args[0], options);
43925 else if (/str$/.test(tag))
43926 return this._decodeStr(input, tag, options);
43927 else if (tag === 'objid' && state.args)
43928 return this._decodeObjid(input, state.args[0], state.args[1], options);
43929 else if (tag === 'objid')
43930 return this._decodeObjid(input, null, null, options);
43931 else if (tag === 'gentime' || tag === 'utctime')
43932 return this._decodeTime(input, tag, options);
43933 else if (tag === 'null_')
43934 return this._decodeNull(input, options);
43935 else if (tag === 'bool')
43936 return this._decodeBool(input, options);
43937 else if (tag === 'objDesc')
43938 return this._decodeStr(input, tag, options);
43939 else if (tag === 'int' || tag === 'enum')
43940 return this._decodeInt(input, state.args && state.args[0], options);
43941
43942 if (state.use !== null) {
43943 return this._getUse(state.use, input._reporterState.obj)
43944 ._decode(input, options);
43945 } else {
43946 return input.error('unknown tag: ' + tag);
43947 }
43948 };
43949
43950 Node.prototype._getUse = function _getUse(entity, obj) {
43951
43952 var state = this._baseState;
43953 // Create altered use decoder if implicit is set
43954 state.useDecoder = this._use(entity, obj);
43955 assert(state.useDecoder._baseState.parent === null);
43956 state.useDecoder = state.useDecoder._baseState.children[0];
43957 if (state.implicit !== state.useDecoder._baseState.implicit) {
43958 state.useDecoder = state.useDecoder.clone();
43959 state.useDecoder._baseState.implicit = state.implicit;
43960 }
43961 return state.useDecoder;
43962 };
43963
43964 Node.prototype._decodeChoice = function decodeChoice(input, options) {
43965 var state = this._baseState;
43966 var result = null;
43967 var match = false;
43968
43969 Object.keys(state.choice).some(function(key) {
43970 var save = input.save();
43971 var node = state.choice[key];
43972 try {
43973 var value = node._decode(input, options);
43974 if (input.isError(value))
43975 return false;
43976
43977 result = { type: key, value: value };
43978 match = true;
43979 } catch (e) {
43980 input.restore(save);
43981 return false;
43982 }
43983 return true;
43984 }, this);
43985
43986 if (!match)
43987 return input.error('Choice not matched');
43988
43989 return result;
43990 };
43991
43992 //
43993 // Encoding
43994 //
43995
43996 Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) {
43997 return new EncoderBuffer(data, this.reporter);
43998 };
43999
44000 Node.prototype._encode = function encode(data, reporter, parent) {
44001 var state = this._baseState;
44002 if (state['default'] !== null && state['default'] === data)
44003 return;
44004
44005 var result = this._encodeValue(data, reporter, parent);
44006 if (result === undefined)
44007 return;
44008
44009 if (this._skipDefault(result, reporter, parent))
44010 return;
44011
44012 return result;
44013 };
44014
44015 Node.prototype._encodeValue = function encode(data, reporter, parent) {
44016 var state = this._baseState;
44017
44018 // Decode root node
44019 if (state.parent === null)
44020 return state.children[0]._encode(data, reporter || new Reporter());
44021
44022 var result = null;
44023
44024 // Set reporter to share it with a child class
44025 this.reporter = reporter;
44026
44027 // Check if data is there
44028 if (state.optional && data === undefined) {
44029 if (state['default'] !== null)
44030 data = state['default']
44031 else
44032 return;
44033 }
44034
44035 // Encode children first
44036 var content = null;
44037 var primitive = false;
44038 if (state.any) {
44039 // Anything that was given is translated to buffer
44040 result = this._createEncoderBuffer(data);
44041 } else if (state.choice) {
44042 result = this._encodeChoice(data, reporter);
44043 } else if (state.contains) {
44044 content = this._getUse(state.contains, parent)._encode(data, reporter);
44045 primitive = true;
44046 } else if (state.children) {
44047 content = state.children.map(function(child) {
44048 if (child._baseState.tag === 'null_')
44049 return child._encode(null, reporter, data);
44050
44051 if (child._baseState.key === null)
44052 return reporter.error('Child should have a key');
44053 var prevKey = reporter.enterKey(child._baseState.key);
44054
44055 if (typeof data !== 'object')
44056 return reporter.error('Child expected, but input is not object');
44057
44058 var res = child._encode(data[child._baseState.key], reporter, data);
44059 reporter.leaveKey(prevKey);
44060
44061 return res;
44062 }, this).filter(function(child) {
44063 return child;
44064 });
44065 content = this._createEncoderBuffer(content);
44066 } else {
44067 if (state.tag === 'seqof' || state.tag === 'setof') {
44068 // TODO(indutny): this should be thrown on DSL level
44069 if (!(state.args && state.args.length === 1))
44070 return reporter.error('Too many args for : ' + state.tag);
44071
44072 if (!Array.isArray(data))
44073 return reporter.error('seqof/setof, but data is not Array');
44074
44075 var child = this.clone();
44076 child._baseState.implicit = null;
44077 content = this._createEncoderBuffer(data.map(function(item) {
44078 var state = this._baseState;
44079
44080 return this._getUse(state.args[0], data)._encode(item, reporter);
44081 }, child));
44082 } else if (state.use !== null) {
44083 result = this._getUse(state.use, parent)._encode(data, reporter);
44084 } else {
44085 content = this._encodePrimitive(state.tag, data);
44086 primitive = true;
44087 }
44088 }
44089
44090 // Encode data itself
44091 var result;
44092 if (!state.any && state.choice === null) {
44093 var tag = state.implicit !== null ? state.implicit : state.tag;
44094 var cls = state.implicit === null ? 'universal' : 'context';
44095
44096 if (tag === null) {
44097 if (state.use === null)
44098 reporter.error('Tag could be ommited only for .use()');
44099 } else {
44100 if (state.use === null)
44101 result = this._encodeComposite(tag, primitive, cls, content);
44102 }
44103 }
44104
44105 // Wrap in explicit
44106 if (state.explicit !== null)
44107 result = this._encodeComposite(state.explicit, false, 'context', result);
44108
44109 return result;
44110 };
44111
44112 Node.prototype._encodeChoice = function encodeChoice(data, reporter) {
44113 var state = this._baseState;
44114
44115 var node = state.choice[data.type];
44116 if (!node) {
44117 assert(
44118 false,
44119 data.type + ' not found in ' +
44120 JSON.stringify(Object.keys(state.choice)));
44121 }
44122 return node._encode(data.value, reporter);
44123 };
44124
44125 Node.prototype._encodePrimitive = function encodePrimitive(tag, data) {
44126 var state = this._baseState;
44127
44128 if (/str$/.test(tag))
44129 return this._encodeStr(data, tag);
44130 else if (tag === 'objid' && state.args)
44131 return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);
44132 else if (tag === 'objid')
44133 return this._encodeObjid(data, null, null);
44134 else if (tag === 'gentime' || tag === 'utctime')
44135 return this._encodeTime(data, tag);
44136 else if (tag === 'null_')
44137 return this._encodeNull();
44138 else if (tag === 'int' || tag === 'enum')
44139 return this._encodeInt(data, state.args && state.reverseArgs[0]);
44140 else if (tag === 'bool')
44141 return this._encodeBool(data);
44142 else if (tag === 'objDesc')
44143 return this._encodeStr(data, tag);
44144 else
44145 throw new Error('Unsupported tag: ' + tag);
44146 };
44147
44148 Node.prototype._isNumstr = function isNumstr(str) {
44149 return /^[0-9 ]*$/.test(str);
44150 };
44151
44152 Node.prototype._isPrintstr = function isPrintstr(str) {
44153 return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str);
44154 };
44155
44156 },{"../base":4,"minimalistic-assert":99}],6:[function(require,module,exports){
44157 var inherits = require('inherits');
44158
44159 function Reporter(options) {
44160 this._reporterState = {
44161 obj: null,
44162 path: [],
44163 options: options || {},
44164 errors: []
44165 };
44166 }
44167 exports.Reporter = Reporter;
44168
44169 Reporter.prototype.isError = function isError(obj) {
44170 return obj instanceof ReporterError;
44171 };
44172
44173 Reporter.prototype.save = function save() {
44174 var state = this._reporterState;
44175
44176 return { obj: state.obj, pathLen: state.path.length };
44177 };
44178
44179 Reporter.prototype.restore = function restore(data) {
44180 var state = this._reporterState;
44181
44182 state.obj = data.obj;
44183 state.path = state.path.slice(0, data.pathLen);
44184 };
44185
44186 Reporter.prototype.enterKey = function enterKey(key) {
44187 return this._reporterState.path.push(key);
44188 };
44189
44190 Reporter.prototype.exitKey = function exitKey(index) {
44191 var state = this._reporterState;
44192
44193 state.path = state.path.slice(0, index - 1);
44194 };
44195
44196 Reporter.prototype.leaveKey = function leaveKey(index, key, value) {
44197 var state = this._reporterState;
44198
44199 this.exitKey(index);
44200 if (state.obj !== null)
44201 state.obj[key] = value;
44202 };
44203
44204 Reporter.prototype.path = function path() {
44205 return this._reporterState.path.join('/');
44206 };
44207
44208 Reporter.prototype.enterObject = function enterObject() {
44209 var state = this._reporterState;
44210
44211 var prev = state.obj;
44212 state.obj = {};
44213 return prev;
44214 };
44215
44216 Reporter.prototype.leaveObject = function leaveObject(prev) {
44217 var state = this._reporterState;
44218
44219 var now = state.obj;
44220 state.obj = prev;
44221 return now;
44222 };
44223
44224 Reporter.prototype.error = function error(msg) {
44225 var err;
44226 var state = this._reporterState;
44227
44228 var inherited = msg instanceof ReporterError;
44229 if (inherited) {
44230 err = msg;
44231 } else {
44232 err = new ReporterError(state.path.map(function(elem) {
44233 return '[' + JSON.stringify(elem) + ']';
44234 }).join(''), msg.message || msg, msg.stack);
44235 }
44236
44237 if (!state.options.partial)
44238 throw err;
44239
44240 if (!inherited)
44241 state.errors.push(err);
44242
44243 return err;
44244 };
44245
44246 Reporter.prototype.wrapResult = function wrapResult(result) {
44247 var state = this._reporterState;
44248 if (!state.options.partial)
44249 return result;
44250
44251 return {
44252 result: this.isError(result) ? null : result,
44253 errors: state.errors
44254 };
44255 };
44256
44257 function ReporterError(path, msg) {
44258 this.path = path;
44259 this.rethrow(msg);
44260 };
44261 inherits(ReporterError, Error);
44262
44263 ReporterError.prototype.rethrow = function rethrow(msg) {
44264 this.message = msg + ' at: ' + (this.path || '(shallow)');
44265 if (Error.captureStackTrace)
44266 Error.captureStackTrace(this, ReporterError);
44267
44268 if (!this.stack) {
44269 try {
44270 // IE only adds stack when thrown
44271 throw new Error(this.message);
44272 } catch (e) {
44273 this.stack = e.stack;
44274 }
44275 }
44276 return this;
44277 };
44278
44279 },{"inherits":95}],7:[function(require,module,exports){
44280 var constants = require('../constants');
44281
44282 exports.tagClass = {
44283 0: 'universal',
44284 1: 'application',
44285 2: 'context',
44286 3: 'private'
44287 };
44288 exports.tagClassByName = constants._reverse(exports.tagClass);
44289
44290 exports.tag = {
44291 0x00: 'end',
44292 0x01: 'bool',
44293 0x02: 'int',
44294 0x03: 'bitstr',
44295 0x04: 'octstr',
44296 0x05: 'null_',
44297 0x06: 'objid',
44298 0x07: 'objDesc',
44299 0x08: 'external',
44300 0x09: 'real',
44301 0x0a: 'enum',
44302 0x0b: 'embed',
44303 0x0c: 'utf8str',
44304 0x0d: 'relativeOid',
44305 0x10: 'seq',
44306 0x11: 'set',
44307 0x12: 'numstr',
44308 0x13: 'printstr',
44309 0x14: 't61str',
44310 0x15: 'videostr',
44311 0x16: 'ia5str',
44312 0x17: 'utctime',
44313 0x18: 'gentime',
44314 0x19: 'graphstr',
44315 0x1a: 'iso646str',
44316 0x1b: 'genstr',
44317 0x1c: 'unistr',
44318 0x1d: 'charstr',
44319 0x1e: 'bmpstr'
44320 };
44321 exports.tagByName = constants._reverse(exports.tag);
44322
44323 },{"../constants":8}],8:[function(require,module,exports){
44324 var constants = exports;
44325
44326 // Helper
44327 constants._reverse = function reverse(map) {
44328 var res = {};
44329
44330 Object.keys(map).forEach(function(key) {
44331 // Convert key to integer if it is stringified
44332 if ((key | 0) == key)
44333 key = key | 0;
44334
44335 var value = map[key];
44336 res[value] = key;
44337 });
44338
44339 return res;
44340 };
44341
44342 constants.der = require('./der');
44343
44344 },{"./der":7}],9:[function(require,module,exports){
44345 var inherits = require('inherits');
44346
44347 var asn1 = require('../../asn1');
44348 var base = asn1.base;
44349 var bignum = asn1.bignum;
44350
44351 // Import DER constants
44352 var der = asn1.constants.der;
44353
44354 function DERDecoder(entity) {
44355 this.enc = 'der';
44356 this.name = entity.name;
44357 this.entity = entity;
44358
44359 // Construct base tree
44360 this.tree = new DERNode();
44361 this.tree._init(entity.body);
44362 };
44363 module.exports = DERDecoder;
44364
44365 DERDecoder.prototype.decode = function decode(data, options) {
44366 if (!(data instanceof base.DecoderBuffer))
44367 data = new base.DecoderBuffer(data, options);
44368
44369 return this.tree._decode(data, options);
44370 };
44371
44372 // Tree methods
44373
44374 function DERNode(parent) {
44375 base.Node.call(this, 'der', parent);
44376 }
44377 inherits(DERNode, base.Node);
44378
44379 DERNode.prototype._peekTag = function peekTag(buffer, tag, any) {
44380 if (buffer.isEmpty())
44381 return false;
44382
44383 var state = buffer.save();
44384 var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"');
44385 if (buffer.isError(decodedTag))
44386 return decodedTag;
44387
44388 buffer.restore(state);
44389
44390 return decodedTag.tag === tag || decodedTag.tagStr === tag ||
44391 (decodedTag.tagStr + 'of') === tag || any;
44392 };
44393
44394 DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {
44395 var decodedTag = derDecodeTag(buffer,
44396 'Failed to decode tag of "' + tag + '"');
44397 if (buffer.isError(decodedTag))
44398 return decodedTag;
44399
44400 var len = derDecodeLen(buffer,
44401 decodedTag.primitive,
44402 'Failed to get length of "' + tag + '"');
44403
44404 // Failure
44405 if (buffer.isError(len))
44406 return len;
44407
44408 if (!any &&
44409 decodedTag.tag !== tag &&
44410 decodedTag.tagStr !== tag &&
44411 decodedTag.tagStr + 'of' !== tag) {
44412 return buffer.error('Failed to match tag: "' + tag + '"');
44413 }
44414
44415 if (decodedTag.primitive || len !== null)
44416 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44417
44418 // Indefinite length... find END tag
44419 var state = buffer.save();
44420 var res = this._skipUntilEnd(
44421 buffer,
44422 'Failed to skip indefinite length body: "' + this.tag + '"');
44423 if (buffer.isError(res))
44424 return res;
44425
44426 len = buffer.offset - state.offset;
44427 buffer.restore(state);
44428 return buffer.skip(len, 'Failed to match body of: "' + tag + '"');
44429 };
44430
44431 DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {
44432 while (true) {
44433 var tag = derDecodeTag(buffer, fail);
44434 if (buffer.isError(tag))
44435 return tag;
44436 var len = derDecodeLen(buffer, tag.primitive, fail);
44437 if (buffer.isError(len))
44438 return len;
44439
44440 var res;
44441 if (tag.primitive || len !== null)
44442 res = buffer.skip(len)
44443 else
44444 res = this._skipUntilEnd(buffer, fail);
44445
44446 // Failure
44447 if (buffer.isError(res))
44448 return res;
44449
44450 if (tag.tagStr === 'end')
44451 break;
44452 }
44453 };
44454
44455 DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder,
44456 options) {
44457 var result = [];
44458 while (!buffer.isEmpty()) {
44459 var possibleEnd = this._peekTag(buffer, 'end');
44460 if (buffer.isError(possibleEnd))
44461 return possibleEnd;
44462
44463 var res = decoder.decode(buffer, 'der', options);
44464 if (buffer.isError(res) && possibleEnd)
44465 break;
44466 result.push(res);
44467 }
44468 return result;
44469 };
44470
44471 DERNode.prototype._decodeStr = function decodeStr(buffer, tag) {
44472 if (tag === 'bitstr') {
44473 var unused = buffer.readUInt8();
44474 if (buffer.isError(unused))
44475 return unused;
44476 return { unused: unused, data: buffer.raw() };
44477 } else if (tag === 'bmpstr') {
44478 var raw = buffer.raw();
44479 if (raw.length % 2 === 1)
44480 return buffer.error('Decoding of string type: bmpstr length mismatch');
44481
44482 var str = '';
44483 for (var i = 0; i < raw.length / 2; i++) {
44484 str += String.fromCharCode(raw.readUInt16BE(i * 2));
44485 }
44486 return str;
44487 } else if (tag === 'numstr') {
44488 var numstr = buffer.raw().toString('ascii');
44489 if (!this._isNumstr(numstr)) {
44490 return buffer.error('Decoding of string type: ' +
44491 'numstr unsupported characters');
44492 }
44493 return numstr;
44494 } else if (tag === 'octstr') {
44495 return buffer.raw();
44496 } else if (tag === 'objDesc') {
44497 return buffer.raw();
44498 } else if (tag === 'printstr') {
44499 var printstr = buffer.raw().toString('ascii');
44500 if (!this._isPrintstr(printstr)) {
44501 return buffer.error('Decoding of string type: ' +
44502 'printstr unsupported characters');
44503 }
44504 return printstr;
44505 } else if (/str$/.test(tag)) {
44506 return buffer.raw().toString();
44507 } else {
44508 return buffer.error('Decoding of string type: ' + tag + ' unsupported');
44509 }
44510 };
44511
44512 DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {
44513 var result;
44514 var identifiers = [];
44515 var ident = 0;
44516 while (!buffer.isEmpty()) {
44517 var subident = buffer.readUInt8();
44518 ident <<= 7;
44519 ident |= subident & 0x7f;
44520 if ((subident & 0x80) === 0) {
44521 identifiers.push(ident);
44522 ident = 0;
44523 }
44524 }
44525 if (subident & 0x80)
44526 identifiers.push(ident);
44527
44528 var first = (identifiers[0] / 40) | 0;
44529 var second = identifiers[0] % 40;
44530
44531 if (relative)
44532 result = identifiers;
44533 else
44534 result = [first, second].concat(identifiers.slice(1));
44535
44536 if (values) {
44537 var tmp = values[result.join(' ')];
44538 if (tmp === undefined)
44539 tmp = values[result.join('.')];
44540 if (tmp !== undefined)
44541 result = tmp;
44542 }
44543
44544 return result;
44545 };
44546
44547 DERNode.prototype._decodeTime = function decodeTime(buffer, tag) {
44548 var str = buffer.raw().toString();
44549 if (tag === 'gentime') {
44550 var year = str.slice(0, 4) | 0;
44551 var mon = str.slice(4, 6) | 0;
44552 var day = str.slice(6, 8) | 0;
44553 var hour = str.slice(8, 10) | 0;
44554 var min = str.slice(10, 12) | 0;
44555 var sec = str.slice(12, 14) | 0;
44556 } else if (tag === 'utctime') {
44557 var year = str.slice(0, 2) | 0;
44558 var mon = str.slice(2, 4) | 0;
44559 var day = str.slice(4, 6) | 0;
44560 var hour = str.slice(6, 8) | 0;
44561 var min = str.slice(8, 10) | 0;
44562 var sec = str.slice(10, 12) | 0;
44563 if (year < 70)
44564 year = 2000 + year;
44565 else
44566 year = 1900 + year;
44567 } else {
44568 return buffer.error('Decoding ' + tag + ' time is not supported yet');
44569 }
44570
44571 return Date.UTC(year, mon - 1, day, hour, min, sec, 0);
44572 };
44573
44574 DERNode.prototype._decodeNull = function decodeNull(buffer) {
44575 return null;
44576 };
44577
44578 DERNode.prototype._decodeBool = function decodeBool(buffer) {
44579 var res = buffer.readUInt8();
44580 if (buffer.isError(res))
44581 return res;
44582 else
44583 return res !== 0;
44584 };
44585
44586 DERNode.prototype._decodeInt = function decodeInt(buffer, values) {
44587 // Bigint, return as it is (assume big endian)
44588 var raw = buffer.raw();
44589 var res = new bignum(raw);
44590
44591 if (values)
44592 res = values[res.toString(10)] || res;
44593
44594 return res;
44595 };
44596
44597 DERNode.prototype._use = function use(entity, obj) {
44598 if (typeof entity === 'function')
44599 entity = entity(obj);
44600 return entity._getDecoder('der').tree;
44601 };
44602
44603 // Utility methods
44604
44605 function derDecodeTag(buf, fail) {
44606 var tag = buf.readUInt8(fail);
44607 if (buf.isError(tag))
44608 return tag;
44609
44610 var cls = der.tagClass[tag >> 6];
44611 var primitive = (tag & 0x20) === 0;
44612
44613 // Multi-octet tag - load
44614 if ((tag & 0x1f) === 0x1f) {
44615 var oct = tag;
44616 tag = 0;
44617 while ((oct & 0x80) === 0x80) {
44618 oct = buf.readUInt8(fail);
44619 if (buf.isError(oct))
44620 return oct;
44621
44622 tag <<= 7;
44623 tag |= oct & 0x7f;
44624 }
44625 } else {
44626 tag &= 0x1f;
44627 }
44628 var tagStr = der.tag[tag];
44629
44630 return {
44631 cls: cls,
44632 primitive: primitive,
44633 tag: tag,
44634 tagStr: tagStr
44635 };
44636 }
44637
44638 function derDecodeLen(buf, primitive, fail) {
44639 var len = buf.readUInt8(fail);
44640 if (buf.isError(len))
44641 return len;
44642
44643 // Indefinite form
44644 if (!primitive && len === 0x80)
44645 return null;
44646
44647 // Definite form
44648 if ((len & 0x80) === 0) {
44649 // Short form
44650 return len;
44651 }
44652
44653 // Long form
44654 var num = len & 0x7f;
44655 if (num > 4)
44656 return buf.error('length octect is too long');
44657
44658 len = 0;
44659 for (var i = 0; i < num; i++) {
44660 len <<= 8;
44661 var j = buf.readUInt8(fail);
44662 if (buf.isError(j))
44663 return j;
44664 len |= j;
44665 }
44666
44667 return len;
44668 }
44669
44670 },{"../../asn1":1,"inherits":95}],10:[function(require,module,exports){
44671 var decoders = exports;
44672
44673 decoders.der = require('./der');
44674 decoders.pem = require('./pem');
44675
44676 },{"./der":9,"./pem":11}],11:[function(require,module,exports){
44677 var inherits = require('inherits');
44678 var Buffer = require('buffer').Buffer;
44679
44680 var DERDecoder = require('./der');
44681
44682 function PEMDecoder(entity) {
44683 DERDecoder.call(this, entity);
44684 this.enc = 'pem';
44685 };
44686 inherits(PEMDecoder, DERDecoder);
44687 module.exports = PEMDecoder;
44688
44689 PEMDecoder.prototype.decode = function decode(data, options) {
44690 var lines = data.toString().split(/[\r\n]+/g);
44691
44692 var label = options.label.toUpperCase();
44693
44694 var re = /^-----(BEGIN|END) ([^-]+)-----$/;
44695 var start = -1;
44696 var end = -1;
44697 for (var i = 0; i < lines.length; i++) {
44698 var match = lines[i].match(re);
44699 if (match === null)
44700 continue;
44701
44702 if (match[2] !== label)
44703 continue;
44704
44705 if (start === -1) {
44706 if (match[1] !== 'BEGIN')
44707 break;
44708 start = i;
44709 } else {
44710 if (match[1] !== 'END')
44711 break;
44712 end = i;
44713 break;
44714 }
44715 }
44716 if (start === -1 || end === -1)
44717 throw new Error('PEM section not found for: ' + label);
44718
44719 var base64 = lines.slice(start + 1, end).join('');
44720 // Remove excessive symbols
44721 base64.replace(/[^a-z0-9\+\/=]+/gi, '');
44722
44723 var input = new Buffer(base64, 'base64');
44724 return DERDecoder.prototype.decode.call(this, input, options);
44725 };
44726
44727 },{"./der":9,"buffer":47,"inherits":95}],12:[function(require,module,exports){
44728 var inherits = require('inherits');
44729 var Buffer = require('buffer').Buffer;
44730
44731 var asn1 = require('../../asn1');
44732 var base = asn1.base;
44733
44734 // Import DER constants
44735 var der = asn1.constants.der;
44736
44737 function DEREncoder(entity) {
44738 this.enc = 'der';
44739 this.name = entity.name;
44740 this.entity = entity;
44741
44742 // Construct base tree
44743 this.tree = new DERNode();
44744 this.tree._init(entity.body);
44745 };
44746 module.exports = DEREncoder;
44747
44748 DEREncoder.prototype.encode = function encode(data, reporter) {
44749 return this.tree._encode(data, reporter).join();
44750 };
44751
44752 // Tree methods
44753
44754 function DERNode(parent) {
44755 base.Node.call(this, 'der', parent);
44756 }
44757 inherits(DERNode, base.Node);
44758
44759 DERNode.prototype._encodeComposite = function encodeComposite(tag,
44760 primitive,
44761 cls,
44762 content) {
44763 var encodedTag = encodeTag(tag, primitive, cls, this.reporter);
44764
44765 // Short form
44766 if (content.length < 0x80) {
44767 var header = new Buffer(2);
44768 header[0] = encodedTag;
44769 header[1] = content.length;
44770 return this._createEncoderBuffer([ header, content ]);
44771 }
44772
44773 // Long form
44774 // Count octets required to store length
44775 var lenOctets = 1;
44776 for (var i = content.length; i >= 0x100; i >>= 8)
44777 lenOctets++;
44778
44779 var header = new Buffer(1 + 1 + lenOctets);
44780 header[0] = encodedTag;
44781 header[1] = 0x80 | lenOctets;
44782
44783 for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8)
44784 header[i] = j & 0xff;
44785
44786 return this._createEncoderBuffer([ header, content ]);
44787 };
44788
44789 DERNode.prototype._encodeStr = function encodeStr(str, tag) {
44790 if (tag === 'bitstr') {
44791 return this._createEncoderBuffer([ str.unused | 0, str.data ]);
44792 } else if (tag === 'bmpstr') {
44793 var buf = new Buffer(str.length * 2);
44794 for (var i = 0; i < str.length; i++) {
44795 buf.writeUInt16BE(str.charCodeAt(i), i * 2);
44796 }
44797 return this._createEncoderBuffer(buf);
44798 } else if (tag === 'numstr') {
44799 if (!this._isNumstr(str)) {
44800 return this.reporter.error('Encoding of string type: numstr supports ' +
44801 'only digits and space');
44802 }
44803 return this._createEncoderBuffer(str);
44804 } else if (tag === 'printstr') {
44805 if (!this._isPrintstr(str)) {
44806 return this.reporter.error('Encoding of string type: printstr supports ' +
44807 'only latin upper and lower case letters, ' +
44808 'digits, space, apostrophe, left and rigth ' +
44809 'parenthesis, plus sign, comma, hyphen, ' +
44810 'dot, slash, colon, equal sign, ' +
44811 'question mark');
44812 }
44813 return this._createEncoderBuffer(str);
44814 } else if (/str$/.test(tag)) {
44815 return this._createEncoderBuffer(str);
44816 } else if (tag === 'objDesc') {
44817 return this._createEncoderBuffer(str);
44818 } else {
44819 return this.reporter.error('Encoding of string type: ' + tag +
44820 ' unsupported');
44821 }
44822 };
44823
44824 DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {
44825 if (typeof id === 'string') {
44826 if (!values)
44827 return this.reporter.error('string objid given, but no values map found');
44828 if (!values.hasOwnProperty(id))
44829 return this.reporter.error('objid not found in values map');
44830 id = values[id].split(/[\s\.]+/g);
44831 for (var i = 0; i < id.length; i++)
44832 id[i] |= 0;
44833 } else if (Array.isArray(id)) {
44834 id = id.slice();
44835 for (var i = 0; i < id.length; i++)
44836 id[i] |= 0;
44837 }
44838
44839 if (!Array.isArray(id)) {
44840 return this.reporter.error('objid() should be either array or string, ' +
44841 'got: ' + JSON.stringify(id));
44842 }
44843
44844 if (!relative) {
44845 if (id[1] >= 40)
44846 return this.reporter.error('Second objid identifier OOB');
44847 id.splice(0, 2, id[0] * 40 + id[1]);
44848 }
44849
44850 // Count number of octets
44851 var size = 0;
44852 for (var i = 0; i < id.length; i++) {
44853 var ident = id[i];
44854 for (size++; ident >= 0x80; ident >>= 7)
44855 size++;
44856 }
44857
44858 var objid = new Buffer(size);
44859 var offset = objid.length - 1;
44860 for (var i = id.length - 1; i >= 0; i--) {
44861 var ident = id[i];
44862 objid[offset--] = ident & 0x7f;
44863 while ((ident >>= 7) > 0)
44864 objid[offset--] = 0x80 | (ident & 0x7f);
44865 }
44866
44867 return this._createEncoderBuffer(objid);
44868 };
44869
44870 function two(num) {
44871 if (num < 10)
44872 return '0' + num;
44873 else
44874 return num;
44875 }
44876
44877 DERNode.prototype._encodeTime = function encodeTime(time, tag) {
44878 var str;
44879 var date = new Date(time);
44880
44881 if (tag === 'gentime') {
44882 str = [
44883 two(date.getFullYear()),
44884 two(date.getUTCMonth() + 1),
44885 two(date.getUTCDate()),
44886 two(date.getUTCHours()),
44887 two(date.getUTCMinutes()),
44888 two(date.getUTCSeconds()),
44889 'Z'
44890 ].join('');
44891 } else if (tag === 'utctime') {
44892 str = [
44893 two(date.getFullYear() % 100),
44894 two(date.getUTCMonth() + 1),
44895 two(date.getUTCDate()),
44896 two(date.getUTCHours()),
44897 two(date.getUTCMinutes()),
44898 two(date.getUTCSeconds()),
44899 'Z'
44900 ].join('');
44901 } else {
44902 this.reporter.error('Encoding ' + tag + ' time is not supported yet');
44903 }
44904
44905 return this._encodeStr(str, 'octstr');
44906 };
44907
44908 DERNode.prototype._encodeNull = function encodeNull() {
44909 return this._createEncoderBuffer('');
44910 };
44911
44912 DERNode.prototype._encodeInt = function encodeInt(num, values) {
44913 if (typeof num === 'string') {
44914 if (!values)
44915 return this.reporter.error('String int or enum given, but no values map');
44916 if (!values.hasOwnProperty(num)) {
44917 return this.reporter.error('Values map doesn\'t contain: ' +
44918 JSON.stringify(num));
44919 }
44920 num = values[num];
44921 }
44922
44923 // Bignum, assume big endian
44924 if (typeof num !== 'number' && !Buffer.isBuffer(num)) {
44925 var numArray = num.toArray();
44926 if (!num.sign && numArray[0] & 0x80) {
44927 numArray.unshift(0);
44928 }
44929 num = new Buffer(numArray);
44930 }
44931
44932 if (Buffer.isBuffer(num)) {
44933 var size = num.length;
44934 if (num.length === 0)
44935 size++;
44936
44937 var out = new Buffer(size);
44938 num.copy(out);
44939 if (num.length === 0)
44940 out[0] = 0
44941 return this._createEncoderBuffer(out);
44942 }
44943
44944 if (num < 0x80)
44945 return this._createEncoderBuffer(num);
44946
44947 if (num < 0x100)
44948 return this._createEncoderBuffer([0, num]);
44949
44950 var size = 1;
44951 for (var i = num; i >= 0x100; i >>= 8)
44952 size++;
44953
44954 var out = new Array(size);
44955 for (var i = out.length - 1; i >= 0; i--) {
44956 out[i] = num & 0xff;
44957 num >>= 8;
44958 }
44959 if(out[0] & 0x80) {
44960 out.unshift(0);
44961 }
44962
44963 return this._createEncoderBuffer(new Buffer(out));
44964 };
44965
44966 DERNode.prototype._encodeBool = function encodeBool(value) {
44967 return this._createEncoderBuffer(value ? 0xff : 0);
44968 };
44969
44970 DERNode.prototype._use = function use(entity, obj) {
44971 if (typeof entity === 'function')
44972 entity = entity(obj);
44973 return entity._getEncoder('der').tree;
44974 };
44975
44976 DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {
44977 var state = this._baseState;
44978 var i;
44979 if (state['default'] === null)
44980 return false;
44981
44982 var data = dataBuffer.join();
44983 if (state.defaultBuffer === undefined)
44984 state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();
44985
44986 if (data.length !== state.defaultBuffer.length)
44987 return false;
44988
44989 for (i=0; i < data.length; i++)
44990 if (data[i] !== state.defaultBuffer[i])
44991 return false;
44992
44993 return true;
44994 };
44995
44996 // Utility methods
44997
44998 function encodeTag(tag, primitive, cls, reporter) {
44999 var res;
45000
45001 if (tag === 'seqof')
45002 tag = 'seq';
45003 else if (tag === 'setof')
45004 tag = 'set';
45005
45006 if (der.tagByName.hasOwnProperty(tag))
45007 res = der.tagByName[tag];
45008 else if (typeof tag === 'number' && (tag | 0) === tag)
45009 res = tag;
45010 else
45011 return reporter.error('Unknown tag: ' + tag);
45012
45013 if (res >= 0x1f)
45014 return reporter.error('Multi-octet tag encoding unsupported');
45015
45016 if (!primitive)
45017 res |= 0x20;
45018
45019 res |= (der.tagClassByName[cls || 'universal'] << 6);
45020
45021 return res;
45022 }
45023
45024 },{"../../asn1":1,"buffer":47,"inherits":95}],13:[function(require,module,exports){
45025 var encoders = exports;
45026
45027 encoders.der = require('./der');
45028 encoders.pem = require('./pem');
45029
45030 },{"./der":12,"./pem":14}],14:[function(require,module,exports){
45031 var inherits = require('inherits');
45032
45033 var DEREncoder = require('./der');
45034
45035 function PEMEncoder(entity) {
45036 DEREncoder.call(this, entity);
45037 this.enc = 'pem';
45038 };
45039 inherits(PEMEncoder, DEREncoder);
45040 module.exports = PEMEncoder;
45041
45042 PEMEncoder.prototype.encode = function encode(data, options) {
45043 var buf = DEREncoder.prototype.encode.call(this, data);
45044
45045 var p = buf.toString('base64');
45046 var out = [ '-----BEGIN ' + options.label + '-----' ];
45047 for (var i = 0; i < p.length; i += 64)
45048 out.push(p.slice(i, i + 64));
45049 out.push('-----END ' + options.label + '-----');
45050 return out.join('\n');
45051 };
45052
45053 },{"./der":12,"inherits":95}],15:[function(require,module,exports){
45054 (function (global){
45055 'use strict';
45056
45057 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
45058 // original notice:
45059
45060 /*!
45061 * The buffer module from node.js, for the browser.
45062 *
45063 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
45064 * @license MIT
45065 */
45066 function compare(a, b) {
45067 if (a === b) {
45068 return 0;
45069 }
45070
45071 var x = a.length;
45072 var y = b.length;
45073
45074 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
45075 if (a[i] !== b[i]) {
45076 x = a[i];
45077 y = b[i];
45078 break;
45079 }
45080 }
45081
45082 if (x < y) {
45083 return -1;
45084 }
45085 if (y < x) {
45086 return 1;
45087 }
45088 return 0;
45089 }
45090 function isBuffer(b) {
45091 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
45092 return global.Buffer.isBuffer(b);
45093 }
45094 return !!(b != null && b._isBuffer);
45095 }
45096
45097 // based on node assert, original notice:
45098
45099 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
45100 //
45101 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
45102 //
45103 // Originally from narwhal.js (http://narwhaljs.org)
45104 // Copyright (c) 2009 Thomas Robinson <280north.com>
45105 //
45106 // Permission is hereby granted, free of charge, to any person obtaining a copy
45107 // of this software and associated documentation files (the 'Software'), to
45108 // deal in the Software without restriction, including without limitation the
45109 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
45110 // sell copies of the Software, and to permit persons to whom the Software is
45111 // furnished to do so, subject to the following conditions:
45112 //
45113 // The above copyright notice and this permission notice shall be included in
45114 // all copies or substantial portions of the Software.
45115 //
45116 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
45117 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45118 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
45119 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
45120 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
45121 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
45122
45123 var util = require('util/');
45124 var hasOwn = Object.prototype.hasOwnProperty;
45125 var pSlice = Array.prototype.slice;
45126 var functionsHaveNames = (function () {
45127 return function foo() {}.name === 'foo';
45128 }());
45129 function pToString (obj) {
45130 return Object.prototype.toString.call(obj);
45131 }
45132 function isView(arrbuf) {
45133 if (isBuffer(arrbuf)) {
45134 return false;
45135 }
45136 if (typeof global.ArrayBuffer !== 'function') {
45137 return false;
45138 }
45139 if (typeof ArrayBuffer.isView === 'function') {
45140 return ArrayBuffer.isView(arrbuf);
45141 }
45142 if (!arrbuf) {
45143 return false;
45144 }
45145 if (arrbuf instanceof DataView) {
45146 return true;
45147 }
45148 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
45149 return true;
45150 }
45151 return false;
45152 }
45153 // 1. The assert module provides functions that throw
45154 // AssertionError's when particular conditions are not met. The
45155 // assert module must conform to the following interface.
45156
45157 var assert = module.exports = ok;
45158
45159 // 2. The AssertionError is defined in assert.
45160 // new assert.AssertionError({ message: message,
45161 // actual: actual,
45162 // expected: expected })
45163
45164 var regex = /\s*function\s+([^\(\s]*)\s*/;
45165 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
45166 function getName(func) {
45167 if (!util.isFunction(func)) {
45168 return;
45169 }
45170 if (functionsHaveNames) {
45171 return func.name;
45172 }
45173 var str = func.toString();
45174 var match = str.match(regex);
45175 return match && match[1];
45176 }
45177 assert.AssertionError = function AssertionError(options) {
45178 this.name = 'AssertionError';
45179 this.actual = options.actual;
45180 this.expected = options.expected;
45181 this.operator = options.operator;
45182 if (options.message) {
45183 this.message = options.message;
45184 this.generatedMessage = false;
45185 } else {
45186 this.message = getMessage(this);
45187 this.generatedMessage = true;
45188 }
45189 var stackStartFunction = options.stackStartFunction || fail;
45190 if (Error.captureStackTrace) {
45191 Error.captureStackTrace(this, stackStartFunction);
45192 } else {
45193 // non v8 browsers so we can have a stacktrace
45194 var err = new Error();
45195 if (err.stack) {
45196 var out = err.stack;
45197
45198 // try to strip useless frames
45199 var fn_name = getName(stackStartFunction);
45200 var idx = out.indexOf('\n' + fn_name);
45201 if (idx >= 0) {
45202 // once we have located the function frame
45203 // we need to strip out everything before it (and its line)
45204 var next_line = out.indexOf('\n', idx + 1);
45205 out = out.substring(next_line + 1);
45206 }
45207
45208 this.stack = out;
45209 }
45210 }
45211 };
45212
45213 // assert.AssertionError instanceof Error
45214 util.inherits(assert.AssertionError, Error);
45215
45216 function truncate(s, n) {
45217 if (typeof s === 'string') {
45218 return s.length < n ? s : s.slice(0, n);
45219 } else {
45220 return s;
45221 }
45222 }
45223 function inspect(something) {
45224 if (functionsHaveNames || !util.isFunction(something)) {
45225 return util.inspect(something);
45226 }
45227 var rawname = getName(something);
45228 var name = rawname ? ': ' + rawname : '';
45229 return '[Function' + name + ']';
45230 }
45231 function getMessage(self) {
45232 return truncate(inspect(self.actual), 128) + ' ' +
45233 self.operator + ' ' +
45234 truncate(inspect(self.expected), 128);
45235 }
45236
45237 // At present only the three keys mentioned above are used and
45238 // understood by the spec. Implementations or sub modules can pass
45239 // other keys to the AssertionError's constructor - they will be
45240 // ignored.
45241
45242 // 3. All of the following functions must throw an AssertionError
45243 // when a corresponding condition is not met, with a message that
45244 // may be undefined if not provided. All assertion methods provide
45245 // both the actual and expected values to the assertion error for
45246 // display purposes.
45247
45248 function fail(actual, expected, message, operator, stackStartFunction) {
45249 throw new assert.AssertionError({
45250 message: message,
45251 actual: actual,
45252 expected: expected,
45253 operator: operator,
45254 stackStartFunction: stackStartFunction
45255 });
45256 }
45257
45258 // EXTENSION! allows for well behaved errors defined elsewhere.
45259 assert.fail = fail;
45260
45261 // 4. Pure assertion tests whether a value is truthy, as determined
45262 // by !!guard.
45263 // assert.ok(guard, message_opt);
45264 // This statement is equivalent to assert.equal(true, !!guard,
45265 // message_opt);. To test strictly for the value true, use
45266 // assert.strictEqual(true, guard, message_opt);.
45267
45268 function ok(value, message) {
45269 if (!value) fail(value, true, message, '==', assert.ok);
45270 }
45271 assert.ok = ok;
45272
45273 // 5. The equality assertion tests shallow, coercive equality with
45274 // ==.
45275 // assert.equal(actual, expected, message_opt);
45276
45277 assert.equal = function equal(actual, expected, message) {
45278 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
45279 };
45280
45281 // 6. The non-equality assertion tests for whether two objects are not equal
45282 // with != assert.notEqual(actual, expected, message_opt);
45283
45284 assert.notEqual = function notEqual(actual, expected, message) {
45285 if (actual == expected) {
45286 fail(actual, expected, message, '!=', assert.notEqual);
45287 }
45288 };
45289
45290 // 7. The equivalence assertion tests a deep equality relation.
45291 // assert.deepEqual(actual, expected, message_opt);
45292
45293 assert.deepEqual = function deepEqual(actual, expected, message) {
45294 if (!_deepEqual(actual, expected, false)) {
45295 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
45296 }
45297 };
45298
45299 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
45300 if (!_deepEqual(actual, expected, true)) {
45301 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
45302 }
45303 };
45304
45305 function _deepEqual(actual, expected, strict, memos) {
45306 // 7.1. All identical values are equivalent, as determined by ===.
45307 if (actual === expected) {
45308 return true;
45309 } else if (isBuffer(actual) && isBuffer(expected)) {
45310 return compare(actual, expected) === 0;
45311
45312 // 7.2. If the expected value is a Date object, the actual value is
45313 // equivalent if it is also a Date object that refers to the same time.
45314 } else if (util.isDate(actual) && util.isDate(expected)) {
45315 return actual.getTime() === expected.getTime();
45316
45317 // 7.3 If the expected value is a RegExp object, the actual value is
45318 // equivalent if it is also a RegExp object with the same source and
45319 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
45320 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
45321 return actual.source === expected.source &&
45322 actual.global === expected.global &&
45323 actual.multiline === expected.multiline &&
45324 actual.lastIndex === expected.lastIndex &&
45325 actual.ignoreCase === expected.ignoreCase;
45326
45327 // 7.4. Other pairs that do not both pass typeof value == 'object',
45328 // equivalence is determined by ==.
45329 } else if ((actual === null || typeof actual !== 'object') &&
45330 (expected === null || typeof expected !== 'object')) {
45331 return strict ? actual === expected : actual == expected;
45332
45333 // If both values are instances of typed arrays, wrap their underlying
45334 // ArrayBuffers in a Buffer each to increase performance
45335 // This optimization requires the arrays to have the same type as checked by
45336 // Object.prototype.toString (aka pToString). Never perform binary
45337 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
45338 // bit patterns are not identical.
45339 } else if (isView(actual) && isView(expected) &&
45340 pToString(actual) === pToString(expected) &&
45341 !(actual instanceof Float32Array ||
45342 actual instanceof Float64Array)) {
45343 return compare(new Uint8Array(actual.buffer),
45344 new Uint8Array(expected.buffer)) === 0;
45345
45346 // 7.5 For all other Object pairs, including Array objects, equivalence is
45347 // determined by having the same number of owned properties (as verified
45348 // with Object.prototype.hasOwnProperty.call), the same set of keys
45349 // (although not necessarily the same order), equivalent values for every
45350 // corresponding key, and an identical 'prototype' property. Note: this
45351 // accounts for both named and indexed properties on Arrays.
45352 } else if (isBuffer(actual) !== isBuffer(expected)) {
45353 return false;
45354 } else {
45355 memos = memos || {actual: [], expected: []};
45356
45357 var actualIndex = memos.actual.indexOf(actual);
45358 if (actualIndex !== -1) {
45359 if (actualIndex === memos.expected.indexOf(expected)) {
45360 return true;
45361 }
45362 }
45363
45364 memos.actual.push(actual);
45365 memos.expected.push(expected);
45366
45367 return objEquiv(actual, expected, strict, memos);
45368 }
45369 }
45370
45371 function isArguments(object) {
45372 return Object.prototype.toString.call(object) == '[object Arguments]';
45373 }
45374
45375 function objEquiv(a, b, strict, actualVisitedObjects) {
45376 if (a === null || a === undefined || b === null || b === undefined)
45377 return false;
45378 // if one is a primitive, the other must be same
45379 if (util.isPrimitive(a) || util.isPrimitive(b))
45380 return a === b;
45381 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
45382 return false;
45383 var aIsArgs = isArguments(a);
45384 var bIsArgs = isArguments(b);
45385 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
45386 return false;
45387 if (aIsArgs) {
45388 a = pSlice.call(a);
45389 b = pSlice.call(b);
45390 return _deepEqual(a, b, strict);
45391 }
45392 var ka = objectKeys(a);
45393 var kb = objectKeys(b);
45394 var key, i;
45395 // having the same number of owned properties (keys incorporates
45396 // hasOwnProperty)
45397 if (ka.length !== kb.length)
45398 return false;
45399 //the same set of keys (although not necessarily the same order),
45400 ka.sort();
45401 kb.sort();
45402 //~~~cheap key test
45403 for (i = ka.length - 1; i >= 0; i--) {
45404 if (ka[i] !== kb[i])
45405 return false;
45406 }
45407 //equivalent values for every corresponding key, and
45408 //~~~possibly expensive deep test
45409 for (i = ka.length - 1; i >= 0; i--) {
45410 key = ka[i];
45411 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
45412 return false;
45413 }
45414 return true;
45415 }
45416
45417 // 8. The non-equivalence assertion tests for any deep inequality.
45418 // assert.notDeepEqual(actual, expected, message_opt);
45419
45420 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
45421 if (_deepEqual(actual, expected, false)) {
45422 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
45423 }
45424 };
45425
45426 assert.notDeepStrictEqual = notDeepStrictEqual;
45427 function notDeepStrictEqual(actual, expected, message) {
45428 if (_deepEqual(actual, expected, true)) {
45429 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
45430 }
45431 }
45432
45433
45434 // 9. The strict equality assertion tests strict equality, as determined by ===.
45435 // assert.strictEqual(actual, expected, message_opt);
45436
45437 assert.strictEqual = function strictEqual(actual, expected, message) {
45438 if (actual !== expected) {
45439 fail(actual, expected, message, '===', assert.strictEqual);
45440 }
45441 };
45442
45443 // 10. The strict non-equality assertion tests for strict inequality, as
45444 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
45445
45446 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
45447 if (actual === expected) {
45448 fail(actual, expected, message, '!==', assert.notStrictEqual);
45449 }
45450 };
45451
45452 function expectedException(actual, expected) {
45453 if (!actual || !expected) {
45454 return false;
45455 }
45456
45457 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
45458 return expected.test(actual);
45459 }
45460
45461 try {
45462 if (actual instanceof expected) {
45463 return true;
45464 }
45465 } catch (e) {
45466 // Ignore. The instanceof check doesn't work for arrow functions.
45467 }
45468
45469 if (Error.isPrototypeOf(expected)) {
45470 return false;
45471 }
45472
45473 return expected.call({}, actual) === true;
45474 }
45475
45476 function _tryBlock(block) {
45477 var error;
45478 try {
45479 block();
45480 } catch (e) {
45481 error = e;
45482 }
45483 return error;
45484 }
45485
45486 function _throws(shouldThrow, block, expected, message) {
45487 var actual;
45488
45489 if (typeof block !== 'function') {
45490 throw new TypeError('"block" argument must be a function');
45491 }
45492
45493 if (typeof expected === 'string') {
45494 message = expected;
45495 expected = null;
45496 }
45497
45498 actual = _tryBlock(block);
45499
45500 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
45501 (message ? ' ' + message : '.');
45502
45503 if (shouldThrow && !actual) {
45504 fail(actual, expected, 'Missing expected exception' + message);
45505 }
45506
45507 var userProvidedMessage = typeof message === 'string';
45508 var isUnwantedException = !shouldThrow && util.isError(actual);
45509 var isUnexpectedException = !shouldThrow && actual && !expected;
45510
45511 if ((isUnwantedException &&
45512 userProvidedMessage &&
45513 expectedException(actual, expected)) ||
45514 isUnexpectedException) {
45515 fail(actual, expected, 'Got unwanted exception' + message);
45516 }
45517
45518 if ((shouldThrow && actual && expected &&
45519 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
45520 throw actual;
45521 }
45522 }
45523
45524 // 11. Expected to throw an error:
45525 // assert.throws(block, Error_opt, message_opt);
45526
45527 assert.throws = function(block, /*optional*/error, /*optional*/message) {
45528 _throws(true, block, error, message);
45529 };
45530
45531 // EXTENSION! This is annoying to write outside this module.
45532 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
45533 _throws(false, block, error, message);
45534 };
45535
45536 assert.ifError = function(err) { if (err) throw err; };
45537
45538 var objectKeys = Object.keys || function (obj) {
45539 var keys = [];
45540 for (var key in obj) {
45541 if (hasOwn.call(obj, key)) keys.push(key);
45542 }
45543 return keys;
45544 };
45545
45546 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
45547 },{"util/":148}],16:[function(require,module,exports){
45548 'use strict'
45549
45550 exports.byteLength = byteLength
45551 exports.toByteArray = toByteArray
45552 exports.fromByteArray = fromByteArray
45553
45554 var lookup = []
45555 var revLookup = []
45556 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
45557
45558 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
45559 for (var i = 0, len = code.length; i < len; ++i) {
45560 lookup[i] = code[i]
45561 revLookup[code.charCodeAt(i)] = i
45562 }
45563
45564 revLookup['-'.charCodeAt(0)] = 62
45565 revLookup['_'.charCodeAt(0)] = 63
45566
45567 function placeHoldersCount (b64) {
45568 var len = b64.length
45569 if (len % 4 > 0) {
45570 throw new Error('Invalid string. Length must be a multiple of 4')
45571 }
45572
45573 // the number of equal signs (place holders)
45574 // if there are two placeholders, than the two characters before it
45575 // represent one byte
45576 // if there is only one, then the three characters before it represent 2 bytes
45577 // this is just a cheap hack to not do indexOf twice
45578 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
45579 }
45580
45581 function byteLength (b64) {
45582 // base64 is 4/3 + up to two characters of the original data
45583 return b64.length * 3 / 4 - placeHoldersCount(b64)
45584 }
45585
45586 function toByteArray (b64) {
45587 var i, j, l, tmp, placeHolders, arr
45588 var len = b64.length
45589 placeHolders = placeHoldersCount(b64)
45590
45591 arr = new Arr(len * 3 / 4 - placeHolders)
45592
45593 // if there are placeholders, only get up to the last complete 4 chars
45594 l = placeHolders > 0 ? len - 4 : len
45595
45596 var L = 0
45597
45598 for (i = 0, j = 0; i < l; i += 4, j += 3) {
45599 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
45600 arr[L++] = (tmp >> 16) & 0xFF
45601 arr[L++] = (tmp >> 8) & 0xFF
45602 arr[L++] = tmp & 0xFF
45603 }
45604
45605 if (placeHolders === 2) {
45606 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
45607 arr[L++] = tmp & 0xFF
45608 } else if (placeHolders === 1) {
45609 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
45610 arr[L++] = (tmp >> 8) & 0xFF
45611 arr[L++] = tmp & 0xFF
45612 }
45613
45614 return arr
45615 }
45616
45617 function tripletToBase64 (num) {
45618 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
45619 }
45620
45621 function encodeChunk (uint8, start, end) {
45622 var tmp
45623 var output = []
45624 for (var i = start; i < end; i += 3) {
45625 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
45626 output.push(tripletToBase64(tmp))
45627 }
45628 return output.join('')
45629 }
45630
45631 function fromByteArray (uint8) {
45632 var tmp
45633 var len = uint8.length
45634 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
45635 var output = ''
45636 var parts = []
45637 var maxChunkLength = 16383 // must be multiple of 3
45638
45639 // go through the array every three bytes, we'll deal with trailing stuff later
45640 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
45641 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
45642 }
45643
45644 // pad the end with zeros, but make sure to not forget the extra bytes
45645 if (extraBytes === 1) {
45646 tmp = uint8[len - 1]
45647 output += lookup[tmp >> 2]
45648 output += lookup[(tmp << 4) & 0x3F]
45649 output += '=='
45650 } else if (extraBytes === 2) {
45651 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
45652 output += lookup[tmp >> 10]
45653 output += lookup[(tmp >> 4) & 0x3F]
45654 output += lookup[(tmp << 2) & 0x3F]
45655 output += '='
45656 }
45657
45658 parts.push(output)
45659
45660 return parts.join('')
45661 }
45662
45663 },{}],17:[function(require,module,exports){
45664 (function (module, exports) {
45665 'use strict';
45666
45667 // Utils
45668 function assert (val, msg) {
45669 if (!val) throw new Error(msg || 'Assertion failed');
45670 }
45671
45672 // Could use `inherits` module, but don't want to move from single file
45673 // architecture yet.
45674 function inherits (ctor, superCtor) {
45675 ctor.super_ = superCtor;
45676 var TempCtor = function () {};
45677 TempCtor.prototype = superCtor.prototype;
45678 ctor.prototype = new TempCtor();
45679 ctor.prototype.constructor = ctor;
45680 }
45681
45682 // BN
45683
45684 function BN (number, base, endian) {
45685 if (BN.isBN(number)) {
45686 return number;
45687 }
45688
45689 this.negative = 0;
45690 this.words = null;
45691 this.length = 0;
45692
45693 // Reduction context
45694 this.red = null;
45695
45696 if (number !== null) {
45697 if (base === 'le' || base === 'be') {
45698 endian = base;
45699 base = 10;
45700 }
45701
45702 this._init(number || 0, base || 10, endian || 'be');
45703 }
45704 }
45705 if (typeof module === 'object') {
45706 module.exports = BN;
45707 } else {
45708 exports.BN = BN;
45709 }
45710
45711 BN.BN = BN;
45712 BN.wordSize = 26;
45713
45714 var Buffer;
45715 try {
45716 Buffer = require('buf' + 'fer').Buffer;
45717 } catch (e) {
45718 }
45719
45720 BN.isBN = function isBN (num) {
45721 if (num instanceof BN) {
45722 return true;
45723 }
45724
45725 return num !== null && typeof num === 'object' &&
45726 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
45727 };
45728
45729 BN.max = function max (left, right) {
45730 if (left.cmp(right) > 0) return left;
45731 return right;
45732 };
45733
45734 BN.min = function min (left, right) {
45735 if (left.cmp(right) < 0) return left;
45736 return right;
45737 };
45738
45739 BN.prototype._init = function init (number, base, endian) {
45740 if (typeof number === 'number') {
45741 return this._initNumber(number, base, endian);
45742 }
45743
45744 if (typeof number === 'object') {
45745 return this._initArray(number, base, endian);
45746 }
45747
45748 if (base === 'hex') {
45749 base = 16;
45750 }
45751 assert(base === (base | 0) && base >= 2 && base <= 36);
45752
45753 number = number.toString().replace(/\s+/g, '');
45754 var start = 0;
45755 if (number[0] === '-') {
45756 start++;
45757 }
45758
45759 if (base === 16) {
45760 this._parseHex(number, start);
45761 } else {
45762 this._parseBase(number, base, start);
45763 }
45764
45765 if (number[0] === '-') {
45766 this.negative = 1;
45767 }
45768
45769 this.strip();
45770
45771 if (endian !== 'le') return;
45772
45773 this._initArray(this.toArray(), base, endian);
45774 };
45775
45776 BN.prototype._initNumber = function _initNumber (number, base, endian) {
45777 if (number < 0) {
45778 this.negative = 1;
45779 number = -number;
45780 }
45781 if (number < 0x4000000) {
45782 this.words = [ number & 0x3ffffff ];
45783 this.length = 1;
45784 } else if (number < 0x10000000000000) {
45785 this.words = [
45786 number & 0x3ffffff,
45787 (number / 0x4000000) & 0x3ffffff
45788 ];
45789 this.length = 2;
45790 } else {
45791 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
45792 this.words = [
45793 number & 0x3ffffff,
45794 (number / 0x4000000) & 0x3ffffff,
45795 1
45796 ];
45797 this.length = 3;
45798 }
45799
45800 if (endian !== 'le') return;
45801
45802 // Reverse the bytes
45803 this._initArray(this.toArray(), base, endian);
45804 };
45805
45806 BN.prototype._initArray = function _initArray (number, base, endian) {
45807 // Perhaps a Uint8Array
45808 assert(typeof number.length === 'number');
45809 if (number.length <= 0) {
45810 this.words = [ 0 ];
45811 this.length = 1;
45812 return this;
45813 }
45814
45815 this.length = Math.ceil(number.length / 3);
45816 this.words = new Array(this.length);
45817 for (var i = 0; i < this.length; i++) {
45818 this.words[i] = 0;
45819 }
45820
45821 var j, w;
45822 var off = 0;
45823 if (endian === 'be') {
45824 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
45825 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
45826 this.words[j] |= (w << off) & 0x3ffffff;
45827 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45828 off += 24;
45829 if (off >= 26) {
45830 off -= 26;
45831 j++;
45832 }
45833 }
45834 } else if (endian === 'le') {
45835 for (i = 0, j = 0; i < number.length; i += 3) {
45836 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
45837 this.words[j] |= (w << off) & 0x3ffffff;
45838 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
45839 off += 24;
45840 if (off >= 26) {
45841 off -= 26;
45842 j++;
45843 }
45844 }
45845 }
45846 return this.strip();
45847 };
45848
45849 function parseHex (str, start, end) {
45850 var r = 0;
45851 var len = Math.min(str.length, end);
45852 for (var i = start; i < len; i++) {
45853 var c = str.charCodeAt(i) - 48;
45854
45855 r <<= 4;
45856
45857 // 'a' - 'f'
45858 if (c >= 49 && c <= 54) {
45859 r |= c - 49 + 0xa;
45860
45861 // 'A' - 'F'
45862 } else if (c >= 17 && c <= 22) {
45863 r |= c - 17 + 0xa;
45864
45865 // '0' - '9'
45866 } else {
45867 r |= c & 0xf;
45868 }
45869 }
45870 return r;
45871 }
45872
45873 BN.prototype._parseHex = function _parseHex (number, start) {
45874 // Create possibly bigger array to ensure that it fits the number
45875 this.length = Math.ceil((number.length - start) / 6);
45876 this.words = new Array(this.length);
45877 for (var i = 0; i < this.length; i++) {
45878 this.words[i] = 0;
45879 }
45880
45881 var j, w;
45882 // Scan 24-bit chunks and add them to the number
45883 var off = 0;
45884 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
45885 w = parseHex(number, i, i + 6);
45886 this.words[j] |= (w << off) & 0x3ffffff;
45887 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
45888 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45889 off += 24;
45890 if (off >= 26) {
45891 off -= 26;
45892 j++;
45893 }
45894 }
45895 if (i + 6 !== start) {
45896 w = parseHex(number, start, i + 6);
45897 this.words[j] |= (w << off) & 0x3ffffff;
45898 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
45899 }
45900 this.strip();
45901 };
45902
45903 function parseBase (str, start, end, mul) {
45904 var r = 0;
45905 var len = Math.min(str.length, end);
45906 for (var i = start; i < len; i++) {
45907 var c = str.charCodeAt(i) - 48;
45908
45909 r *= mul;
45910
45911 // 'a'
45912 if (c >= 49) {
45913 r += c - 49 + 0xa;
45914
45915 // 'A'
45916 } else if (c >= 17) {
45917 r += c - 17 + 0xa;
45918
45919 // '0' - '9'
45920 } else {
45921 r += c;
45922 }
45923 }
45924 return r;
45925 }
45926
45927 BN.prototype._parseBase = function _parseBase (number, base, start) {
45928 // Initialize as zero
45929 this.words = [ 0 ];
45930 this.length = 1;
45931
45932 // Find length of limb in base
45933 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
45934 limbLen++;
45935 }
45936 limbLen--;
45937 limbPow = (limbPow / base) | 0;
45938
45939 var total = number.length - start;
45940 var mod = total % limbLen;
45941 var end = Math.min(total, total - mod) + start;
45942
45943 var word = 0;
45944 for (var i = start; i < end; i += limbLen) {
45945 word = parseBase(number, i, i + limbLen, base);
45946
45947 this.imuln(limbPow);
45948 if (this.words[0] + word < 0x4000000) {
45949 this.words[0] += word;
45950 } else {
45951 this._iaddn(word);
45952 }
45953 }
45954
45955 if (mod !== 0) {
45956 var pow = 1;
45957 word = parseBase(number, i, number.length, base);
45958
45959 for (i = 0; i < mod; i++) {
45960 pow *= base;
45961 }
45962
45963 this.imuln(pow);
45964 if (this.words[0] + word < 0x4000000) {
45965 this.words[0] += word;
45966 } else {
45967 this._iaddn(word);
45968 }
45969 }
45970 };
45971
45972 BN.prototype.copy = function copy (dest) {
45973 dest.words = new Array(this.length);
45974 for (var i = 0; i < this.length; i++) {
45975 dest.words[i] = this.words[i];
45976 }
45977 dest.length = this.length;
45978 dest.negative = this.negative;
45979 dest.red = this.red;
45980 };
45981
45982 BN.prototype.clone = function clone () {
45983 var r = new BN(null);
45984 this.copy(r);
45985 return r;
45986 };
45987
45988 BN.prototype._expand = function _expand (size) {
45989 while (this.length < size) {
45990 this.words[this.length++] = 0;
45991 }
45992 return this;
45993 };
45994
45995 // Remove leading `0` from `this`
45996 BN.prototype.strip = function strip () {
45997 while (this.length > 1 && this.words[this.length - 1] === 0) {
45998 this.length--;
45999 }
46000 return this._normSign();
46001 };
46002
46003 BN.prototype._normSign = function _normSign () {
46004 // -0 = 0
46005 if (this.length === 1 && this.words[0] === 0) {
46006 this.negative = 0;
46007 }
46008 return this;
46009 };
46010
46011 BN.prototype.inspect = function inspect () {
46012 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
46013 };
46014
46015 /*
46016
46017 var zeros = [];
46018 var groupSizes = [];
46019 var groupBases = [];
46020
46021 var s = '';
46022 var i = -1;
46023 while (++i < BN.wordSize) {
46024 zeros[i] = s;
46025 s += '0';
46026 }
46027 groupSizes[0] = 0;
46028 groupSizes[1] = 0;
46029 groupBases[0] = 0;
46030 groupBases[1] = 0;
46031 var base = 2 - 1;
46032 while (++base < 36 + 1) {
46033 var groupSize = 0;
46034 var groupBase = 1;
46035 while (groupBase < (1 << BN.wordSize) / base) {
46036 groupBase *= base;
46037 groupSize += 1;
46038 }
46039 groupSizes[base] = groupSize;
46040 groupBases[base] = groupBase;
46041 }
46042
46043 */
46044
46045 var zeros = [
46046 '',
46047 '0',
46048 '00',
46049 '000',
46050 '0000',
46051 '00000',
46052 '000000',
46053 '0000000',
46054 '00000000',
46055 '000000000',
46056 '0000000000',
46057 '00000000000',
46058 '000000000000',
46059 '0000000000000',
46060 '00000000000000',
46061 '000000000000000',
46062 '0000000000000000',
46063 '00000000000000000',
46064 '000000000000000000',
46065 '0000000000000000000',
46066 '00000000000000000000',
46067 '000000000000000000000',
46068 '0000000000000000000000',
46069 '00000000000000000000000',
46070 '000000000000000000000000',
46071 '0000000000000000000000000'
46072 ];
46073
46074 var groupSizes = [
46075 0, 0,
46076 25, 16, 12, 11, 10, 9, 8,
46077 8, 7, 7, 7, 7, 6, 6,
46078 6, 6, 6, 6, 6, 5, 5,
46079 5, 5, 5, 5, 5, 5, 5,
46080 5, 5, 5, 5, 5, 5, 5
46081 ];
46082
46083 var groupBases = [
46084 0, 0,
46085 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
46086 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
46087 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
46088 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
46089 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
46090 ];
46091
46092 BN.prototype.toString = function toString (base, padding) {
46093 base = base || 10;
46094 padding = padding | 0 || 1;
46095
46096 var out;
46097 if (base === 16 || base === 'hex') {
46098 out = '';
46099 var off = 0;
46100 var carry = 0;
46101 for (var i = 0; i < this.length; i++) {
46102 var w = this.words[i];
46103 var word = (((w << off) | carry) & 0xffffff).toString(16);
46104 carry = (w >>> (24 - off)) & 0xffffff;
46105 if (carry !== 0 || i !== this.length - 1) {
46106 out = zeros[6 - word.length] + word + out;
46107 } else {
46108 out = word + out;
46109 }
46110 off += 2;
46111 if (off >= 26) {
46112 off -= 26;
46113 i--;
46114 }
46115 }
46116 if (carry !== 0) {
46117 out = carry.toString(16) + out;
46118 }
46119 while (out.length % padding !== 0) {
46120 out = '0' + out;
46121 }
46122 if (this.negative !== 0) {
46123 out = '-' + out;
46124 }
46125 return out;
46126 }
46127
46128 if (base === (base | 0) && base >= 2 && base <= 36) {
46129 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
46130 var groupSize = groupSizes[base];
46131 // var groupBase = Math.pow(base, groupSize);
46132 var groupBase = groupBases[base];
46133 out = '';
46134 var c = this.clone();
46135 c.negative = 0;
46136 while (!c.isZero()) {
46137 var r = c.modn(groupBase).toString(base);
46138 c = c.idivn(groupBase);
46139
46140 if (!c.isZero()) {
46141 out = zeros[groupSize - r.length] + r + out;
46142 } else {
46143 out = r + out;
46144 }
46145 }
46146 if (this.isZero()) {
46147 out = '0' + out;
46148 }
46149 while (out.length % padding !== 0) {
46150 out = '0' + out;
46151 }
46152 if (this.negative !== 0) {
46153 out = '-' + out;
46154 }
46155 return out;
46156 }
46157
46158 assert(false, 'Base should be between 2 and 36');
46159 };
46160
46161 BN.prototype.toNumber = function toNumber () {
46162 var ret = this.words[0];
46163 if (this.length === 2) {
46164 ret += this.words[1] * 0x4000000;
46165 } else if (this.length === 3 && this.words[2] === 0x01) {
46166 // NOTE: at this stage it is known that the top bit is set
46167 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
46168 } else if (this.length > 2) {
46169 assert(false, 'Number can only safely store up to 53 bits');
46170 }
46171 return (this.negative !== 0) ? -ret : ret;
46172 };
46173
46174 BN.prototype.toJSON = function toJSON () {
46175 return this.toString(16);
46176 };
46177
46178 BN.prototype.toBuffer = function toBuffer (endian, length) {
46179 assert(typeof Buffer !== 'undefined');
46180 return this.toArrayLike(Buffer, endian, length);
46181 };
46182
46183 BN.prototype.toArray = function toArray (endian, length) {
46184 return this.toArrayLike(Array, endian, length);
46185 };
46186
46187 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
46188 var byteLength = this.byteLength();
46189 var reqLength = length || Math.max(1, byteLength);
46190 assert(byteLength <= reqLength, 'byte array longer than desired length');
46191 assert(reqLength > 0, 'Requested array length <= 0');
46192
46193 this.strip();
46194 var littleEndian = endian === 'le';
46195 var res = new ArrayType(reqLength);
46196
46197 var b, i;
46198 var q = this.clone();
46199 if (!littleEndian) {
46200 // Assume big-endian
46201 for (i = 0; i < reqLength - byteLength; i++) {
46202 res[i] = 0;
46203 }
46204
46205 for (i = 0; !q.isZero(); i++) {
46206 b = q.andln(0xff);
46207 q.iushrn(8);
46208
46209 res[reqLength - i - 1] = b;
46210 }
46211 } else {
46212 for (i = 0; !q.isZero(); i++) {
46213 b = q.andln(0xff);
46214 q.iushrn(8);
46215
46216 res[i] = b;
46217 }
46218
46219 for (; i < reqLength; i++) {
46220 res[i] = 0;
46221 }
46222 }
46223
46224 return res;
46225 };
46226
46227 if (Math.clz32) {
46228 BN.prototype._countBits = function _countBits (w) {
46229 return 32 - Math.clz32(w);
46230 };
46231 } else {
46232 BN.prototype._countBits = function _countBits (w) {
46233 var t = w;
46234 var r = 0;
46235 if (t >= 0x1000) {
46236 r += 13;
46237 t >>>= 13;
46238 }
46239 if (t >= 0x40) {
46240 r += 7;
46241 t >>>= 7;
46242 }
46243 if (t >= 0x8) {
46244 r += 4;
46245 t >>>= 4;
46246 }
46247 if (t >= 0x02) {
46248 r += 2;
46249 t >>>= 2;
46250 }
46251 return r + t;
46252 };
46253 }
46254
46255 BN.prototype._zeroBits = function _zeroBits (w) {
46256 // Short-cut
46257 if (w === 0) return 26;
46258
46259 var t = w;
46260 var r = 0;
46261 if ((t & 0x1fff) === 0) {
46262 r += 13;
46263 t >>>= 13;
46264 }
46265 if ((t & 0x7f) === 0) {
46266 r += 7;
46267 t >>>= 7;
46268 }
46269 if ((t & 0xf) === 0) {
46270 r += 4;
46271 t >>>= 4;
46272 }
46273 if ((t & 0x3) === 0) {
46274 r += 2;
46275 t >>>= 2;
46276 }
46277 if ((t & 0x1) === 0) {
46278 r++;
46279 }
46280 return r;
46281 };
46282
46283 // Return number of used bits in a BN
46284 BN.prototype.bitLength = function bitLength () {
46285 var w = this.words[this.length - 1];
46286 var hi = this._countBits(w);
46287 return (this.length - 1) * 26 + hi;
46288 };
46289
46290 function toBitArray (num) {
46291 var w = new Array(num.bitLength());
46292
46293 for (var bit = 0; bit < w.length; bit++) {
46294 var off = (bit / 26) | 0;
46295 var wbit = bit % 26;
46296
46297 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
46298 }
46299
46300 return w;
46301 }
46302
46303 // Number of trailing zero bits
46304 BN.prototype.zeroBits = function zeroBits () {
46305 if (this.isZero()) return 0;
46306
46307 var r = 0;
46308 for (var i = 0; i < this.length; i++) {
46309 var b = this._zeroBits(this.words[i]);
46310 r += b;
46311 if (b !== 26) break;
46312 }
46313 return r;
46314 };
46315
46316 BN.prototype.byteLength = function byteLength () {
46317 return Math.ceil(this.bitLength() / 8);
46318 };
46319
46320 BN.prototype.toTwos = function toTwos (width) {
46321 if (this.negative !== 0) {
46322 return this.abs().inotn(width).iaddn(1);
46323 }
46324 return this.clone();
46325 };
46326
46327 BN.prototype.fromTwos = function fromTwos (width) {
46328 if (this.testn(width - 1)) {
46329 return this.notn(width).iaddn(1).ineg();
46330 }
46331 return this.clone();
46332 };
46333
46334 BN.prototype.isNeg = function isNeg () {
46335 return this.negative !== 0;
46336 };
46337
46338 // Return negative clone of `this`
46339 BN.prototype.neg = function neg () {
46340 return this.clone().ineg();
46341 };
46342
46343 BN.prototype.ineg = function ineg () {
46344 if (!this.isZero()) {
46345 this.negative ^= 1;
46346 }
46347
46348 return this;
46349 };
46350
46351 // Or `num` with `this` in-place
46352 BN.prototype.iuor = function iuor (num) {
46353 while (this.length < num.length) {
46354 this.words[this.length++] = 0;
46355 }
46356
46357 for (var i = 0; i < num.length; i++) {
46358 this.words[i] = this.words[i] | num.words[i];
46359 }
46360
46361 return this.strip();
46362 };
46363
46364 BN.prototype.ior = function ior (num) {
46365 assert((this.negative | num.negative) === 0);
46366 return this.iuor(num);
46367 };
46368
46369 // Or `num` with `this`
46370 BN.prototype.or = function or (num) {
46371 if (this.length > num.length) return this.clone().ior(num);
46372 return num.clone().ior(this);
46373 };
46374
46375 BN.prototype.uor = function uor (num) {
46376 if (this.length > num.length) return this.clone().iuor(num);
46377 return num.clone().iuor(this);
46378 };
46379
46380 // And `num` with `this` in-place
46381 BN.prototype.iuand = function iuand (num) {
46382 // b = min-length(num, this)
46383 var b;
46384 if (this.length > num.length) {
46385 b = num;
46386 } else {
46387 b = this;
46388 }
46389
46390 for (var i = 0; i < b.length; i++) {
46391 this.words[i] = this.words[i] & num.words[i];
46392 }
46393
46394 this.length = b.length;
46395
46396 return this.strip();
46397 };
46398
46399 BN.prototype.iand = function iand (num) {
46400 assert((this.negative | num.negative) === 0);
46401 return this.iuand(num);
46402 };
46403
46404 // And `num` with `this`
46405 BN.prototype.and = function and (num) {
46406 if (this.length > num.length) return this.clone().iand(num);
46407 return num.clone().iand(this);
46408 };
46409
46410 BN.prototype.uand = function uand (num) {
46411 if (this.length > num.length) return this.clone().iuand(num);
46412 return num.clone().iuand(this);
46413 };
46414
46415 // Xor `num` with `this` in-place
46416 BN.prototype.iuxor = function iuxor (num) {
46417 // a.length > b.length
46418 var a;
46419 var b;
46420 if (this.length > num.length) {
46421 a = this;
46422 b = num;
46423 } else {
46424 a = num;
46425 b = this;
46426 }
46427
46428 for (var i = 0; i < b.length; i++) {
46429 this.words[i] = a.words[i] ^ b.words[i];
46430 }
46431
46432 if (this !== a) {
46433 for (; i < a.length; i++) {
46434 this.words[i] = a.words[i];
46435 }
46436 }
46437
46438 this.length = a.length;
46439
46440 return this.strip();
46441 };
46442
46443 BN.prototype.ixor = function ixor (num) {
46444 assert((this.negative | num.negative) === 0);
46445 return this.iuxor(num);
46446 };
46447
46448 // Xor `num` with `this`
46449 BN.prototype.xor = function xor (num) {
46450 if (this.length > num.length) return this.clone().ixor(num);
46451 return num.clone().ixor(this);
46452 };
46453
46454 BN.prototype.uxor = function uxor (num) {
46455 if (this.length > num.length) return this.clone().iuxor(num);
46456 return num.clone().iuxor(this);
46457 };
46458
46459 // Not ``this`` with ``width`` bitwidth
46460 BN.prototype.inotn = function inotn (width) {
46461 assert(typeof width === 'number' && width >= 0);
46462
46463 var bytesNeeded = Math.ceil(width / 26) | 0;
46464 var bitsLeft = width % 26;
46465
46466 // Extend the buffer with leading zeroes
46467 this._expand(bytesNeeded);
46468
46469 if (bitsLeft > 0) {
46470 bytesNeeded--;
46471 }
46472
46473 // Handle complete words
46474 for (var i = 0; i < bytesNeeded; i++) {
46475 this.words[i] = ~this.words[i] & 0x3ffffff;
46476 }
46477
46478 // Handle the residue
46479 if (bitsLeft > 0) {
46480 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
46481 }
46482
46483 // And remove leading zeroes
46484 return this.strip();
46485 };
46486
46487 BN.prototype.notn = function notn (width) {
46488 return this.clone().inotn(width);
46489 };
46490
46491 // Set `bit` of `this`
46492 BN.prototype.setn = function setn (bit, val) {
46493 assert(typeof bit === 'number' && bit >= 0);
46494
46495 var off = (bit / 26) | 0;
46496 var wbit = bit % 26;
46497
46498 this._expand(off + 1);
46499
46500 if (val) {
46501 this.words[off] = this.words[off] | (1 << wbit);
46502 } else {
46503 this.words[off] = this.words[off] & ~(1 << wbit);
46504 }
46505
46506 return this.strip();
46507 };
46508
46509 // Add `num` to `this` in-place
46510 BN.prototype.iadd = function iadd (num) {
46511 var r;
46512
46513 // negative + positive
46514 if (this.negative !== 0 && num.negative === 0) {
46515 this.negative = 0;
46516 r = this.isub(num);
46517 this.negative ^= 1;
46518 return this._normSign();
46519
46520 // positive + negative
46521 } else if (this.negative === 0 && num.negative !== 0) {
46522 num.negative = 0;
46523 r = this.isub(num);
46524 num.negative = 1;
46525 return r._normSign();
46526 }
46527
46528 // a.length > b.length
46529 var a, b;
46530 if (this.length > num.length) {
46531 a = this;
46532 b = num;
46533 } else {
46534 a = num;
46535 b = this;
46536 }
46537
46538 var carry = 0;
46539 for (var i = 0; i < b.length; i++) {
46540 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
46541 this.words[i] = r & 0x3ffffff;
46542 carry = r >>> 26;
46543 }
46544 for (; carry !== 0 && i < a.length; i++) {
46545 r = (a.words[i] | 0) + carry;
46546 this.words[i] = r & 0x3ffffff;
46547 carry = r >>> 26;
46548 }
46549
46550 this.length = a.length;
46551 if (carry !== 0) {
46552 this.words[this.length] = carry;
46553 this.length++;
46554 // Copy the rest of the words
46555 } else if (a !== this) {
46556 for (; i < a.length; i++) {
46557 this.words[i] = a.words[i];
46558 }
46559 }
46560
46561 return this;
46562 };
46563
46564 // Add `num` to `this`
46565 BN.prototype.add = function add (num) {
46566 var res;
46567 if (num.negative !== 0 && this.negative === 0) {
46568 num.negative = 0;
46569 res = this.sub(num);
46570 num.negative ^= 1;
46571 return res;
46572 } else if (num.negative === 0 && this.negative !== 0) {
46573 this.negative = 0;
46574 res = num.sub(this);
46575 this.negative = 1;
46576 return res;
46577 }
46578
46579 if (this.length > num.length) return this.clone().iadd(num);
46580
46581 return num.clone().iadd(this);
46582 };
46583
46584 // Subtract `num` from `this` in-place
46585 BN.prototype.isub = function isub (num) {
46586 // this - (-num) = this + num
46587 if (num.negative !== 0) {
46588 num.negative = 0;
46589 var r = this.iadd(num);
46590 num.negative = 1;
46591 return r._normSign();
46592
46593 // -this - num = -(this + num)
46594 } else if (this.negative !== 0) {
46595 this.negative = 0;
46596 this.iadd(num);
46597 this.negative = 1;
46598 return this._normSign();
46599 }
46600
46601 // At this point both numbers are positive
46602 var cmp = this.cmp(num);
46603
46604 // Optimization - zeroify
46605 if (cmp === 0) {
46606 this.negative = 0;
46607 this.length = 1;
46608 this.words[0] = 0;
46609 return this;
46610 }
46611
46612 // a > b
46613 var a, b;
46614 if (cmp > 0) {
46615 a = this;
46616 b = num;
46617 } else {
46618 a = num;
46619 b = this;
46620 }
46621
46622 var carry = 0;
46623 for (var i = 0; i < b.length; i++) {
46624 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
46625 carry = r >> 26;
46626 this.words[i] = r & 0x3ffffff;
46627 }
46628 for (; carry !== 0 && i < a.length; i++) {
46629 r = (a.words[i] | 0) + carry;
46630 carry = r >> 26;
46631 this.words[i] = r & 0x3ffffff;
46632 }
46633
46634 // Copy rest of the words
46635 if (carry === 0 && i < a.length && a !== this) {
46636 for (; i < a.length; i++) {
46637 this.words[i] = a.words[i];
46638 }
46639 }
46640
46641 this.length = Math.max(this.length, i);
46642
46643 if (a !== this) {
46644 this.negative = 1;
46645 }
46646
46647 return this.strip();
46648 };
46649
46650 // Subtract `num` from `this`
46651 BN.prototype.sub = function sub (num) {
46652 return this.clone().isub(num);
46653 };
46654
46655 function smallMulTo (self, num, out) {
46656 out.negative = num.negative ^ self.negative;
46657 var len = (self.length + num.length) | 0;
46658 out.length = len;
46659 len = (len - 1) | 0;
46660
46661 // Peel one iteration (compiler can't do it, because of code complexity)
46662 var a = self.words[0] | 0;
46663 var b = num.words[0] | 0;
46664 var r = a * b;
46665
46666 var lo = r & 0x3ffffff;
46667 var carry = (r / 0x4000000) | 0;
46668 out.words[0] = lo;
46669
46670 for (var k = 1; k < len; k++) {
46671 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
46672 // note that ncarry could be >= 0x3ffffff
46673 var ncarry = carry >>> 26;
46674 var rword = carry & 0x3ffffff;
46675 var maxJ = Math.min(k, num.length - 1);
46676 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
46677 var i = (k - j) | 0;
46678 a = self.words[i] | 0;
46679 b = num.words[j] | 0;
46680 r = a * b + rword;
46681 ncarry += (r / 0x4000000) | 0;
46682 rword = r & 0x3ffffff;
46683 }
46684 out.words[k] = rword | 0;
46685 carry = ncarry | 0;
46686 }
46687 if (carry !== 0) {
46688 out.words[k] = carry | 0;
46689 } else {
46690 out.length--;
46691 }
46692
46693 return out.strip();
46694 }
46695
46696 // TODO(indutny): it may be reasonable to omit it for users who don't need
46697 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
46698 // multiplication (like elliptic secp256k1).
46699 var comb10MulTo = function comb10MulTo (self, num, out) {
46700 var a = self.words;
46701 var b = num.words;
46702 var o = out.words;
46703 var c = 0;
46704 var lo;
46705 var mid;
46706 var hi;
46707 var a0 = a[0] | 0;
46708 var al0 = a0 & 0x1fff;
46709 var ah0 = a0 >>> 13;
46710 var a1 = a[1] | 0;
46711 var al1 = a1 & 0x1fff;
46712 var ah1 = a1 >>> 13;
46713 var a2 = a[2] | 0;
46714 var al2 = a2 & 0x1fff;
46715 var ah2 = a2 >>> 13;
46716 var a3 = a[3] | 0;
46717 var al3 = a3 & 0x1fff;
46718 var ah3 = a3 >>> 13;
46719 var a4 = a[4] | 0;
46720 var al4 = a4 & 0x1fff;
46721 var ah4 = a4 >>> 13;
46722 var a5 = a[5] | 0;
46723 var al5 = a5 & 0x1fff;
46724 var ah5 = a5 >>> 13;
46725 var a6 = a[6] | 0;
46726 var al6 = a6 & 0x1fff;
46727 var ah6 = a6 >>> 13;
46728 var a7 = a[7] | 0;
46729 var al7 = a7 & 0x1fff;
46730 var ah7 = a7 >>> 13;
46731 var a8 = a[8] | 0;
46732 var al8 = a8 & 0x1fff;
46733 var ah8 = a8 >>> 13;
46734 var a9 = a[9] | 0;
46735 var al9 = a9 & 0x1fff;
46736 var ah9 = a9 >>> 13;
46737 var b0 = b[0] | 0;
46738 var bl0 = b0 & 0x1fff;
46739 var bh0 = b0 >>> 13;
46740 var b1 = b[1] | 0;
46741 var bl1 = b1 & 0x1fff;
46742 var bh1 = b1 >>> 13;
46743 var b2 = b[2] | 0;
46744 var bl2 = b2 & 0x1fff;
46745 var bh2 = b2 >>> 13;
46746 var b3 = b[3] | 0;
46747 var bl3 = b3 & 0x1fff;
46748 var bh3 = b3 >>> 13;
46749 var b4 = b[4] | 0;
46750 var bl4 = b4 & 0x1fff;
46751 var bh4 = b4 >>> 13;
46752 var b5 = b[5] | 0;
46753 var bl5 = b5 & 0x1fff;
46754 var bh5 = b5 >>> 13;
46755 var b6 = b[6] | 0;
46756 var bl6 = b6 & 0x1fff;
46757 var bh6 = b6 >>> 13;
46758 var b7 = b[7] | 0;
46759 var bl7 = b7 & 0x1fff;
46760 var bh7 = b7 >>> 13;
46761 var b8 = b[8] | 0;
46762 var bl8 = b8 & 0x1fff;
46763 var bh8 = b8 >>> 13;
46764 var b9 = b[9] | 0;
46765 var bl9 = b9 & 0x1fff;
46766 var bh9 = b9 >>> 13;
46767
46768 out.negative = self.negative ^ num.negative;
46769 out.length = 19;
46770 /* k = 0 */
46771 lo = Math.imul(al0, bl0);
46772 mid = Math.imul(al0, bh0);
46773 mid = (mid + Math.imul(ah0, bl0)) | 0;
46774 hi = Math.imul(ah0, bh0);
46775 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46776 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
46777 w0 &= 0x3ffffff;
46778 /* k = 1 */
46779 lo = Math.imul(al1, bl0);
46780 mid = Math.imul(al1, bh0);
46781 mid = (mid + Math.imul(ah1, bl0)) | 0;
46782 hi = Math.imul(ah1, bh0);
46783 lo = (lo + Math.imul(al0, bl1)) | 0;
46784 mid = (mid + Math.imul(al0, bh1)) | 0;
46785 mid = (mid + Math.imul(ah0, bl1)) | 0;
46786 hi = (hi + Math.imul(ah0, bh1)) | 0;
46787 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46788 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
46789 w1 &= 0x3ffffff;
46790 /* k = 2 */
46791 lo = Math.imul(al2, bl0);
46792 mid = Math.imul(al2, bh0);
46793 mid = (mid + Math.imul(ah2, bl0)) | 0;
46794 hi = Math.imul(ah2, bh0);
46795 lo = (lo + Math.imul(al1, bl1)) | 0;
46796 mid = (mid + Math.imul(al1, bh1)) | 0;
46797 mid = (mid + Math.imul(ah1, bl1)) | 0;
46798 hi = (hi + Math.imul(ah1, bh1)) | 0;
46799 lo = (lo + Math.imul(al0, bl2)) | 0;
46800 mid = (mid + Math.imul(al0, bh2)) | 0;
46801 mid = (mid + Math.imul(ah0, bl2)) | 0;
46802 hi = (hi + Math.imul(ah0, bh2)) | 0;
46803 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46804 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
46805 w2 &= 0x3ffffff;
46806 /* k = 3 */
46807 lo = Math.imul(al3, bl0);
46808 mid = Math.imul(al3, bh0);
46809 mid = (mid + Math.imul(ah3, bl0)) | 0;
46810 hi = Math.imul(ah3, bh0);
46811 lo = (lo + Math.imul(al2, bl1)) | 0;
46812 mid = (mid + Math.imul(al2, bh1)) | 0;
46813 mid = (mid + Math.imul(ah2, bl1)) | 0;
46814 hi = (hi + Math.imul(ah2, bh1)) | 0;
46815 lo = (lo + Math.imul(al1, bl2)) | 0;
46816 mid = (mid + Math.imul(al1, bh2)) | 0;
46817 mid = (mid + Math.imul(ah1, bl2)) | 0;
46818 hi = (hi + Math.imul(ah1, bh2)) | 0;
46819 lo = (lo + Math.imul(al0, bl3)) | 0;
46820 mid = (mid + Math.imul(al0, bh3)) | 0;
46821 mid = (mid + Math.imul(ah0, bl3)) | 0;
46822 hi = (hi + Math.imul(ah0, bh3)) | 0;
46823 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46824 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
46825 w3 &= 0x3ffffff;
46826 /* k = 4 */
46827 lo = Math.imul(al4, bl0);
46828 mid = Math.imul(al4, bh0);
46829 mid = (mid + Math.imul(ah4, bl0)) | 0;
46830 hi = Math.imul(ah4, bh0);
46831 lo = (lo + Math.imul(al3, bl1)) | 0;
46832 mid = (mid + Math.imul(al3, bh1)) | 0;
46833 mid = (mid + Math.imul(ah3, bl1)) | 0;
46834 hi = (hi + Math.imul(ah3, bh1)) | 0;
46835 lo = (lo + Math.imul(al2, bl2)) | 0;
46836 mid = (mid + Math.imul(al2, bh2)) | 0;
46837 mid = (mid + Math.imul(ah2, bl2)) | 0;
46838 hi = (hi + Math.imul(ah2, bh2)) | 0;
46839 lo = (lo + Math.imul(al1, bl3)) | 0;
46840 mid = (mid + Math.imul(al1, bh3)) | 0;
46841 mid = (mid + Math.imul(ah1, bl3)) | 0;
46842 hi = (hi + Math.imul(ah1, bh3)) | 0;
46843 lo = (lo + Math.imul(al0, bl4)) | 0;
46844 mid = (mid + Math.imul(al0, bh4)) | 0;
46845 mid = (mid + Math.imul(ah0, bl4)) | 0;
46846 hi = (hi + Math.imul(ah0, bh4)) | 0;
46847 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46848 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
46849 w4 &= 0x3ffffff;
46850 /* k = 5 */
46851 lo = Math.imul(al5, bl0);
46852 mid = Math.imul(al5, bh0);
46853 mid = (mid + Math.imul(ah5, bl0)) | 0;
46854 hi = Math.imul(ah5, bh0);
46855 lo = (lo + Math.imul(al4, bl1)) | 0;
46856 mid = (mid + Math.imul(al4, bh1)) | 0;
46857 mid = (mid + Math.imul(ah4, bl1)) | 0;
46858 hi = (hi + Math.imul(ah4, bh1)) | 0;
46859 lo = (lo + Math.imul(al3, bl2)) | 0;
46860 mid = (mid + Math.imul(al3, bh2)) | 0;
46861 mid = (mid + Math.imul(ah3, bl2)) | 0;
46862 hi = (hi + Math.imul(ah3, bh2)) | 0;
46863 lo = (lo + Math.imul(al2, bl3)) | 0;
46864 mid = (mid + Math.imul(al2, bh3)) | 0;
46865 mid = (mid + Math.imul(ah2, bl3)) | 0;
46866 hi = (hi + Math.imul(ah2, bh3)) | 0;
46867 lo = (lo + Math.imul(al1, bl4)) | 0;
46868 mid = (mid + Math.imul(al1, bh4)) | 0;
46869 mid = (mid + Math.imul(ah1, bl4)) | 0;
46870 hi = (hi + Math.imul(ah1, bh4)) | 0;
46871 lo = (lo + Math.imul(al0, bl5)) | 0;
46872 mid = (mid + Math.imul(al0, bh5)) | 0;
46873 mid = (mid + Math.imul(ah0, bl5)) | 0;
46874 hi = (hi + Math.imul(ah0, bh5)) | 0;
46875 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46876 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
46877 w5 &= 0x3ffffff;
46878 /* k = 6 */
46879 lo = Math.imul(al6, bl0);
46880 mid = Math.imul(al6, bh0);
46881 mid = (mid + Math.imul(ah6, bl0)) | 0;
46882 hi = Math.imul(ah6, bh0);
46883 lo = (lo + Math.imul(al5, bl1)) | 0;
46884 mid = (mid + Math.imul(al5, bh1)) | 0;
46885 mid = (mid + Math.imul(ah5, bl1)) | 0;
46886 hi = (hi + Math.imul(ah5, bh1)) | 0;
46887 lo = (lo + Math.imul(al4, bl2)) | 0;
46888 mid = (mid + Math.imul(al4, bh2)) | 0;
46889 mid = (mid + Math.imul(ah4, bl2)) | 0;
46890 hi = (hi + Math.imul(ah4, bh2)) | 0;
46891 lo = (lo + Math.imul(al3, bl3)) | 0;
46892 mid = (mid + Math.imul(al3, bh3)) | 0;
46893 mid = (mid + Math.imul(ah3, bl3)) | 0;
46894 hi = (hi + Math.imul(ah3, bh3)) | 0;
46895 lo = (lo + Math.imul(al2, bl4)) | 0;
46896 mid = (mid + Math.imul(al2, bh4)) | 0;
46897 mid = (mid + Math.imul(ah2, bl4)) | 0;
46898 hi = (hi + Math.imul(ah2, bh4)) | 0;
46899 lo = (lo + Math.imul(al1, bl5)) | 0;
46900 mid = (mid + Math.imul(al1, bh5)) | 0;
46901 mid = (mid + Math.imul(ah1, bl5)) | 0;
46902 hi = (hi + Math.imul(ah1, bh5)) | 0;
46903 lo = (lo + Math.imul(al0, bl6)) | 0;
46904 mid = (mid + Math.imul(al0, bh6)) | 0;
46905 mid = (mid + Math.imul(ah0, bl6)) | 0;
46906 hi = (hi + Math.imul(ah0, bh6)) | 0;
46907 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46908 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
46909 w6 &= 0x3ffffff;
46910 /* k = 7 */
46911 lo = Math.imul(al7, bl0);
46912 mid = Math.imul(al7, bh0);
46913 mid = (mid + Math.imul(ah7, bl0)) | 0;
46914 hi = Math.imul(ah7, bh0);
46915 lo = (lo + Math.imul(al6, bl1)) | 0;
46916 mid = (mid + Math.imul(al6, bh1)) | 0;
46917 mid = (mid + Math.imul(ah6, bl1)) | 0;
46918 hi = (hi + Math.imul(ah6, bh1)) | 0;
46919 lo = (lo + Math.imul(al5, bl2)) | 0;
46920 mid = (mid + Math.imul(al5, bh2)) | 0;
46921 mid = (mid + Math.imul(ah5, bl2)) | 0;
46922 hi = (hi + Math.imul(ah5, bh2)) | 0;
46923 lo = (lo + Math.imul(al4, bl3)) | 0;
46924 mid = (mid + Math.imul(al4, bh3)) | 0;
46925 mid = (mid + Math.imul(ah4, bl3)) | 0;
46926 hi = (hi + Math.imul(ah4, bh3)) | 0;
46927 lo = (lo + Math.imul(al3, bl4)) | 0;
46928 mid = (mid + Math.imul(al3, bh4)) | 0;
46929 mid = (mid + Math.imul(ah3, bl4)) | 0;
46930 hi = (hi + Math.imul(ah3, bh4)) | 0;
46931 lo = (lo + Math.imul(al2, bl5)) | 0;
46932 mid = (mid + Math.imul(al2, bh5)) | 0;
46933 mid = (mid + Math.imul(ah2, bl5)) | 0;
46934 hi = (hi + Math.imul(ah2, bh5)) | 0;
46935 lo = (lo + Math.imul(al1, bl6)) | 0;
46936 mid = (mid + Math.imul(al1, bh6)) | 0;
46937 mid = (mid + Math.imul(ah1, bl6)) | 0;
46938 hi = (hi + Math.imul(ah1, bh6)) | 0;
46939 lo = (lo + Math.imul(al0, bl7)) | 0;
46940 mid = (mid + Math.imul(al0, bh7)) | 0;
46941 mid = (mid + Math.imul(ah0, bl7)) | 0;
46942 hi = (hi + Math.imul(ah0, bh7)) | 0;
46943 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46944 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
46945 w7 &= 0x3ffffff;
46946 /* k = 8 */
46947 lo = Math.imul(al8, bl0);
46948 mid = Math.imul(al8, bh0);
46949 mid = (mid + Math.imul(ah8, bl0)) | 0;
46950 hi = Math.imul(ah8, bh0);
46951 lo = (lo + Math.imul(al7, bl1)) | 0;
46952 mid = (mid + Math.imul(al7, bh1)) | 0;
46953 mid = (mid + Math.imul(ah7, bl1)) | 0;
46954 hi = (hi + Math.imul(ah7, bh1)) | 0;
46955 lo = (lo + Math.imul(al6, bl2)) | 0;
46956 mid = (mid + Math.imul(al6, bh2)) | 0;
46957 mid = (mid + Math.imul(ah6, bl2)) | 0;
46958 hi = (hi + Math.imul(ah6, bh2)) | 0;
46959 lo = (lo + Math.imul(al5, bl3)) | 0;
46960 mid = (mid + Math.imul(al5, bh3)) | 0;
46961 mid = (mid + Math.imul(ah5, bl3)) | 0;
46962 hi = (hi + Math.imul(ah5, bh3)) | 0;
46963 lo = (lo + Math.imul(al4, bl4)) | 0;
46964 mid = (mid + Math.imul(al4, bh4)) | 0;
46965 mid = (mid + Math.imul(ah4, bl4)) | 0;
46966 hi = (hi + Math.imul(ah4, bh4)) | 0;
46967 lo = (lo + Math.imul(al3, bl5)) | 0;
46968 mid = (mid + Math.imul(al3, bh5)) | 0;
46969 mid = (mid + Math.imul(ah3, bl5)) | 0;
46970 hi = (hi + Math.imul(ah3, bh5)) | 0;
46971 lo = (lo + Math.imul(al2, bl6)) | 0;
46972 mid = (mid + Math.imul(al2, bh6)) | 0;
46973 mid = (mid + Math.imul(ah2, bl6)) | 0;
46974 hi = (hi + Math.imul(ah2, bh6)) | 0;
46975 lo = (lo + Math.imul(al1, bl7)) | 0;
46976 mid = (mid + Math.imul(al1, bh7)) | 0;
46977 mid = (mid + Math.imul(ah1, bl7)) | 0;
46978 hi = (hi + Math.imul(ah1, bh7)) | 0;
46979 lo = (lo + Math.imul(al0, bl8)) | 0;
46980 mid = (mid + Math.imul(al0, bh8)) | 0;
46981 mid = (mid + Math.imul(ah0, bl8)) | 0;
46982 hi = (hi + Math.imul(ah0, bh8)) | 0;
46983 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
46984 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
46985 w8 &= 0x3ffffff;
46986 /* k = 9 */
46987 lo = Math.imul(al9, bl0);
46988 mid = Math.imul(al9, bh0);
46989 mid = (mid + Math.imul(ah9, bl0)) | 0;
46990 hi = Math.imul(ah9, bh0);
46991 lo = (lo + Math.imul(al8, bl1)) | 0;
46992 mid = (mid + Math.imul(al8, bh1)) | 0;
46993 mid = (mid + Math.imul(ah8, bl1)) | 0;
46994 hi = (hi + Math.imul(ah8, bh1)) | 0;
46995 lo = (lo + Math.imul(al7, bl2)) | 0;
46996 mid = (mid + Math.imul(al7, bh2)) | 0;
46997 mid = (mid + Math.imul(ah7, bl2)) | 0;
46998 hi = (hi + Math.imul(ah7, bh2)) | 0;
46999 lo = (lo + Math.imul(al6, bl3)) | 0;
47000 mid = (mid + Math.imul(al6, bh3)) | 0;
47001 mid = (mid + Math.imul(ah6, bl3)) | 0;
47002 hi = (hi + Math.imul(ah6, bh3)) | 0;
47003 lo = (lo + Math.imul(al5, bl4)) | 0;
47004 mid = (mid + Math.imul(al5, bh4)) | 0;
47005 mid = (mid + Math.imul(ah5, bl4)) | 0;
47006 hi = (hi + Math.imul(ah5, bh4)) | 0;
47007 lo = (lo + Math.imul(al4, bl5)) | 0;
47008 mid = (mid + Math.imul(al4, bh5)) | 0;
47009 mid = (mid + Math.imul(ah4, bl5)) | 0;
47010 hi = (hi + Math.imul(ah4, bh5)) | 0;
47011 lo = (lo + Math.imul(al3, bl6)) | 0;
47012 mid = (mid + Math.imul(al3, bh6)) | 0;
47013 mid = (mid + Math.imul(ah3, bl6)) | 0;
47014 hi = (hi + Math.imul(ah3, bh6)) | 0;
47015 lo = (lo + Math.imul(al2, bl7)) | 0;
47016 mid = (mid + Math.imul(al2, bh7)) | 0;
47017 mid = (mid + Math.imul(ah2, bl7)) | 0;
47018 hi = (hi + Math.imul(ah2, bh7)) | 0;
47019 lo = (lo + Math.imul(al1, bl8)) | 0;
47020 mid = (mid + Math.imul(al1, bh8)) | 0;
47021 mid = (mid + Math.imul(ah1, bl8)) | 0;
47022 hi = (hi + Math.imul(ah1, bh8)) | 0;
47023 lo = (lo + Math.imul(al0, bl9)) | 0;
47024 mid = (mid + Math.imul(al0, bh9)) | 0;
47025 mid = (mid + Math.imul(ah0, bl9)) | 0;
47026 hi = (hi + Math.imul(ah0, bh9)) | 0;
47027 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47028 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
47029 w9 &= 0x3ffffff;
47030 /* k = 10 */
47031 lo = Math.imul(al9, bl1);
47032 mid = Math.imul(al9, bh1);
47033 mid = (mid + Math.imul(ah9, bl1)) | 0;
47034 hi = Math.imul(ah9, bh1);
47035 lo = (lo + Math.imul(al8, bl2)) | 0;
47036 mid = (mid + Math.imul(al8, bh2)) | 0;
47037 mid = (mid + Math.imul(ah8, bl2)) | 0;
47038 hi = (hi + Math.imul(ah8, bh2)) | 0;
47039 lo = (lo + Math.imul(al7, bl3)) | 0;
47040 mid = (mid + Math.imul(al7, bh3)) | 0;
47041 mid = (mid + Math.imul(ah7, bl3)) | 0;
47042 hi = (hi + Math.imul(ah7, bh3)) | 0;
47043 lo = (lo + Math.imul(al6, bl4)) | 0;
47044 mid = (mid + Math.imul(al6, bh4)) | 0;
47045 mid = (mid + Math.imul(ah6, bl4)) | 0;
47046 hi = (hi + Math.imul(ah6, bh4)) | 0;
47047 lo = (lo + Math.imul(al5, bl5)) | 0;
47048 mid = (mid + Math.imul(al5, bh5)) | 0;
47049 mid = (mid + Math.imul(ah5, bl5)) | 0;
47050 hi = (hi + Math.imul(ah5, bh5)) | 0;
47051 lo = (lo + Math.imul(al4, bl6)) | 0;
47052 mid = (mid + Math.imul(al4, bh6)) | 0;
47053 mid = (mid + Math.imul(ah4, bl6)) | 0;
47054 hi = (hi + Math.imul(ah4, bh6)) | 0;
47055 lo = (lo + Math.imul(al3, bl7)) | 0;
47056 mid = (mid + Math.imul(al3, bh7)) | 0;
47057 mid = (mid + Math.imul(ah3, bl7)) | 0;
47058 hi = (hi + Math.imul(ah3, bh7)) | 0;
47059 lo = (lo + Math.imul(al2, bl8)) | 0;
47060 mid = (mid + Math.imul(al2, bh8)) | 0;
47061 mid = (mid + Math.imul(ah2, bl8)) | 0;
47062 hi = (hi + Math.imul(ah2, bh8)) | 0;
47063 lo = (lo + Math.imul(al1, bl9)) | 0;
47064 mid = (mid + Math.imul(al1, bh9)) | 0;
47065 mid = (mid + Math.imul(ah1, bl9)) | 0;
47066 hi = (hi + Math.imul(ah1, bh9)) | 0;
47067 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47068 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
47069 w10 &= 0x3ffffff;
47070 /* k = 11 */
47071 lo = Math.imul(al9, bl2);
47072 mid = Math.imul(al9, bh2);
47073 mid = (mid + Math.imul(ah9, bl2)) | 0;
47074 hi = Math.imul(ah9, bh2);
47075 lo = (lo + Math.imul(al8, bl3)) | 0;
47076 mid = (mid + Math.imul(al8, bh3)) | 0;
47077 mid = (mid + Math.imul(ah8, bl3)) | 0;
47078 hi = (hi + Math.imul(ah8, bh3)) | 0;
47079 lo = (lo + Math.imul(al7, bl4)) | 0;
47080 mid = (mid + Math.imul(al7, bh4)) | 0;
47081 mid = (mid + Math.imul(ah7, bl4)) | 0;
47082 hi = (hi + Math.imul(ah7, bh4)) | 0;
47083 lo = (lo + Math.imul(al6, bl5)) | 0;
47084 mid = (mid + Math.imul(al6, bh5)) | 0;
47085 mid = (mid + Math.imul(ah6, bl5)) | 0;
47086 hi = (hi + Math.imul(ah6, bh5)) | 0;
47087 lo = (lo + Math.imul(al5, bl6)) | 0;
47088 mid = (mid + Math.imul(al5, bh6)) | 0;
47089 mid = (mid + Math.imul(ah5, bl6)) | 0;
47090 hi = (hi + Math.imul(ah5, bh6)) | 0;
47091 lo = (lo + Math.imul(al4, bl7)) | 0;
47092 mid = (mid + Math.imul(al4, bh7)) | 0;
47093 mid = (mid + Math.imul(ah4, bl7)) | 0;
47094 hi = (hi + Math.imul(ah4, bh7)) | 0;
47095 lo = (lo + Math.imul(al3, bl8)) | 0;
47096 mid = (mid + Math.imul(al3, bh8)) | 0;
47097 mid = (mid + Math.imul(ah3, bl8)) | 0;
47098 hi = (hi + Math.imul(ah3, bh8)) | 0;
47099 lo = (lo + Math.imul(al2, bl9)) | 0;
47100 mid = (mid + Math.imul(al2, bh9)) | 0;
47101 mid = (mid + Math.imul(ah2, bl9)) | 0;
47102 hi = (hi + Math.imul(ah2, bh9)) | 0;
47103 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47104 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
47105 w11 &= 0x3ffffff;
47106 /* k = 12 */
47107 lo = Math.imul(al9, bl3);
47108 mid = Math.imul(al9, bh3);
47109 mid = (mid + Math.imul(ah9, bl3)) | 0;
47110 hi = Math.imul(ah9, bh3);
47111 lo = (lo + Math.imul(al8, bl4)) | 0;
47112 mid = (mid + Math.imul(al8, bh4)) | 0;
47113 mid = (mid + Math.imul(ah8, bl4)) | 0;
47114 hi = (hi + Math.imul(ah8, bh4)) | 0;
47115 lo = (lo + Math.imul(al7, bl5)) | 0;
47116 mid = (mid + Math.imul(al7, bh5)) | 0;
47117 mid = (mid + Math.imul(ah7, bl5)) | 0;
47118 hi = (hi + Math.imul(ah7, bh5)) | 0;
47119 lo = (lo + Math.imul(al6, bl6)) | 0;
47120 mid = (mid + Math.imul(al6, bh6)) | 0;
47121 mid = (mid + Math.imul(ah6, bl6)) | 0;
47122 hi = (hi + Math.imul(ah6, bh6)) | 0;
47123 lo = (lo + Math.imul(al5, bl7)) | 0;
47124 mid = (mid + Math.imul(al5, bh7)) | 0;
47125 mid = (mid + Math.imul(ah5, bl7)) | 0;
47126 hi = (hi + Math.imul(ah5, bh7)) | 0;
47127 lo = (lo + Math.imul(al4, bl8)) | 0;
47128 mid = (mid + Math.imul(al4, bh8)) | 0;
47129 mid = (mid + Math.imul(ah4, bl8)) | 0;
47130 hi = (hi + Math.imul(ah4, bh8)) | 0;
47131 lo = (lo + Math.imul(al3, bl9)) | 0;
47132 mid = (mid + Math.imul(al3, bh9)) | 0;
47133 mid = (mid + Math.imul(ah3, bl9)) | 0;
47134 hi = (hi + Math.imul(ah3, bh9)) | 0;
47135 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47136 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
47137 w12 &= 0x3ffffff;
47138 /* k = 13 */
47139 lo = Math.imul(al9, bl4);
47140 mid = Math.imul(al9, bh4);
47141 mid = (mid + Math.imul(ah9, bl4)) | 0;
47142 hi = Math.imul(ah9, bh4);
47143 lo = (lo + Math.imul(al8, bl5)) | 0;
47144 mid = (mid + Math.imul(al8, bh5)) | 0;
47145 mid = (mid + Math.imul(ah8, bl5)) | 0;
47146 hi = (hi + Math.imul(ah8, bh5)) | 0;
47147 lo = (lo + Math.imul(al7, bl6)) | 0;
47148 mid = (mid + Math.imul(al7, bh6)) | 0;
47149 mid = (mid + Math.imul(ah7, bl6)) | 0;
47150 hi = (hi + Math.imul(ah7, bh6)) | 0;
47151 lo = (lo + Math.imul(al6, bl7)) | 0;
47152 mid = (mid + Math.imul(al6, bh7)) | 0;
47153 mid = (mid + Math.imul(ah6, bl7)) | 0;
47154 hi = (hi + Math.imul(ah6, bh7)) | 0;
47155 lo = (lo + Math.imul(al5, bl8)) | 0;
47156 mid = (mid + Math.imul(al5, bh8)) | 0;
47157 mid = (mid + Math.imul(ah5, bl8)) | 0;
47158 hi = (hi + Math.imul(ah5, bh8)) | 0;
47159 lo = (lo + Math.imul(al4, bl9)) | 0;
47160 mid = (mid + Math.imul(al4, bh9)) | 0;
47161 mid = (mid + Math.imul(ah4, bl9)) | 0;
47162 hi = (hi + Math.imul(ah4, bh9)) | 0;
47163 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47164 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
47165 w13 &= 0x3ffffff;
47166 /* k = 14 */
47167 lo = Math.imul(al9, bl5);
47168 mid = Math.imul(al9, bh5);
47169 mid = (mid + Math.imul(ah9, bl5)) | 0;
47170 hi = Math.imul(ah9, bh5);
47171 lo = (lo + Math.imul(al8, bl6)) | 0;
47172 mid = (mid + Math.imul(al8, bh6)) | 0;
47173 mid = (mid + Math.imul(ah8, bl6)) | 0;
47174 hi = (hi + Math.imul(ah8, bh6)) | 0;
47175 lo = (lo + Math.imul(al7, bl7)) | 0;
47176 mid = (mid + Math.imul(al7, bh7)) | 0;
47177 mid = (mid + Math.imul(ah7, bl7)) | 0;
47178 hi = (hi + Math.imul(ah7, bh7)) | 0;
47179 lo = (lo + Math.imul(al6, bl8)) | 0;
47180 mid = (mid + Math.imul(al6, bh8)) | 0;
47181 mid = (mid + Math.imul(ah6, bl8)) | 0;
47182 hi = (hi + Math.imul(ah6, bh8)) | 0;
47183 lo = (lo + Math.imul(al5, bl9)) | 0;
47184 mid = (mid + Math.imul(al5, bh9)) | 0;
47185 mid = (mid + Math.imul(ah5, bl9)) | 0;
47186 hi = (hi + Math.imul(ah5, bh9)) | 0;
47187 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47188 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
47189 w14 &= 0x3ffffff;
47190 /* k = 15 */
47191 lo = Math.imul(al9, bl6);
47192 mid = Math.imul(al9, bh6);
47193 mid = (mid + Math.imul(ah9, bl6)) | 0;
47194 hi = Math.imul(ah9, bh6);
47195 lo = (lo + Math.imul(al8, bl7)) | 0;
47196 mid = (mid + Math.imul(al8, bh7)) | 0;
47197 mid = (mid + Math.imul(ah8, bl7)) | 0;
47198 hi = (hi + Math.imul(ah8, bh7)) | 0;
47199 lo = (lo + Math.imul(al7, bl8)) | 0;
47200 mid = (mid + Math.imul(al7, bh8)) | 0;
47201 mid = (mid + Math.imul(ah7, bl8)) | 0;
47202 hi = (hi + Math.imul(ah7, bh8)) | 0;
47203 lo = (lo + Math.imul(al6, bl9)) | 0;
47204 mid = (mid + Math.imul(al6, bh9)) | 0;
47205 mid = (mid + Math.imul(ah6, bl9)) | 0;
47206 hi = (hi + Math.imul(ah6, bh9)) | 0;
47207 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47208 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
47209 w15 &= 0x3ffffff;
47210 /* k = 16 */
47211 lo = Math.imul(al9, bl7);
47212 mid = Math.imul(al9, bh7);
47213 mid = (mid + Math.imul(ah9, bl7)) | 0;
47214 hi = Math.imul(ah9, bh7);
47215 lo = (lo + Math.imul(al8, bl8)) | 0;
47216 mid = (mid + Math.imul(al8, bh8)) | 0;
47217 mid = (mid + Math.imul(ah8, bl8)) | 0;
47218 hi = (hi + Math.imul(ah8, bh8)) | 0;
47219 lo = (lo + Math.imul(al7, bl9)) | 0;
47220 mid = (mid + Math.imul(al7, bh9)) | 0;
47221 mid = (mid + Math.imul(ah7, bl9)) | 0;
47222 hi = (hi + Math.imul(ah7, bh9)) | 0;
47223 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47224 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
47225 w16 &= 0x3ffffff;
47226 /* k = 17 */
47227 lo = Math.imul(al9, bl8);
47228 mid = Math.imul(al9, bh8);
47229 mid = (mid + Math.imul(ah9, bl8)) | 0;
47230 hi = Math.imul(ah9, bh8);
47231 lo = (lo + Math.imul(al8, bl9)) | 0;
47232 mid = (mid + Math.imul(al8, bh9)) | 0;
47233 mid = (mid + Math.imul(ah8, bl9)) | 0;
47234 hi = (hi + Math.imul(ah8, bh9)) | 0;
47235 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47236 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
47237 w17 &= 0x3ffffff;
47238 /* k = 18 */
47239 lo = Math.imul(al9, bl9);
47240 mid = Math.imul(al9, bh9);
47241 mid = (mid + Math.imul(ah9, bl9)) | 0;
47242 hi = Math.imul(ah9, bh9);
47243 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
47244 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
47245 w18 &= 0x3ffffff;
47246 o[0] = w0;
47247 o[1] = w1;
47248 o[2] = w2;
47249 o[3] = w3;
47250 o[4] = w4;
47251 o[5] = w5;
47252 o[6] = w6;
47253 o[7] = w7;
47254 o[8] = w8;
47255 o[9] = w9;
47256 o[10] = w10;
47257 o[11] = w11;
47258 o[12] = w12;
47259 o[13] = w13;
47260 o[14] = w14;
47261 o[15] = w15;
47262 o[16] = w16;
47263 o[17] = w17;
47264 o[18] = w18;
47265 if (c !== 0) {
47266 o[19] = c;
47267 out.length++;
47268 }
47269 return out;
47270 };
47271
47272 // Polyfill comb
47273 if (!Math.imul) {
47274 comb10MulTo = smallMulTo;
47275 }
47276
47277 function bigMulTo (self, num, out) {
47278 out.negative = num.negative ^ self.negative;
47279 out.length = self.length + num.length;
47280
47281 var carry = 0;
47282 var hncarry = 0;
47283 for (var k = 0; k < out.length - 1; k++) {
47284 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
47285 // note that ncarry could be >= 0x3ffffff
47286 var ncarry = hncarry;
47287 hncarry = 0;
47288 var rword = carry & 0x3ffffff;
47289 var maxJ = Math.min(k, num.length - 1);
47290 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
47291 var i = k - j;
47292 var a = self.words[i] | 0;
47293 var b = num.words[j] | 0;
47294 var r = a * b;
47295
47296 var lo = r & 0x3ffffff;
47297 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
47298 lo = (lo + rword) | 0;
47299 rword = lo & 0x3ffffff;
47300 ncarry = (ncarry + (lo >>> 26)) | 0;
47301
47302 hncarry += ncarry >>> 26;
47303 ncarry &= 0x3ffffff;
47304 }
47305 out.words[k] = rword;
47306 carry = ncarry;
47307 ncarry = hncarry;
47308 }
47309 if (carry !== 0) {
47310 out.words[k] = carry;
47311 } else {
47312 out.length--;
47313 }
47314
47315 return out.strip();
47316 }
47317
47318 function jumboMulTo (self, num, out) {
47319 var fftm = new FFTM();
47320 return fftm.mulp(self, num, out);
47321 }
47322
47323 BN.prototype.mulTo = function mulTo (num, out) {
47324 var res;
47325 var len = this.length + num.length;
47326 if (this.length === 10 && num.length === 10) {
47327 res = comb10MulTo(this, num, out);
47328 } else if (len < 63) {
47329 res = smallMulTo(this, num, out);
47330 } else if (len < 1024) {
47331 res = bigMulTo(this, num, out);
47332 } else {
47333 res = jumboMulTo(this, num, out);
47334 }
47335
47336 return res;
47337 };
47338
47339 // Cooley-Tukey algorithm for FFT
47340 // slightly revisited to rely on looping instead of recursion
47341
47342 function FFTM (x, y) {
47343 this.x = x;
47344 this.y = y;
47345 }
47346
47347 FFTM.prototype.makeRBT = function makeRBT (N) {
47348 var t = new Array(N);
47349 var l = BN.prototype._countBits(N) - 1;
47350 for (var i = 0; i < N; i++) {
47351 t[i] = this.revBin(i, l, N);
47352 }
47353
47354 return t;
47355 };
47356
47357 // Returns binary-reversed representation of `x`
47358 FFTM.prototype.revBin = function revBin (x, l, N) {
47359 if (x === 0 || x === N - 1) return x;
47360
47361 var rb = 0;
47362 for (var i = 0; i < l; i++) {
47363 rb |= (x & 1) << (l - i - 1);
47364 x >>= 1;
47365 }
47366
47367 return rb;
47368 };
47369
47370 // Performs "tweedling" phase, therefore 'emulating'
47371 // behaviour of the recursive algorithm
47372 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
47373 for (var i = 0; i < N; i++) {
47374 rtws[i] = rws[rbt[i]];
47375 itws[i] = iws[rbt[i]];
47376 }
47377 };
47378
47379 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
47380 this.permute(rbt, rws, iws, rtws, itws, N);
47381
47382 for (var s = 1; s < N; s <<= 1) {
47383 var l = s << 1;
47384
47385 var rtwdf = Math.cos(2 * Math.PI / l);
47386 var itwdf = Math.sin(2 * Math.PI / l);
47387
47388 for (var p = 0; p < N; p += l) {
47389 var rtwdf_ = rtwdf;
47390 var itwdf_ = itwdf;
47391
47392 for (var j = 0; j < s; j++) {
47393 var re = rtws[p + j];
47394 var ie = itws[p + j];
47395
47396 var ro = rtws[p + j + s];
47397 var io = itws[p + j + s];
47398
47399 var rx = rtwdf_ * ro - itwdf_ * io;
47400
47401 io = rtwdf_ * io + itwdf_ * ro;
47402 ro = rx;
47403
47404 rtws[p + j] = re + ro;
47405 itws[p + j] = ie + io;
47406
47407 rtws[p + j + s] = re - ro;
47408 itws[p + j + s] = ie - io;
47409
47410 /* jshint maxdepth : false */
47411 if (j !== l) {
47412 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
47413
47414 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
47415 rtwdf_ = rx;
47416 }
47417 }
47418 }
47419 }
47420 };
47421
47422 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
47423 var N = Math.max(m, n) | 1;
47424 var odd = N & 1;
47425 var i = 0;
47426 for (N = N / 2 | 0; N; N = N >>> 1) {
47427 i++;
47428 }
47429
47430 return 1 << i + 1 + odd;
47431 };
47432
47433 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
47434 if (N <= 1) return;
47435
47436 for (var i = 0; i < N / 2; i++) {
47437 var t = rws[i];
47438
47439 rws[i] = rws[N - i - 1];
47440 rws[N - i - 1] = t;
47441
47442 t = iws[i];
47443
47444 iws[i] = -iws[N - i - 1];
47445 iws[N - i - 1] = -t;
47446 }
47447 };
47448
47449 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
47450 var carry = 0;
47451 for (var i = 0; i < N / 2; i++) {
47452 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
47453 Math.round(ws[2 * i] / N) +
47454 carry;
47455
47456 ws[i] = w & 0x3ffffff;
47457
47458 if (w < 0x4000000) {
47459 carry = 0;
47460 } else {
47461 carry = w / 0x4000000 | 0;
47462 }
47463 }
47464
47465 return ws;
47466 };
47467
47468 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
47469 var carry = 0;
47470 for (var i = 0; i < len; i++) {
47471 carry = carry + (ws[i] | 0);
47472
47473 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
47474 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
47475 }
47476
47477 // Pad with zeroes
47478 for (i = 2 * len; i < N; ++i) {
47479 rws[i] = 0;
47480 }
47481
47482 assert(carry === 0);
47483 assert((carry & ~0x1fff) === 0);
47484 };
47485
47486 FFTM.prototype.stub = function stub (N) {
47487 var ph = new Array(N);
47488 for (var i = 0; i < N; i++) {
47489 ph[i] = 0;
47490 }
47491
47492 return ph;
47493 };
47494
47495 FFTM.prototype.mulp = function mulp (x, y, out) {
47496 var N = 2 * this.guessLen13b(x.length, y.length);
47497
47498 var rbt = this.makeRBT(N);
47499
47500 var _ = this.stub(N);
47501
47502 var rws = new Array(N);
47503 var rwst = new Array(N);
47504 var iwst = new Array(N);
47505
47506 var nrws = new Array(N);
47507 var nrwst = new Array(N);
47508 var niwst = new Array(N);
47509
47510 var rmws = out.words;
47511 rmws.length = N;
47512
47513 this.convert13b(x.words, x.length, rws, N);
47514 this.convert13b(y.words, y.length, nrws, N);
47515
47516 this.transform(rws, _, rwst, iwst, N, rbt);
47517 this.transform(nrws, _, nrwst, niwst, N, rbt);
47518
47519 for (var i = 0; i < N; i++) {
47520 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
47521 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
47522 rwst[i] = rx;
47523 }
47524
47525 this.conjugate(rwst, iwst, N);
47526 this.transform(rwst, iwst, rmws, _, N, rbt);
47527 this.conjugate(rmws, _, N);
47528 this.normalize13b(rmws, N);
47529
47530 out.negative = x.negative ^ y.negative;
47531 out.length = x.length + y.length;
47532 return out.strip();
47533 };
47534
47535 // Multiply `this` by `num`
47536 BN.prototype.mul = function mul (num) {
47537 var out = new BN(null);
47538 out.words = new Array(this.length + num.length);
47539 return this.mulTo(num, out);
47540 };
47541
47542 // Multiply employing FFT
47543 BN.prototype.mulf = function mulf (num) {
47544 var out = new BN(null);
47545 out.words = new Array(this.length + num.length);
47546 return jumboMulTo(this, num, out);
47547 };
47548
47549 // In-place Multiplication
47550 BN.prototype.imul = function imul (num) {
47551 return this.clone().mulTo(num, this);
47552 };
47553
47554 BN.prototype.imuln = function imuln (num) {
47555 assert(typeof num === 'number');
47556 assert(num < 0x4000000);
47557
47558 // Carry
47559 var carry = 0;
47560 for (var i = 0; i < this.length; i++) {
47561 var w = (this.words[i] | 0) * num;
47562 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
47563 carry >>= 26;
47564 carry += (w / 0x4000000) | 0;
47565 // NOTE: lo is 27bit maximum
47566 carry += lo >>> 26;
47567 this.words[i] = lo & 0x3ffffff;
47568 }
47569
47570 if (carry !== 0) {
47571 this.words[i] = carry;
47572 this.length++;
47573 }
47574
47575 return this;
47576 };
47577
47578 BN.prototype.muln = function muln (num) {
47579 return this.clone().imuln(num);
47580 };
47581
47582 // `this` * `this`
47583 BN.prototype.sqr = function sqr () {
47584 return this.mul(this);
47585 };
47586
47587 // `this` * `this` in-place
47588 BN.prototype.isqr = function isqr () {
47589 return this.imul(this.clone());
47590 };
47591
47592 // Math.pow(`this`, `num`)
47593 BN.prototype.pow = function pow (num) {
47594 var w = toBitArray(num);
47595 if (w.length === 0) return new BN(1);
47596
47597 // Skip leading zeroes
47598 var res = this;
47599 for (var i = 0; i < w.length; i++, res = res.sqr()) {
47600 if (w[i] !== 0) break;
47601 }
47602
47603 if (++i < w.length) {
47604 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
47605 if (w[i] === 0) continue;
47606
47607 res = res.mul(q);
47608 }
47609 }
47610
47611 return res;
47612 };
47613
47614 // Shift-left in-place
47615 BN.prototype.iushln = function iushln (bits) {
47616 assert(typeof bits === 'number' && bits >= 0);
47617 var r = bits % 26;
47618 var s = (bits - r) / 26;
47619 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
47620 var i;
47621
47622 if (r !== 0) {
47623 var carry = 0;
47624
47625 for (i = 0; i < this.length; i++) {
47626 var newCarry = this.words[i] & carryMask;
47627 var c = ((this.words[i] | 0) - newCarry) << r;
47628 this.words[i] = c | carry;
47629 carry = newCarry >>> (26 - r);
47630 }
47631
47632 if (carry) {
47633 this.words[i] = carry;
47634 this.length++;
47635 }
47636 }
47637
47638 if (s !== 0) {
47639 for (i = this.length - 1; i >= 0; i--) {
47640 this.words[i + s] = this.words[i];
47641 }
47642
47643 for (i = 0; i < s; i++) {
47644 this.words[i] = 0;
47645 }
47646
47647 this.length += s;
47648 }
47649
47650 return this.strip();
47651 };
47652
47653 BN.prototype.ishln = function ishln (bits) {
47654 // TODO(indutny): implement me
47655 assert(this.negative === 0);
47656 return this.iushln(bits);
47657 };
47658
47659 // Shift-right in-place
47660 // NOTE: `hint` is a lowest bit before trailing zeroes
47661 // NOTE: if `extended` is present - it will be filled with destroyed bits
47662 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
47663 assert(typeof bits === 'number' && bits >= 0);
47664 var h;
47665 if (hint) {
47666 h = (hint - (hint % 26)) / 26;
47667 } else {
47668 h = 0;
47669 }
47670
47671 var r = bits % 26;
47672 var s = Math.min((bits - r) / 26, this.length);
47673 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47674 var maskedWords = extended;
47675
47676 h -= s;
47677 h = Math.max(0, h);
47678
47679 // Extended mode, copy masked part
47680 if (maskedWords) {
47681 for (var i = 0; i < s; i++) {
47682 maskedWords.words[i] = this.words[i];
47683 }
47684 maskedWords.length = s;
47685 }
47686
47687 if (s === 0) {
47688 // No-op, we should not move anything at all
47689 } else if (this.length > s) {
47690 this.length -= s;
47691 for (i = 0; i < this.length; i++) {
47692 this.words[i] = this.words[i + s];
47693 }
47694 } else {
47695 this.words[0] = 0;
47696 this.length = 1;
47697 }
47698
47699 var carry = 0;
47700 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
47701 var word = this.words[i] | 0;
47702 this.words[i] = (carry << (26 - r)) | (word >>> r);
47703 carry = word & mask;
47704 }
47705
47706 // Push carried bits as a mask
47707 if (maskedWords && carry !== 0) {
47708 maskedWords.words[maskedWords.length++] = carry;
47709 }
47710
47711 if (this.length === 0) {
47712 this.words[0] = 0;
47713 this.length = 1;
47714 }
47715
47716 return this.strip();
47717 };
47718
47719 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
47720 // TODO(indutny): implement me
47721 assert(this.negative === 0);
47722 return this.iushrn(bits, hint, extended);
47723 };
47724
47725 // Shift-left
47726 BN.prototype.shln = function shln (bits) {
47727 return this.clone().ishln(bits);
47728 };
47729
47730 BN.prototype.ushln = function ushln (bits) {
47731 return this.clone().iushln(bits);
47732 };
47733
47734 // Shift-right
47735 BN.prototype.shrn = function shrn (bits) {
47736 return this.clone().ishrn(bits);
47737 };
47738
47739 BN.prototype.ushrn = function ushrn (bits) {
47740 return this.clone().iushrn(bits);
47741 };
47742
47743 // Test if n bit is set
47744 BN.prototype.testn = function testn (bit) {
47745 assert(typeof bit === 'number' && bit >= 0);
47746 var r = bit % 26;
47747 var s = (bit - r) / 26;
47748 var q = 1 << r;
47749
47750 // Fast case: bit is much higher than all existing words
47751 if (this.length <= s) return false;
47752
47753 // Check bit and return
47754 var w = this.words[s];
47755
47756 return !!(w & q);
47757 };
47758
47759 // Return only lowers bits of number (in-place)
47760 BN.prototype.imaskn = function imaskn (bits) {
47761 assert(typeof bits === 'number' && bits >= 0);
47762 var r = bits % 26;
47763 var s = (bits - r) / 26;
47764
47765 assert(this.negative === 0, 'imaskn works only with positive numbers');
47766
47767 if (this.length <= s) {
47768 return this;
47769 }
47770
47771 if (r !== 0) {
47772 s++;
47773 }
47774 this.length = Math.min(s, this.length);
47775
47776 if (r !== 0) {
47777 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
47778 this.words[this.length - 1] &= mask;
47779 }
47780
47781 return this.strip();
47782 };
47783
47784 // Return only lowers bits of number
47785 BN.prototype.maskn = function maskn (bits) {
47786 return this.clone().imaskn(bits);
47787 };
47788
47789 // Add plain number `num` to `this`
47790 BN.prototype.iaddn = function iaddn (num) {
47791 assert(typeof num === 'number');
47792 assert(num < 0x4000000);
47793 if (num < 0) return this.isubn(-num);
47794
47795 // Possible sign change
47796 if (this.negative !== 0) {
47797 if (this.length === 1 && (this.words[0] | 0) < num) {
47798 this.words[0] = num - (this.words[0] | 0);
47799 this.negative = 0;
47800 return this;
47801 }
47802
47803 this.negative = 0;
47804 this.isubn(num);
47805 this.negative = 1;
47806 return this;
47807 }
47808
47809 // Add without checks
47810 return this._iaddn(num);
47811 };
47812
47813 BN.prototype._iaddn = function _iaddn (num) {
47814 this.words[0] += num;
47815
47816 // Carry
47817 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
47818 this.words[i] -= 0x4000000;
47819 if (i === this.length - 1) {
47820 this.words[i + 1] = 1;
47821 } else {
47822 this.words[i + 1]++;
47823 }
47824 }
47825 this.length = Math.max(this.length, i + 1);
47826
47827 return this;
47828 };
47829
47830 // Subtract plain number `num` from `this`
47831 BN.prototype.isubn = function isubn (num) {
47832 assert(typeof num === 'number');
47833 assert(num < 0x4000000);
47834 if (num < 0) return this.iaddn(-num);
47835
47836 if (this.negative !== 0) {
47837 this.negative = 0;
47838 this.iaddn(num);
47839 this.negative = 1;
47840 return this;
47841 }
47842
47843 this.words[0] -= num;
47844
47845 if (this.length === 1 && this.words[0] < 0) {
47846 this.words[0] = -this.words[0];
47847 this.negative = 1;
47848 } else {
47849 // Carry
47850 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
47851 this.words[i] += 0x4000000;
47852 this.words[i + 1] -= 1;
47853 }
47854 }
47855
47856 return this.strip();
47857 };
47858
47859 BN.prototype.addn = function addn (num) {
47860 return this.clone().iaddn(num);
47861 };
47862
47863 BN.prototype.subn = function subn (num) {
47864 return this.clone().isubn(num);
47865 };
47866
47867 BN.prototype.iabs = function iabs () {
47868 this.negative = 0;
47869
47870 return this;
47871 };
47872
47873 BN.prototype.abs = function abs () {
47874 return this.clone().iabs();
47875 };
47876
47877 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
47878 var len = num.length + shift;
47879 var i;
47880
47881 this._expand(len);
47882
47883 var w;
47884 var carry = 0;
47885 for (i = 0; i < num.length; i++) {
47886 w = (this.words[i + shift] | 0) + carry;
47887 var right = (num.words[i] | 0) * mul;
47888 w -= right & 0x3ffffff;
47889 carry = (w >> 26) - ((right / 0x4000000) | 0);
47890 this.words[i + shift] = w & 0x3ffffff;
47891 }
47892 for (; i < this.length - shift; i++) {
47893 w = (this.words[i + shift] | 0) + carry;
47894 carry = w >> 26;
47895 this.words[i + shift] = w & 0x3ffffff;
47896 }
47897
47898 if (carry === 0) return this.strip();
47899
47900 // Subtraction overflow
47901 assert(carry === -1);
47902 carry = 0;
47903 for (i = 0; i < this.length; i++) {
47904 w = -(this.words[i] | 0) + carry;
47905 carry = w >> 26;
47906 this.words[i] = w & 0x3ffffff;
47907 }
47908 this.negative = 1;
47909
47910 return this.strip();
47911 };
47912
47913 BN.prototype._wordDiv = function _wordDiv (num, mode) {
47914 var shift = this.length - num.length;
47915
47916 var a = this.clone();
47917 var b = num;
47918
47919 // Normalize
47920 var bhi = b.words[b.length - 1] | 0;
47921 var bhiBits = this._countBits(bhi);
47922 shift = 26 - bhiBits;
47923 if (shift !== 0) {
47924 b = b.ushln(shift);
47925 a.iushln(shift);
47926 bhi = b.words[b.length - 1] | 0;
47927 }
47928
47929 // Initialize quotient
47930 var m = a.length - b.length;
47931 var q;
47932
47933 if (mode !== 'mod') {
47934 q = new BN(null);
47935 q.length = m + 1;
47936 q.words = new Array(q.length);
47937 for (var i = 0; i < q.length; i++) {
47938 q.words[i] = 0;
47939 }
47940 }
47941
47942 var diff = a.clone()._ishlnsubmul(b, 1, m);
47943 if (diff.negative === 0) {
47944 a = diff;
47945 if (q) {
47946 q.words[m] = 1;
47947 }
47948 }
47949
47950 for (var j = m - 1; j >= 0; j--) {
47951 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
47952 (a.words[b.length + j - 1] | 0);
47953
47954 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
47955 // (0x7ffffff)
47956 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
47957
47958 a._ishlnsubmul(b, qj, j);
47959 while (a.negative !== 0) {
47960 qj--;
47961 a.negative = 0;
47962 a._ishlnsubmul(b, 1, j);
47963 if (!a.isZero()) {
47964 a.negative ^= 1;
47965 }
47966 }
47967 if (q) {
47968 q.words[j] = qj;
47969 }
47970 }
47971 if (q) {
47972 q.strip();
47973 }
47974 a.strip();
47975
47976 // Denormalize
47977 if (mode !== 'div' && shift !== 0) {
47978 a.iushrn(shift);
47979 }
47980
47981 return {
47982 div: q || null,
47983 mod: a
47984 };
47985 };
47986
47987 // NOTE: 1) `mode` can be set to `mod` to request mod only,
47988 // to `div` to request div only, or be absent to
47989 // request both div & mod
47990 // 2) `positive` is true if unsigned mod is requested
47991 BN.prototype.divmod = function divmod (num, mode, positive) {
47992 assert(!num.isZero());
47993
47994 if (this.isZero()) {
47995 return {
47996 div: new BN(0),
47997 mod: new BN(0)
47998 };
47999 }
48000
48001 var div, mod, res;
48002 if (this.negative !== 0 && num.negative === 0) {
48003 res = this.neg().divmod(num, mode);
48004
48005 if (mode !== 'mod') {
48006 div = res.div.neg();
48007 }
48008
48009 if (mode !== 'div') {
48010 mod = res.mod.neg();
48011 if (positive && mod.negative !== 0) {
48012 mod.iadd(num);
48013 }
48014 }
48015
48016 return {
48017 div: div,
48018 mod: mod
48019 };
48020 }
48021
48022 if (this.negative === 0 && num.negative !== 0) {
48023 res = this.divmod(num.neg(), mode);
48024
48025 if (mode !== 'mod') {
48026 div = res.div.neg();
48027 }
48028
48029 return {
48030 div: div,
48031 mod: res.mod
48032 };
48033 }
48034
48035 if ((this.negative & num.negative) !== 0) {
48036 res = this.neg().divmod(num.neg(), mode);
48037
48038 if (mode !== 'div') {
48039 mod = res.mod.neg();
48040 if (positive && mod.negative !== 0) {
48041 mod.isub(num);
48042 }
48043 }
48044
48045 return {
48046 div: res.div,
48047 mod: mod
48048 };
48049 }
48050
48051 // Both numbers are positive at this point
48052
48053 // Strip both numbers to approximate shift value
48054 if (num.length > this.length || this.cmp(num) < 0) {
48055 return {
48056 div: new BN(0),
48057 mod: this
48058 };
48059 }
48060
48061 // Very short reduction
48062 if (num.length === 1) {
48063 if (mode === 'div') {
48064 return {
48065 div: this.divn(num.words[0]),
48066 mod: null
48067 };
48068 }
48069
48070 if (mode === 'mod') {
48071 return {
48072 div: null,
48073 mod: new BN(this.modn(num.words[0]))
48074 };
48075 }
48076
48077 return {
48078 div: this.divn(num.words[0]),
48079 mod: new BN(this.modn(num.words[0]))
48080 };
48081 }
48082
48083 return this._wordDiv(num, mode);
48084 };
48085
48086 // Find `this` / `num`
48087 BN.prototype.div = function div (num) {
48088 return this.divmod(num, 'div', false).div;
48089 };
48090
48091 // Find `this` % `num`
48092 BN.prototype.mod = function mod (num) {
48093 return this.divmod(num, 'mod', false).mod;
48094 };
48095
48096 BN.prototype.umod = function umod (num) {
48097 return this.divmod(num, 'mod', true).mod;
48098 };
48099
48100 // Find Round(`this` / `num`)
48101 BN.prototype.divRound = function divRound (num) {
48102 var dm = this.divmod(num);
48103
48104 // Fast case - exact division
48105 if (dm.mod.isZero()) return dm.div;
48106
48107 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
48108
48109 var half = num.ushrn(1);
48110 var r2 = num.andln(1);
48111 var cmp = mod.cmp(half);
48112
48113 // Round down
48114 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
48115
48116 // Round up
48117 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
48118 };
48119
48120 BN.prototype.modn = function modn (num) {
48121 assert(num <= 0x3ffffff);
48122 var p = (1 << 26) % num;
48123
48124 var acc = 0;
48125 for (var i = this.length - 1; i >= 0; i--) {
48126 acc = (p * acc + (this.words[i] | 0)) % num;
48127 }
48128
48129 return acc;
48130 };
48131
48132 // In-place division by number
48133 BN.prototype.idivn = function idivn (num) {
48134 assert(num <= 0x3ffffff);
48135
48136 var carry = 0;
48137 for (var i = this.length - 1; i >= 0; i--) {
48138 var w = (this.words[i] | 0) + carry * 0x4000000;
48139 this.words[i] = (w / num) | 0;
48140 carry = w % num;
48141 }
48142
48143 return this.strip();
48144 };
48145
48146 BN.prototype.divn = function divn (num) {
48147 return this.clone().idivn(num);
48148 };
48149
48150 BN.prototype.egcd = function egcd (p) {
48151 assert(p.negative === 0);
48152 assert(!p.isZero());
48153
48154 var x = this;
48155 var y = p.clone();
48156
48157 if (x.negative !== 0) {
48158 x = x.umod(p);
48159 } else {
48160 x = x.clone();
48161 }
48162
48163 // A * x + B * y = x
48164 var A = new BN(1);
48165 var B = new BN(0);
48166
48167 // C * x + D * y = y
48168 var C = new BN(0);
48169 var D = new BN(1);
48170
48171 var g = 0;
48172
48173 while (x.isEven() && y.isEven()) {
48174 x.iushrn(1);
48175 y.iushrn(1);
48176 ++g;
48177 }
48178
48179 var yp = y.clone();
48180 var xp = x.clone();
48181
48182 while (!x.isZero()) {
48183 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48184 if (i > 0) {
48185 x.iushrn(i);
48186 while (i-- > 0) {
48187 if (A.isOdd() || B.isOdd()) {
48188 A.iadd(yp);
48189 B.isub(xp);
48190 }
48191
48192 A.iushrn(1);
48193 B.iushrn(1);
48194 }
48195 }
48196
48197 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48198 if (j > 0) {
48199 y.iushrn(j);
48200 while (j-- > 0) {
48201 if (C.isOdd() || D.isOdd()) {
48202 C.iadd(yp);
48203 D.isub(xp);
48204 }
48205
48206 C.iushrn(1);
48207 D.iushrn(1);
48208 }
48209 }
48210
48211 if (x.cmp(y) >= 0) {
48212 x.isub(y);
48213 A.isub(C);
48214 B.isub(D);
48215 } else {
48216 y.isub(x);
48217 C.isub(A);
48218 D.isub(B);
48219 }
48220 }
48221
48222 return {
48223 a: C,
48224 b: D,
48225 gcd: y.iushln(g)
48226 };
48227 };
48228
48229 // This is reduced incarnation of the binary EEA
48230 // above, designated to invert members of the
48231 // _prime_ fields F(p) at a maximal speed
48232 BN.prototype._invmp = function _invmp (p) {
48233 assert(p.negative === 0);
48234 assert(!p.isZero());
48235
48236 var a = this;
48237 var b = p.clone();
48238
48239 if (a.negative !== 0) {
48240 a = a.umod(p);
48241 } else {
48242 a = a.clone();
48243 }
48244
48245 var x1 = new BN(1);
48246 var x2 = new BN(0);
48247
48248 var delta = b.clone();
48249
48250 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
48251 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
48252 if (i > 0) {
48253 a.iushrn(i);
48254 while (i-- > 0) {
48255 if (x1.isOdd()) {
48256 x1.iadd(delta);
48257 }
48258
48259 x1.iushrn(1);
48260 }
48261 }
48262
48263 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
48264 if (j > 0) {
48265 b.iushrn(j);
48266 while (j-- > 0) {
48267 if (x2.isOdd()) {
48268 x2.iadd(delta);
48269 }
48270
48271 x2.iushrn(1);
48272 }
48273 }
48274
48275 if (a.cmp(b) >= 0) {
48276 a.isub(b);
48277 x1.isub(x2);
48278 } else {
48279 b.isub(a);
48280 x2.isub(x1);
48281 }
48282 }
48283
48284 var res;
48285 if (a.cmpn(1) === 0) {
48286 res = x1;
48287 } else {
48288 res = x2;
48289 }
48290
48291 if (res.cmpn(0) < 0) {
48292 res.iadd(p);
48293 }
48294
48295 return res;
48296 };
48297
48298 BN.prototype.gcd = function gcd (num) {
48299 if (this.isZero()) return num.abs();
48300 if (num.isZero()) return this.abs();
48301
48302 var a = this.clone();
48303 var b = num.clone();
48304 a.negative = 0;
48305 b.negative = 0;
48306
48307 // Remove common factor of two
48308 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
48309 a.iushrn(1);
48310 b.iushrn(1);
48311 }
48312
48313 do {
48314 while (a.isEven()) {
48315 a.iushrn(1);
48316 }
48317 while (b.isEven()) {
48318 b.iushrn(1);
48319 }
48320
48321 var r = a.cmp(b);
48322 if (r < 0) {
48323 // Swap `a` and `b` to make `a` always bigger than `b`
48324 var t = a;
48325 a = b;
48326 b = t;
48327 } else if (r === 0 || b.cmpn(1) === 0) {
48328 break;
48329 }
48330
48331 a.isub(b);
48332 } while (true);
48333
48334 return b.iushln(shift);
48335 };
48336
48337 // Invert number in the field F(num)
48338 BN.prototype.invm = function invm (num) {
48339 return this.egcd(num).a.umod(num);
48340 };
48341
48342 BN.prototype.isEven = function isEven () {
48343 return (this.words[0] & 1) === 0;
48344 };
48345
48346 BN.prototype.isOdd = function isOdd () {
48347 return (this.words[0] & 1) === 1;
48348 };
48349
48350 // And first word and num
48351 BN.prototype.andln = function andln (num) {
48352 return this.words[0] & num;
48353 };
48354
48355 // Increment at the bit position in-line
48356 BN.prototype.bincn = function bincn (bit) {
48357 assert(typeof bit === 'number');
48358 var r = bit % 26;
48359 var s = (bit - r) / 26;
48360 var q = 1 << r;
48361
48362 // Fast case: bit is much higher than all existing words
48363 if (this.length <= s) {
48364 this._expand(s + 1);
48365 this.words[s] |= q;
48366 return this;
48367 }
48368
48369 // Add bit and propagate, if needed
48370 var carry = q;
48371 for (var i = s; carry !== 0 && i < this.length; i++) {
48372 var w = this.words[i] | 0;
48373 w += carry;
48374 carry = w >>> 26;
48375 w &= 0x3ffffff;
48376 this.words[i] = w;
48377 }
48378 if (carry !== 0) {
48379 this.words[i] = carry;
48380 this.length++;
48381 }
48382 return this;
48383 };
48384
48385 BN.prototype.isZero = function isZero () {
48386 return this.length === 1 && this.words[0] === 0;
48387 };
48388
48389 BN.prototype.cmpn = function cmpn (num) {
48390 var negative = num < 0;
48391
48392 if (this.negative !== 0 && !negative) return -1;
48393 if (this.negative === 0 && negative) return 1;
48394
48395 this.strip();
48396
48397 var res;
48398 if (this.length > 1) {
48399 res = 1;
48400 } else {
48401 if (negative) {
48402 num = -num;
48403 }
48404
48405 assert(num <= 0x3ffffff, 'Number is too big');
48406
48407 var w = this.words[0] | 0;
48408 res = w === num ? 0 : w < num ? -1 : 1;
48409 }
48410 if (this.negative !== 0) return -res | 0;
48411 return res;
48412 };
48413
48414 // Compare two numbers and return:
48415 // 1 - if `this` > `num`
48416 // 0 - if `this` == `num`
48417 // -1 - if `this` < `num`
48418 BN.prototype.cmp = function cmp (num) {
48419 if (this.negative !== 0 && num.negative === 0) return -1;
48420 if (this.negative === 0 && num.negative !== 0) return 1;
48421
48422 var res = this.ucmp(num);
48423 if (this.negative !== 0) return -res | 0;
48424 return res;
48425 };
48426
48427 // Unsigned comparison
48428 BN.prototype.ucmp = function ucmp (num) {
48429 // At this point both numbers have the same sign
48430 if (this.length > num.length) return 1;
48431 if (this.length < num.length) return -1;
48432
48433 var res = 0;
48434 for (var i = this.length - 1; i >= 0; i--) {
48435 var a = this.words[i] | 0;
48436 var b = num.words[i] | 0;
48437
48438 if (a === b) continue;
48439 if (a < b) {
48440 res = -1;
48441 } else if (a > b) {
48442 res = 1;
48443 }
48444 break;
48445 }
48446 return res;
48447 };
48448
48449 BN.prototype.gtn = function gtn (num) {
48450 return this.cmpn(num) === 1;
48451 };
48452
48453 BN.prototype.gt = function gt (num) {
48454 return this.cmp(num) === 1;
48455 };
48456
48457 BN.prototype.gten = function gten (num) {
48458 return this.cmpn(num) >= 0;
48459 };
48460
48461 BN.prototype.gte = function gte (num) {
48462 return this.cmp(num) >= 0;
48463 };
48464
48465 BN.prototype.ltn = function ltn (num) {
48466 return this.cmpn(num) === -1;
48467 };
48468
48469 BN.prototype.lt = function lt (num) {
48470 return this.cmp(num) === -1;
48471 };
48472
48473 BN.prototype.lten = function lten (num) {
48474 return this.cmpn(num) <= 0;
48475 };
48476
48477 BN.prototype.lte = function lte (num) {
48478 return this.cmp(num) <= 0;
48479 };
48480
48481 BN.prototype.eqn = function eqn (num) {
48482 return this.cmpn(num) === 0;
48483 };
48484
48485 BN.prototype.eq = function eq (num) {
48486 return this.cmp(num) === 0;
48487 };
48488
48489 //
48490 // A reduce context, could be using montgomery or something better, depending
48491 // on the `m` itself.
48492 //
48493 BN.red = function red (num) {
48494 return new Red(num);
48495 };
48496
48497 BN.prototype.toRed = function toRed (ctx) {
48498 assert(!this.red, 'Already a number in reduction context');
48499 assert(this.negative === 0, 'red works only with positives');
48500 return ctx.convertTo(this)._forceRed(ctx);
48501 };
48502
48503 BN.prototype.fromRed = function fromRed () {
48504 assert(this.red, 'fromRed works only with numbers in reduction context');
48505 return this.red.convertFrom(this);
48506 };
48507
48508 BN.prototype._forceRed = function _forceRed (ctx) {
48509 this.red = ctx;
48510 return this;
48511 };
48512
48513 BN.prototype.forceRed = function forceRed (ctx) {
48514 assert(!this.red, 'Already a number in reduction context');
48515 return this._forceRed(ctx);
48516 };
48517
48518 BN.prototype.redAdd = function redAdd (num) {
48519 assert(this.red, 'redAdd works only with red numbers');
48520 return this.red.add(this, num);
48521 };
48522
48523 BN.prototype.redIAdd = function redIAdd (num) {
48524 assert(this.red, 'redIAdd works only with red numbers');
48525 return this.red.iadd(this, num);
48526 };
48527
48528 BN.prototype.redSub = function redSub (num) {
48529 assert(this.red, 'redSub works only with red numbers');
48530 return this.red.sub(this, num);
48531 };
48532
48533 BN.prototype.redISub = function redISub (num) {
48534 assert(this.red, 'redISub works only with red numbers');
48535 return this.red.isub(this, num);
48536 };
48537
48538 BN.prototype.redShl = function redShl (num) {
48539 assert(this.red, 'redShl works only with red numbers');
48540 return this.red.shl(this, num);
48541 };
48542
48543 BN.prototype.redMul = function redMul (num) {
48544 assert(this.red, 'redMul works only with red numbers');
48545 this.red._verify2(this, num);
48546 return this.red.mul(this, num);
48547 };
48548
48549 BN.prototype.redIMul = function redIMul (num) {
48550 assert(this.red, 'redMul works only with red numbers');
48551 this.red._verify2(this, num);
48552 return this.red.imul(this, num);
48553 };
48554
48555 BN.prototype.redSqr = function redSqr () {
48556 assert(this.red, 'redSqr works only with red numbers');
48557 this.red._verify1(this);
48558 return this.red.sqr(this);
48559 };
48560
48561 BN.prototype.redISqr = function redISqr () {
48562 assert(this.red, 'redISqr works only with red numbers');
48563 this.red._verify1(this);
48564 return this.red.isqr(this);
48565 };
48566
48567 // Square root over p
48568 BN.prototype.redSqrt = function redSqrt () {
48569 assert(this.red, 'redSqrt works only with red numbers');
48570 this.red._verify1(this);
48571 return this.red.sqrt(this);
48572 };
48573
48574 BN.prototype.redInvm = function redInvm () {
48575 assert(this.red, 'redInvm works only with red numbers');
48576 this.red._verify1(this);
48577 return this.red.invm(this);
48578 };
48579
48580 // Return negative clone of `this` % `red modulo`
48581 BN.prototype.redNeg = function redNeg () {
48582 assert(this.red, 'redNeg works only with red numbers');
48583 this.red._verify1(this);
48584 return this.red.neg(this);
48585 };
48586
48587 BN.prototype.redPow = function redPow (num) {
48588 assert(this.red && !num.red, 'redPow(normalNum)');
48589 this.red._verify1(this);
48590 return this.red.pow(this, num);
48591 };
48592
48593 // Prime numbers with efficient reduction
48594 var primes = {
48595 k256: null,
48596 p224: null,
48597 p192: null,
48598 p25519: null
48599 };
48600
48601 // Pseudo-Mersenne prime
48602 function MPrime (name, p) {
48603 // P = 2 ^ N - K
48604 this.name = name;
48605 this.p = new BN(p, 16);
48606 this.n = this.p.bitLength();
48607 this.k = new BN(1).iushln(this.n).isub(this.p);
48608
48609 this.tmp = this._tmp();
48610 }
48611
48612 MPrime.prototype._tmp = function _tmp () {
48613 var tmp = new BN(null);
48614 tmp.words = new Array(Math.ceil(this.n / 13));
48615 return tmp;
48616 };
48617
48618 MPrime.prototype.ireduce = function ireduce (num) {
48619 // Assumes that `num` is less than `P^2`
48620 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
48621 var r = num;
48622 var rlen;
48623
48624 do {
48625 this.split(r, this.tmp);
48626 r = this.imulK(r);
48627 r = r.iadd(this.tmp);
48628 rlen = r.bitLength();
48629 } while (rlen > this.n);
48630
48631 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
48632 if (cmp === 0) {
48633 r.words[0] = 0;
48634 r.length = 1;
48635 } else if (cmp > 0) {
48636 r.isub(this.p);
48637 } else {
48638 r.strip();
48639 }
48640
48641 return r;
48642 };
48643
48644 MPrime.prototype.split = function split (input, out) {
48645 input.iushrn(this.n, 0, out);
48646 };
48647
48648 MPrime.prototype.imulK = function imulK (num) {
48649 return num.imul(this.k);
48650 };
48651
48652 function K256 () {
48653 MPrime.call(
48654 this,
48655 'k256',
48656 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
48657 }
48658 inherits(K256, MPrime);
48659
48660 K256.prototype.split = function split (input, output) {
48661 // 256 = 9 * 26 + 22
48662 var mask = 0x3fffff;
48663
48664 var outLen = Math.min(input.length, 9);
48665 for (var i = 0; i < outLen; i++) {
48666 output.words[i] = input.words[i];
48667 }
48668 output.length = outLen;
48669
48670 if (input.length <= 9) {
48671 input.words[0] = 0;
48672 input.length = 1;
48673 return;
48674 }
48675
48676 // Shift by 9 limbs
48677 var prev = input.words[9];
48678 output.words[output.length++] = prev & mask;
48679
48680 for (i = 10; i < input.length; i++) {
48681 var next = input.words[i] | 0;
48682 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
48683 prev = next;
48684 }
48685 prev >>>= 22;
48686 input.words[i - 10] = prev;
48687 if (prev === 0 && input.length > 10) {
48688 input.length -= 10;
48689 } else {
48690 input.length -= 9;
48691 }
48692 };
48693
48694 K256.prototype.imulK = function imulK (num) {
48695 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
48696 num.words[num.length] = 0;
48697 num.words[num.length + 1] = 0;
48698 num.length += 2;
48699
48700 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
48701 var lo = 0;
48702 for (var i = 0; i < num.length; i++) {
48703 var w = num.words[i] | 0;
48704 lo += w * 0x3d1;
48705 num.words[i] = lo & 0x3ffffff;
48706 lo = w * 0x40 + ((lo / 0x4000000) | 0);
48707 }
48708
48709 // Fast length reduction
48710 if (num.words[num.length - 1] === 0) {
48711 num.length--;
48712 if (num.words[num.length - 1] === 0) {
48713 num.length--;
48714 }
48715 }
48716 return num;
48717 };
48718
48719 function P224 () {
48720 MPrime.call(
48721 this,
48722 'p224',
48723 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
48724 }
48725 inherits(P224, MPrime);
48726
48727 function P192 () {
48728 MPrime.call(
48729 this,
48730 'p192',
48731 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
48732 }
48733 inherits(P192, MPrime);
48734
48735 function P25519 () {
48736 // 2 ^ 255 - 19
48737 MPrime.call(
48738 this,
48739 '25519',
48740 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
48741 }
48742 inherits(P25519, MPrime);
48743
48744 P25519.prototype.imulK = function imulK (num) {
48745 // K = 0x13
48746 var carry = 0;
48747 for (var i = 0; i < num.length; i++) {
48748 var hi = (num.words[i] | 0) * 0x13 + carry;
48749 var lo = hi & 0x3ffffff;
48750 hi >>>= 26;
48751
48752 num.words[i] = lo;
48753 carry = hi;
48754 }
48755 if (carry !== 0) {
48756 num.words[num.length++] = carry;
48757 }
48758 return num;
48759 };
48760
48761 // Exported mostly for testing purposes, use plain name instead
48762 BN._prime = function prime (name) {
48763 // Cached version of prime
48764 if (primes[name]) return primes[name];
48765
48766 var prime;
48767 if (name === 'k256') {
48768 prime = new K256();
48769 } else if (name === 'p224') {
48770 prime = new P224();
48771 } else if (name === 'p192') {
48772 prime = new P192();
48773 } else if (name === 'p25519') {
48774 prime = new P25519();
48775 } else {
48776 throw new Error('Unknown prime ' + name);
48777 }
48778 primes[name] = prime;
48779
48780 return prime;
48781 };
48782
48783 //
48784 // Base reduction engine
48785 //
48786 function Red (m) {
48787 if (typeof m === 'string') {
48788 var prime = BN._prime(m);
48789 this.m = prime.p;
48790 this.prime = prime;
48791 } else {
48792 assert(m.gtn(1), 'modulus must be greater than 1');
48793 this.m = m;
48794 this.prime = null;
48795 }
48796 }
48797
48798 Red.prototype._verify1 = function _verify1 (a) {
48799 assert(a.negative === 0, 'red works only with positives');
48800 assert(a.red, 'red works only with red numbers');
48801 };
48802
48803 Red.prototype._verify2 = function _verify2 (a, b) {
48804 assert((a.negative | b.negative) === 0, 'red works only with positives');
48805 assert(a.red && a.red === b.red,
48806 'red works only with red numbers');
48807 };
48808
48809 Red.prototype.imod = function imod (a) {
48810 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
48811 return a.umod(this.m)._forceRed(this);
48812 };
48813
48814 Red.prototype.neg = function neg (a) {
48815 if (a.isZero()) {
48816 return a.clone();
48817 }
48818
48819 return this.m.sub(a)._forceRed(this);
48820 };
48821
48822 Red.prototype.add = function add (a, b) {
48823 this._verify2(a, b);
48824
48825 var res = a.add(b);
48826 if (res.cmp(this.m) >= 0) {
48827 res.isub(this.m);
48828 }
48829 return res._forceRed(this);
48830 };
48831
48832 Red.prototype.iadd = function iadd (a, b) {
48833 this._verify2(a, b);
48834
48835 var res = a.iadd(b);
48836 if (res.cmp(this.m) >= 0) {
48837 res.isub(this.m);
48838 }
48839 return res;
48840 };
48841
48842 Red.prototype.sub = function sub (a, b) {
48843 this._verify2(a, b);
48844
48845 var res = a.sub(b);
48846 if (res.cmpn(0) < 0) {
48847 res.iadd(this.m);
48848 }
48849 return res._forceRed(this);
48850 };
48851
48852 Red.prototype.isub = function isub (a, b) {
48853 this._verify2(a, b);
48854
48855 var res = a.isub(b);
48856 if (res.cmpn(0) < 0) {
48857 res.iadd(this.m);
48858 }
48859 return res;
48860 };
48861
48862 Red.prototype.shl = function shl (a, num) {
48863 this._verify1(a);
48864 return this.imod(a.ushln(num));
48865 };
48866
48867 Red.prototype.imul = function imul (a, b) {
48868 this._verify2(a, b);
48869 return this.imod(a.imul(b));
48870 };
48871
48872 Red.prototype.mul = function mul (a, b) {
48873 this._verify2(a, b);
48874 return this.imod(a.mul(b));
48875 };
48876
48877 Red.prototype.isqr = function isqr (a) {
48878 return this.imul(a, a.clone());
48879 };
48880
48881 Red.prototype.sqr = function sqr (a) {
48882 return this.mul(a, a);
48883 };
48884
48885 Red.prototype.sqrt = function sqrt (a) {
48886 if (a.isZero()) return a.clone();
48887
48888 var mod3 = this.m.andln(3);
48889 assert(mod3 % 2 === 1);
48890
48891 // Fast case
48892 if (mod3 === 3) {
48893 var pow = this.m.add(new BN(1)).iushrn(2);
48894 return this.pow(a, pow);
48895 }
48896
48897 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
48898 //
48899 // Find Q and S, that Q * 2 ^ S = (P - 1)
48900 var q = this.m.subn(1);
48901 var s = 0;
48902 while (!q.isZero() && q.andln(1) === 0) {
48903 s++;
48904 q.iushrn(1);
48905 }
48906 assert(!q.isZero());
48907
48908 var one = new BN(1).toRed(this);
48909 var nOne = one.redNeg();
48910
48911 // Find quadratic non-residue
48912 // NOTE: Max is such because of generalized Riemann hypothesis.
48913 var lpow = this.m.subn(1).iushrn(1);
48914 var z = this.m.bitLength();
48915 z = new BN(2 * z * z).toRed(this);
48916
48917 while (this.pow(z, lpow).cmp(nOne) !== 0) {
48918 z.redIAdd(nOne);
48919 }
48920
48921 var c = this.pow(z, q);
48922 var r = this.pow(a, q.addn(1).iushrn(1));
48923 var t = this.pow(a, q);
48924 var m = s;
48925 while (t.cmp(one) !== 0) {
48926 var tmp = t;
48927 for (var i = 0; tmp.cmp(one) !== 0; i++) {
48928 tmp = tmp.redSqr();
48929 }
48930 assert(i < m);
48931 var b = this.pow(c, new BN(1).iushln(m - i - 1));
48932
48933 r = r.redMul(b);
48934 c = b.redSqr();
48935 t = t.redMul(c);
48936 m = i;
48937 }
48938
48939 return r;
48940 };
48941
48942 Red.prototype.invm = function invm (a) {
48943 var inv = a._invmp(this.m);
48944 if (inv.negative !== 0) {
48945 inv.negative = 0;
48946 return this.imod(inv).redNeg();
48947 } else {
48948 return this.imod(inv);
48949 }
48950 };
48951
48952 Red.prototype.pow = function pow (a, num) {
48953 if (num.isZero()) return new BN(1);
48954 if (num.cmpn(1) === 0) return a.clone();
48955
48956 var windowSize = 4;
48957 var wnd = new Array(1 << windowSize);
48958 wnd[0] = new BN(1).toRed(this);
48959 wnd[1] = a;
48960 for (var i = 2; i < wnd.length; i++) {
48961 wnd[i] = this.mul(wnd[i - 1], a);
48962 }
48963
48964 var res = wnd[0];
48965 var current = 0;
48966 var currentLen = 0;
48967 var start = num.bitLength() % 26;
48968 if (start === 0) {
48969 start = 26;
48970 }
48971
48972 for (i = num.length - 1; i >= 0; i--) {
48973 var word = num.words[i];
48974 for (var j = start - 1; j >= 0; j--) {
48975 var bit = (word >> j) & 1;
48976 if (res !== wnd[0]) {
48977 res = this.sqr(res);
48978 }
48979
48980 if (bit === 0 && current === 0) {
48981 currentLen = 0;
48982 continue;
48983 }
48984
48985 current <<= 1;
48986 current |= bit;
48987 currentLen++;
48988 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
48989
48990 res = this.mul(res, wnd[current]);
48991 currentLen = 0;
48992 current = 0;
48993 }
48994 start = 26;
48995 }
48996
48997 return res;
48998 };
48999
49000 Red.prototype.convertTo = function convertTo (num) {
49001 var r = num.umod(this.m);
49002
49003 return r === num ? r.clone() : r;
49004 };
49005
49006 Red.prototype.convertFrom = function convertFrom (num) {
49007 var res = num.clone();
49008 res.red = null;
49009 return res;
49010 };
49011
49012 //
49013 // Montgomery method engine
49014 //
49015
49016 BN.mont = function mont (num) {
49017 return new Mont(num);
49018 };
49019
49020 function Mont (m) {
49021 Red.call(this, m);
49022
49023 this.shift = this.m.bitLength();
49024 if (this.shift % 26 !== 0) {
49025 this.shift += 26 - (this.shift % 26);
49026 }
49027
49028 this.r = new BN(1).iushln(this.shift);
49029 this.r2 = this.imod(this.r.sqr());
49030 this.rinv = this.r._invmp(this.m);
49031
49032 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
49033 this.minv = this.minv.umod(this.r);
49034 this.minv = this.r.sub(this.minv);
49035 }
49036 inherits(Mont, Red);
49037
49038 Mont.prototype.convertTo = function convertTo (num) {
49039 return this.imod(num.ushln(this.shift));
49040 };
49041
49042 Mont.prototype.convertFrom = function convertFrom (num) {
49043 var r = this.imod(num.mul(this.rinv));
49044 r.red = null;
49045 return r;
49046 };
49047
49048 Mont.prototype.imul = function imul (a, b) {
49049 if (a.isZero() || b.isZero()) {
49050 a.words[0] = 0;
49051 a.length = 1;
49052 return a;
49053 }
49054
49055 var t = a.imul(b);
49056 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
49057 var u = t.isub(c).iushrn(this.shift);
49058 var res = u;
49059
49060 if (u.cmp(this.m) >= 0) {
49061 res = u.isub(this.m);
49062 } else if (u.cmpn(0) < 0) {
49063 res = u.iadd(this.m);
49064 }
49065
49066 return res._forceRed(this);
49067 };
49068
49069 Mont.prototype.mul = function mul (a, b) {
49070 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
49071
49072 var t = a.mul(b);
49073 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
49074 var u = t.isub(c).iushrn(this.shift);
49075 var res = u;
49076 if (u.cmp(this.m) >= 0) {
49077 res = u.isub(this.m);
49078 } else if (u.cmpn(0) < 0) {
49079 res = u.iadd(this.m);
49080 }
49081
49082 return res._forceRed(this);
49083 };
49084
49085 Mont.prototype.invm = function invm (a) {
49086 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
49087 var res = this.imod(a._invmp(this.m).mul(this.r2));
49088 return res._forceRed(this);
49089 };
49090 })(typeof module === 'undefined' || module, this);
49091
49092 },{}],18:[function(require,module,exports){
49093 var r;
49094
49095 module.exports = function rand(len) {
49096 if (!r)
49097 r = new Rand(null);
49098
49099 return r.generate(len);
49100 };
49101
49102 function Rand(rand) {
49103 this.rand = rand;
49104 }
49105 module.exports.Rand = Rand;
49106
49107 Rand.prototype.generate = function generate(len) {
49108 return this._rand(len);
49109 };
49110
49111 // Emulate crypto API using randy
49112 Rand.prototype._rand = function _rand(n) {
49113 if (this.rand.getBytes)
49114 return this.rand.getBytes(n);
49115
49116 var res = new Uint8Array(n);
49117 for (var i = 0; i < res.length; i++)
49118 res[i] = this.rand.getByte();
49119 return res;
49120 };
49121
49122 if (typeof self === 'object') {
49123 if (self.crypto && self.crypto.getRandomValues) {
49124 // Modern browsers
49125 Rand.prototype._rand = function _rand(n) {
49126 var arr = new Uint8Array(n);
49127 self.crypto.getRandomValues(arr);
49128 return arr;
49129 };
49130 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
49131 // IE
49132 Rand.prototype._rand = function _rand(n) {
49133 var arr = new Uint8Array(n);
49134 self.msCrypto.getRandomValues(arr);
49135 return arr;
49136 };
49137
49138 // Safari's WebWorkers do not have `crypto`
49139 } else if (typeof window === 'object') {
49140 // Old junk
49141 Rand.prototype._rand = function() {
49142 throw new Error('Not implemented yet');
49143 };
49144 }
49145 } else {
49146 // Node.js or Web worker with no crypto support
49147 try {
49148 var crypto = require('crypto');
49149 if (typeof crypto.randomBytes !== 'function')
49150 throw new Error('Not supported');
49151
49152 Rand.prototype._rand = function _rand(n) {
49153 return crypto.randomBytes(n);
49154 };
49155 } catch (e) {
49156 }
49157 }
49158
49159 },{"crypto":19}],19:[function(require,module,exports){
49160
49161 },{}],20:[function(require,module,exports){
49162 (function (Buffer){
49163 // based on the aes implimentation in triple sec
49164 // https://github.com/keybase/triplesec
49165
49166 // which is in turn based on the one from crypto-js
49167 // https://code.google.com/p/crypto-js/
49168
49169 var uint_max = Math.pow(2, 32)
49170 function fixup_uint32 (x) {
49171 var ret, x_pos
49172 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49173 return ret
49174 }
49175 function scrub_vec (v) {
49176 for (var i = 0; i < v.length; v++) {
49177 v[i] = 0
49178 }
49179 return false
49180 }
49181
49182 function Global () {
49183 this.SBOX = []
49184 this.INV_SBOX = []
49185 this.SUB_MIX = [[], [], [], []]
49186 this.INV_SUB_MIX = [[], [], [], []]
49187 this.init()
49188 this.RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
49189 }
49190
49191 Global.prototype.init = function () {
49192 var d, i, sx, t, x, x2, x4, x8, xi, _i
49193 d = (function () {
49194 var _i, _results
49195 _results = []
49196 for (i = _i = 0; _i < 256; i = ++_i) {
49197 if (i < 128) {
49198 _results.push(i << 1)
49199 } else {
49200 _results.push((i << 1) ^ 0x11b)
49201 }
49202 }
49203 return _results
49204 })()
49205 x = 0
49206 xi = 0
49207 for (i = _i = 0; _i < 256; i = ++_i) {
49208 sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
49209 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
49210 this.SBOX[x] = sx
49211 this.INV_SBOX[sx] = x
49212 x2 = d[x]
49213 x4 = d[x2]
49214 x8 = d[x4]
49215 t = (d[sx] * 0x101) ^ (sx * 0x1010100)
49216 this.SUB_MIX[0][x] = (t << 24) | (t >>> 8)
49217 this.SUB_MIX[1][x] = (t << 16) | (t >>> 16)
49218 this.SUB_MIX[2][x] = (t << 8) | (t >>> 24)
49219 this.SUB_MIX[3][x] = t
49220 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
49221 this.INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
49222 this.INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
49223 this.INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
49224 this.INV_SUB_MIX[3][sx] = t
49225 if (x === 0) {
49226 x = xi = 1
49227 } else {
49228 x = x2 ^ d[d[d[x8 ^ x2]]]
49229 xi ^= d[d[xi]]
49230 }
49231 }
49232 return true
49233 }
49234
49235 var G = new Global()
49236
49237 AES.blockSize = 4 * 4
49238
49239 AES.prototype.blockSize = AES.blockSize
49240
49241 AES.keySize = 256 / 8
49242
49243 AES.prototype.keySize = AES.keySize
49244
49245 function bufferToArray (buf) {
49246 var len = buf.length / 4
49247 var out = new Array(len)
49248 var i = -1
49249 while (++i < len) {
49250 out[i] = buf.readUInt32BE(i * 4)
49251 }
49252 return out
49253 }
49254 function AES (key) {
49255 this._key = bufferToArray(key)
49256 this._doReset()
49257 }
49258
49259 AES.prototype._doReset = function () {
49260 var invKsRow, keySize, keyWords, ksRow, ksRows, t
49261 keyWords = this._key
49262 keySize = keyWords.length
49263 this._nRounds = keySize + 6
49264 ksRows = (this._nRounds + 1) * 4
49265 this._keySchedule = []
49266 for (ksRow = 0; ksRow < ksRows; ksRow++) {
49267 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)
49268 }
49269 this._invKeySchedule = []
49270 for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {
49271 ksRow = ksRows - invKsRow
49272 t = this._keySchedule[ksRow - (invKsRow % 4 ? 0 : 4)]
49273 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]]
49274 }
49275 return true
49276 }
49277
49278 AES.prototype.encryptBlock = function (M) {
49279 M = bufferToArray(new Buffer(M))
49280 var out = this._doCryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX)
49281 var buf = new Buffer(16)
49282 buf.writeUInt32BE(out[0], 0)
49283 buf.writeUInt32BE(out[1], 4)
49284 buf.writeUInt32BE(out[2], 8)
49285 buf.writeUInt32BE(out[3], 12)
49286 return buf
49287 }
49288
49289 AES.prototype.decryptBlock = function (M) {
49290 M = bufferToArray(new Buffer(M))
49291 var temp = [M[3], M[1]]
49292 M[1] = temp[0]
49293 M[3] = temp[1]
49294 var out = this._doCryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX)
49295 var buf = new Buffer(16)
49296 buf.writeUInt32BE(out[0], 0)
49297 buf.writeUInt32BE(out[3], 4)
49298 buf.writeUInt32BE(out[2], 8)
49299 buf.writeUInt32BE(out[1], 12)
49300 return buf
49301 }
49302
49303 AES.prototype.scrub = function () {
49304 scrub_vec(this._keySchedule)
49305 scrub_vec(this._invKeySchedule)
49306 scrub_vec(this._key)
49307 }
49308
49309 AES.prototype._doCryptBlock = function (M, keySchedule, SUB_MIX, SBOX) {
49310 var ksRow, s0, s1, s2, s3, t0, t1, t2, t3
49311
49312 s0 = M[0] ^ keySchedule[0]
49313 s1 = M[1] ^ keySchedule[1]
49314 s2 = M[2] ^ keySchedule[2]
49315 s3 = M[3] ^ keySchedule[3]
49316 ksRow = 4
49317 for (var round = 1; round < this._nRounds; round++) {
49318 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++]
49319 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++]
49320 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++]
49321 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++]
49322 s0 = t0
49323 s1 = t1
49324 s2 = t2
49325 s3 = t3
49326 }
49327 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
49328 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
49329 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
49330 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
49331 return [
49332 fixup_uint32(t0),
49333 fixup_uint32(t1),
49334 fixup_uint32(t2),
49335 fixup_uint32(t3)
49336 ]
49337 }
49338
49339 exports.AES = AES
49340
49341 }).call(this,require("buffer").Buffer)
49342 },{"buffer":47}],21:[function(require,module,exports){
49343 (function (Buffer){
49344 var aes = require('./aes')
49345 var Transform = require('cipher-base')
49346 var inherits = require('inherits')
49347 var GHASH = require('./ghash')
49348 var xor = require('buffer-xor')
49349 inherits(StreamCipher, Transform)
49350 module.exports = StreamCipher
49351
49352 function StreamCipher (mode, key, iv, decrypt) {
49353 if (!(this instanceof StreamCipher)) {
49354 return new StreamCipher(mode, key, iv)
49355 }
49356 Transform.call(this)
49357 this._finID = Buffer.concat([iv, new Buffer([0, 0, 0, 1])])
49358 iv = Buffer.concat([iv, new Buffer([0, 0, 0, 2])])
49359 this._cipher = new aes.AES(key)
49360 this._prev = new Buffer(iv.length)
49361 this._cache = new Buffer('')
49362 this._secCache = new Buffer('')
49363 this._decrypt = decrypt
49364 this._alen = 0
49365 this._len = 0
49366 iv.copy(this._prev)
49367 this._mode = mode
49368 var h = new Buffer(4)
49369 h.fill(0)
49370 this._ghash = new GHASH(this._cipher.encryptBlock(h))
49371 this._authTag = null
49372 this._called = false
49373 }
49374 StreamCipher.prototype._update = function (chunk) {
49375 if (!this._called && this._alen) {
49376 var rump = 16 - (this._alen % 16)
49377 if (rump < 16) {
49378 rump = new Buffer(rump)
49379 rump.fill(0)
49380 this._ghash.update(rump)
49381 }
49382 }
49383 this._called = true
49384 var out = this._mode.encrypt(this, chunk)
49385 if (this._decrypt) {
49386 this._ghash.update(chunk)
49387 } else {
49388 this._ghash.update(out)
49389 }
49390 this._len += chunk.length
49391 return out
49392 }
49393 StreamCipher.prototype._final = function () {
49394 if (this._decrypt && !this._authTag) {
49395 throw new Error('Unsupported state or unable to authenticate data')
49396 }
49397 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
49398 if (this._decrypt) {
49399 if (xorTest(tag, this._authTag)) {
49400 throw new Error('Unsupported state or unable to authenticate data')
49401 }
49402 } else {
49403 this._authTag = tag
49404 }
49405 this._cipher.scrub()
49406 }
49407 StreamCipher.prototype.getAuthTag = function getAuthTag () {
49408 if (!this._decrypt && Buffer.isBuffer(this._authTag)) {
49409 return this._authTag
49410 } else {
49411 throw new Error('Attempting to get auth tag in unsupported state')
49412 }
49413 }
49414 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
49415 if (this._decrypt) {
49416 this._authTag = tag
49417 } else {
49418 throw new Error('Attempting to set auth tag in unsupported state')
49419 }
49420 }
49421 StreamCipher.prototype.setAAD = function setAAD (buf) {
49422 if (!this._called) {
49423 this._ghash.update(buf)
49424 this._alen += buf.length
49425 } else {
49426 throw new Error('Attempting to set AAD in unsupported state')
49427 }
49428 }
49429 function xorTest (a, b) {
49430 var out = 0
49431 if (a.length !== b.length) {
49432 out++
49433 }
49434 var len = Math.min(a.length, b.length)
49435 var i = -1
49436 while (++i < len) {
49437 out += (a[i] ^ b[i])
49438 }
49439 return out
49440 }
49441
49442 }).call(this,require("buffer").Buffer)
49443 },{"./aes":20,"./ghash":25,"buffer":47,"buffer-xor":46,"cipher-base":48,"inherits":95}],22:[function(require,module,exports){
49444 var ciphers = require('./encrypter')
49445 exports.createCipher = exports.Cipher = ciphers.createCipher
49446 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
49447 var deciphers = require('./decrypter')
49448 exports.createDecipher = exports.Decipher = deciphers.createDecipher
49449 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
49450 var modes = require('./modes')
49451 function getCiphers () {
49452 return Object.keys(modes)
49453 }
49454 exports.listCiphers = exports.getCiphers = getCiphers
49455
49456 },{"./decrypter":23,"./encrypter":24,"./modes":26}],23:[function(require,module,exports){
49457 (function (Buffer){
49458 var aes = require('./aes')
49459 var Transform = require('cipher-base')
49460 var inherits = require('inherits')
49461 var modes = require('./modes')
49462 var StreamCipher = require('./streamCipher')
49463 var AuthCipher = require('./authCipher')
49464 var ebtk = require('evp_bytestokey')
49465
49466 inherits(Decipher, Transform)
49467 function Decipher (mode, key, iv) {
49468 if (!(this instanceof Decipher)) {
49469 return new Decipher(mode, key, iv)
49470 }
49471 Transform.call(this)
49472 this._cache = new Splitter()
49473 this._last = void 0
49474 this._cipher = new aes.AES(key)
49475 this._prev = new Buffer(iv.length)
49476 iv.copy(this._prev)
49477 this._mode = mode
49478 this._autopadding = true
49479 }
49480 Decipher.prototype._update = function (data) {
49481 this._cache.add(data)
49482 var chunk
49483 var thing
49484 var out = []
49485 while ((chunk = this._cache.get(this._autopadding))) {
49486 thing = this._mode.decrypt(this, chunk)
49487 out.push(thing)
49488 }
49489 return Buffer.concat(out)
49490 }
49491 Decipher.prototype._final = function () {
49492 var chunk = this._cache.flush()
49493 if (this._autopadding) {
49494 return unpad(this._mode.decrypt(this, chunk))
49495 } else if (chunk) {
49496 throw new Error('data not multiple of block length')
49497 }
49498 }
49499 Decipher.prototype.setAutoPadding = function (setTo) {
49500 this._autopadding = !!setTo
49501 return this
49502 }
49503 function Splitter () {
49504 if (!(this instanceof Splitter)) {
49505 return new Splitter()
49506 }
49507 this.cache = new Buffer('')
49508 }
49509 Splitter.prototype.add = function (data) {
49510 this.cache = Buffer.concat([this.cache, data])
49511 }
49512
49513 Splitter.prototype.get = function (autoPadding) {
49514 var out
49515 if (autoPadding) {
49516 if (this.cache.length > 16) {
49517 out = this.cache.slice(0, 16)
49518 this.cache = this.cache.slice(16)
49519 return out
49520 }
49521 } else {
49522 if (this.cache.length >= 16) {
49523 out = this.cache.slice(0, 16)
49524 this.cache = this.cache.slice(16)
49525 return out
49526 }
49527 }
49528 return null
49529 }
49530 Splitter.prototype.flush = function () {
49531 if (this.cache.length) {
49532 return this.cache
49533 }
49534 }
49535 function unpad (last) {
49536 var padded = last[15]
49537 var i = -1
49538 while (++i < padded) {
49539 if (last[(i + (16 - padded))] !== padded) {
49540 throw new Error('unable to decrypt data')
49541 }
49542 }
49543 if (padded === 16) {
49544 return
49545 }
49546 return last.slice(0, 16 - padded)
49547 }
49548
49549 var modelist = {
49550 ECB: require('./modes/ecb'),
49551 CBC: require('./modes/cbc'),
49552 CFB: require('./modes/cfb'),
49553 CFB8: require('./modes/cfb8'),
49554 CFB1: require('./modes/cfb1'),
49555 OFB: require('./modes/ofb'),
49556 CTR: require('./modes/ctr'),
49557 GCM: require('./modes/ctr')
49558 }
49559
49560 function createDecipheriv (suite, password, iv) {
49561 var config = modes[suite.toLowerCase()]
49562 if (!config) {
49563 throw new TypeError('invalid suite type')
49564 }
49565 if (typeof iv === 'string') {
49566 iv = new Buffer(iv)
49567 }
49568 if (typeof password === 'string') {
49569 password = new Buffer(password)
49570 }
49571 if (password.length !== config.key / 8) {
49572 throw new TypeError('invalid key length ' + password.length)
49573 }
49574 if (iv.length !== config.iv) {
49575 throw new TypeError('invalid iv length ' + iv.length)
49576 }
49577 if (config.type === 'stream') {
49578 return new StreamCipher(modelist[config.mode], password, iv, true)
49579 } else if (config.type === 'auth') {
49580 return new AuthCipher(modelist[config.mode], password, iv, true)
49581 }
49582 return new Decipher(modelist[config.mode], password, iv)
49583 }
49584
49585 function createDecipher (suite, password) {
49586 var config = modes[suite.toLowerCase()]
49587 if (!config) {
49588 throw new TypeError('invalid suite type')
49589 }
49590 var keys = ebtk(password, false, config.key, config.iv)
49591 return createDecipheriv(suite, keys.key, keys.iv)
49592 }
49593 exports.createDecipher = createDecipher
49594 exports.createDecipheriv = createDecipheriv
49595
49596 }).call(this,require("buffer").Buffer)
49597 },{"./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){
49598 (function (Buffer){
49599 var aes = require('./aes')
49600 var Transform = require('cipher-base')
49601 var inherits = require('inherits')
49602 var modes = require('./modes')
49603 var ebtk = require('evp_bytestokey')
49604 var StreamCipher = require('./streamCipher')
49605 var AuthCipher = require('./authCipher')
49606 inherits(Cipher, Transform)
49607 function Cipher (mode, key, iv) {
49608 if (!(this instanceof Cipher)) {
49609 return new Cipher(mode, key, iv)
49610 }
49611 Transform.call(this)
49612 this._cache = new Splitter()
49613 this._cipher = new aes.AES(key)
49614 this._prev = new Buffer(iv.length)
49615 iv.copy(this._prev)
49616 this._mode = mode
49617 this._autopadding = true
49618 }
49619 Cipher.prototype._update = function (data) {
49620 this._cache.add(data)
49621 var chunk
49622 var thing
49623 var out = []
49624 while ((chunk = this._cache.get())) {
49625 thing = this._mode.encrypt(this, chunk)
49626 out.push(thing)
49627 }
49628 return Buffer.concat(out)
49629 }
49630 Cipher.prototype._final = function () {
49631 var chunk = this._cache.flush()
49632 if (this._autopadding) {
49633 chunk = this._mode.encrypt(this, chunk)
49634 this._cipher.scrub()
49635 return chunk
49636 } else if (chunk.toString('hex') !== '10101010101010101010101010101010') {
49637 this._cipher.scrub()
49638 throw new Error('data not multiple of block length')
49639 }
49640 }
49641 Cipher.prototype.setAutoPadding = function (setTo) {
49642 this._autopadding = !!setTo
49643 return this
49644 }
49645
49646 function Splitter () {
49647 if (!(this instanceof Splitter)) {
49648 return new Splitter()
49649 }
49650 this.cache = new Buffer('')
49651 }
49652 Splitter.prototype.add = function (data) {
49653 this.cache = Buffer.concat([this.cache, data])
49654 }
49655
49656 Splitter.prototype.get = function () {
49657 if (this.cache.length > 15) {
49658 var out = this.cache.slice(0, 16)
49659 this.cache = this.cache.slice(16)
49660 return out
49661 }
49662 return null
49663 }
49664 Splitter.prototype.flush = function () {
49665 var len = 16 - this.cache.length
49666 var padBuff = new Buffer(len)
49667
49668 var i = -1
49669 while (++i < len) {
49670 padBuff.writeUInt8(len, i)
49671 }
49672 var out = Buffer.concat([this.cache, padBuff])
49673 return out
49674 }
49675 var modelist = {
49676 ECB: require('./modes/ecb'),
49677 CBC: require('./modes/cbc'),
49678 CFB: require('./modes/cfb'),
49679 CFB8: require('./modes/cfb8'),
49680 CFB1: require('./modes/cfb1'),
49681 OFB: require('./modes/ofb'),
49682 CTR: require('./modes/ctr'),
49683 GCM: require('./modes/ctr')
49684 }
49685
49686 function createCipheriv (suite, password, iv) {
49687 var config = modes[suite.toLowerCase()]
49688 if (!config) {
49689 throw new TypeError('invalid suite type')
49690 }
49691 if (typeof iv === 'string') {
49692 iv = new Buffer(iv)
49693 }
49694 if (typeof password === 'string') {
49695 password = new Buffer(password)
49696 }
49697 if (password.length !== config.key / 8) {
49698 throw new TypeError('invalid key length ' + password.length)
49699 }
49700 if (iv.length !== config.iv) {
49701 throw new TypeError('invalid iv length ' + iv.length)
49702 }
49703 if (config.type === 'stream') {
49704 return new StreamCipher(modelist[config.mode], password, iv)
49705 } else if (config.type === 'auth') {
49706 return new AuthCipher(modelist[config.mode], password, iv)
49707 }
49708 return new Cipher(modelist[config.mode], password, iv)
49709 }
49710 function createCipher (suite, password) {
49711 var config = modes[suite.toLowerCase()]
49712 if (!config) {
49713 throw new TypeError('invalid suite type')
49714 }
49715 var keys = ebtk(password, false, config.key, config.iv)
49716 return createCipheriv(suite, keys.key, keys.iv)
49717 }
49718
49719 exports.createCipheriv = createCipheriv
49720 exports.createCipher = createCipher
49721
49722 }).call(this,require("buffer").Buffer)
49723 },{"./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){
49724 (function (Buffer){
49725 var zeros = new Buffer(16)
49726 zeros.fill(0)
49727 module.exports = GHASH
49728 function GHASH (key) {
49729 this.h = key
49730 this.state = new Buffer(16)
49731 this.state.fill(0)
49732 this.cache = new Buffer('')
49733 }
49734 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
49735 // by Juho Vähä-Herttua
49736 GHASH.prototype.ghash = function (block) {
49737 var i = -1
49738 while (++i < block.length) {
49739 this.state[i] ^= block[i]
49740 }
49741 this._multiply()
49742 }
49743
49744 GHASH.prototype._multiply = function () {
49745 var Vi = toArray(this.h)
49746 var Zi = [0, 0, 0, 0]
49747 var j, xi, lsb_Vi
49748 var i = -1
49749 while (++i < 128) {
49750 xi = (this.state[~~(i / 8)] & (1 << (7 - i % 8))) !== 0
49751 if (xi) {
49752 // Z_i+1 = Z_i ^ V_i
49753 Zi = xor(Zi, Vi)
49754 }
49755
49756 // Store the value of LSB(V_i)
49757 lsb_Vi = (Vi[3] & 1) !== 0
49758
49759 // V_i+1 = V_i >> 1
49760 for (j = 3; j > 0; j--) {
49761 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
49762 }
49763 Vi[0] = Vi[0] >>> 1
49764
49765 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
49766 if (lsb_Vi) {
49767 Vi[0] = Vi[0] ^ (0xe1 << 24)
49768 }
49769 }
49770 this.state = fromArray(Zi)
49771 }
49772 GHASH.prototype.update = function (buf) {
49773 this.cache = Buffer.concat([this.cache, buf])
49774 var chunk
49775 while (this.cache.length >= 16) {
49776 chunk = this.cache.slice(0, 16)
49777 this.cache = this.cache.slice(16)
49778 this.ghash(chunk)
49779 }
49780 }
49781 GHASH.prototype.final = function (abl, bl) {
49782 if (this.cache.length) {
49783 this.ghash(Buffer.concat([this.cache, zeros], 16))
49784 }
49785 this.ghash(fromArray([
49786 0, abl,
49787 0, bl
49788 ]))
49789 return this.state
49790 }
49791
49792 function toArray (buf) {
49793 return [
49794 buf.readUInt32BE(0),
49795 buf.readUInt32BE(4),
49796 buf.readUInt32BE(8),
49797 buf.readUInt32BE(12)
49798 ]
49799 }
49800 function fromArray (out) {
49801 out = out.map(fixup_uint32)
49802 var buf = new Buffer(16)
49803 buf.writeUInt32BE(out[0], 0)
49804 buf.writeUInt32BE(out[1], 4)
49805 buf.writeUInt32BE(out[2], 8)
49806 buf.writeUInt32BE(out[3], 12)
49807 return buf
49808 }
49809 var uint_max = Math.pow(2, 32)
49810 function fixup_uint32 (x) {
49811 var ret, x_pos
49812 ret = x > uint_max || x < 0 ? (x_pos = Math.abs(x) % uint_max, x < 0 ? uint_max - x_pos : x_pos) : x
49813 return ret
49814 }
49815 function xor (a, b) {
49816 return [
49817 a[0] ^ b[0],
49818 a[1] ^ b[1],
49819 a[2] ^ b[2],
49820 a[3] ^ b[3]
49821 ]
49822 }
49823
49824 }).call(this,require("buffer").Buffer)
49825 },{"buffer":47}],26:[function(require,module,exports){
49826 exports['aes-128-ecb'] = {
49827 cipher: 'AES',
49828 key: 128,
49829 iv: 0,
49830 mode: 'ECB',
49831 type: 'block'
49832 }
49833 exports['aes-192-ecb'] = {
49834 cipher: 'AES',
49835 key: 192,
49836 iv: 0,
49837 mode: 'ECB',
49838 type: 'block'
49839 }
49840 exports['aes-256-ecb'] = {
49841 cipher: 'AES',
49842 key: 256,
49843 iv: 0,
49844 mode: 'ECB',
49845 type: 'block'
49846 }
49847 exports['aes-128-cbc'] = {
49848 cipher: 'AES',
49849 key: 128,
49850 iv: 16,
49851 mode: 'CBC',
49852 type: 'block'
49853 }
49854 exports['aes-192-cbc'] = {
49855 cipher: 'AES',
49856 key: 192,
49857 iv: 16,
49858 mode: 'CBC',
49859 type: 'block'
49860 }
49861 exports['aes-256-cbc'] = {
49862 cipher: 'AES',
49863 key: 256,
49864 iv: 16,
49865 mode: 'CBC',
49866 type: 'block'
49867 }
49868 exports['aes128'] = exports['aes-128-cbc']
49869 exports['aes192'] = exports['aes-192-cbc']
49870 exports['aes256'] = exports['aes-256-cbc']
49871 exports['aes-128-cfb'] = {
49872 cipher: 'AES',
49873 key: 128,
49874 iv: 16,
49875 mode: 'CFB',
49876 type: 'stream'
49877 }
49878 exports['aes-192-cfb'] = {
49879 cipher: 'AES',
49880 key: 192,
49881 iv: 16,
49882 mode: 'CFB',
49883 type: 'stream'
49884 }
49885 exports['aes-256-cfb'] = {
49886 cipher: 'AES',
49887 key: 256,
49888 iv: 16,
49889 mode: 'CFB',
49890 type: 'stream'
49891 }
49892 exports['aes-128-cfb8'] = {
49893 cipher: 'AES',
49894 key: 128,
49895 iv: 16,
49896 mode: 'CFB8',
49897 type: 'stream'
49898 }
49899 exports['aes-192-cfb8'] = {
49900 cipher: 'AES',
49901 key: 192,
49902 iv: 16,
49903 mode: 'CFB8',
49904 type: 'stream'
49905 }
49906 exports['aes-256-cfb8'] = {
49907 cipher: 'AES',
49908 key: 256,
49909 iv: 16,
49910 mode: 'CFB8',
49911 type: 'stream'
49912 }
49913 exports['aes-128-cfb1'] = {
49914 cipher: 'AES',
49915 key: 128,
49916 iv: 16,
49917 mode: 'CFB1',
49918 type: 'stream'
49919 }
49920 exports['aes-192-cfb1'] = {
49921 cipher: 'AES',
49922 key: 192,
49923 iv: 16,
49924 mode: 'CFB1',
49925 type: 'stream'
49926 }
49927 exports['aes-256-cfb1'] = {
49928 cipher: 'AES',
49929 key: 256,
49930 iv: 16,
49931 mode: 'CFB1',
49932 type: 'stream'
49933 }
49934 exports['aes-128-ofb'] = {
49935 cipher: 'AES',
49936 key: 128,
49937 iv: 16,
49938 mode: 'OFB',
49939 type: 'stream'
49940 }
49941 exports['aes-192-ofb'] = {
49942 cipher: 'AES',
49943 key: 192,
49944 iv: 16,
49945 mode: 'OFB',
49946 type: 'stream'
49947 }
49948 exports['aes-256-ofb'] = {
49949 cipher: 'AES',
49950 key: 256,
49951 iv: 16,
49952 mode: 'OFB',
49953 type: 'stream'
49954 }
49955 exports['aes-128-ctr'] = {
49956 cipher: 'AES',
49957 key: 128,
49958 iv: 16,
49959 mode: 'CTR',
49960 type: 'stream'
49961 }
49962 exports['aes-192-ctr'] = {
49963 cipher: 'AES',
49964 key: 192,
49965 iv: 16,
49966 mode: 'CTR',
49967 type: 'stream'
49968 }
49969 exports['aes-256-ctr'] = {
49970 cipher: 'AES',
49971 key: 256,
49972 iv: 16,
49973 mode: 'CTR',
49974 type: 'stream'
49975 }
49976 exports['aes-128-gcm'] = {
49977 cipher: 'AES',
49978 key: 128,
49979 iv: 12,
49980 mode: 'GCM',
49981 type: 'auth'
49982 }
49983 exports['aes-192-gcm'] = {
49984 cipher: 'AES',
49985 key: 192,
49986 iv: 12,
49987 mode: 'GCM',
49988 type: 'auth'
49989 }
49990 exports['aes-256-gcm'] = {
49991 cipher: 'AES',
49992 key: 256,
49993 iv: 12,
49994 mode: 'GCM',
49995 type: 'auth'
49996 }
49997
49998 },{}],27:[function(require,module,exports){
49999 var xor = require('buffer-xor')
50000
50001 exports.encrypt = function (self, block) {
50002 var data = xor(block, self._prev)
50003
50004 self._prev = self._cipher.encryptBlock(data)
50005 return self._prev
50006 }
50007
50008 exports.decrypt = function (self, block) {
50009 var pad = self._prev
50010
50011 self._prev = block
50012 var out = self._cipher.decryptBlock(block)
50013
50014 return xor(out, pad)
50015 }
50016
50017 },{"buffer-xor":46}],28:[function(require,module,exports){
50018 (function (Buffer){
50019 var xor = require('buffer-xor')
50020
50021 exports.encrypt = function (self, data, decrypt) {
50022 var out = new Buffer('')
50023 var len
50024
50025 while (data.length) {
50026 if (self._cache.length === 0) {
50027 self._cache = self._cipher.encryptBlock(self._prev)
50028 self._prev = new Buffer('')
50029 }
50030
50031 if (self._cache.length <= data.length) {
50032 len = self._cache.length
50033 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
50034 data = data.slice(len)
50035 } else {
50036 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
50037 break
50038 }
50039 }
50040
50041 return out
50042 }
50043 function encryptStart (self, data, decrypt) {
50044 var len = data.length
50045 var out = xor(data, self._cache)
50046 self._cache = self._cache.slice(len)
50047 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
50048 return out
50049 }
50050
50051 }).call(this,require("buffer").Buffer)
50052 },{"buffer":47,"buffer-xor":46}],29:[function(require,module,exports){
50053 (function (Buffer){
50054 function encryptByte (self, byteParam, decrypt) {
50055 var pad
50056 var i = -1
50057 var len = 8
50058 var out = 0
50059 var bit, value
50060 while (++i < len) {
50061 pad = self._cipher.encryptBlock(self._prev)
50062 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
50063 value = pad[0] ^ bit
50064 out += ((value & 0x80) >> (i % 8))
50065 self._prev = shiftIn(self._prev, decrypt ? bit : value)
50066 }
50067 return out
50068 }
50069 exports.encrypt = function (self, chunk, decrypt) {
50070 var len = chunk.length
50071 var out = new Buffer(len)
50072 var i = -1
50073 while (++i < len) {
50074 out[i] = encryptByte(self, chunk[i], decrypt)
50075 }
50076 return out
50077 }
50078 function shiftIn (buffer, value) {
50079 var len = buffer.length
50080 var i = -1
50081 var out = new Buffer(buffer.length)
50082 buffer = Buffer.concat([buffer, new Buffer([value])])
50083 while (++i < len) {
50084 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
50085 }
50086 return out
50087 }
50088
50089 }).call(this,require("buffer").Buffer)
50090 },{"buffer":47}],30:[function(require,module,exports){
50091 (function (Buffer){
50092 function encryptByte (self, byteParam, decrypt) {
50093 var pad = self._cipher.encryptBlock(self._prev)
50094 var out = pad[0] ^ byteParam
50095 self._prev = Buffer.concat([self._prev.slice(1), new Buffer([decrypt ? byteParam : out])])
50096 return out
50097 }
50098 exports.encrypt = function (self, chunk, decrypt) {
50099 var len = chunk.length
50100 var out = new Buffer(len)
50101 var i = -1
50102 while (++i < len) {
50103 out[i] = encryptByte(self, chunk[i], decrypt)
50104 }
50105 return out
50106 }
50107
50108 }).call(this,require("buffer").Buffer)
50109 },{"buffer":47}],31:[function(require,module,exports){
50110 (function (Buffer){
50111 var xor = require('buffer-xor')
50112
50113 function incr32 (iv) {
50114 var len = iv.length
50115 var item
50116 while (len--) {
50117 item = iv.readUInt8(len)
50118 if (item === 255) {
50119 iv.writeUInt8(0, len)
50120 } else {
50121 item++
50122 iv.writeUInt8(item, len)
50123 break
50124 }
50125 }
50126 }
50127
50128 function getBlock (self) {
50129 var out = self._cipher.encryptBlock(self._prev)
50130 incr32(self._prev)
50131 return out
50132 }
50133
50134 exports.encrypt = function (self, chunk) {
50135 while (self._cache.length < chunk.length) {
50136 self._cache = Buffer.concat([self._cache, getBlock(self)])
50137 }
50138 var pad = self._cache.slice(0, chunk.length)
50139 self._cache = self._cache.slice(chunk.length)
50140 return xor(chunk, pad)
50141 }
50142
50143 }).call(this,require("buffer").Buffer)
50144 },{"buffer":47,"buffer-xor":46}],32:[function(require,module,exports){
50145 exports.encrypt = function (self, block) {
50146 return self._cipher.encryptBlock(block)
50147 }
50148 exports.decrypt = function (self, block) {
50149 return self._cipher.decryptBlock(block)
50150 }
50151
50152 },{}],33:[function(require,module,exports){
50153 (function (Buffer){
50154 var xor = require('buffer-xor')
50155
50156 function getBlock (self) {
50157 self._prev = self._cipher.encryptBlock(self._prev)
50158 return self._prev
50159 }
50160
50161 exports.encrypt = function (self, chunk) {
50162 while (self._cache.length < chunk.length) {
50163 self._cache = Buffer.concat([self._cache, getBlock(self)])
50164 }
50165
50166 var pad = self._cache.slice(0, chunk.length)
50167 self._cache = self._cache.slice(chunk.length)
50168 return xor(chunk, pad)
50169 }
50170
50171 }).call(this,require("buffer").Buffer)
50172 },{"buffer":47,"buffer-xor":46}],34:[function(require,module,exports){
50173 (function (Buffer){
50174 var aes = require('./aes')
50175 var Transform = require('cipher-base')
50176 var inherits = require('inherits')
50177
50178 inherits(StreamCipher, Transform)
50179 module.exports = StreamCipher
50180 function StreamCipher (mode, key, iv, decrypt) {
50181 if (!(this instanceof StreamCipher)) {
50182 return new StreamCipher(mode, key, iv)
50183 }
50184 Transform.call(this)
50185 this._cipher = new aes.AES(key)
50186 this._prev = new Buffer(iv.length)
50187 this._cache = new Buffer('')
50188 this._secCache = new Buffer('')
50189 this._decrypt = decrypt
50190 iv.copy(this._prev)
50191 this._mode = mode
50192 }
50193 StreamCipher.prototype._update = function (chunk) {
50194 return this._mode.encrypt(this, chunk, this._decrypt)
50195 }
50196 StreamCipher.prototype._final = function () {
50197 this._cipher.scrub()
50198 }
50199
50200 }).call(this,require("buffer").Buffer)
50201 },{"./aes":20,"buffer":47,"cipher-base":48,"inherits":95}],35:[function(require,module,exports){
50202 var ebtk = require('evp_bytestokey')
50203 var aes = require('browserify-aes/browser')
50204 var DES = require('browserify-des')
50205 var desModes = require('browserify-des/modes')
50206 var aesModes = require('browserify-aes/modes')
50207 function createCipher (suite, password) {
50208 var keyLen, ivLen
50209 suite = suite.toLowerCase()
50210 if (aesModes[suite]) {
50211 keyLen = aesModes[suite].key
50212 ivLen = aesModes[suite].iv
50213 } else if (desModes[suite]) {
50214 keyLen = desModes[suite].key * 8
50215 ivLen = desModes[suite].iv
50216 } else {
50217 throw new TypeError('invalid suite type')
50218 }
50219 var keys = ebtk(password, false, keyLen, ivLen)
50220 return createCipheriv(suite, keys.key, keys.iv)
50221 }
50222 function createDecipher (suite, password) {
50223 var keyLen, ivLen
50224 suite = suite.toLowerCase()
50225 if (aesModes[suite]) {
50226 keyLen = aesModes[suite].key
50227 ivLen = aesModes[suite].iv
50228 } else if (desModes[suite]) {
50229 keyLen = desModes[suite].key * 8
50230 ivLen = desModes[suite].iv
50231 } else {
50232 throw new TypeError('invalid suite type')
50233 }
50234 var keys = ebtk(password, false, keyLen, ivLen)
50235 return createDecipheriv(suite, keys.key, keys.iv)
50236 }
50237
50238 function createCipheriv (suite, key, iv) {
50239 suite = suite.toLowerCase()
50240 if (aesModes[suite]) {
50241 return aes.createCipheriv(suite, key, iv)
50242 } else if (desModes[suite]) {
50243 return new DES({
50244 key: key,
50245 iv: iv,
50246 mode: suite
50247 })
50248 } else {
50249 throw new TypeError('invalid suite type')
50250 }
50251 }
50252 function createDecipheriv (suite, key, iv) {
50253 suite = suite.toLowerCase()
50254 if (aesModes[suite]) {
50255 return aes.createDecipheriv(suite, key, iv)
50256 } else if (desModes[suite]) {
50257 return new DES({
50258 key: key,
50259 iv: iv,
50260 mode: suite,
50261 decrypt: true
50262 })
50263 } else {
50264 throw new TypeError('invalid suite type')
50265 }
50266 }
50267 exports.createCipher = exports.Cipher = createCipher
50268 exports.createCipheriv = exports.Cipheriv = createCipheriv
50269 exports.createDecipher = exports.Decipher = createDecipher
50270 exports.createDecipheriv = exports.Decipheriv = createDecipheriv
50271 function getCiphers () {
50272 return Object.keys(desModes).concat(aes.getCiphers())
50273 }
50274 exports.listCiphers = exports.getCiphers = getCiphers
50275
50276 },{"browserify-aes/browser":22,"browserify-aes/modes":26,"browserify-des":36,"browserify-des/modes":37,"evp_bytestokey":84}],36:[function(require,module,exports){
50277 (function (Buffer){
50278 var CipherBase = require('cipher-base')
50279 var des = require('des.js')
50280 var inherits = require('inherits')
50281
50282 var modes = {
50283 'des-ede3-cbc': des.CBC.instantiate(des.EDE),
50284 'des-ede3': des.EDE,
50285 'des-ede-cbc': des.CBC.instantiate(des.EDE),
50286 'des-ede': des.EDE,
50287 'des-cbc': des.CBC.instantiate(des.DES),
50288 'des-ecb': des.DES
50289 }
50290 modes.des = modes['des-cbc']
50291 modes.des3 = modes['des-ede3-cbc']
50292 module.exports = DES
50293 inherits(DES, CipherBase)
50294 function DES (opts) {
50295 CipherBase.call(this)
50296 var modeName = opts.mode.toLowerCase()
50297 var mode = modes[modeName]
50298 var type
50299 if (opts.decrypt) {
50300 type = 'decrypt'
50301 } else {
50302 type = 'encrypt'
50303 }
50304 var key = opts.key
50305 if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {
50306 key = Buffer.concat([key, key.slice(0, 8)])
50307 }
50308 var iv = opts.iv
50309 this._des = mode.create({
50310 key: key,
50311 iv: iv,
50312 type: type
50313 })
50314 }
50315 DES.prototype._update = function (data) {
50316 return new Buffer(this._des.update(data))
50317 }
50318 DES.prototype._final = function () {
50319 return new Buffer(this._des.final())
50320 }
50321
50322 }).call(this,require("buffer").Buffer)
50323 },{"buffer":47,"cipher-base":48,"des.js":57,"inherits":95}],37:[function(require,module,exports){
50324 exports['des-ecb'] = {
50325 key: 8,
50326 iv: 0
50327 }
50328 exports['des-cbc'] = exports.des = {
50329 key: 8,
50330 iv: 8
50331 }
50332 exports['des-ede3-cbc'] = exports.des3 = {
50333 key: 24,
50334 iv: 8
50335 }
50336 exports['des-ede3'] = {
50337 key: 24,
50338 iv: 0
50339 }
50340 exports['des-ede-cbc'] = {
50341 key: 16,
50342 iv: 8
50343 }
50344 exports['des-ede'] = {
50345 key: 16,
50346 iv: 0
50347 }
50348
50349 },{}],38:[function(require,module,exports){
50350 (function (Buffer){
50351 var bn = require('bn.js');
50352 var randomBytes = require('randombytes');
50353 module.exports = crt;
50354 function blind(priv) {
50355 var r = getr(priv);
50356 var blinder = r.toRed(bn.mont(priv.modulus))
50357 .redPow(new bn(priv.publicExponent)).fromRed();
50358 return {
50359 blinder: blinder,
50360 unblinder:r.invm(priv.modulus)
50361 };
50362 }
50363 function crt(msg, priv) {
50364 var blinds = blind(priv);
50365 var len = priv.modulus.byteLength();
50366 var mod = bn.mont(priv.modulus);
50367 var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);
50368 var c1 = blinded.toRed(bn.mont(priv.prime1));
50369 var c2 = blinded.toRed(bn.mont(priv.prime2));
50370 var qinv = priv.coefficient;
50371 var p = priv.prime1;
50372 var q = priv.prime2;
50373 var m1 = c1.redPow(priv.exponent1);
50374 var m2 = c2.redPow(priv.exponent2);
50375 m1 = m1.fromRed();
50376 m2 = m2.fromRed();
50377 var h = m1.isub(m2).imul(qinv).umod(p);
50378 h.imul(q);
50379 m2.iadd(h);
50380 return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));
50381 }
50382 crt.getr = getr;
50383 function getr(priv) {
50384 var len = priv.modulus.byteLength();
50385 var r = new bn(randomBytes(len));
50386 while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {
50387 r = new bn(randomBytes(len));
50388 }
50389 return r;
50390 }
50391
50392 }).call(this,require("buffer").Buffer)
50393 },{"bn.js":17,"buffer":47,"randombytes":119}],39:[function(require,module,exports){
50394 module.exports = require('./browser/algorithms.json')
50395
50396 },{"./browser/algorithms.json":40}],40:[function(require,module,exports){
50397 module.exports={
50398 "sha224WithRSAEncryption": {
50399 "sign": "rsa",
50400 "hash": "sha224",
50401 "id": "302d300d06096086480165030402040500041c"
50402 },
50403 "RSA-SHA224": {
50404 "sign": "ecdsa/rsa",
50405 "hash": "sha224",
50406 "id": "302d300d06096086480165030402040500041c"
50407 },
50408 "sha256WithRSAEncryption": {
50409 "sign": "rsa",
50410 "hash": "sha256",
50411 "id": "3031300d060960864801650304020105000420"
50412 },
50413 "RSA-SHA256": {
50414 "sign": "ecdsa/rsa",
50415 "hash": "sha256",
50416 "id": "3031300d060960864801650304020105000420"
50417 },
50418 "sha384WithRSAEncryption": {
50419 "sign": "rsa",
50420 "hash": "sha384",
50421 "id": "3041300d060960864801650304020205000430"
50422 },
50423 "RSA-SHA384": {
50424 "sign": "ecdsa/rsa",
50425 "hash": "sha384",
50426 "id": "3041300d060960864801650304020205000430"
50427 },
50428 "sha512WithRSAEncryption": {
50429 "sign": "rsa",
50430 "hash": "sha512",
50431 "id": "3051300d060960864801650304020305000440"
50432 },
50433 "RSA-SHA512": {
50434 "sign": "ecdsa/rsa",
50435 "hash": "sha512",
50436 "id": "3051300d060960864801650304020305000440"
50437 },
50438 "RSA-SHA1": {
50439 "sign": "rsa",
50440 "hash": "sha1",
50441 "id": "3021300906052b0e03021a05000414"
50442 },
50443 "ecdsa-with-SHA1": {
50444 "sign": "ecdsa",
50445 "hash": "sha1",
50446 "id": ""
50447 },
50448 "sha256": {
50449 "sign": "ecdsa",
50450 "hash": "sha256",
50451 "id": ""
50452 },
50453 "sha224": {
50454 "sign": "ecdsa",
50455 "hash": "sha224",
50456 "id": ""
50457 },
50458 "sha384": {
50459 "sign": "ecdsa",
50460 "hash": "sha384",
50461 "id": ""
50462 },
50463 "sha512": {
50464 "sign": "ecdsa",
50465 "hash": "sha512",
50466 "id": ""
50467 },
50468 "DSA-SHA": {
50469 "sign": "dsa",
50470 "hash": "sha1",
50471 "id": ""
50472 },
50473 "DSA-SHA1": {
50474 "sign": "dsa",
50475 "hash": "sha1",
50476 "id": ""
50477 },
50478 "DSA": {
50479 "sign": "dsa",
50480 "hash": "sha1",
50481 "id": ""
50482 },
50483 "DSA-WITH-SHA224": {
50484 "sign": "dsa",
50485 "hash": "sha224",
50486 "id": ""
50487 },
50488 "DSA-SHA224": {
50489 "sign": "dsa",
50490 "hash": "sha224",
50491 "id": ""
50492 },
50493 "DSA-WITH-SHA256": {
50494 "sign": "dsa",
50495 "hash": "sha256",
50496 "id": ""
50497 },
50498 "DSA-SHA256": {
50499 "sign": "dsa",
50500 "hash": "sha256",
50501 "id": ""
50502 },
50503 "DSA-WITH-SHA384": {
50504 "sign": "dsa",
50505 "hash": "sha384",
50506 "id": ""
50507 },
50508 "DSA-SHA384": {
50509 "sign": "dsa",
50510 "hash": "sha384",
50511 "id": ""
50512 },
50513 "DSA-WITH-SHA512": {
50514 "sign": "dsa",
50515 "hash": "sha512",
50516 "id": ""
50517 },
50518 "DSA-SHA512": {
50519 "sign": "dsa",
50520 "hash": "sha512",
50521 "id": ""
50522 },
50523 "DSA-RIPEMD160": {
50524 "sign": "dsa",
50525 "hash": "rmd160",
50526 "id": ""
50527 },
50528 "ripemd160WithRSA": {
50529 "sign": "rsa",
50530 "hash": "rmd160",
50531 "id": "3021300906052b2403020105000414"
50532 },
50533 "RSA-RIPEMD160": {
50534 "sign": "rsa",
50535 "hash": "rmd160",
50536 "id": "3021300906052b2403020105000414"
50537 },
50538 "md5WithRSAEncryption": {
50539 "sign": "rsa",
50540 "hash": "md5",
50541 "id": "3020300c06082a864886f70d020505000410"
50542 },
50543 "RSA-MD5": {
50544 "sign": "rsa",
50545 "hash": "md5",
50546 "id": "3020300c06082a864886f70d020505000410"
50547 }
50548 }
50549
50550 },{}],41:[function(require,module,exports){
50551 module.exports={
50552 "1.3.132.0.10": "secp256k1",
50553 "1.3.132.0.33": "p224",
50554 "1.2.840.10045.3.1.1": "p192",
50555 "1.2.840.10045.3.1.7": "p256",
50556 "1.3.132.0.34": "p384",
50557 "1.3.132.0.35": "p521"
50558 }
50559
50560 },{}],42:[function(require,module,exports){
50561 (function (Buffer){
50562 var createHash = require('create-hash')
50563 var stream = require('stream')
50564 var inherits = require('inherits')
50565 var sign = require('./sign')
50566 var verify = require('./verify')
50567
50568 var algorithms = require('./algorithms.json')
50569 Object.keys(algorithms).forEach(function (key) {
50570 algorithms[key].id = new Buffer(algorithms[key].id, 'hex')
50571 algorithms[key.toLowerCase()] = algorithms[key]
50572 })
50573
50574 function Sign (algorithm) {
50575 stream.Writable.call(this)
50576
50577 var data = algorithms[algorithm]
50578 if (!data) throw new Error('Unknown message digest')
50579
50580 this._hashType = data.hash
50581 this._hash = createHash(data.hash)
50582 this._tag = data.id
50583 this._signType = data.sign
50584 }
50585 inherits(Sign, stream.Writable)
50586
50587 Sign.prototype._write = function _write (data, _, done) {
50588 this._hash.update(data)
50589 done()
50590 }
50591
50592 Sign.prototype.update = function update (data, enc) {
50593 if (typeof data === 'string') data = new Buffer(data, enc)
50594
50595 this._hash.update(data)
50596 return this
50597 }
50598
50599 Sign.prototype.sign = function signMethod (key, enc) {
50600 this.end()
50601 var hash = this._hash.digest()
50602 var sig = sign(hash, key, this._hashType, this._signType, this._tag)
50603
50604 return enc ? sig.toString(enc) : sig
50605 }
50606
50607 function Verify (algorithm) {
50608 stream.Writable.call(this)
50609
50610 var data = algorithms[algorithm]
50611 if (!data) throw new Error('Unknown message digest')
50612
50613 this._hash = createHash(data.hash)
50614 this._tag = data.id
50615 this._signType = data.sign
50616 }
50617 inherits(Verify, stream.Writable)
50618
50619 Verify.prototype._write = function _write (data, _, done) {
50620 this._hash.update(data)
50621 done()
50622 }
50623
50624 Verify.prototype.update = function update (data, enc) {
50625 if (typeof data === 'string') data = new Buffer(data, enc)
50626
50627 this._hash.update(data)
50628 return this
50629 }
50630
50631 Verify.prototype.verify = function verifyMethod (key, sig, enc) {
50632 if (typeof sig === 'string') sig = new Buffer(sig, enc)
50633
50634 this.end()
50635 var hash = this._hash.digest()
50636 return verify(sig, hash, key, this._signType, this._tag)
50637 }
50638
50639 function createSign (algorithm) {
50640 return new Sign(algorithm)
50641 }
50642
50643 function createVerify (algorithm) {
50644 return new Verify(algorithm)
50645 }
50646
50647 module.exports = {
50648 Sign: createSign,
50649 Verify: createVerify,
50650 createSign: createSign,
50651 createVerify: createVerify
50652 }
50653
50654 }).call(this,require("buffer").Buffer)
50655 },{"./algorithms.json":40,"./sign":43,"./verify":44,"buffer":47,"create-hash":51,"inherits":95,"stream":143}],43:[function(require,module,exports){
50656 (function (Buffer){
50657 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50658 var createHmac = require('create-hmac')
50659 var crt = require('browserify-rsa')
50660 var EC = require('elliptic').ec
50661 var BN = require('bn.js')
50662 var parseKeys = require('parse-asn1')
50663 var curves = require('./curves.json')
50664
50665 function sign (hash, key, hashType, signType, tag) {
50666 var priv = parseKeys(key)
50667 if (priv.curve) {
50668 // rsa keys can be interpreted as ecdsa ones in openssl
50669 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50670 return ecSign(hash, priv)
50671 } else if (priv.type === 'dsa') {
50672 if (signType !== 'dsa') throw new Error('wrong private key type')
50673 return dsaSign(hash, priv, hashType)
50674 } else {
50675 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type')
50676 }
50677 hash = Buffer.concat([tag, hash])
50678 var len = priv.modulus.byteLength()
50679 var pad = [ 0, 1 ]
50680 while (hash.length + pad.length + 1 < len) pad.push(0xff)
50681 pad.push(0x00)
50682 var i = -1
50683 while (++i < hash.length) pad.push(hash[i])
50684
50685 var out = crt(pad, priv)
50686 return out
50687 }
50688
50689 function ecSign (hash, priv) {
50690 var curveId = curves[priv.curve.join('.')]
50691 if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'))
50692
50693 var curve = new EC(curveId)
50694 var key = curve.keyFromPrivate(priv.privateKey)
50695 var out = key.sign(hash)
50696
50697 return new Buffer(out.toDER())
50698 }
50699
50700 function dsaSign (hash, priv, algo) {
50701 var x = priv.params.priv_key
50702 var p = priv.params.p
50703 var q = priv.params.q
50704 var g = priv.params.g
50705 var r = new BN(0)
50706 var k
50707 var H = bits2int(hash, q).mod(q)
50708 var s = false
50709 var kv = getKey(x, q, hash, algo)
50710 while (s === false) {
50711 k = makeKey(q, kv, algo)
50712 r = makeR(g, k, p, q)
50713 s = k.invm(q).imul(H.add(x.mul(r))).mod(q)
50714 if (s.cmpn(0) === 0) {
50715 s = false
50716 r = new BN(0)
50717 }
50718 }
50719 return toDER(r, s)
50720 }
50721
50722 function toDER (r, s) {
50723 r = r.toArray()
50724 s = s.toArray()
50725
50726 // Pad values
50727 if (r[0] & 0x80) r = [ 0 ].concat(r)
50728 if (s[0] & 0x80) s = [ 0 ].concat(s)
50729
50730 var total = r.length + s.length + 4
50731 var res = [ 0x30, total, 0x02, r.length ]
50732 res = res.concat(r, [ 0x02, s.length ], s)
50733 return new Buffer(res)
50734 }
50735
50736 function getKey (x, q, hash, algo) {
50737 x = new Buffer(x.toArray())
50738 if (x.length < q.byteLength()) {
50739 var zeros = new Buffer(q.byteLength() - x.length)
50740 zeros.fill(0)
50741 x = Buffer.concat([ zeros, x ])
50742 }
50743 var hlen = hash.length
50744 var hbits = bits2octets(hash, q)
50745 var v = new Buffer(hlen)
50746 v.fill(1)
50747 var k = new Buffer(hlen)
50748 k.fill(0)
50749 k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest()
50750 v = createHmac(algo, k).update(v).digest()
50751 k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest()
50752 v = createHmac(algo, k).update(v).digest()
50753 return { k: k, v: v }
50754 }
50755
50756 function bits2int (obits, q) {
50757 var bits = new BN(obits)
50758 var shift = (obits.length << 3) - q.bitLength()
50759 if (shift > 0) bits.ishrn(shift)
50760 return bits
50761 }
50762
50763 function bits2octets (bits, q) {
50764 bits = bits2int(bits, q)
50765 bits = bits.mod(q)
50766 var out = new Buffer(bits.toArray())
50767 if (out.length < q.byteLength()) {
50768 var zeros = new Buffer(q.byteLength() - out.length)
50769 zeros.fill(0)
50770 out = Buffer.concat([ zeros, out ])
50771 }
50772 return out
50773 }
50774
50775 function makeKey (q, kv, algo) {
50776 var t
50777 var k
50778
50779 do {
50780 t = new Buffer(0)
50781
50782 while (t.length * 8 < q.bitLength()) {
50783 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50784 t = Buffer.concat([ t, kv.v ])
50785 }
50786
50787 k = bits2int(t, q)
50788 kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest()
50789 kv.v = createHmac(algo, kv.k).update(kv.v).digest()
50790 } while (k.cmp(q) !== -1)
50791
50792 return k
50793 }
50794
50795 function makeR (g, k, p, q) {
50796 return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q)
50797 }
50798
50799 module.exports = sign
50800 module.exports.getKey = getKey
50801 module.exports.makeKey = makeKey
50802
50803 }).call(this,require("buffer").Buffer)
50804 },{"./curves.json":41,"bn.js":17,"browserify-rsa":38,"buffer":47,"create-hmac":54,"elliptic":67,"parse-asn1":105}],44:[function(require,module,exports){
50805 (function (Buffer){
50806 // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js
50807 var BN = require('bn.js')
50808 var EC = require('elliptic').ec
50809 var parseKeys = require('parse-asn1')
50810 var curves = require('./curves.json')
50811
50812 function verify (sig, hash, key, signType, tag) {
50813 var pub = parseKeys(key)
50814 if (pub.type === 'ec') {
50815 // rsa keys can be interpreted as ecdsa ones in openssl
50816 if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50817 return ecVerify(sig, hash, pub)
50818 } else if (pub.type === 'dsa') {
50819 if (signType !== 'dsa') throw new Error('wrong public key type')
50820 return dsaVerify(sig, hash, pub)
50821 } else {
50822 if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type')
50823 }
50824 hash = Buffer.concat([tag, hash])
50825 var len = pub.modulus.byteLength()
50826 var pad = [ 1 ]
50827 var padNum = 0
50828 while (hash.length + pad.length + 2 < len) {
50829 pad.push(0xff)
50830 padNum++
50831 }
50832 pad.push(0x00)
50833 var i = -1
50834 while (++i < hash.length) {
50835 pad.push(hash[i])
50836 }
50837 pad = new Buffer(pad)
50838 var red = BN.mont(pub.modulus)
50839 sig = new BN(sig).toRed(red)
50840
50841 sig = sig.redPow(new BN(pub.publicExponent))
50842 sig = new Buffer(sig.fromRed().toArray())
50843 var out = padNum < 8 ? 1 : 0
50844 len = Math.min(sig.length, pad.length)
50845 if (sig.length !== pad.length) out = 1
50846
50847 i = -1
50848 while (++i < len) out |= sig[i] ^ pad[i]
50849 return out === 0
50850 }
50851
50852 function ecVerify (sig, hash, pub) {
50853 var curveId = curves[pub.data.algorithm.curve.join('.')]
50854 if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'))
50855
50856 var curve = new EC(curveId)
50857 var pubkey = pub.data.subjectPrivateKey.data
50858
50859 return curve.verify(hash, sig, pubkey)
50860 }
50861
50862 function dsaVerify (sig, hash, pub) {
50863 var p = pub.data.p
50864 var q = pub.data.q
50865 var g = pub.data.g
50866 var y = pub.data.pub_key
50867 var unpacked = parseKeys.signature.decode(sig, 'der')
50868 var s = unpacked.s
50869 var r = unpacked.r
50870 checkValue(s, q)
50871 checkValue(r, q)
50872 var montp = BN.mont(p)
50873 var w = s.invm(q)
50874 var v = g.toRed(montp)
50875 .redPow(new BN(hash).mul(w).mod(q))
50876 .fromRed()
50877 .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed())
50878 .mod(p)
50879 .mod(q)
50880 return v.cmp(r) === 0
50881 }
50882
50883 function checkValue (b, q) {
50884 if (b.cmpn(0) <= 0) throw new Error('invalid sig')
50885 if (b.cmp(q) >= q) throw new Error('invalid sig')
50886 }
50887
50888 module.exports = verify
50889
50890 }).call(this,require("buffer").Buffer)
50891 },{"./curves.json":41,"bn.js":17,"buffer":47,"elliptic":67,"parse-asn1":105}],45:[function(require,module,exports){
50892 (function (global){
50893 'use strict';
50894
50895 var buffer = require('buffer');
50896 var Buffer = buffer.Buffer;
50897 var SlowBuffer = buffer.SlowBuffer;
50898 var MAX_LEN = buffer.kMaxLength || 2147483647;
50899 exports.alloc = function alloc(size, fill, encoding) {
50900 if (typeof Buffer.alloc === 'function') {
50901 return Buffer.alloc(size, fill, encoding);
50902 }
50903 if (typeof encoding === 'number') {
50904 throw new TypeError('encoding must not be number');
50905 }
50906 if (typeof size !== 'number') {
50907 throw new TypeError('size must be a number');
50908 }
50909 if (size > MAX_LEN) {
50910 throw new RangeError('size is too large');
50911 }
50912 var enc = encoding;
50913 var _fill = fill;
50914 if (_fill === undefined) {
50915 enc = undefined;
50916 _fill = 0;
50917 }
50918 var buf = new Buffer(size);
50919 if (typeof _fill === 'string') {
50920 var fillBuf = new Buffer(_fill, enc);
50921 var flen = fillBuf.length;
50922 var i = -1;
50923 while (++i < size) {
50924 buf[i] = fillBuf[i % flen];
50925 }
50926 } else {
50927 buf.fill(_fill);
50928 }
50929 return buf;
50930 }
50931 exports.allocUnsafe = function allocUnsafe(size) {
50932 if (typeof Buffer.allocUnsafe === 'function') {
50933 return Buffer.allocUnsafe(size);
50934 }
50935 if (typeof size !== 'number') {
50936 throw new TypeError('size must be a number');
50937 }
50938 if (size > MAX_LEN) {
50939 throw new RangeError('size is too large');
50940 }
50941 return new Buffer(size);
50942 }
50943 exports.from = function from(value, encodingOrOffset, length) {
50944 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
50945 return Buffer.from(value, encodingOrOffset, length);
50946 }
50947 if (typeof value === 'number') {
50948 throw new TypeError('"value" argument must not be a number');
50949 }
50950 if (typeof value === 'string') {
50951 return new Buffer(value, encodingOrOffset);
50952 }
50953 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
50954 var offset = encodingOrOffset;
50955 if (arguments.length === 1) {
50956 return new Buffer(value);
50957 }
50958 if (typeof offset === 'undefined') {
50959 offset = 0;
50960 }
50961 var len = length;
50962 if (typeof len === 'undefined') {
50963 len = value.byteLength - offset;
50964 }
50965 if (offset >= value.byteLength) {
50966 throw new RangeError('\'offset\' is out of bounds');
50967 }
50968 if (len > value.byteLength - offset) {
50969 throw new RangeError('\'length\' is out of bounds');
50970 }
50971 return new Buffer(value.slice(offset, offset + len));
50972 }
50973 if (Buffer.isBuffer(value)) {
50974 var out = new Buffer(value.length);
50975 value.copy(out, 0, 0, value.length);
50976 return out;
50977 }
50978 if (value) {
50979 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
50980 return new Buffer(value);
50981 }
50982 if (value.type === 'Buffer' && Array.isArray(value.data)) {
50983 return new Buffer(value.data);
50984 }
50985 }
50986
50987 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
50988 }
50989 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
50990 if (typeof Buffer.allocUnsafeSlow === 'function') {
50991 return Buffer.allocUnsafeSlow(size);
50992 }
50993 if (typeof size !== 'number') {
50994 throw new TypeError('size must be a number');
50995 }
50996 if (size >= MAX_LEN) {
50997 throw new RangeError('size is too large');
50998 }
50999 return new SlowBuffer(size);
51000 }
51001
51002 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
51003 },{"buffer":47}],46:[function(require,module,exports){
51004 (function (Buffer){
51005 module.exports = function xor (a, b) {
51006 var length = Math.min(a.length, b.length)
51007 var buffer = new Buffer(length)
51008
51009 for (var i = 0; i < length; ++i) {
51010 buffer[i] = a[i] ^ b[i]
51011 }
51012
51013 return buffer
51014 }
51015
51016 }).call(this,require("buffer").Buffer)
51017 },{"buffer":47}],47:[function(require,module,exports){
51018 /*!
51019 * The buffer module from node.js, for the browser.
51020 *
51021 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
51022 * @license MIT
51023 */
51024 /* eslint-disable no-proto */
51025
51026 'use strict'
51027
51028 var base64 = require('base64-js')
51029 var ieee754 = require('ieee754')
51030
51031 exports.Buffer = Buffer
51032 exports.SlowBuffer = SlowBuffer
51033 exports.INSPECT_MAX_BYTES = 50
51034
51035 var K_MAX_LENGTH = 0x7fffffff
51036 exports.kMaxLength = K_MAX_LENGTH
51037
51038 /**
51039 * If `Buffer.TYPED_ARRAY_SUPPORT`:
51040 * === true Use Uint8Array implementation (fastest)
51041 * === false Print warning and recommend using `buffer` v4.x which has an Object
51042 * implementation (most compatible, even IE6)
51043 *
51044 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
51045 * Opera 11.6+, iOS 4.2+.
51046 *
51047 * We report that the browser does not support typed arrays if the are not subclassable
51048 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
51049 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
51050 * for __proto__ and has a buggy typed array implementation.
51051 */
51052 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
51053
51054 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
51055 typeof console.error === 'function') {
51056 console.error(
51057 'This browser lacks typed array (Uint8Array) support which is required by ' +
51058 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
51059 )
51060 }
51061
51062 function typedArraySupport () {
51063 // Can typed array instances can be augmented?
51064 try {
51065 var arr = new Uint8Array(1)
51066 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
51067 return arr.foo() === 42
51068 } catch (e) {
51069 return false
51070 }
51071 }
51072
51073 function createBuffer (length) {
51074 if (length > K_MAX_LENGTH) {
51075 throw new RangeError('Invalid typed array length')
51076 }
51077 // Return an augmented `Uint8Array` instance
51078 var buf = new Uint8Array(length)
51079 buf.__proto__ = Buffer.prototype
51080 return buf
51081 }
51082
51083 /**
51084 * The Buffer constructor returns instances of `Uint8Array` that have their
51085 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
51086 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
51087 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
51088 * returns a single octet.
51089 *
51090 * The `Uint8Array` prototype remains unmodified.
51091 */
51092
51093 function Buffer (arg, encodingOrOffset, length) {
51094 // Common case.
51095 if (typeof arg === 'number') {
51096 if (typeof encodingOrOffset === 'string') {
51097 throw new Error(
51098 'If encoding is specified then the first argument must be a string'
51099 )
51100 }
51101 return allocUnsafe(arg)
51102 }
51103 return from(arg, encodingOrOffset, length)
51104 }
51105
51106 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
51107 if (typeof Symbol !== 'undefined' && Symbol.species &&
51108 Buffer[Symbol.species] === Buffer) {
51109 Object.defineProperty(Buffer, Symbol.species, {
51110 value: null,
51111 configurable: true,
51112 enumerable: false,
51113 writable: false
51114 })
51115 }
51116
51117 Buffer.poolSize = 8192 // not used by this implementation
51118
51119 function from (value, encodingOrOffset, length) {
51120 if (typeof value === 'number') {
51121 throw new TypeError('"value" argument must not be a number')
51122 }
51123
51124 if (value instanceof ArrayBuffer) {
51125 return fromArrayBuffer(value, encodingOrOffset, length)
51126 }
51127
51128 if (typeof value === 'string') {
51129 return fromString(value, encodingOrOffset)
51130 }
51131
51132 return fromObject(value)
51133 }
51134
51135 /**
51136 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
51137 * if value is a number.
51138 * Buffer.from(str[, encoding])
51139 * Buffer.from(array)
51140 * Buffer.from(buffer)
51141 * Buffer.from(arrayBuffer[, byteOffset[, length]])
51142 **/
51143 Buffer.from = function (value, encodingOrOffset, length) {
51144 return from(value, encodingOrOffset, length)
51145 }
51146
51147 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
51148 // https://github.com/feross/buffer/pull/148
51149 Buffer.prototype.__proto__ = Uint8Array.prototype
51150 Buffer.__proto__ = Uint8Array
51151
51152 function assertSize (size) {
51153 if (typeof size !== 'number') {
51154 throw new TypeError('"size" argument must be a number')
51155 } else if (size < 0) {
51156 throw new RangeError('"size" argument must not be negative')
51157 }
51158 }
51159
51160 function alloc (size, fill, encoding) {
51161 assertSize(size)
51162 if (size <= 0) {
51163 return createBuffer(size)
51164 }
51165 if (fill !== undefined) {
51166 // Only pay attention to encoding if it's a string. This
51167 // prevents accidentally sending in a number that would
51168 // be interpretted as a start offset.
51169 return typeof encoding === 'string'
51170 ? createBuffer(size).fill(fill, encoding)
51171 : createBuffer(size).fill(fill)
51172 }
51173 return createBuffer(size)
51174 }
51175
51176 /**
51177 * Creates a new filled Buffer instance.
51178 * alloc(size[, fill[, encoding]])
51179 **/
51180 Buffer.alloc = function (size, fill, encoding) {
51181 return alloc(size, fill, encoding)
51182 }
51183
51184 function allocUnsafe (size) {
51185 assertSize(size)
51186 return createBuffer(size < 0 ? 0 : checked(size) | 0)
51187 }
51188
51189 /**
51190 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
51191 * */
51192 Buffer.allocUnsafe = function (size) {
51193 return allocUnsafe(size)
51194 }
51195 /**
51196 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
51197 */
51198 Buffer.allocUnsafeSlow = function (size) {
51199 return allocUnsafe(size)
51200 }
51201
51202 function fromString (string, encoding) {
51203 if (typeof encoding !== 'string' || encoding === '') {
51204 encoding = 'utf8'
51205 }
51206
51207 if (!Buffer.isEncoding(encoding)) {
51208 throw new TypeError('"encoding" must be a valid string encoding')
51209 }
51210
51211 var length = byteLength(string, encoding) | 0
51212 var buf = createBuffer(length)
51213
51214 var actual = buf.write(string, encoding)
51215
51216 if (actual !== length) {
51217 // Writing a hex string, for example, that contains invalid characters will
51218 // cause everything after the first invalid character to be ignored. (e.g.
51219 // 'abxxcd' will be treated as 'ab')
51220 buf = buf.slice(0, actual)
51221 }
51222
51223 return buf
51224 }
51225
51226 function fromArrayLike (array) {
51227 var length = array.length < 0 ? 0 : checked(array.length) | 0
51228 var buf = createBuffer(length)
51229 for (var i = 0; i < length; i += 1) {
51230 buf[i] = array[i] & 255
51231 }
51232 return buf
51233 }
51234
51235 function fromArrayBuffer (array, byteOffset, length) {
51236 if (byteOffset < 0 || array.byteLength < byteOffset) {
51237 throw new RangeError('\'offset\' is out of bounds')
51238 }
51239
51240 if (array.byteLength < byteOffset + (length || 0)) {
51241 throw new RangeError('\'length\' is out of bounds')
51242 }
51243
51244 var buf
51245 if (byteOffset === undefined && length === undefined) {
51246 buf = new Uint8Array(array)
51247 } else if (length === undefined) {
51248 buf = new Uint8Array(array, byteOffset)
51249 } else {
51250 buf = new Uint8Array(array, byteOffset, length)
51251 }
51252
51253 // Return an augmented `Uint8Array` instance
51254 buf.__proto__ = Buffer.prototype
51255 return buf
51256 }
51257
51258 function fromObject (obj) {
51259 if (Buffer.isBuffer(obj)) {
51260 var len = checked(obj.length) | 0
51261 var buf = createBuffer(len)
51262
51263 if (buf.length === 0) {
51264 return buf
51265 }
51266
51267 obj.copy(buf, 0, 0, len)
51268 return buf
51269 }
51270
51271 if (obj) {
51272 if (isArrayBufferView(obj) || 'length' in obj) {
51273 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
51274 return createBuffer(0)
51275 }
51276 return fromArrayLike(obj)
51277 }
51278
51279 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
51280 return fromArrayLike(obj.data)
51281 }
51282 }
51283
51284 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
51285 }
51286
51287 function checked (length) {
51288 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
51289 // length is NaN (which is otherwise coerced to zero.)
51290 if (length >= K_MAX_LENGTH) {
51291 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
51292 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
51293 }
51294 return length | 0
51295 }
51296
51297 function SlowBuffer (length) {
51298 if (+length != length) { // eslint-disable-line eqeqeq
51299 length = 0
51300 }
51301 return Buffer.alloc(+length)
51302 }
51303
51304 Buffer.isBuffer = function isBuffer (b) {
51305 return b != null && b._isBuffer === true
51306 }
51307
51308 Buffer.compare = function compare (a, b) {
51309 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
51310 throw new TypeError('Arguments must be Buffers')
51311 }
51312
51313 if (a === b) return 0
51314
51315 var x = a.length
51316 var y = b.length
51317
51318 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
51319 if (a[i] !== b[i]) {
51320 x = a[i]
51321 y = b[i]
51322 break
51323 }
51324 }
51325
51326 if (x < y) return -1
51327 if (y < x) return 1
51328 return 0
51329 }
51330
51331 Buffer.isEncoding = function isEncoding (encoding) {
51332 switch (String(encoding).toLowerCase()) {
51333 case 'hex':
51334 case 'utf8':
51335 case 'utf-8':
51336 case 'ascii':
51337 case 'latin1':
51338 case 'binary':
51339 case 'base64':
51340 case 'ucs2':
51341 case 'ucs-2':
51342 case 'utf16le':
51343 case 'utf-16le':
51344 return true
51345 default:
51346 return false
51347 }
51348 }
51349
51350 Buffer.concat = function concat (list, length) {
51351 if (!Array.isArray(list)) {
51352 throw new TypeError('"list" argument must be an Array of Buffers')
51353 }
51354
51355 if (list.length === 0) {
51356 return Buffer.alloc(0)
51357 }
51358
51359 var i
51360 if (length === undefined) {
51361 length = 0
51362 for (i = 0; i < list.length; ++i) {
51363 length += list[i].length
51364 }
51365 }
51366
51367 var buffer = Buffer.allocUnsafe(length)
51368 var pos = 0
51369 for (i = 0; i < list.length; ++i) {
51370 var buf = list[i]
51371 if (!Buffer.isBuffer(buf)) {
51372 throw new TypeError('"list" argument must be an Array of Buffers')
51373 }
51374 buf.copy(buffer, pos)
51375 pos += buf.length
51376 }
51377 return buffer
51378 }
51379
51380 function byteLength (string, encoding) {
51381 if (Buffer.isBuffer(string)) {
51382 return string.length
51383 }
51384 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
51385 return string.byteLength
51386 }
51387 if (typeof string !== 'string') {
51388 string = '' + string
51389 }
51390
51391 var len = string.length
51392 if (len === 0) return 0
51393
51394 // Use a for loop to avoid recursion
51395 var loweredCase = false
51396 for (;;) {
51397 switch (encoding) {
51398 case 'ascii':
51399 case 'latin1':
51400 case 'binary':
51401 return len
51402 case 'utf8':
51403 case 'utf-8':
51404 case undefined:
51405 return utf8ToBytes(string).length
51406 case 'ucs2':
51407 case 'ucs-2':
51408 case 'utf16le':
51409 case 'utf-16le':
51410 return len * 2
51411 case 'hex':
51412 return len >>> 1
51413 case 'base64':
51414 return base64ToBytes(string).length
51415 default:
51416 if (loweredCase) return utf8ToBytes(string).length // assume utf8
51417 encoding = ('' + encoding).toLowerCase()
51418 loweredCase = true
51419 }
51420 }
51421 }
51422 Buffer.byteLength = byteLength
51423
51424 function slowToString (encoding, start, end) {
51425 var loweredCase = false
51426
51427 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
51428 // property of a typed array.
51429
51430 // This behaves neither like String nor Uint8Array in that we set start/end
51431 // to their upper/lower bounds if the value passed is out of range.
51432 // undefined is handled specially as per ECMA-262 6th Edition,
51433 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
51434 if (start === undefined || start < 0) {
51435 start = 0
51436 }
51437 // Return early if start > this.length. Done here to prevent potential uint32
51438 // coercion fail below.
51439 if (start > this.length) {
51440 return ''
51441 }
51442
51443 if (end === undefined || end > this.length) {
51444 end = this.length
51445 }
51446
51447 if (end <= 0) {
51448 return ''
51449 }
51450
51451 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
51452 end >>>= 0
51453 start >>>= 0
51454
51455 if (end <= start) {
51456 return ''
51457 }
51458
51459 if (!encoding) encoding = 'utf8'
51460
51461 while (true) {
51462 switch (encoding) {
51463 case 'hex':
51464 return hexSlice(this, start, end)
51465
51466 case 'utf8':
51467 case 'utf-8':
51468 return utf8Slice(this, start, end)
51469
51470 case 'ascii':
51471 return asciiSlice(this, start, end)
51472
51473 case 'latin1':
51474 case 'binary':
51475 return latin1Slice(this, start, end)
51476
51477 case 'base64':
51478 return base64Slice(this, start, end)
51479
51480 case 'ucs2':
51481 case 'ucs-2':
51482 case 'utf16le':
51483 case 'utf-16le':
51484 return utf16leSlice(this, start, end)
51485
51486 default:
51487 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51488 encoding = (encoding + '').toLowerCase()
51489 loweredCase = true
51490 }
51491 }
51492 }
51493
51494 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
51495 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
51496 // reliably in a browserify context because there could be multiple different
51497 // copies of the 'buffer' package in use. This method works even for Buffer
51498 // instances that were created from another copy of the `buffer` package.
51499 // See: https://github.com/feross/buffer/issues/154
51500 Buffer.prototype._isBuffer = true
51501
51502 function swap (b, n, m) {
51503 var i = b[n]
51504 b[n] = b[m]
51505 b[m] = i
51506 }
51507
51508 Buffer.prototype.swap16 = function swap16 () {
51509 var len = this.length
51510 if (len % 2 !== 0) {
51511 throw new RangeError('Buffer size must be a multiple of 16-bits')
51512 }
51513 for (var i = 0; i < len; i += 2) {
51514 swap(this, i, i + 1)
51515 }
51516 return this
51517 }
51518
51519 Buffer.prototype.swap32 = function swap32 () {
51520 var len = this.length
51521 if (len % 4 !== 0) {
51522 throw new RangeError('Buffer size must be a multiple of 32-bits')
51523 }
51524 for (var i = 0; i < len; i += 4) {
51525 swap(this, i, i + 3)
51526 swap(this, i + 1, i + 2)
51527 }
51528 return this
51529 }
51530
51531 Buffer.prototype.swap64 = function swap64 () {
51532 var len = this.length
51533 if (len % 8 !== 0) {
51534 throw new RangeError('Buffer size must be a multiple of 64-bits')
51535 }
51536 for (var i = 0; i < len; i += 8) {
51537 swap(this, i, i + 7)
51538 swap(this, i + 1, i + 6)
51539 swap(this, i + 2, i + 5)
51540 swap(this, i + 3, i + 4)
51541 }
51542 return this
51543 }
51544
51545 Buffer.prototype.toString = function toString () {
51546 var length = this.length
51547 if (length === 0) return ''
51548 if (arguments.length === 0) return utf8Slice(this, 0, length)
51549 return slowToString.apply(this, arguments)
51550 }
51551
51552 Buffer.prototype.equals = function equals (b) {
51553 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
51554 if (this === b) return true
51555 return Buffer.compare(this, b) === 0
51556 }
51557
51558 Buffer.prototype.inspect = function inspect () {
51559 var str = ''
51560 var max = exports.INSPECT_MAX_BYTES
51561 if (this.length > 0) {
51562 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
51563 if (this.length > max) str += ' ... '
51564 }
51565 return '<Buffer ' + str + '>'
51566 }
51567
51568 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
51569 if (!Buffer.isBuffer(target)) {
51570 throw new TypeError('Argument must be a Buffer')
51571 }
51572
51573 if (start === undefined) {
51574 start = 0
51575 }
51576 if (end === undefined) {
51577 end = target ? target.length : 0
51578 }
51579 if (thisStart === undefined) {
51580 thisStart = 0
51581 }
51582 if (thisEnd === undefined) {
51583 thisEnd = this.length
51584 }
51585
51586 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
51587 throw new RangeError('out of range index')
51588 }
51589
51590 if (thisStart >= thisEnd && start >= end) {
51591 return 0
51592 }
51593 if (thisStart >= thisEnd) {
51594 return -1
51595 }
51596 if (start >= end) {
51597 return 1
51598 }
51599
51600 start >>>= 0
51601 end >>>= 0
51602 thisStart >>>= 0
51603 thisEnd >>>= 0
51604
51605 if (this === target) return 0
51606
51607 var x = thisEnd - thisStart
51608 var y = end - start
51609 var len = Math.min(x, y)
51610
51611 var thisCopy = this.slice(thisStart, thisEnd)
51612 var targetCopy = target.slice(start, end)
51613
51614 for (var i = 0; i < len; ++i) {
51615 if (thisCopy[i] !== targetCopy[i]) {
51616 x = thisCopy[i]
51617 y = targetCopy[i]
51618 break
51619 }
51620 }
51621
51622 if (x < y) return -1
51623 if (y < x) return 1
51624 return 0
51625 }
51626
51627 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
51628 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
51629 //
51630 // Arguments:
51631 // - buffer - a Buffer to search
51632 // - val - a string, Buffer, or number
51633 // - byteOffset - an index into `buffer`; will be clamped to an int32
51634 // - encoding - an optional encoding, relevant is val is a string
51635 // - dir - true for indexOf, false for lastIndexOf
51636 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
51637 // Empty buffer means no match
51638 if (buffer.length === 0) return -1
51639
51640 // Normalize byteOffset
51641 if (typeof byteOffset === 'string') {
51642 encoding = byteOffset
51643 byteOffset = 0
51644 } else if (byteOffset > 0x7fffffff) {
51645 byteOffset = 0x7fffffff
51646 } else if (byteOffset < -0x80000000) {
51647 byteOffset = -0x80000000
51648 }
51649 byteOffset = +byteOffset // Coerce to Number.
51650 if (numberIsNaN(byteOffset)) {
51651 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
51652 byteOffset = dir ? 0 : (buffer.length - 1)
51653 }
51654
51655 // Normalize byteOffset: negative offsets start from the end of the buffer
51656 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
51657 if (byteOffset >= buffer.length) {
51658 if (dir) return -1
51659 else byteOffset = buffer.length - 1
51660 } else if (byteOffset < 0) {
51661 if (dir) byteOffset = 0
51662 else return -1
51663 }
51664
51665 // Normalize val
51666 if (typeof val === 'string') {
51667 val = Buffer.from(val, encoding)
51668 }
51669
51670 // Finally, search either indexOf (if dir is true) or lastIndexOf
51671 if (Buffer.isBuffer(val)) {
51672 // Special case: looking for empty string/buffer always fails
51673 if (val.length === 0) {
51674 return -1
51675 }
51676 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
51677 } else if (typeof val === 'number') {
51678 val = val & 0xFF // Search for a byte value [0-255]
51679 if (typeof Uint8Array.prototype.indexOf === 'function') {
51680 if (dir) {
51681 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
51682 } else {
51683 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
51684 }
51685 }
51686 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
51687 }
51688
51689 throw new TypeError('val must be string, number or Buffer')
51690 }
51691
51692 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
51693 var indexSize = 1
51694 var arrLength = arr.length
51695 var valLength = val.length
51696
51697 if (encoding !== undefined) {
51698 encoding = String(encoding).toLowerCase()
51699 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
51700 encoding === 'utf16le' || encoding === 'utf-16le') {
51701 if (arr.length < 2 || val.length < 2) {
51702 return -1
51703 }
51704 indexSize = 2
51705 arrLength /= 2
51706 valLength /= 2
51707 byteOffset /= 2
51708 }
51709 }
51710
51711 function read (buf, i) {
51712 if (indexSize === 1) {
51713 return buf[i]
51714 } else {
51715 return buf.readUInt16BE(i * indexSize)
51716 }
51717 }
51718
51719 var i
51720 if (dir) {
51721 var foundIndex = -1
51722 for (i = byteOffset; i < arrLength; i++) {
51723 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
51724 if (foundIndex === -1) foundIndex = i
51725 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
51726 } else {
51727 if (foundIndex !== -1) i -= i - foundIndex
51728 foundIndex = -1
51729 }
51730 }
51731 } else {
51732 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
51733 for (i = byteOffset; i >= 0; i--) {
51734 var found = true
51735 for (var j = 0; j < valLength; j++) {
51736 if (read(arr, i + j) !== read(val, j)) {
51737 found = false
51738 break
51739 }
51740 }
51741 if (found) return i
51742 }
51743 }
51744
51745 return -1
51746 }
51747
51748 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
51749 return this.indexOf(val, byteOffset, encoding) !== -1
51750 }
51751
51752 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
51753 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
51754 }
51755
51756 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
51757 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
51758 }
51759
51760 function hexWrite (buf, string, offset, length) {
51761 offset = Number(offset) || 0
51762 var remaining = buf.length - offset
51763 if (!length) {
51764 length = remaining
51765 } else {
51766 length = Number(length)
51767 if (length > remaining) {
51768 length = remaining
51769 }
51770 }
51771
51772 // must be an even number of digits
51773 var strLen = string.length
51774 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
51775
51776 if (length > strLen / 2) {
51777 length = strLen / 2
51778 }
51779 for (var i = 0; i < length; ++i) {
51780 var parsed = parseInt(string.substr(i * 2, 2), 16)
51781 if (numberIsNaN(parsed)) return i
51782 buf[offset + i] = parsed
51783 }
51784 return i
51785 }
51786
51787 function utf8Write (buf, string, offset, length) {
51788 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
51789 }
51790
51791 function asciiWrite (buf, string, offset, length) {
51792 return blitBuffer(asciiToBytes(string), buf, offset, length)
51793 }
51794
51795 function latin1Write (buf, string, offset, length) {
51796 return asciiWrite(buf, string, offset, length)
51797 }
51798
51799 function base64Write (buf, string, offset, length) {
51800 return blitBuffer(base64ToBytes(string), buf, offset, length)
51801 }
51802
51803 function ucs2Write (buf, string, offset, length) {
51804 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
51805 }
51806
51807 Buffer.prototype.write = function write (string, offset, length, encoding) {
51808 // Buffer#write(string)
51809 if (offset === undefined) {
51810 encoding = 'utf8'
51811 length = this.length
51812 offset = 0
51813 // Buffer#write(string, encoding)
51814 } else if (length === undefined && typeof offset === 'string') {
51815 encoding = offset
51816 length = this.length
51817 offset = 0
51818 // Buffer#write(string, offset[, length][, encoding])
51819 } else if (isFinite(offset)) {
51820 offset = offset >>> 0
51821 if (isFinite(length)) {
51822 length = length >>> 0
51823 if (encoding === undefined) encoding = 'utf8'
51824 } else {
51825 encoding = length
51826 length = undefined
51827 }
51828 } else {
51829 throw new Error(
51830 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
51831 )
51832 }
51833
51834 var remaining = this.length - offset
51835 if (length === undefined || length > remaining) length = remaining
51836
51837 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
51838 throw new RangeError('Attempt to write outside buffer bounds')
51839 }
51840
51841 if (!encoding) encoding = 'utf8'
51842
51843 var loweredCase = false
51844 for (;;) {
51845 switch (encoding) {
51846 case 'hex':
51847 return hexWrite(this, string, offset, length)
51848
51849 case 'utf8':
51850 case 'utf-8':
51851 return utf8Write(this, string, offset, length)
51852
51853 case 'ascii':
51854 return asciiWrite(this, string, offset, length)
51855
51856 case 'latin1':
51857 case 'binary':
51858 return latin1Write(this, string, offset, length)
51859
51860 case 'base64':
51861 // Warning: maxLength not taken into account in base64Write
51862 return base64Write(this, string, offset, length)
51863
51864 case 'ucs2':
51865 case 'ucs-2':
51866 case 'utf16le':
51867 case 'utf-16le':
51868 return ucs2Write(this, string, offset, length)
51869
51870 default:
51871 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
51872 encoding = ('' + encoding).toLowerCase()
51873 loweredCase = true
51874 }
51875 }
51876 }
51877
51878 Buffer.prototype.toJSON = function toJSON () {
51879 return {
51880 type: 'Buffer',
51881 data: Array.prototype.slice.call(this._arr || this, 0)
51882 }
51883 }
51884
51885 function base64Slice (buf, start, end) {
51886 if (start === 0 && end === buf.length) {
51887 return base64.fromByteArray(buf)
51888 } else {
51889 return base64.fromByteArray(buf.slice(start, end))
51890 }
51891 }
51892
51893 function utf8Slice (buf, start, end) {
51894 end = Math.min(buf.length, end)
51895 var res = []
51896
51897 var i = start
51898 while (i < end) {
51899 var firstByte = buf[i]
51900 var codePoint = null
51901 var bytesPerSequence = (firstByte > 0xEF) ? 4
51902 : (firstByte > 0xDF) ? 3
51903 : (firstByte > 0xBF) ? 2
51904 : 1
51905
51906 if (i + bytesPerSequence <= end) {
51907 var secondByte, thirdByte, fourthByte, tempCodePoint
51908
51909 switch (bytesPerSequence) {
51910 case 1:
51911 if (firstByte < 0x80) {
51912 codePoint = firstByte
51913 }
51914 break
51915 case 2:
51916 secondByte = buf[i + 1]
51917 if ((secondByte & 0xC0) === 0x80) {
51918 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
51919 if (tempCodePoint > 0x7F) {
51920 codePoint = tempCodePoint
51921 }
51922 }
51923 break
51924 case 3:
51925 secondByte = buf[i + 1]
51926 thirdByte = buf[i + 2]
51927 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
51928 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
51929 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
51930 codePoint = tempCodePoint
51931 }
51932 }
51933 break
51934 case 4:
51935 secondByte = buf[i + 1]
51936 thirdByte = buf[i + 2]
51937 fourthByte = buf[i + 3]
51938 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
51939 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
51940 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
51941 codePoint = tempCodePoint
51942 }
51943 }
51944 }
51945 }
51946
51947 if (codePoint === null) {
51948 // we did not generate a valid codePoint so insert a
51949 // replacement char (U+FFFD) and advance only 1 byte
51950 codePoint = 0xFFFD
51951 bytesPerSequence = 1
51952 } else if (codePoint > 0xFFFF) {
51953 // encode to utf16 (surrogate pair dance)
51954 codePoint -= 0x10000
51955 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
51956 codePoint = 0xDC00 | codePoint & 0x3FF
51957 }
51958
51959 res.push(codePoint)
51960 i += bytesPerSequence
51961 }
51962
51963 return decodeCodePointsArray(res)
51964 }
51965
51966 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
51967 // the lowest limit is Chrome, with 0x10000 args.
51968 // We go 1 magnitude less, for safety
51969 var MAX_ARGUMENTS_LENGTH = 0x1000
51970
51971 function decodeCodePointsArray (codePoints) {
51972 var len = codePoints.length
51973 if (len <= MAX_ARGUMENTS_LENGTH) {
51974 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
51975 }
51976
51977 // Decode in chunks to avoid "call stack size exceeded".
51978 var res = ''
51979 var i = 0
51980 while (i < len) {
51981 res += String.fromCharCode.apply(
51982 String,
51983 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
51984 )
51985 }
51986 return res
51987 }
51988
51989 function asciiSlice (buf, start, end) {
51990 var ret = ''
51991 end = Math.min(buf.length, end)
51992
51993 for (var i = start; i < end; ++i) {
51994 ret += String.fromCharCode(buf[i] & 0x7F)
51995 }
51996 return ret
51997 }
51998
51999 function latin1Slice (buf, start, end) {
52000 var ret = ''
52001 end = Math.min(buf.length, end)
52002
52003 for (var i = start; i < end; ++i) {
52004 ret += String.fromCharCode(buf[i])
52005 }
52006 return ret
52007 }
52008
52009 function hexSlice (buf, start, end) {
52010 var len = buf.length
52011
52012 if (!start || start < 0) start = 0
52013 if (!end || end < 0 || end > len) end = len
52014
52015 var out = ''
52016 for (var i = start; i < end; ++i) {
52017 out += toHex(buf[i])
52018 }
52019 return out
52020 }
52021
52022 function utf16leSlice (buf, start, end) {
52023 var bytes = buf.slice(start, end)
52024 var res = ''
52025 for (var i = 0; i < bytes.length; i += 2) {
52026 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
52027 }
52028 return res
52029 }
52030
52031 Buffer.prototype.slice = function slice (start, end) {
52032 var len = this.length
52033 start = ~~start
52034 end = end === undefined ? len : ~~end
52035
52036 if (start < 0) {
52037 start += len
52038 if (start < 0) start = 0
52039 } else if (start > len) {
52040 start = len
52041 }
52042
52043 if (end < 0) {
52044 end += len
52045 if (end < 0) end = 0
52046 } else if (end > len) {
52047 end = len
52048 }
52049
52050 if (end < start) end = start
52051
52052 var newBuf = this.subarray(start, end)
52053 // Return an augmented `Uint8Array` instance
52054 newBuf.__proto__ = Buffer.prototype
52055 return newBuf
52056 }
52057
52058 /*
52059 * Need to make sure that buffer isn't trying to write out of bounds.
52060 */
52061 function checkOffset (offset, ext, length) {
52062 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
52063 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
52064 }
52065
52066 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
52067 offset = offset >>> 0
52068 byteLength = byteLength >>> 0
52069 if (!noAssert) checkOffset(offset, byteLength, this.length)
52070
52071 var val = this[offset]
52072 var mul = 1
52073 var i = 0
52074 while (++i < byteLength && (mul *= 0x100)) {
52075 val += this[offset + i] * mul
52076 }
52077
52078 return val
52079 }
52080
52081 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
52082 offset = offset >>> 0
52083 byteLength = byteLength >>> 0
52084 if (!noAssert) {
52085 checkOffset(offset, byteLength, this.length)
52086 }
52087
52088 var val = this[offset + --byteLength]
52089 var mul = 1
52090 while (byteLength > 0 && (mul *= 0x100)) {
52091 val += this[offset + --byteLength] * mul
52092 }
52093
52094 return val
52095 }
52096
52097 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
52098 offset = offset >>> 0
52099 if (!noAssert) checkOffset(offset, 1, this.length)
52100 return this[offset]
52101 }
52102
52103 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
52104 offset = offset >>> 0
52105 if (!noAssert) checkOffset(offset, 2, this.length)
52106 return this[offset] | (this[offset + 1] << 8)
52107 }
52108
52109 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
52110 offset = offset >>> 0
52111 if (!noAssert) checkOffset(offset, 2, this.length)
52112 return (this[offset] << 8) | this[offset + 1]
52113 }
52114
52115 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
52116 offset = offset >>> 0
52117 if (!noAssert) checkOffset(offset, 4, this.length)
52118
52119 return ((this[offset]) |
52120 (this[offset + 1] << 8) |
52121 (this[offset + 2] << 16)) +
52122 (this[offset + 3] * 0x1000000)
52123 }
52124
52125 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
52126 offset = offset >>> 0
52127 if (!noAssert) checkOffset(offset, 4, this.length)
52128
52129 return (this[offset] * 0x1000000) +
52130 ((this[offset + 1] << 16) |
52131 (this[offset + 2] << 8) |
52132 this[offset + 3])
52133 }
52134
52135 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
52136 offset = offset >>> 0
52137 byteLength = byteLength >>> 0
52138 if (!noAssert) checkOffset(offset, byteLength, this.length)
52139
52140 var val = this[offset]
52141 var mul = 1
52142 var i = 0
52143 while (++i < byteLength && (mul *= 0x100)) {
52144 val += this[offset + i] * mul
52145 }
52146 mul *= 0x80
52147
52148 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52149
52150 return val
52151 }
52152
52153 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
52154 offset = offset >>> 0
52155 byteLength = byteLength >>> 0
52156 if (!noAssert) checkOffset(offset, byteLength, this.length)
52157
52158 var i = byteLength
52159 var mul = 1
52160 var val = this[offset + --i]
52161 while (i > 0 && (mul *= 0x100)) {
52162 val += this[offset + --i] * mul
52163 }
52164 mul *= 0x80
52165
52166 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
52167
52168 return val
52169 }
52170
52171 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
52172 offset = offset >>> 0
52173 if (!noAssert) checkOffset(offset, 1, this.length)
52174 if (!(this[offset] & 0x80)) return (this[offset])
52175 return ((0xff - this[offset] + 1) * -1)
52176 }
52177
52178 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
52179 offset = offset >>> 0
52180 if (!noAssert) checkOffset(offset, 2, this.length)
52181 var val = this[offset] | (this[offset + 1] << 8)
52182 return (val & 0x8000) ? val | 0xFFFF0000 : val
52183 }
52184
52185 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
52186 offset = offset >>> 0
52187 if (!noAssert) checkOffset(offset, 2, this.length)
52188 var val = this[offset + 1] | (this[offset] << 8)
52189 return (val & 0x8000) ? val | 0xFFFF0000 : val
52190 }
52191
52192 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
52193 offset = offset >>> 0
52194 if (!noAssert) checkOffset(offset, 4, this.length)
52195
52196 return (this[offset]) |
52197 (this[offset + 1] << 8) |
52198 (this[offset + 2] << 16) |
52199 (this[offset + 3] << 24)
52200 }
52201
52202 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
52203 offset = offset >>> 0
52204 if (!noAssert) checkOffset(offset, 4, this.length)
52205
52206 return (this[offset] << 24) |
52207 (this[offset + 1] << 16) |
52208 (this[offset + 2] << 8) |
52209 (this[offset + 3])
52210 }
52211
52212 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
52213 offset = offset >>> 0
52214 if (!noAssert) checkOffset(offset, 4, this.length)
52215 return ieee754.read(this, offset, true, 23, 4)
52216 }
52217
52218 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
52219 offset = offset >>> 0
52220 if (!noAssert) checkOffset(offset, 4, this.length)
52221 return ieee754.read(this, offset, false, 23, 4)
52222 }
52223
52224 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
52225 offset = offset >>> 0
52226 if (!noAssert) checkOffset(offset, 8, this.length)
52227 return ieee754.read(this, offset, true, 52, 8)
52228 }
52229
52230 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
52231 offset = offset >>> 0
52232 if (!noAssert) checkOffset(offset, 8, this.length)
52233 return ieee754.read(this, offset, false, 52, 8)
52234 }
52235
52236 function checkInt (buf, value, offset, ext, max, min) {
52237 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
52238 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
52239 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52240 }
52241
52242 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
52243 value = +value
52244 offset = offset >>> 0
52245 byteLength = byteLength >>> 0
52246 if (!noAssert) {
52247 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52248 checkInt(this, value, offset, byteLength, maxBytes, 0)
52249 }
52250
52251 var mul = 1
52252 var i = 0
52253 this[offset] = value & 0xFF
52254 while (++i < byteLength && (mul *= 0x100)) {
52255 this[offset + i] = (value / mul) & 0xFF
52256 }
52257
52258 return offset + byteLength
52259 }
52260
52261 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
52262 value = +value
52263 offset = offset >>> 0
52264 byteLength = byteLength >>> 0
52265 if (!noAssert) {
52266 var maxBytes = Math.pow(2, 8 * byteLength) - 1
52267 checkInt(this, value, offset, byteLength, maxBytes, 0)
52268 }
52269
52270 var i = byteLength - 1
52271 var mul = 1
52272 this[offset + i] = value & 0xFF
52273 while (--i >= 0 && (mul *= 0x100)) {
52274 this[offset + i] = (value / mul) & 0xFF
52275 }
52276
52277 return offset + byteLength
52278 }
52279
52280 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
52281 value = +value
52282 offset = offset >>> 0
52283 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
52284 this[offset] = (value & 0xff)
52285 return offset + 1
52286 }
52287
52288 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
52289 value = +value
52290 offset = offset >>> 0
52291 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52292 this[offset] = (value & 0xff)
52293 this[offset + 1] = (value >>> 8)
52294 return offset + 2
52295 }
52296
52297 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
52298 value = +value
52299 offset = offset >>> 0
52300 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
52301 this[offset] = (value >>> 8)
52302 this[offset + 1] = (value & 0xff)
52303 return offset + 2
52304 }
52305
52306 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
52307 value = +value
52308 offset = offset >>> 0
52309 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52310 this[offset + 3] = (value >>> 24)
52311 this[offset + 2] = (value >>> 16)
52312 this[offset + 1] = (value >>> 8)
52313 this[offset] = (value & 0xff)
52314 return offset + 4
52315 }
52316
52317 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
52318 value = +value
52319 offset = offset >>> 0
52320 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
52321 this[offset] = (value >>> 24)
52322 this[offset + 1] = (value >>> 16)
52323 this[offset + 2] = (value >>> 8)
52324 this[offset + 3] = (value & 0xff)
52325 return offset + 4
52326 }
52327
52328 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
52329 value = +value
52330 offset = offset >>> 0
52331 if (!noAssert) {
52332 var limit = Math.pow(2, (8 * byteLength) - 1)
52333
52334 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52335 }
52336
52337 var i = 0
52338 var mul = 1
52339 var sub = 0
52340 this[offset] = value & 0xFF
52341 while (++i < byteLength && (mul *= 0x100)) {
52342 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
52343 sub = 1
52344 }
52345 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52346 }
52347
52348 return offset + byteLength
52349 }
52350
52351 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
52352 value = +value
52353 offset = offset >>> 0
52354 if (!noAssert) {
52355 var limit = Math.pow(2, (8 * byteLength) - 1)
52356
52357 checkInt(this, value, offset, byteLength, limit - 1, -limit)
52358 }
52359
52360 var i = byteLength - 1
52361 var mul = 1
52362 var sub = 0
52363 this[offset + i] = value & 0xFF
52364 while (--i >= 0 && (mul *= 0x100)) {
52365 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
52366 sub = 1
52367 }
52368 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
52369 }
52370
52371 return offset + byteLength
52372 }
52373
52374 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
52375 value = +value
52376 offset = offset >>> 0
52377 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
52378 if (value < 0) value = 0xff + value + 1
52379 this[offset] = (value & 0xff)
52380 return offset + 1
52381 }
52382
52383 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
52384 value = +value
52385 offset = offset >>> 0
52386 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52387 this[offset] = (value & 0xff)
52388 this[offset + 1] = (value >>> 8)
52389 return offset + 2
52390 }
52391
52392 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
52393 value = +value
52394 offset = offset >>> 0
52395 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
52396 this[offset] = (value >>> 8)
52397 this[offset + 1] = (value & 0xff)
52398 return offset + 2
52399 }
52400
52401 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
52402 value = +value
52403 offset = offset >>> 0
52404 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52405 this[offset] = (value & 0xff)
52406 this[offset + 1] = (value >>> 8)
52407 this[offset + 2] = (value >>> 16)
52408 this[offset + 3] = (value >>> 24)
52409 return offset + 4
52410 }
52411
52412 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
52413 value = +value
52414 offset = offset >>> 0
52415 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
52416 if (value < 0) value = 0xffffffff + value + 1
52417 this[offset] = (value >>> 24)
52418 this[offset + 1] = (value >>> 16)
52419 this[offset + 2] = (value >>> 8)
52420 this[offset + 3] = (value & 0xff)
52421 return offset + 4
52422 }
52423
52424 function checkIEEE754 (buf, value, offset, ext, max, min) {
52425 if (offset + ext > buf.length) throw new RangeError('Index out of range')
52426 if (offset < 0) throw new RangeError('Index out of range')
52427 }
52428
52429 function writeFloat (buf, value, offset, littleEndian, noAssert) {
52430 value = +value
52431 offset = offset >>> 0
52432 if (!noAssert) {
52433 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
52434 }
52435 ieee754.write(buf, value, offset, littleEndian, 23, 4)
52436 return offset + 4
52437 }
52438
52439 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
52440 return writeFloat(this, value, offset, true, noAssert)
52441 }
52442
52443 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
52444 return writeFloat(this, value, offset, false, noAssert)
52445 }
52446
52447 function writeDouble (buf, value, offset, littleEndian, noAssert) {
52448 value = +value
52449 offset = offset >>> 0
52450 if (!noAssert) {
52451 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
52452 }
52453 ieee754.write(buf, value, offset, littleEndian, 52, 8)
52454 return offset + 8
52455 }
52456
52457 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
52458 return writeDouble(this, value, offset, true, noAssert)
52459 }
52460
52461 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
52462 return writeDouble(this, value, offset, false, noAssert)
52463 }
52464
52465 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
52466 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
52467 if (!start) start = 0
52468 if (!end && end !== 0) end = this.length
52469 if (targetStart >= target.length) targetStart = target.length
52470 if (!targetStart) targetStart = 0
52471 if (end > 0 && end < start) end = start
52472
52473 // Copy 0 bytes; we're done
52474 if (end === start) return 0
52475 if (target.length === 0 || this.length === 0) return 0
52476
52477 // Fatal error conditions
52478 if (targetStart < 0) {
52479 throw new RangeError('targetStart out of bounds')
52480 }
52481 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
52482 if (end < 0) throw new RangeError('sourceEnd out of bounds')
52483
52484 // Are we oob?
52485 if (end > this.length) end = this.length
52486 if (target.length - targetStart < end - start) {
52487 end = target.length - targetStart + start
52488 }
52489
52490 var len = end - start
52491 var i
52492
52493 if (this === target && start < targetStart && targetStart < end) {
52494 // descending copy from end
52495 for (i = len - 1; i >= 0; --i) {
52496 target[i + targetStart] = this[i + start]
52497 }
52498 } else if (len < 1000) {
52499 // ascending copy from start
52500 for (i = 0; i < len; ++i) {
52501 target[i + targetStart] = this[i + start]
52502 }
52503 } else {
52504 Uint8Array.prototype.set.call(
52505 target,
52506 this.subarray(start, start + len),
52507 targetStart
52508 )
52509 }
52510
52511 return len
52512 }
52513
52514 // Usage:
52515 // buffer.fill(number[, offset[, end]])
52516 // buffer.fill(buffer[, offset[, end]])
52517 // buffer.fill(string[, offset[, end]][, encoding])
52518 Buffer.prototype.fill = function fill (val, start, end, encoding) {
52519 // Handle string cases:
52520 if (typeof val === 'string') {
52521 if (typeof start === 'string') {
52522 encoding = start
52523 start = 0
52524 end = this.length
52525 } else if (typeof end === 'string') {
52526 encoding = end
52527 end = this.length
52528 }
52529 if (val.length === 1) {
52530 var code = val.charCodeAt(0)
52531 if (code < 256) {
52532 val = code
52533 }
52534 }
52535 if (encoding !== undefined && typeof encoding !== 'string') {
52536 throw new TypeError('encoding must be a string')
52537 }
52538 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
52539 throw new TypeError('Unknown encoding: ' + encoding)
52540 }
52541 } else if (typeof val === 'number') {
52542 val = val & 255
52543 }
52544
52545 // Invalid ranges are not set to a default, so can range check early.
52546 if (start < 0 || this.length < start || this.length < end) {
52547 throw new RangeError('Out of range index')
52548 }
52549
52550 if (end <= start) {
52551 return this
52552 }
52553
52554 start = start >>> 0
52555 end = end === undefined ? this.length : end >>> 0
52556
52557 if (!val) val = 0
52558
52559 var i
52560 if (typeof val === 'number') {
52561 for (i = start; i < end; ++i) {
52562 this[i] = val
52563 }
52564 } else {
52565 var bytes = Buffer.isBuffer(val)
52566 ? val
52567 : new Buffer(val, encoding)
52568 var len = bytes.length
52569 for (i = 0; i < end - start; ++i) {
52570 this[i + start] = bytes[i % len]
52571 }
52572 }
52573
52574 return this
52575 }
52576
52577 // HELPER FUNCTIONS
52578 // ================
52579
52580 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
52581
52582 function base64clean (str) {
52583 // Node strips out invalid characters like \n and \t from the string, base64-js does not
52584 str = str.trim().replace(INVALID_BASE64_RE, '')
52585 // Node converts strings with length < 2 to ''
52586 if (str.length < 2) return ''
52587 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
52588 while (str.length % 4 !== 0) {
52589 str = str + '='
52590 }
52591 return str
52592 }
52593
52594 function toHex (n) {
52595 if (n < 16) return '0' + n.toString(16)
52596 return n.toString(16)
52597 }
52598
52599 function utf8ToBytes (string, units) {
52600 units = units || Infinity
52601 var codePoint
52602 var length = string.length
52603 var leadSurrogate = null
52604 var bytes = []
52605
52606 for (var i = 0; i < length; ++i) {
52607 codePoint = string.charCodeAt(i)
52608
52609 // is surrogate component
52610 if (codePoint > 0xD7FF && codePoint < 0xE000) {
52611 // last char was a lead
52612 if (!leadSurrogate) {
52613 // no lead yet
52614 if (codePoint > 0xDBFF) {
52615 // unexpected trail
52616 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52617 continue
52618 } else if (i + 1 === length) {
52619 // unpaired lead
52620 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52621 continue
52622 }
52623
52624 // valid lead
52625 leadSurrogate = codePoint
52626
52627 continue
52628 }
52629
52630 // 2 leads in a row
52631 if (codePoint < 0xDC00) {
52632 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52633 leadSurrogate = codePoint
52634 continue
52635 }
52636
52637 // valid surrogate pair
52638 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
52639 } else if (leadSurrogate) {
52640 // valid bmp char, but last char was a lead
52641 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
52642 }
52643
52644 leadSurrogate = null
52645
52646 // encode utf8
52647 if (codePoint < 0x80) {
52648 if ((units -= 1) < 0) break
52649 bytes.push(codePoint)
52650 } else if (codePoint < 0x800) {
52651 if ((units -= 2) < 0) break
52652 bytes.push(
52653 codePoint >> 0x6 | 0xC0,
52654 codePoint & 0x3F | 0x80
52655 )
52656 } else if (codePoint < 0x10000) {
52657 if ((units -= 3) < 0) break
52658 bytes.push(
52659 codePoint >> 0xC | 0xE0,
52660 codePoint >> 0x6 & 0x3F | 0x80,
52661 codePoint & 0x3F | 0x80
52662 )
52663 } else if (codePoint < 0x110000) {
52664 if ((units -= 4) < 0) break
52665 bytes.push(
52666 codePoint >> 0x12 | 0xF0,
52667 codePoint >> 0xC & 0x3F | 0x80,
52668 codePoint >> 0x6 & 0x3F | 0x80,
52669 codePoint & 0x3F | 0x80
52670 )
52671 } else {
52672 throw new Error('Invalid code point')
52673 }
52674 }
52675
52676 return bytes
52677 }
52678
52679 function asciiToBytes (str) {
52680 var byteArray = []
52681 for (var i = 0; i < str.length; ++i) {
52682 // Node's code seems to be doing this and not & 0x7F..
52683 byteArray.push(str.charCodeAt(i) & 0xFF)
52684 }
52685 return byteArray
52686 }
52687
52688 function utf16leToBytes (str, units) {
52689 var c, hi, lo
52690 var byteArray = []
52691 for (var i = 0; i < str.length; ++i) {
52692 if ((units -= 2) < 0) break
52693
52694 c = str.charCodeAt(i)
52695 hi = c >> 8
52696 lo = c % 256
52697 byteArray.push(lo)
52698 byteArray.push(hi)
52699 }
52700
52701 return byteArray
52702 }
52703
52704 function base64ToBytes (str) {
52705 return base64.toByteArray(base64clean(str))
52706 }
52707
52708 function blitBuffer (src, dst, offset, length) {
52709 for (var i = 0; i < length; ++i) {
52710 if ((i + offset >= dst.length) || (i >= src.length)) break
52711 dst[i + offset] = src[i]
52712 }
52713 return i
52714 }
52715
52716 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
52717 function isArrayBufferView (obj) {
52718 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
52719 }
52720
52721 function numberIsNaN (obj) {
52722 return obj !== obj // eslint-disable-line no-self-compare
52723 }
52724
52725 },{"base64-js":16,"ieee754":93}],48:[function(require,module,exports){
52726 (function (Buffer){
52727 var Transform = require('stream').Transform
52728 var inherits = require('inherits')
52729 var StringDecoder = require('string_decoder').StringDecoder
52730 module.exports = CipherBase
52731 inherits(CipherBase, Transform)
52732 function CipherBase (hashMode) {
52733 Transform.call(this)
52734 this.hashMode = typeof hashMode === 'string'
52735 if (this.hashMode) {
52736 this[hashMode] = this._finalOrDigest
52737 } else {
52738 this.final = this._finalOrDigest
52739 }
52740 this._decoder = null
52741 this._encoding = null
52742 }
52743 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
52744 if (typeof data === 'string') {
52745 data = new Buffer(data, inputEnc)
52746 }
52747 var outData = this._update(data)
52748 if (this.hashMode) {
52749 return this
52750 }
52751 if (outputEnc) {
52752 outData = this._toString(outData, outputEnc)
52753 }
52754 return outData
52755 }
52756
52757 CipherBase.prototype.setAutoPadding = function () {}
52758
52759 CipherBase.prototype.getAuthTag = function () {
52760 throw new Error('trying to get auth tag in unsupported state')
52761 }
52762
52763 CipherBase.prototype.setAuthTag = function () {
52764 throw new Error('trying to set auth tag in unsupported state')
52765 }
52766
52767 CipherBase.prototype.setAAD = function () {
52768 throw new Error('trying to set aad in unsupported state')
52769 }
52770
52771 CipherBase.prototype._transform = function (data, _, next) {
52772 var err
52773 try {
52774 if (this.hashMode) {
52775 this._update(data)
52776 } else {
52777 this.push(this._update(data))
52778 }
52779 } catch (e) {
52780 err = e
52781 } finally {
52782 next(err)
52783 }
52784 }
52785 CipherBase.prototype._flush = function (done) {
52786 var err
52787 try {
52788 this.push(this._final())
52789 } catch (e) {
52790 err = e
52791 } finally {
52792 done(err)
52793 }
52794 }
52795 CipherBase.prototype._finalOrDigest = function (outputEnc) {
52796 var outData = this._final() || new Buffer('')
52797 if (outputEnc) {
52798 outData = this._toString(outData, outputEnc, true)
52799 }
52800 return outData
52801 }
52802
52803 CipherBase.prototype._toString = function (value, enc, fin) {
52804 if (!this._decoder) {
52805 this._decoder = new StringDecoder(enc)
52806 this._encoding = enc
52807 }
52808 if (this._encoding !== enc) {
52809 throw new Error('can\'t switch encodings')
52810 }
52811 var out = this._decoder.write(value)
52812 if (fin) {
52813 out += this._decoder.end()
52814 }
52815 return out
52816 }
52817
52818 }).call(this,require("buffer").Buffer)
52819 },{"buffer":47,"inherits":95,"stream":143,"string_decoder":144}],49:[function(require,module,exports){
52820 (function (Buffer){
52821 // Copyright Joyent, Inc. and other Node contributors.
52822 //
52823 // Permission is hereby granted, free of charge, to any person obtaining a
52824 // copy of this software and associated documentation files (the
52825 // "Software"), to deal in the Software without restriction, including
52826 // without limitation the rights to use, copy, modify, merge, publish,
52827 // distribute, sublicense, and/or sell copies of the Software, and to permit
52828 // persons to whom the Software is furnished to do so, subject to the
52829 // following conditions:
52830 //
52831 // The above copyright notice and this permission notice shall be included
52832 // in all copies or substantial portions of the Software.
52833 //
52834 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
52835 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
52836 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
52837 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
52838 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
52839 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
52840 // USE OR OTHER DEALINGS IN THE SOFTWARE.
52841
52842 // NOTE: These type checking functions intentionally don't use `instanceof`
52843 // because it is fragile and can be easily faked with `Object.create()`.
52844
52845 function isArray(arg) {
52846 if (Array.isArray) {
52847 return Array.isArray(arg);
52848 }
52849 return objectToString(arg) === '[object Array]';
52850 }
52851 exports.isArray = isArray;
52852
52853 function isBoolean(arg) {
52854 return typeof arg === 'boolean';
52855 }
52856 exports.isBoolean = isBoolean;
52857
52858 function isNull(arg) {
52859 return arg === null;
52860 }
52861 exports.isNull = isNull;
52862
52863 function isNullOrUndefined(arg) {
52864 return arg == null;
52865 }
52866 exports.isNullOrUndefined = isNullOrUndefined;
52867
52868 function isNumber(arg) {
52869 return typeof arg === 'number';
52870 }
52871 exports.isNumber = isNumber;
52872
52873 function isString(arg) {
52874 return typeof arg === 'string';
52875 }
52876 exports.isString = isString;
52877
52878 function isSymbol(arg) {
52879 return typeof arg === 'symbol';
52880 }
52881 exports.isSymbol = isSymbol;
52882
52883 function isUndefined(arg) {
52884 return arg === void 0;
52885 }
52886 exports.isUndefined = isUndefined;
52887
52888 function isRegExp(re) {
52889 return objectToString(re) === '[object RegExp]';
52890 }
52891 exports.isRegExp = isRegExp;
52892
52893 function isObject(arg) {
52894 return typeof arg === 'object' && arg !== null;
52895 }
52896 exports.isObject = isObject;
52897
52898 function isDate(d) {
52899 return objectToString(d) === '[object Date]';
52900 }
52901 exports.isDate = isDate;
52902
52903 function isError(e) {
52904 return (objectToString(e) === '[object Error]' || e instanceof Error);
52905 }
52906 exports.isError = isError;
52907
52908 function isFunction(arg) {
52909 return typeof arg === 'function';
52910 }
52911 exports.isFunction = isFunction;
52912
52913 function isPrimitive(arg) {
52914 return arg === null ||
52915 typeof arg === 'boolean' ||
52916 typeof arg === 'number' ||
52917 typeof arg === 'string' ||
52918 typeof arg === 'symbol' || // ES6 symbol
52919 typeof arg === 'undefined';
52920 }
52921 exports.isPrimitive = isPrimitive;
52922
52923 exports.isBuffer = Buffer.isBuffer;
52924
52925 function objectToString(o) {
52926 return Object.prototype.toString.call(o);
52927 }
52928
52929 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
52930 },{"../../is-buffer/index.js":96}],50:[function(require,module,exports){
52931 (function (Buffer){
52932 var elliptic = require('elliptic');
52933 var BN = require('bn.js');
52934
52935 module.exports = function createECDH(curve) {
52936 return new ECDH(curve);
52937 };
52938
52939 var aliases = {
52940 secp256k1: {
52941 name: 'secp256k1',
52942 byteLength: 32
52943 },
52944 secp224r1: {
52945 name: 'p224',
52946 byteLength: 28
52947 },
52948 prime256v1: {
52949 name: 'p256',
52950 byteLength: 32
52951 },
52952 prime192v1: {
52953 name: 'p192',
52954 byteLength: 24
52955 },
52956 ed25519: {
52957 name: 'ed25519',
52958 byteLength: 32
52959 },
52960 secp384r1: {
52961 name: 'p384',
52962 byteLength: 48
52963 },
52964 secp521r1: {
52965 name: 'p521',
52966 byteLength: 66
52967 }
52968 };
52969
52970 aliases.p224 = aliases.secp224r1;
52971 aliases.p256 = aliases.secp256r1 = aliases.prime256v1;
52972 aliases.p192 = aliases.secp192r1 = aliases.prime192v1;
52973 aliases.p384 = aliases.secp384r1;
52974 aliases.p521 = aliases.secp521r1;
52975
52976 function ECDH(curve) {
52977 this.curveType = aliases[curve];
52978 if (!this.curveType ) {
52979 this.curveType = {
52980 name: curve
52981 };
52982 }
52983 this.curve = new elliptic.ec(this.curveType.name);
52984 this.keys = void 0;
52985 }
52986
52987 ECDH.prototype.generateKeys = function (enc, format) {
52988 this.keys = this.curve.genKeyPair();
52989 return this.getPublicKey(enc, format);
52990 };
52991
52992 ECDH.prototype.computeSecret = function (other, inenc, enc) {
52993 inenc = inenc || 'utf8';
52994 if (!Buffer.isBuffer(other)) {
52995 other = new Buffer(other, inenc);
52996 }
52997 var otherPub = this.curve.keyFromPublic(other).getPublic();
52998 var out = otherPub.mul(this.keys.getPrivate()).getX();
52999 return formatReturnValue(out, enc, this.curveType.byteLength);
53000 };
53001
53002 ECDH.prototype.getPublicKey = function (enc, format) {
53003 var key = this.keys.getPublic(format === 'compressed', true);
53004 if (format === 'hybrid') {
53005 if (key[key.length - 1] % 2) {
53006 key[0] = 7;
53007 } else {
53008 key [0] = 6;
53009 }
53010 }
53011 return formatReturnValue(key, enc);
53012 };
53013
53014 ECDH.prototype.getPrivateKey = function (enc) {
53015 return formatReturnValue(this.keys.getPrivate(), enc);
53016 };
53017
53018 ECDH.prototype.setPublicKey = function (pub, enc) {
53019 enc = enc || 'utf8';
53020 if (!Buffer.isBuffer(pub)) {
53021 pub = new Buffer(pub, enc);
53022 }
53023 this.keys._importPublic(pub);
53024 return this;
53025 };
53026
53027 ECDH.prototype.setPrivateKey = function (priv, enc) {
53028 enc = enc || 'utf8';
53029 if (!Buffer.isBuffer(priv)) {
53030 priv = new Buffer(priv, enc);
53031 }
53032 var _priv = new BN(priv);
53033 _priv = _priv.toString(16);
53034 this.keys._importPrivate(_priv);
53035 return this;
53036 };
53037
53038 function formatReturnValue(bn, enc, len) {
53039 if (!Array.isArray(bn)) {
53040 bn = bn.toArray();
53041 }
53042 var buf = new Buffer(bn);
53043 if (len && buf.length < len) {
53044 var zeros = new Buffer(len - buf.length);
53045 zeros.fill(0);
53046 buf = Buffer.concat([zeros, buf]);
53047 }
53048 if (!enc) {
53049 return buf;
53050 } else {
53051 return buf.toString(enc);
53052 }
53053 }
53054
53055 }).call(this,require("buffer").Buffer)
53056 },{"bn.js":17,"buffer":47,"elliptic":67}],51:[function(require,module,exports){
53057 (function (Buffer){
53058 'use strict'
53059 var inherits = require('inherits')
53060 var md5 = require('./md5')
53061 var RIPEMD160 = require('ripemd160')
53062 var sha = require('sha.js')
53063
53064 var Base = require('cipher-base')
53065
53066 function HashNoConstructor (hash) {
53067 Base.call(this, 'digest')
53068
53069 this._hash = hash
53070 this.buffers = []
53071 }
53072
53073 inherits(HashNoConstructor, Base)
53074
53075 HashNoConstructor.prototype._update = function (data) {
53076 this.buffers.push(data)
53077 }
53078
53079 HashNoConstructor.prototype._final = function () {
53080 var buf = Buffer.concat(this.buffers)
53081 var r = this._hash(buf)
53082 this.buffers = null
53083
53084 return r
53085 }
53086
53087 function Hash (hash) {
53088 Base.call(this, 'digest')
53089
53090 this._hash = hash
53091 }
53092
53093 inherits(Hash, Base)
53094
53095 Hash.prototype._update = function (data) {
53096 this._hash.update(data)
53097 }
53098
53099 Hash.prototype._final = function () {
53100 return this._hash.digest()
53101 }
53102
53103 module.exports = function createHash (alg) {
53104 alg = alg.toLowerCase()
53105 if (alg === 'md5') return new HashNoConstructor(md5)
53106 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
53107
53108 return new Hash(sha(alg))
53109 }
53110
53111 }).call(this,require("buffer").Buffer)
53112 },{"./md5":53,"buffer":47,"cipher-base":48,"inherits":95,"ripemd160":133,"sha.js":136}],52:[function(require,module,exports){
53113 (function (Buffer){
53114 'use strict'
53115 var intSize = 4
53116 var zeroBuffer = new Buffer(intSize)
53117 zeroBuffer.fill(0)
53118
53119 var charSize = 8
53120 var hashSize = 16
53121
53122 function toArray (buf) {
53123 if ((buf.length % intSize) !== 0) {
53124 var len = buf.length + (intSize - (buf.length % intSize))
53125 buf = Buffer.concat([buf, zeroBuffer], len)
53126 }
53127
53128 var arr = new Array(buf.length >>> 2)
53129 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
53130 arr[j] = buf.readInt32LE(i)
53131 }
53132
53133 return arr
53134 }
53135
53136 module.exports = function hash (buf, fn) {
53137 var arr = fn(toArray(buf), buf.length * charSize)
53138 buf = new Buffer(hashSize)
53139 for (var i = 0; i < arr.length; i++) {
53140 buf.writeInt32LE(arr[i], i << 2, true)
53141 }
53142 return buf
53143 }
53144
53145 }).call(this,require("buffer").Buffer)
53146 },{"buffer":47}],53:[function(require,module,exports){
53147 'use strict'
53148 /*
53149 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
53150 * Digest Algorithm, as defined in RFC 1321.
53151 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
53152 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
53153 * Distributed under the BSD License
53154 * See http://pajhome.org.uk/crypt/md5 for more info.
53155 */
53156
53157 var makeHash = require('./make-hash')
53158
53159 /*
53160 * Calculate the MD5 of an array of little-endian words, and a bit length
53161 */
53162 function core_md5 (x, len) {
53163 /* append padding */
53164 x[len >> 5] |= 0x80 << ((len) % 32)
53165 x[(((len + 64) >>> 9) << 4) + 14] = len
53166
53167 var a = 1732584193
53168 var b = -271733879
53169 var c = -1732584194
53170 var d = 271733878
53171
53172 for (var i = 0; i < x.length; i += 16) {
53173 var olda = a
53174 var oldb = b
53175 var oldc = c
53176 var oldd = d
53177
53178 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
53179 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
53180 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
53181 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
53182 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
53183 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
53184 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
53185 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
53186 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
53187 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
53188 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
53189 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
53190 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
53191 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
53192 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
53193 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
53194
53195 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
53196 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
53197 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
53198 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
53199 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
53200 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
53201 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
53202 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
53203 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
53204 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
53205 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
53206 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
53207 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
53208 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
53209 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
53210 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
53211
53212 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
53213 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
53214 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
53215 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
53216 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
53217 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
53218 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
53219 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
53220 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
53221 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
53222 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
53223 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
53224 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
53225 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
53226 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
53227 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
53228
53229 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
53230 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
53231 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
53232 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
53233 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
53234 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
53235 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
53236 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
53237 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
53238 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
53239 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
53240 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
53241 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
53242 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
53243 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
53244 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
53245
53246 a = safe_add(a, olda)
53247 b = safe_add(b, oldb)
53248 c = safe_add(c, oldc)
53249 d = safe_add(d, oldd)
53250 }
53251
53252 return [a, b, c, d]
53253 }
53254
53255 /*
53256 * These functions implement the four basic operations the algorithm uses.
53257 */
53258 function md5_cmn (q, a, b, x, s, t) {
53259 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
53260 }
53261
53262 function md5_ff (a, b, c, d, x, s, t) {
53263 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
53264 }
53265
53266 function md5_gg (a, b, c, d, x, s, t) {
53267 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
53268 }
53269
53270 function md5_hh (a, b, c, d, x, s, t) {
53271 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
53272 }
53273
53274 function md5_ii (a, b, c, d, x, s, t) {
53275 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
53276 }
53277
53278 /*
53279 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
53280 * to work around bugs in some JS interpreters.
53281 */
53282 function safe_add (x, y) {
53283 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
53284 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
53285 return (msw << 16) | (lsw & 0xFFFF)
53286 }
53287
53288 /*
53289 * Bitwise rotate a 32-bit number to the left.
53290 */
53291 function bit_rol (num, cnt) {
53292 return (num << cnt) | (num >>> (32 - cnt))
53293 }
53294
53295 module.exports = function md5 (buf) {
53296 return makeHash(buf, core_md5)
53297 }
53298
53299 },{"./make-hash":52}],54:[function(require,module,exports){
53300 'use strict'
53301 var inherits = require('inherits')
53302 var Legacy = require('./legacy')
53303 var Base = require('cipher-base')
53304 var Buffer = require('safe-buffer').Buffer
53305 var md5 = require('create-hash/md5')
53306 var RIPEMD160 = require('ripemd160')
53307
53308 var sha = require('sha.js')
53309
53310 var ZEROS = Buffer.alloc(128)
53311
53312 function Hmac (alg, key) {
53313 Base.call(this, 'digest')
53314 if (typeof key === 'string') {
53315 key = Buffer.from(key)
53316 }
53317
53318 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
53319
53320 this._alg = alg
53321 this._key = key
53322 if (key.length > blocksize) {
53323 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53324 key = hash.update(key).digest()
53325 } else if (key.length < blocksize) {
53326 key = Buffer.concat([key, ZEROS], blocksize)
53327 }
53328
53329 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53330 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53331
53332 for (var i = 0; i < blocksize; i++) {
53333 ipad[i] = key[i] ^ 0x36
53334 opad[i] = key[i] ^ 0x5C
53335 }
53336 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
53337 this._hash.update(ipad)
53338 }
53339
53340 inherits(Hmac, Base)
53341
53342 Hmac.prototype._update = function (data) {
53343 this._hash.update(data)
53344 }
53345
53346 Hmac.prototype._final = function () {
53347 var h = this._hash.digest()
53348 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
53349 return hash.update(this._opad).update(h).digest()
53350 }
53351
53352 module.exports = function createHmac (alg, key) {
53353 alg = alg.toLowerCase()
53354 if (alg === 'rmd160' || alg === 'ripemd160') {
53355 return new Hmac('rmd160', key)
53356 }
53357 if (alg === 'md5') {
53358 return new Legacy(md5, key)
53359 }
53360 return new Hmac(alg, key)
53361 }
53362
53363 },{"./legacy":55,"cipher-base":48,"create-hash/md5":53,"inherits":95,"ripemd160":133,"safe-buffer":134,"sha.js":136}],55:[function(require,module,exports){
53364 'use strict'
53365 var inherits = require('inherits')
53366 var Buffer = require('safe-buffer').Buffer
53367
53368 var Base = require('cipher-base')
53369
53370 var ZEROS = Buffer.alloc(128)
53371 var blocksize = 64
53372
53373 function Hmac (alg, key) {
53374 Base.call(this, 'digest')
53375 if (typeof key === 'string') {
53376 key = Buffer.from(key)
53377 }
53378
53379 this._alg = alg
53380 this._key = key
53381
53382 if (key.length > blocksize) {
53383 key = alg(key)
53384 } else if (key.length < blocksize) {
53385 key = Buffer.concat([key, ZEROS], blocksize)
53386 }
53387
53388 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
53389 var opad = this._opad = Buffer.allocUnsafe(blocksize)
53390
53391 for (var i = 0; i < blocksize; i++) {
53392 ipad[i] = key[i] ^ 0x36
53393 opad[i] = key[i] ^ 0x5C
53394 }
53395
53396 this._hash = [ipad]
53397 }
53398
53399 inherits(Hmac, Base)
53400
53401 Hmac.prototype._update = function (data) {
53402 this._hash.push(data)
53403 }
53404
53405 Hmac.prototype._final = function () {
53406 var h = this._alg(Buffer.concat(this._hash))
53407 return this._alg(Buffer.concat([this._opad, h]))
53408 }
53409 module.exports = Hmac
53410
53411 },{"cipher-base":48,"inherits":95,"safe-buffer":134}],56:[function(require,module,exports){
53412 'use strict'
53413
53414 exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes')
53415 exports.createHash = exports.Hash = require('create-hash')
53416 exports.createHmac = exports.Hmac = require('create-hmac')
53417
53418 var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(Object.keys(require('browserify-sign/algos')))
53419 exports.getHashes = function () {
53420 return hashes
53421 }
53422
53423 var p = require('pbkdf2')
53424 exports.pbkdf2 = p.pbkdf2
53425 exports.pbkdf2Sync = p.pbkdf2Sync
53426
53427 var aes = require('browserify-cipher')
53428 ;[
53429 'Cipher',
53430 'createCipher',
53431 'Cipheriv',
53432 'createCipheriv',
53433 'Decipher',
53434 'createDecipher',
53435 'Decipheriv',
53436 'createDecipheriv',
53437 'getCiphers',
53438 'listCiphers'
53439 ].forEach(function (key) {
53440 exports[key] = aes[key]
53441 })
53442
53443 var dh = require('diffie-hellman')
53444 ;[
53445 'DiffieHellmanGroup',
53446 'createDiffieHellmanGroup',
53447 'getDiffieHellman',
53448 'createDiffieHellman',
53449 'DiffieHellman'
53450 ].forEach(function (key) {
53451 exports[key] = dh[key]
53452 })
53453
53454 var sign = require('browserify-sign')
53455 ;[
53456 'createSign',
53457 'Sign',
53458 'createVerify',
53459 'Verify'
53460 ].forEach(function (key) {
53461 exports[key] = sign[key]
53462 })
53463
53464 exports.createECDH = require('create-ecdh')
53465
53466 var publicEncrypt = require('public-encrypt')
53467
53468 ;[
53469 'publicEncrypt',
53470 'privateEncrypt',
53471 'publicDecrypt',
53472 'privateDecrypt'
53473 ].forEach(function (key) {
53474 exports[key] = publicEncrypt[key]
53475 })
53476
53477 // the least I can do is make error messages for the rest of the node.js/crypto api.
53478 ;[
53479 'createCredentials'
53480 ].forEach(function (name) {
53481 exports[name] = function () {
53482 throw new Error([
53483 'sorry, ' + name + ' is not implemented yet',
53484 'we accept pull requests',
53485 'https://github.com/crypto-browserify/crypto-browserify'
53486 ].join('\n'))
53487 }
53488 })
53489
53490 },{"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){
53491 'use strict';
53492
53493 exports.utils = require('./des/utils');
53494 exports.Cipher = require('./des/cipher');
53495 exports.DES = require('./des/des');
53496 exports.CBC = require('./des/cbc');
53497 exports.EDE = require('./des/ede');
53498
53499 },{"./des/cbc":58,"./des/cipher":59,"./des/des":60,"./des/ede":61,"./des/utils":62}],58:[function(require,module,exports){
53500 'use strict';
53501
53502 var assert = require('minimalistic-assert');
53503 var inherits = require('inherits');
53504
53505 var proto = {};
53506
53507 function CBCState(iv) {
53508 assert.equal(iv.length, 8, 'Invalid IV length');
53509
53510 this.iv = new Array(8);
53511 for (var i = 0; i < this.iv.length; i++)
53512 this.iv[i] = iv[i];
53513 }
53514
53515 function instantiate(Base) {
53516 function CBC(options) {
53517 Base.call(this, options);
53518 this._cbcInit();
53519 }
53520 inherits(CBC, Base);
53521
53522 var keys = Object.keys(proto);
53523 for (var i = 0; i < keys.length; i++) {
53524 var key = keys[i];
53525 CBC.prototype[key] = proto[key];
53526 }
53527
53528 CBC.create = function create(options) {
53529 return new CBC(options);
53530 };
53531
53532 return CBC;
53533 }
53534
53535 exports.instantiate = instantiate;
53536
53537 proto._cbcInit = function _cbcInit() {
53538 var state = new CBCState(this.options.iv);
53539 this._cbcState = state;
53540 };
53541
53542 proto._update = function _update(inp, inOff, out, outOff) {
53543 var state = this._cbcState;
53544 var superProto = this.constructor.super_.prototype;
53545
53546 var iv = state.iv;
53547 if (this.type === 'encrypt') {
53548 for (var i = 0; i < this.blockSize; i++)
53549 iv[i] ^= inp[inOff + i];
53550
53551 superProto._update.call(this, iv, 0, out, outOff);
53552
53553 for (var i = 0; i < this.blockSize; i++)
53554 iv[i] = out[outOff + i];
53555 } else {
53556 superProto._update.call(this, inp, inOff, out, outOff);
53557
53558 for (var i = 0; i < this.blockSize; i++)
53559 out[outOff + i] ^= iv[i];
53560
53561 for (var i = 0; i < this.blockSize; i++)
53562 iv[i] = inp[inOff + i];
53563 }
53564 };
53565
53566 },{"inherits":95,"minimalistic-assert":99}],59:[function(require,module,exports){
53567 'use strict';
53568
53569 var assert = require('minimalistic-assert');
53570
53571 function Cipher(options) {
53572 this.options = options;
53573
53574 this.type = this.options.type;
53575 this.blockSize = 8;
53576 this._init();
53577
53578 this.buffer = new Array(this.blockSize);
53579 this.bufferOff = 0;
53580 }
53581 module.exports = Cipher;
53582
53583 Cipher.prototype._init = function _init() {
53584 // Might be overrided
53585 };
53586
53587 Cipher.prototype.update = function update(data) {
53588 if (data.length === 0)
53589 return [];
53590
53591 if (this.type === 'decrypt')
53592 return this._updateDecrypt(data);
53593 else
53594 return this._updateEncrypt(data);
53595 };
53596
53597 Cipher.prototype._buffer = function _buffer(data, off) {
53598 // Append data to buffer
53599 var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);
53600 for (var i = 0; i < min; i++)
53601 this.buffer[this.bufferOff + i] = data[off + i];
53602 this.bufferOff += min;
53603
53604 // Shift next
53605 return min;
53606 };
53607
53608 Cipher.prototype._flushBuffer = function _flushBuffer(out, off) {
53609 this._update(this.buffer, 0, out, off);
53610 this.bufferOff = 0;
53611 return this.blockSize;
53612 };
53613
53614 Cipher.prototype._updateEncrypt = function _updateEncrypt(data) {
53615 var inputOff = 0;
53616 var outputOff = 0;
53617
53618 var count = ((this.bufferOff + data.length) / this.blockSize) | 0;
53619 var out = new Array(count * this.blockSize);
53620
53621 if (this.bufferOff !== 0) {
53622 inputOff += this._buffer(data, inputOff);
53623
53624 if (this.bufferOff === this.buffer.length)
53625 outputOff += this._flushBuffer(out, outputOff);
53626 }
53627
53628 // Write blocks
53629 var max = data.length - ((data.length - inputOff) % this.blockSize);
53630 for (; inputOff < max; inputOff += this.blockSize) {
53631 this._update(data, inputOff, out, outputOff);
53632 outputOff += this.blockSize;
53633 }
53634
53635 // Queue rest
53636 for (; inputOff < data.length; inputOff++, this.bufferOff++)
53637 this.buffer[this.bufferOff] = data[inputOff];
53638
53639 return out;
53640 };
53641
53642 Cipher.prototype._updateDecrypt = function _updateDecrypt(data) {
53643 var inputOff = 0;
53644 var outputOff = 0;
53645
53646 var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;
53647 var out = new Array(count * this.blockSize);
53648
53649 // TODO(indutny): optimize it, this is far from optimal
53650 for (; count > 0; count--) {
53651 inputOff += this._buffer(data, inputOff);
53652 outputOff += this._flushBuffer(out, outputOff);
53653 }
53654
53655 // Buffer rest of the input
53656 inputOff += this._buffer(data, inputOff);
53657
53658 return out;
53659 };
53660
53661 Cipher.prototype.final = function final(buffer) {
53662 var first;
53663 if (buffer)
53664 first = this.update(buffer);
53665
53666 var last;
53667 if (this.type === 'encrypt')
53668 last = this._finalEncrypt();
53669 else
53670 last = this._finalDecrypt();
53671
53672 if (first)
53673 return first.concat(last);
53674 else
53675 return last;
53676 };
53677
53678 Cipher.prototype._pad = function _pad(buffer, off) {
53679 if (off === 0)
53680 return false;
53681
53682 while (off < buffer.length)
53683 buffer[off++] = 0;
53684
53685 return true;
53686 };
53687
53688 Cipher.prototype._finalEncrypt = function _finalEncrypt() {
53689 if (!this._pad(this.buffer, this.bufferOff))
53690 return [];
53691
53692 var out = new Array(this.blockSize);
53693 this._update(this.buffer, 0, out, 0);
53694 return out;
53695 };
53696
53697 Cipher.prototype._unpad = function _unpad(buffer) {
53698 return buffer;
53699 };
53700
53701 Cipher.prototype._finalDecrypt = function _finalDecrypt() {
53702 assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');
53703 var out = new Array(this.blockSize);
53704 this._flushBuffer(out, 0);
53705
53706 return this._unpad(out);
53707 };
53708
53709 },{"minimalistic-assert":99}],60:[function(require,module,exports){
53710 'use strict';
53711
53712 var assert = require('minimalistic-assert');
53713 var inherits = require('inherits');
53714
53715 var des = require('../des');
53716 var utils = des.utils;
53717 var Cipher = des.Cipher;
53718
53719 function DESState() {
53720 this.tmp = new Array(2);
53721 this.keys = null;
53722 }
53723
53724 function DES(options) {
53725 Cipher.call(this, options);
53726
53727 var state = new DESState();
53728 this._desState = state;
53729
53730 this.deriveKeys(state, options.key);
53731 }
53732 inherits(DES, Cipher);
53733 module.exports = DES;
53734
53735 DES.create = function create(options) {
53736 return new DES(options);
53737 };
53738
53739 var shiftTable = [
53740 1, 1, 2, 2, 2, 2, 2, 2,
53741 1, 2, 2, 2, 2, 2, 2, 1
53742 ];
53743
53744 DES.prototype.deriveKeys = function deriveKeys(state, key) {
53745 state.keys = new Array(16 * 2);
53746
53747 assert.equal(key.length, this.blockSize, 'Invalid key length');
53748
53749 var kL = utils.readUInt32BE(key, 0);
53750 var kR = utils.readUInt32BE(key, 4);
53751
53752 utils.pc1(kL, kR, state.tmp, 0);
53753 kL = state.tmp[0];
53754 kR = state.tmp[1];
53755 for (var i = 0; i < state.keys.length; i += 2) {
53756 var shift = shiftTable[i >>> 1];
53757 kL = utils.r28shl(kL, shift);
53758 kR = utils.r28shl(kR, shift);
53759 utils.pc2(kL, kR, state.keys, i);
53760 }
53761 };
53762
53763 DES.prototype._update = function _update(inp, inOff, out, outOff) {
53764 var state = this._desState;
53765
53766 var l = utils.readUInt32BE(inp, inOff);
53767 var r = utils.readUInt32BE(inp, inOff + 4);
53768
53769 // Initial Permutation
53770 utils.ip(l, r, state.tmp, 0);
53771 l = state.tmp[0];
53772 r = state.tmp[1];
53773
53774 if (this.type === 'encrypt')
53775 this._encrypt(state, l, r, state.tmp, 0);
53776 else
53777 this._decrypt(state, l, r, state.tmp, 0);
53778
53779 l = state.tmp[0];
53780 r = state.tmp[1];
53781
53782 utils.writeUInt32BE(out, l, outOff);
53783 utils.writeUInt32BE(out, r, outOff + 4);
53784 };
53785
53786 DES.prototype._pad = function _pad(buffer, off) {
53787 var value = buffer.length - off;
53788 for (var i = off; i < buffer.length; i++)
53789 buffer[i] = value;
53790
53791 return true;
53792 };
53793
53794 DES.prototype._unpad = function _unpad(buffer) {
53795 var pad = buffer[buffer.length - 1];
53796 for (var i = buffer.length - pad; i < buffer.length; i++)
53797 assert.equal(buffer[i], pad);
53798
53799 return buffer.slice(0, buffer.length - pad);
53800 };
53801
53802 DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {
53803 var l = lStart;
53804 var r = rStart;
53805
53806 // Apply f() x16 times
53807 for (var i = 0; i < state.keys.length; i += 2) {
53808 var keyL = state.keys[i];
53809 var keyR = state.keys[i + 1];
53810
53811 // f(r, k)
53812 utils.expand(r, state.tmp, 0);
53813
53814 keyL ^= state.tmp[0];
53815 keyR ^= state.tmp[1];
53816 var s = utils.substitute(keyL, keyR);
53817 var f = utils.permute(s);
53818
53819 var t = r;
53820 r = (l ^ f) >>> 0;
53821 l = t;
53822 }
53823
53824 // Reverse Initial Permutation
53825 utils.rip(r, l, out, off);
53826 };
53827
53828 DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {
53829 var l = rStart;
53830 var r = lStart;
53831
53832 // Apply f() x16 times
53833 for (var i = state.keys.length - 2; i >= 0; i -= 2) {
53834 var keyL = state.keys[i];
53835 var keyR = state.keys[i + 1];
53836
53837 // f(r, k)
53838 utils.expand(l, state.tmp, 0);
53839
53840 keyL ^= state.tmp[0];
53841 keyR ^= state.tmp[1];
53842 var s = utils.substitute(keyL, keyR);
53843 var f = utils.permute(s);
53844
53845 var t = l;
53846 l = (r ^ f) >>> 0;
53847 r = t;
53848 }
53849
53850 // Reverse Initial Permutation
53851 utils.rip(l, r, out, off);
53852 };
53853
53854 },{"../des":57,"inherits":95,"minimalistic-assert":99}],61:[function(require,module,exports){
53855 'use strict';
53856
53857 var assert = require('minimalistic-assert');
53858 var inherits = require('inherits');
53859
53860 var des = require('../des');
53861 var Cipher = des.Cipher;
53862 var DES = des.DES;
53863
53864 function EDEState(type, key) {
53865 assert.equal(key.length, 24, 'Invalid key length');
53866
53867 var k1 = key.slice(0, 8);
53868 var k2 = key.slice(8, 16);
53869 var k3 = key.slice(16, 24);
53870
53871 if (type === 'encrypt') {
53872 this.ciphers = [
53873 DES.create({ type: 'encrypt', key: k1 }),
53874 DES.create({ type: 'decrypt', key: k2 }),
53875 DES.create({ type: 'encrypt', key: k3 })
53876 ];
53877 } else {
53878 this.ciphers = [
53879 DES.create({ type: 'decrypt', key: k3 }),
53880 DES.create({ type: 'encrypt', key: k2 }),
53881 DES.create({ type: 'decrypt', key: k1 })
53882 ];
53883 }
53884 }
53885
53886 function EDE(options) {
53887 Cipher.call(this, options);
53888
53889 var state = new EDEState(this.type, this.options.key);
53890 this._edeState = state;
53891 }
53892 inherits(EDE, Cipher);
53893
53894 module.exports = EDE;
53895
53896 EDE.create = function create(options) {
53897 return new EDE(options);
53898 };
53899
53900 EDE.prototype._update = function _update(inp, inOff, out, outOff) {
53901 var state = this._edeState;
53902
53903 state.ciphers[0]._update(inp, inOff, out, outOff);
53904 state.ciphers[1]._update(out, outOff, out, outOff);
53905 state.ciphers[2]._update(out, outOff, out, outOff);
53906 };
53907
53908 EDE.prototype._pad = DES.prototype._pad;
53909 EDE.prototype._unpad = DES.prototype._unpad;
53910
53911 },{"../des":57,"inherits":95,"minimalistic-assert":99}],62:[function(require,module,exports){
53912 'use strict';
53913
53914 exports.readUInt32BE = function readUInt32BE(bytes, off) {
53915 var res = (bytes[0 + off] << 24) |
53916 (bytes[1 + off] << 16) |
53917 (bytes[2 + off] << 8) |
53918 bytes[3 + off];
53919 return res >>> 0;
53920 };
53921
53922 exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {
53923 bytes[0 + off] = value >>> 24;
53924 bytes[1 + off] = (value >>> 16) & 0xff;
53925 bytes[2 + off] = (value >>> 8) & 0xff;
53926 bytes[3 + off] = value & 0xff;
53927 };
53928
53929 exports.ip = function ip(inL, inR, out, off) {
53930 var outL = 0;
53931 var outR = 0;
53932
53933 for (var i = 6; i >= 0; i -= 2) {
53934 for (var j = 0; j <= 24; j += 8) {
53935 outL <<= 1;
53936 outL |= (inR >>> (j + i)) & 1;
53937 }
53938 for (var j = 0; j <= 24; j += 8) {
53939 outL <<= 1;
53940 outL |= (inL >>> (j + i)) & 1;
53941 }
53942 }
53943
53944 for (var i = 6; i >= 0; i -= 2) {
53945 for (var j = 1; j <= 25; j += 8) {
53946 outR <<= 1;
53947 outR |= (inR >>> (j + i)) & 1;
53948 }
53949 for (var j = 1; j <= 25; j += 8) {
53950 outR <<= 1;
53951 outR |= (inL >>> (j + i)) & 1;
53952 }
53953 }
53954
53955 out[off + 0] = outL >>> 0;
53956 out[off + 1] = outR >>> 0;
53957 };
53958
53959 exports.rip = function rip(inL, inR, out, off) {
53960 var outL = 0;
53961 var outR = 0;
53962
53963 for (var i = 0; i < 4; i++) {
53964 for (var j = 24; j >= 0; j -= 8) {
53965 outL <<= 1;
53966 outL |= (inR >>> (j + i)) & 1;
53967 outL <<= 1;
53968 outL |= (inL >>> (j + i)) & 1;
53969 }
53970 }
53971 for (var i = 4; i < 8; i++) {
53972 for (var j = 24; j >= 0; j -= 8) {
53973 outR <<= 1;
53974 outR |= (inR >>> (j + i)) & 1;
53975 outR <<= 1;
53976 outR |= (inL >>> (j + i)) & 1;
53977 }
53978 }
53979
53980 out[off + 0] = outL >>> 0;
53981 out[off + 1] = outR >>> 0;
53982 };
53983
53984 exports.pc1 = function pc1(inL, inR, out, off) {
53985 var outL = 0;
53986 var outR = 0;
53987
53988 // 7, 15, 23, 31, 39, 47, 55, 63
53989 // 6, 14, 22, 30, 39, 47, 55, 63
53990 // 5, 13, 21, 29, 39, 47, 55, 63
53991 // 4, 12, 20, 28
53992 for (var i = 7; i >= 5; i--) {
53993 for (var j = 0; j <= 24; j += 8) {
53994 outL <<= 1;
53995 outL |= (inR >> (j + i)) & 1;
53996 }
53997 for (var j = 0; j <= 24; j += 8) {
53998 outL <<= 1;
53999 outL |= (inL >> (j + i)) & 1;
54000 }
54001 }
54002 for (var j = 0; j <= 24; j += 8) {
54003 outL <<= 1;
54004 outL |= (inR >> (j + i)) & 1;
54005 }
54006
54007 // 1, 9, 17, 25, 33, 41, 49, 57
54008 // 2, 10, 18, 26, 34, 42, 50, 58
54009 // 3, 11, 19, 27, 35, 43, 51, 59
54010 // 36, 44, 52, 60
54011 for (var i = 1; i <= 3; i++) {
54012 for (var j = 0; j <= 24; j += 8) {
54013 outR <<= 1;
54014 outR |= (inR >> (j + i)) & 1;
54015 }
54016 for (var j = 0; j <= 24; j += 8) {
54017 outR <<= 1;
54018 outR |= (inL >> (j + i)) & 1;
54019 }
54020 }
54021 for (var j = 0; j <= 24; j += 8) {
54022 outR <<= 1;
54023 outR |= (inL >> (j + i)) & 1;
54024 }
54025
54026 out[off + 0] = outL >>> 0;
54027 out[off + 1] = outR >>> 0;
54028 };
54029
54030 exports.r28shl = function r28shl(num, shift) {
54031 return ((num << shift) & 0xfffffff) | (num >>> (28 - shift));
54032 };
54033
54034 var pc2table = [
54035 // inL => outL
54036 14, 11, 17, 4, 27, 23, 25, 0,
54037 13, 22, 7, 18, 5, 9, 16, 24,
54038 2, 20, 12, 21, 1, 8, 15, 26,
54039
54040 // inR => outR
54041 15, 4, 25, 19, 9, 1, 26, 16,
54042 5, 11, 23, 8, 12, 7, 17, 0,
54043 22, 3, 10, 14, 6, 20, 27, 24
54044 ];
54045
54046 exports.pc2 = function pc2(inL, inR, out, off) {
54047 var outL = 0;
54048 var outR = 0;
54049
54050 var len = pc2table.length >>> 1;
54051 for (var i = 0; i < len; i++) {
54052 outL <<= 1;
54053 outL |= (inL >>> pc2table[i]) & 0x1;
54054 }
54055 for (var i = len; i < pc2table.length; i++) {
54056 outR <<= 1;
54057 outR |= (inR >>> pc2table[i]) & 0x1;
54058 }
54059
54060 out[off + 0] = outL >>> 0;
54061 out[off + 1] = outR >>> 0;
54062 };
54063
54064 exports.expand = function expand(r, out, off) {
54065 var outL = 0;
54066 var outR = 0;
54067
54068 outL = ((r & 1) << 5) | (r >>> 27);
54069 for (var i = 23; i >= 15; i -= 4) {
54070 outL <<= 6;
54071 outL |= (r >>> i) & 0x3f;
54072 }
54073 for (var i = 11; i >= 3; i -= 4) {
54074 outR |= (r >>> i) & 0x3f;
54075 outR <<= 6;
54076 }
54077 outR |= ((r & 0x1f) << 1) | (r >>> 31);
54078
54079 out[off + 0] = outL >>> 0;
54080 out[off + 1] = outR >>> 0;
54081 };
54082
54083 var sTable = [
54084 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
54085 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
54086 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
54087 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13,
54088
54089 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
54090 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
54091 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
54092 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9,
54093
54094 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
54095 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
54096 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
54097 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12,
54098
54099 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
54100 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
54101 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
54102 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14,
54103
54104 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
54105 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
54106 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
54107 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3,
54108
54109 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
54110 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
54111 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
54112 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13,
54113
54114 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
54115 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
54116 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
54117 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12,
54118
54119 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
54120 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
54121 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
54122 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
54123 ];
54124
54125 exports.substitute = function substitute(inL, inR) {
54126 var out = 0;
54127 for (var i = 0; i < 4; i++) {
54128 var b = (inL >>> (18 - i * 6)) & 0x3f;
54129 var sb = sTable[i * 0x40 + b];
54130
54131 out <<= 4;
54132 out |= sb;
54133 }
54134 for (var i = 0; i < 4; i++) {
54135 var b = (inR >>> (18 - i * 6)) & 0x3f;
54136 var sb = sTable[4 * 0x40 + i * 0x40 + b];
54137
54138 out <<= 4;
54139 out |= sb;
54140 }
54141 return out >>> 0;
54142 };
54143
54144 var permuteTable = [
54145 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22,
54146 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7
54147 ];
54148
54149 exports.permute = function permute(num) {
54150 var out = 0;
54151 for (var i = 0; i < permuteTable.length; i++) {
54152 out <<= 1;
54153 out |= (num >>> permuteTable[i]) & 0x1;
54154 }
54155 return out >>> 0;
54156 };
54157
54158 exports.padSplit = function padSplit(num, size, group) {
54159 var str = num.toString(2);
54160 while (str.length < size)
54161 str = '0' + str;
54162
54163 var out = [];
54164 for (var i = 0; i < size; i += group)
54165 out.push(str.slice(i, i + group));
54166 return out.join(' ');
54167 };
54168
54169 },{}],63:[function(require,module,exports){
54170 (function (Buffer){
54171 var generatePrime = require('./lib/generatePrime')
54172 var primes = require('./lib/primes.json')
54173
54174 var DH = require('./lib/dh')
54175
54176 function getDiffieHellman (mod) {
54177 var prime = new Buffer(primes[mod].prime, 'hex')
54178 var gen = new Buffer(primes[mod].gen, 'hex')
54179
54180 return new DH(prime, gen)
54181 }
54182
54183 var ENCODINGS = {
54184 'binary': true, 'hex': true, 'base64': true
54185 }
54186
54187 function createDiffieHellman (prime, enc, generator, genc) {
54188 if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {
54189 return createDiffieHellman(prime, 'binary', enc, generator)
54190 }
54191
54192 enc = enc || 'binary'
54193 genc = genc || 'binary'
54194 generator = generator || new Buffer([2])
54195
54196 if (!Buffer.isBuffer(generator)) {
54197 generator = new Buffer(generator, genc)
54198 }
54199
54200 if (typeof prime === 'number') {
54201 return new DH(generatePrime(prime, generator), generator, true)
54202 }
54203
54204 if (!Buffer.isBuffer(prime)) {
54205 prime = new Buffer(prime, enc)
54206 }
54207
54208 return new DH(prime, generator, true)
54209 }
54210
54211 exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman
54212 exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman
54213
54214 }).call(this,require("buffer").Buffer)
54215 },{"./lib/dh":64,"./lib/generatePrime":65,"./lib/primes.json":66,"buffer":47}],64:[function(require,module,exports){
54216 (function (Buffer){
54217 var BN = require('bn.js');
54218 var MillerRabin = require('miller-rabin');
54219 var millerRabin = new MillerRabin();
54220 var TWENTYFOUR = new BN(24);
54221 var ELEVEN = new BN(11);
54222 var TEN = new BN(10);
54223 var THREE = new BN(3);
54224 var SEVEN = new BN(7);
54225 var primes = require('./generatePrime');
54226 var randomBytes = require('randombytes');
54227 module.exports = DH;
54228
54229 function setPublicKey(pub, enc) {
54230 enc = enc || 'utf8';
54231 if (!Buffer.isBuffer(pub)) {
54232 pub = new Buffer(pub, enc);
54233 }
54234 this._pub = new BN(pub);
54235 return this;
54236 }
54237
54238 function setPrivateKey(priv, enc) {
54239 enc = enc || 'utf8';
54240 if (!Buffer.isBuffer(priv)) {
54241 priv = new Buffer(priv, enc);
54242 }
54243 this._priv = new BN(priv);
54244 return this;
54245 }
54246
54247 var primeCache = {};
54248 function checkPrime(prime, generator) {
54249 var gen = generator.toString('hex');
54250 var hex = [gen, prime.toString(16)].join('_');
54251 if (hex in primeCache) {
54252 return primeCache[hex];
54253 }
54254 var error = 0;
54255
54256 if (prime.isEven() ||
54257 !primes.simpleSieve ||
54258 !primes.fermatTest(prime) ||
54259 !millerRabin.test(prime)) {
54260 //not a prime so +1
54261 error += 1;
54262
54263 if (gen === '02' || gen === '05') {
54264 // we'd be able to check the generator
54265 // it would fail so +8
54266 error += 8;
54267 } else {
54268 //we wouldn't be able to test the generator
54269 // so +4
54270 error += 4;
54271 }
54272 primeCache[hex] = error;
54273 return error;
54274 }
54275 if (!millerRabin.test(prime.shrn(1))) {
54276 //not a safe prime
54277 error += 2;
54278 }
54279 var rem;
54280 switch (gen) {
54281 case '02':
54282 if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {
54283 // unsuidable generator
54284 error += 8;
54285 }
54286 break;
54287 case '05':
54288 rem = prime.mod(TEN);
54289 if (rem.cmp(THREE) && rem.cmp(SEVEN)) {
54290 // prime mod 10 needs to equal 3 or 7
54291 error += 8;
54292 }
54293 break;
54294 default:
54295 error += 4;
54296 }
54297 primeCache[hex] = error;
54298 return error;
54299 }
54300
54301 function DH(prime, generator, malleable) {
54302 this.setGenerator(generator);
54303 this.__prime = new BN(prime);
54304 this._prime = BN.mont(this.__prime);
54305 this._primeLen = prime.length;
54306 this._pub = undefined;
54307 this._priv = undefined;
54308 this._primeCode = undefined;
54309 if (malleable) {
54310 this.setPublicKey = setPublicKey;
54311 this.setPrivateKey = setPrivateKey;
54312 } else {
54313 this._primeCode = 8;
54314 }
54315 }
54316 Object.defineProperty(DH.prototype, 'verifyError', {
54317 enumerable: true,
54318 get: function () {
54319 if (typeof this._primeCode !== 'number') {
54320 this._primeCode = checkPrime(this.__prime, this.__gen);
54321 }
54322 return this._primeCode;
54323 }
54324 });
54325 DH.prototype.generateKeys = function () {
54326 if (!this._priv) {
54327 this._priv = new BN(randomBytes(this._primeLen));
54328 }
54329 this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();
54330 return this.getPublicKey();
54331 };
54332
54333 DH.prototype.computeSecret = function (other) {
54334 other = new BN(other);
54335 other = other.toRed(this._prime);
54336 var secret = other.redPow(this._priv).fromRed();
54337 var out = new Buffer(secret.toArray());
54338 var prime = this.getPrime();
54339 if (out.length < prime.length) {
54340 var front = new Buffer(prime.length - out.length);
54341 front.fill(0);
54342 out = Buffer.concat([front, out]);
54343 }
54344 return out;
54345 };
54346
54347 DH.prototype.getPublicKey = function getPublicKey(enc) {
54348 return formatReturnValue(this._pub, enc);
54349 };
54350
54351 DH.prototype.getPrivateKey = function getPrivateKey(enc) {
54352 return formatReturnValue(this._priv, enc);
54353 };
54354
54355 DH.prototype.getPrime = function (enc) {
54356 return formatReturnValue(this.__prime, enc);
54357 };
54358
54359 DH.prototype.getGenerator = function (enc) {
54360 return formatReturnValue(this._gen, enc);
54361 };
54362
54363 DH.prototype.setGenerator = function (gen, enc) {
54364 enc = enc || 'utf8';
54365 if (!Buffer.isBuffer(gen)) {
54366 gen = new Buffer(gen, enc);
54367 }
54368 this.__gen = gen;
54369 this._gen = new BN(gen);
54370 return this;
54371 };
54372
54373 function formatReturnValue(bn, enc) {
54374 var buf = new Buffer(bn.toArray());
54375 if (!enc) {
54376 return buf;
54377 } else {
54378 return buf.toString(enc);
54379 }
54380 }
54381
54382 }).call(this,require("buffer").Buffer)
54383 },{"./generatePrime":65,"bn.js":17,"buffer":47,"miller-rabin":98,"randombytes":119}],65:[function(require,module,exports){
54384 var randomBytes = require('randombytes');
54385 module.exports = findPrime;
54386 findPrime.simpleSieve = simpleSieve;
54387 findPrime.fermatTest = fermatTest;
54388 var BN = require('bn.js');
54389 var TWENTYFOUR = new BN(24);
54390 var MillerRabin = require('miller-rabin');
54391 var millerRabin = new MillerRabin();
54392 var ONE = new BN(1);
54393 var TWO = new BN(2);
54394 var FIVE = new BN(5);
54395 var SIXTEEN = new BN(16);
54396 var EIGHT = new BN(8);
54397 var TEN = new BN(10);
54398 var THREE = new BN(3);
54399 var SEVEN = new BN(7);
54400 var ELEVEN = new BN(11);
54401 var FOUR = new BN(4);
54402 var TWELVE = new BN(12);
54403 var primes = null;
54404
54405 function _getPrimes() {
54406 if (primes !== null)
54407 return primes;
54408
54409 var limit = 0x100000;
54410 var res = [];
54411 res[0] = 2;
54412 for (var i = 1, k = 3; k < limit; k += 2) {
54413 var sqrt = Math.ceil(Math.sqrt(k));
54414 for (var j = 0; j < i && res[j] <= sqrt; j++)
54415 if (k % res[j] === 0)
54416 break;
54417
54418 if (i !== j && res[j] <= sqrt)
54419 continue;
54420
54421 res[i++] = k;
54422 }
54423 primes = res;
54424 return res;
54425 }
54426
54427 function simpleSieve(p) {
54428 var primes = _getPrimes();
54429
54430 for (var i = 0; i < primes.length; i++)
54431 if (p.modn(primes[i]) === 0) {
54432 if (p.cmpn(primes[i]) === 0) {
54433 return true;
54434 } else {
54435 return false;
54436 }
54437 }
54438
54439 return true;
54440 }
54441
54442 function fermatTest(p) {
54443 var red = BN.mont(p);
54444 return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;
54445 }
54446
54447 function findPrime(bits, gen) {
54448 if (bits < 16) {
54449 // this is what openssl does
54450 if (gen === 2 || gen === 5) {
54451 return new BN([0x8c, 0x7b]);
54452 } else {
54453 return new BN([0x8c, 0x27]);
54454 }
54455 }
54456 gen = new BN(gen);
54457
54458 var num, n2;
54459
54460 while (true) {
54461 num = new BN(randomBytes(Math.ceil(bits / 8)));
54462 while (num.bitLength() > bits) {
54463 num.ishrn(1);
54464 }
54465 if (num.isEven()) {
54466 num.iadd(ONE);
54467 }
54468 if (!num.testn(1)) {
54469 num.iadd(TWO);
54470 }
54471 if (!gen.cmp(TWO)) {
54472 while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {
54473 num.iadd(FOUR);
54474 }
54475 } else if (!gen.cmp(FIVE)) {
54476 while (num.mod(TEN).cmp(THREE)) {
54477 num.iadd(FOUR);
54478 }
54479 }
54480 n2 = num.shrn(1);
54481 if (simpleSieve(n2) && simpleSieve(num) &&
54482 fermatTest(n2) && fermatTest(num) &&
54483 millerRabin.test(n2) && millerRabin.test(num)) {
54484 return num;
54485 }
54486 }
54487
54488 }
54489
54490 },{"bn.js":17,"miller-rabin":98,"randombytes":119}],66:[function(require,module,exports){
54491 module.exports={
54492 "modp1": {
54493 "gen": "02",
54494 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"
54495 },
54496 "modp2": {
54497 "gen": "02",
54498 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"
54499 },
54500 "modp5": {
54501 "gen": "02",
54502 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"
54503 },
54504 "modp14": {
54505 "gen": "02",
54506 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"
54507 },
54508 "modp15": {
54509 "gen": "02",
54510 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"
54511 },
54512 "modp16": {
54513 "gen": "02",
54514 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"
54515 },
54516 "modp17": {
54517 "gen": "02",
54518 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"
54519 },
54520 "modp18": {
54521 "gen": "02",
54522 "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"
54523 }
54524 }
54525 },{}],67:[function(require,module,exports){
54526 'use strict';
54527
54528 var elliptic = exports;
54529
54530 elliptic.version = require('../package.json').version;
54531 elliptic.utils = require('./elliptic/utils');
54532 elliptic.rand = require('brorand');
54533 elliptic.curve = require('./elliptic/curve');
54534 elliptic.curves = require('./elliptic/curves');
54535
54536 // Protocols
54537 elliptic.ec = require('./elliptic/ec');
54538 elliptic.eddsa = require('./elliptic/eddsa');
54539
54540 },{"../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){
54541 'use strict';
54542
54543 var BN = require('bn.js');
54544 var elliptic = require('../../elliptic');
54545 var utils = elliptic.utils;
54546 var getNAF = utils.getNAF;
54547 var getJSF = utils.getJSF;
54548 var assert = utils.assert;
54549
54550 function BaseCurve(type, conf) {
54551 this.type = type;
54552 this.p = new BN(conf.p, 16);
54553
54554 // Use Montgomery, when there is no fast reduction for the prime
54555 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
54556
54557 // Useful for many curves
54558 this.zero = new BN(0).toRed(this.red);
54559 this.one = new BN(1).toRed(this.red);
54560 this.two = new BN(2).toRed(this.red);
54561
54562 // Curve configuration, optional
54563 this.n = conf.n && new BN(conf.n, 16);
54564 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
54565
54566 // Temporary arrays
54567 this._wnafT1 = new Array(4);
54568 this._wnafT2 = new Array(4);
54569 this._wnafT3 = new Array(4);
54570 this._wnafT4 = new Array(4);
54571
54572 // Generalized Greg Maxwell's trick
54573 var adjustCount = this.n && this.p.div(this.n);
54574 if (!adjustCount || adjustCount.cmpn(100) > 0) {
54575 this.redN = null;
54576 } else {
54577 this._maxwellTrick = true;
54578 this.redN = this.n.toRed(this.red);
54579 }
54580 }
54581 module.exports = BaseCurve;
54582
54583 BaseCurve.prototype.point = function point() {
54584 throw new Error('Not implemented');
54585 };
54586
54587 BaseCurve.prototype.validate = function validate() {
54588 throw new Error('Not implemented');
54589 };
54590
54591 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
54592 assert(p.precomputed);
54593 var doubles = p._getDoubles();
54594
54595 var naf = getNAF(k, 1);
54596 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
54597 I /= 3;
54598
54599 // Translate into more windowed form
54600 var repr = [];
54601 for (var j = 0; j < naf.length; j += doubles.step) {
54602 var nafW = 0;
54603 for (var k = j + doubles.step - 1; k >= j; k--)
54604 nafW = (nafW << 1) + naf[k];
54605 repr.push(nafW);
54606 }
54607
54608 var a = this.jpoint(null, null, null);
54609 var b = this.jpoint(null, null, null);
54610 for (var i = I; i > 0; i--) {
54611 for (var j = 0; j < repr.length; j++) {
54612 var nafW = repr[j];
54613 if (nafW === i)
54614 b = b.mixedAdd(doubles.points[j]);
54615 else if (nafW === -i)
54616 b = b.mixedAdd(doubles.points[j].neg());
54617 }
54618 a = a.add(b);
54619 }
54620 return a.toP();
54621 };
54622
54623 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
54624 var w = 4;
54625
54626 // Precompute window
54627 var nafPoints = p._getNAFPoints(w);
54628 w = nafPoints.wnd;
54629 var wnd = nafPoints.points;
54630
54631 // Get NAF form
54632 var naf = getNAF(k, w);
54633
54634 // Add `this`*(N+1) for every w-NAF index
54635 var acc = this.jpoint(null, null, null);
54636 for (var i = naf.length - 1; i >= 0; i--) {
54637 // Count zeroes
54638 for (var k = 0; i >= 0 && naf[i] === 0; i--)
54639 k++;
54640 if (i >= 0)
54641 k++;
54642 acc = acc.dblp(k);
54643
54644 if (i < 0)
54645 break;
54646 var z = naf[i];
54647 assert(z !== 0);
54648 if (p.type === 'affine') {
54649 // J +- P
54650 if (z > 0)
54651 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
54652 else
54653 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
54654 } else {
54655 // J +- J
54656 if (z > 0)
54657 acc = acc.add(wnd[(z - 1) >> 1]);
54658 else
54659 acc = acc.add(wnd[(-z - 1) >> 1].neg());
54660 }
54661 }
54662 return p.type === 'affine' ? acc.toP() : acc;
54663 };
54664
54665 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
54666 points,
54667 coeffs,
54668 len,
54669 jacobianResult) {
54670 var wndWidth = this._wnafT1;
54671 var wnd = this._wnafT2;
54672 var naf = this._wnafT3;
54673
54674 // Fill all arrays
54675 var max = 0;
54676 for (var i = 0; i < len; i++) {
54677 var p = points[i];
54678 var nafPoints = p._getNAFPoints(defW);
54679 wndWidth[i] = nafPoints.wnd;
54680 wnd[i] = nafPoints.points;
54681 }
54682
54683 // Comb small window NAFs
54684 for (var i = len - 1; i >= 1; i -= 2) {
54685 var a = i - 1;
54686 var b = i;
54687 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
54688 naf[a] = getNAF(coeffs[a], wndWidth[a]);
54689 naf[b] = getNAF(coeffs[b], wndWidth[b]);
54690 max = Math.max(naf[a].length, max);
54691 max = Math.max(naf[b].length, max);
54692 continue;
54693 }
54694
54695 var comb = [
54696 points[a], /* 1 */
54697 null, /* 3 */
54698 null, /* 5 */
54699 points[b] /* 7 */
54700 ];
54701
54702 // Try to avoid Projective points, if possible
54703 if (points[a].y.cmp(points[b].y) === 0) {
54704 comb[1] = points[a].add(points[b]);
54705 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54706 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
54707 comb[1] = points[a].toJ().mixedAdd(points[b]);
54708 comb[2] = points[a].add(points[b].neg());
54709 } else {
54710 comb[1] = points[a].toJ().mixedAdd(points[b]);
54711 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
54712 }
54713
54714 var index = [
54715 -3, /* -1 -1 */
54716 -1, /* -1 0 */
54717 -5, /* -1 1 */
54718 -7, /* 0 -1 */
54719 0, /* 0 0 */
54720 7, /* 0 1 */
54721 5, /* 1 -1 */
54722 1, /* 1 0 */
54723 3 /* 1 1 */
54724 ];
54725
54726 var jsf = getJSF(coeffs[a], coeffs[b]);
54727 max = Math.max(jsf[0].length, max);
54728 naf[a] = new Array(max);
54729 naf[b] = new Array(max);
54730 for (var j = 0; j < max; j++) {
54731 var ja = jsf[0][j] | 0;
54732 var jb = jsf[1][j] | 0;
54733
54734 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
54735 naf[b][j] = 0;
54736 wnd[a] = comb;
54737 }
54738 }
54739
54740 var acc = this.jpoint(null, null, null);
54741 var tmp = this._wnafT4;
54742 for (var i = max; i >= 0; i--) {
54743 var k = 0;
54744
54745 while (i >= 0) {
54746 var zero = true;
54747 for (var j = 0; j < len; j++) {
54748 tmp[j] = naf[j][i] | 0;
54749 if (tmp[j] !== 0)
54750 zero = false;
54751 }
54752 if (!zero)
54753 break;
54754 k++;
54755 i--;
54756 }
54757 if (i >= 0)
54758 k++;
54759 acc = acc.dblp(k);
54760 if (i < 0)
54761 break;
54762
54763 for (var j = 0; j < len; j++) {
54764 var z = tmp[j];
54765 var p;
54766 if (z === 0)
54767 continue;
54768 else if (z > 0)
54769 p = wnd[j][(z - 1) >> 1];
54770 else if (z < 0)
54771 p = wnd[j][(-z - 1) >> 1].neg();
54772
54773 if (p.type === 'affine')
54774 acc = acc.mixedAdd(p);
54775 else
54776 acc = acc.add(p);
54777 }
54778 }
54779 // Zeroify references
54780 for (var i = 0; i < len; i++)
54781 wnd[i] = null;
54782
54783 if (jacobianResult)
54784 return acc;
54785 else
54786 return acc.toP();
54787 };
54788
54789 function BasePoint(curve, type) {
54790 this.curve = curve;
54791 this.type = type;
54792 this.precomputed = null;
54793 }
54794 BaseCurve.BasePoint = BasePoint;
54795
54796 BasePoint.prototype.eq = function eq(/*other*/) {
54797 throw new Error('Not implemented');
54798 };
54799
54800 BasePoint.prototype.validate = function validate() {
54801 return this.curve.validate(this);
54802 };
54803
54804 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
54805 bytes = utils.toArray(bytes, enc);
54806
54807 var len = this.p.byteLength();
54808
54809 // uncompressed, hybrid-odd, hybrid-even
54810 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
54811 bytes.length - 1 === 2 * len) {
54812 if (bytes[0] === 0x06)
54813 assert(bytes[bytes.length - 1] % 2 === 0);
54814 else if (bytes[0] === 0x07)
54815 assert(bytes[bytes.length - 1] % 2 === 1);
54816
54817 var res = this.point(bytes.slice(1, 1 + len),
54818 bytes.slice(1 + len, 1 + 2 * len));
54819
54820 return res;
54821 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
54822 bytes.length - 1 === len) {
54823 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
54824 }
54825 throw new Error('Unknown point format');
54826 };
54827
54828 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
54829 return this.encode(enc, true);
54830 };
54831
54832 BasePoint.prototype._encode = function _encode(compact) {
54833 var len = this.curve.p.byteLength();
54834 var x = this.getX().toArray('be', len);
54835
54836 if (compact)
54837 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
54838
54839 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
54840 };
54841
54842 BasePoint.prototype.encode = function encode(enc, compact) {
54843 return utils.encode(this._encode(compact), enc);
54844 };
54845
54846 BasePoint.prototype.precompute = function precompute(power) {
54847 if (this.precomputed)
54848 return this;
54849
54850 var precomputed = {
54851 doubles: null,
54852 naf: null,
54853 beta: null
54854 };
54855 precomputed.naf = this._getNAFPoints(8);
54856 precomputed.doubles = this._getDoubles(4, power);
54857 precomputed.beta = this._getBeta();
54858 this.precomputed = precomputed;
54859
54860 return this;
54861 };
54862
54863 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
54864 if (!this.precomputed)
54865 return false;
54866
54867 var doubles = this.precomputed.doubles;
54868 if (!doubles)
54869 return false;
54870
54871 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
54872 };
54873
54874 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
54875 if (this.precomputed && this.precomputed.doubles)
54876 return this.precomputed.doubles;
54877
54878 var doubles = [ this ];
54879 var acc = this;
54880 for (var i = 0; i < power; i += step) {
54881 for (var j = 0; j < step; j++)
54882 acc = acc.dbl();
54883 doubles.push(acc);
54884 }
54885 return {
54886 step: step,
54887 points: doubles
54888 };
54889 };
54890
54891 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
54892 if (this.precomputed && this.precomputed.naf)
54893 return this.precomputed.naf;
54894
54895 var res = [ this ];
54896 var max = (1 << wnd) - 1;
54897 var dbl = max === 1 ? null : this.dbl();
54898 for (var i = 1; i < max; i++)
54899 res[i] = res[i - 1].add(dbl);
54900 return {
54901 wnd: wnd,
54902 points: res
54903 };
54904 };
54905
54906 BasePoint.prototype._getBeta = function _getBeta() {
54907 return null;
54908 };
54909
54910 BasePoint.prototype.dblp = function dblp(k) {
54911 var r = this;
54912 for (var i = 0; i < k; i++)
54913 r = r.dbl();
54914 return r;
54915 };
54916
54917 },{"../../elliptic":67,"bn.js":17}],69:[function(require,module,exports){
54918 'use strict';
54919
54920 var curve = require('../curve');
54921 var elliptic = require('../../elliptic');
54922 var BN = require('bn.js');
54923 var inherits = require('inherits');
54924 var Base = curve.base;
54925
54926 var assert = elliptic.utils.assert;
54927
54928 function EdwardsCurve(conf) {
54929 // NOTE: Important as we are creating point in Base.call()
54930 this.twisted = (conf.a | 0) !== 1;
54931 this.mOneA = this.twisted && (conf.a | 0) === -1;
54932 this.extended = this.mOneA;
54933
54934 Base.call(this, 'edwards', conf);
54935
54936 this.a = new BN(conf.a, 16).umod(this.red.m);
54937 this.a = this.a.toRed(this.red);
54938 this.c = new BN(conf.c, 16).toRed(this.red);
54939 this.c2 = this.c.redSqr();
54940 this.d = new BN(conf.d, 16).toRed(this.red);
54941 this.dd = this.d.redAdd(this.d);
54942
54943 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
54944 this.oneC = (conf.c | 0) === 1;
54945 }
54946 inherits(EdwardsCurve, Base);
54947 module.exports = EdwardsCurve;
54948
54949 EdwardsCurve.prototype._mulA = function _mulA(num) {
54950 if (this.mOneA)
54951 return num.redNeg();
54952 else
54953 return this.a.redMul(num);
54954 };
54955
54956 EdwardsCurve.prototype._mulC = function _mulC(num) {
54957 if (this.oneC)
54958 return num;
54959 else
54960 return this.c.redMul(num);
54961 };
54962
54963 // Just for compatibility with Short curve
54964 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
54965 return this.point(x, y, z, t);
54966 };
54967
54968 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
54969 x = new BN(x, 16);
54970 if (!x.red)
54971 x = x.toRed(this.red);
54972
54973 var x2 = x.redSqr();
54974 var rhs = this.c2.redSub(this.a.redMul(x2));
54975 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
54976
54977 var y2 = rhs.redMul(lhs.redInvm());
54978 var y = y2.redSqrt();
54979 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
54980 throw new Error('invalid point');
54981
54982 var isOdd = y.fromRed().isOdd();
54983 if (odd && !isOdd || !odd && isOdd)
54984 y = y.redNeg();
54985
54986 return this.point(x, y);
54987 };
54988
54989 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
54990 y = new BN(y, 16);
54991 if (!y.red)
54992 y = y.toRed(this.red);
54993
54994 // x^2 = (y^2 - 1) / (d y^2 + 1)
54995 var y2 = y.redSqr();
54996 var lhs = y2.redSub(this.one);
54997 var rhs = y2.redMul(this.d).redAdd(this.one);
54998 var x2 = lhs.redMul(rhs.redInvm());
54999
55000 if (x2.cmp(this.zero) === 0) {
55001 if (odd)
55002 throw new Error('invalid point');
55003 else
55004 return this.point(this.zero, y);
55005 }
55006
55007 var x = x2.redSqrt();
55008 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
55009 throw new Error('invalid point');
55010
55011 if (x.isOdd() !== odd)
55012 x = x.redNeg();
55013
55014 return this.point(x, y);
55015 };
55016
55017 EdwardsCurve.prototype.validate = function validate(point) {
55018 if (point.isInfinity())
55019 return true;
55020
55021 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
55022 point.normalize();
55023
55024 var x2 = point.x.redSqr();
55025 var y2 = point.y.redSqr();
55026 var lhs = x2.redMul(this.a).redAdd(y2);
55027 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
55028
55029 return lhs.cmp(rhs) === 0;
55030 };
55031
55032 function Point(curve, x, y, z, t) {
55033 Base.BasePoint.call(this, curve, 'projective');
55034 if (x === null && y === null && z === null) {
55035 this.x = this.curve.zero;
55036 this.y = this.curve.one;
55037 this.z = this.curve.one;
55038 this.t = this.curve.zero;
55039 this.zOne = true;
55040 } else {
55041 this.x = new BN(x, 16);
55042 this.y = new BN(y, 16);
55043 this.z = z ? new BN(z, 16) : this.curve.one;
55044 this.t = t && new BN(t, 16);
55045 if (!this.x.red)
55046 this.x = this.x.toRed(this.curve.red);
55047 if (!this.y.red)
55048 this.y = this.y.toRed(this.curve.red);
55049 if (!this.z.red)
55050 this.z = this.z.toRed(this.curve.red);
55051 if (this.t && !this.t.red)
55052 this.t = this.t.toRed(this.curve.red);
55053 this.zOne = this.z === this.curve.one;
55054
55055 // Use extended coordinates
55056 if (this.curve.extended && !this.t) {
55057 this.t = this.x.redMul(this.y);
55058 if (!this.zOne)
55059 this.t = this.t.redMul(this.z.redInvm());
55060 }
55061 }
55062 }
55063 inherits(Point, Base.BasePoint);
55064
55065 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
55066 return Point.fromJSON(this, obj);
55067 };
55068
55069 EdwardsCurve.prototype.point = function point(x, y, z, t) {
55070 return new Point(this, x, y, z, t);
55071 };
55072
55073 Point.fromJSON = function fromJSON(curve, obj) {
55074 return new Point(curve, obj[0], obj[1], obj[2]);
55075 };
55076
55077 Point.prototype.inspect = function inspect() {
55078 if (this.isInfinity())
55079 return '<EC Point Infinity>';
55080 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55081 ' y: ' + this.y.fromRed().toString(16, 2) +
55082 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
55083 };
55084
55085 Point.prototype.isInfinity = function isInfinity() {
55086 // XXX This code assumes that zero is always zero in red
55087 return this.x.cmpn(0) === 0 &&
55088 this.y.cmp(this.z) === 0;
55089 };
55090
55091 Point.prototype._extDbl = function _extDbl() {
55092 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
55093 // #doubling-dbl-2008-hwcd
55094 // 4M + 4S
55095
55096 // A = X1^2
55097 var a = this.x.redSqr();
55098 // B = Y1^2
55099 var b = this.y.redSqr();
55100 // C = 2 * Z1^2
55101 var c = this.z.redSqr();
55102 c = c.redIAdd(c);
55103 // D = a * A
55104 var d = this.curve._mulA(a);
55105 // E = (X1 + Y1)^2 - A - B
55106 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
55107 // G = D + B
55108 var g = d.redAdd(b);
55109 // F = G - C
55110 var f = g.redSub(c);
55111 // H = D - B
55112 var h = d.redSub(b);
55113 // X3 = E * F
55114 var nx = e.redMul(f);
55115 // Y3 = G * H
55116 var ny = g.redMul(h);
55117 // T3 = E * H
55118 var nt = e.redMul(h);
55119 // Z3 = F * G
55120 var nz = f.redMul(g);
55121 return this.curve.point(nx, ny, nz, nt);
55122 };
55123
55124 Point.prototype._projDbl = function _projDbl() {
55125 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55126 // #doubling-dbl-2008-bbjlp
55127 // #doubling-dbl-2007-bl
55128 // and others
55129 // Generally 3M + 4S or 2M + 4S
55130
55131 // B = (X1 + Y1)^2
55132 var b = this.x.redAdd(this.y).redSqr();
55133 // C = X1^2
55134 var c = this.x.redSqr();
55135 // D = Y1^2
55136 var d = this.y.redSqr();
55137
55138 var nx;
55139 var ny;
55140 var nz;
55141 if (this.curve.twisted) {
55142 // E = a * C
55143 var e = this.curve._mulA(c);
55144 // F = E + D
55145 var f = e.redAdd(d);
55146 if (this.zOne) {
55147 // X3 = (B - C - D) * (F - 2)
55148 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
55149 // Y3 = F * (E - D)
55150 ny = f.redMul(e.redSub(d));
55151 // Z3 = F^2 - 2 * F
55152 nz = f.redSqr().redSub(f).redSub(f);
55153 } else {
55154 // H = Z1^2
55155 var h = this.z.redSqr();
55156 // J = F - 2 * H
55157 var j = f.redSub(h).redISub(h);
55158 // X3 = (B-C-D)*J
55159 nx = b.redSub(c).redISub(d).redMul(j);
55160 // Y3 = F * (E - D)
55161 ny = f.redMul(e.redSub(d));
55162 // Z3 = F * J
55163 nz = f.redMul(j);
55164 }
55165 } else {
55166 // E = C + D
55167 var e = c.redAdd(d);
55168 // H = (c * Z1)^2
55169 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
55170 // J = E - 2 * H
55171 var j = e.redSub(h).redSub(h);
55172 // X3 = c * (B - E) * J
55173 nx = this.curve._mulC(b.redISub(e)).redMul(j);
55174 // Y3 = c * E * (C - D)
55175 ny = this.curve._mulC(e).redMul(c.redISub(d));
55176 // Z3 = E * J
55177 nz = e.redMul(j);
55178 }
55179 return this.curve.point(nx, ny, nz);
55180 };
55181
55182 Point.prototype.dbl = function dbl() {
55183 if (this.isInfinity())
55184 return this;
55185
55186 // Double in extended coordinates
55187 if (this.curve.extended)
55188 return this._extDbl();
55189 else
55190 return this._projDbl();
55191 };
55192
55193 Point.prototype._extAdd = function _extAdd(p) {
55194 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
55195 // #addition-add-2008-hwcd-3
55196 // 8M
55197
55198 // A = (Y1 - X1) * (Y2 - X2)
55199 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
55200 // B = (Y1 + X1) * (Y2 + X2)
55201 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
55202 // C = T1 * k * T2
55203 var c = this.t.redMul(this.curve.dd).redMul(p.t);
55204 // D = Z1 * 2 * Z2
55205 var d = this.z.redMul(p.z.redAdd(p.z));
55206 // E = B - A
55207 var e = b.redSub(a);
55208 // F = D - C
55209 var f = d.redSub(c);
55210 // G = D + C
55211 var g = d.redAdd(c);
55212 // H = B + A
55213 var h = b.redAdd(a);
55214 // X3 = E * F
55215 var nx = e.redMul(f);
55216 // Y3 = G * H
55217 var ny = g.redMul(h);
55218 // T3 = E * H
55219 var nt = e.redMul(h);
55220 // Z3 = F * G
55221 var nz = f.redMul(g);
55222 return this.curve.point(nx, ny, nz, nt);
55223 };
55224
55225 Point.prototype._projAdd = function _projAdd(p) {
55226 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
55227 // #addition-add-2008-bbjlp
55228 // #addition-add-2007-bl
55229 // 10M + 1S
55230
55231 // A = Z1 * Z2
55232 var a = this.z.redMul(p.z);
55233 // B = A^2
55234 var b = a.redSqr();
55235 // C = X1 * X2
55236 var c = this.x.redMul(p.x);
55237 // D = Y1 * Y2
55238 var d = this.y.redMul(p.y);
55239 // E = d * C * D
55240 var e = this.curve.d.redMul(c).redMul(d);
55241 // F = B - E
55242 var f = b.redSub(e);
55243 // G = B + E
55244 var g = b.redAdd(e);
55245 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
55246 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
55247 var nx = a.redMul(f).redMul(tmp);
55248 var ny;
55249 var nz;
55250 if (this.curve.twisted) {
55251 // Y3 = A * G * (D - a * C)
55252 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
55253 // Z3 = F * G
55254 nz = f.redMul(g);
55255 } else {
55256 // Y3 = A * G * (D - C)
55257 ny = a.redMul(g).redMul(d.redSub(c));
55258 // Z3 = c * F * G
55259 nz = this.curve._mulC(f).redMul(g);
55260 }
55261 return this.curve.point(nx, ny, nz);
55262 };
55263
55264 Point.prototype.add = function add(p) {
55265 if (this.isInfinity())
55266 return p;
55267 if (p.isInfinity())
55268 return this;
55269
55270 if (this.curve.extended)
55271 return this._extAdd(p);
55272 else
55273 return this._projAdd(p);
55274 };
55275
55276 Point.prototype.mul = function mul(k) {
55277 if (this._hasDoubles(k))
55278 return this.curve._fixedNafMul(this, k);
55279 else
55280 return this.curve._wnafMul(this, k);
55281 };
55282
55283 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
55284 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
55285 };
55286
55287 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
55288 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
55289 };
55290
55291 Point.prototype.normalize = function normalize() {
55292 if (this.zOne)
55293 return this;
55294
55295 // Normalize coordinates
55296 var zi = this.z.redInvm();
55297 this.x = this.x.redMul(zi);
55298 this.y = this.y.redMul(zi);
55299 if (this.t)
55300 this.t = this.t.redMul(zi);
55301 this.z = this.curve.one;
55302 this.zOne = true;
55303 return this;
55304 };
55305
55306 Point.prototype.neg = function neg() {
55307 return this.curve.point(this.x.redNeg(),
55308 this.y,
55309 this.z,
55310 this.t && this.t.redNeg());
55311 };
55312
55313 Point.prototype.getX = function getX() {
55314 this.normalize();
55315 return this.x.fromRed();
55316 };
55317
55318 Point.prototype.getY = function getY() {
55319 this.normalize();
55320 return this.y.fromRed();
55321 };
55322
55323 Point.prototype.eq = function eq(other) {
55324 return this === other ||
55325 this.getX().cmp(other.getX()) === 0 &&
55326 this.getY().cmp(other.getY()) === 0;
55327 };
55328
55329 Point.prototype.eqXToP = function eqXToP(x) {
55330 var rx = x.toRed(this.curve.red).redMul(this.z);
55331 if (this.x.cmp(rx) === 0)
55332 return true;
55333
55334 var xc = x.clone();
55335 var t = this.curve.redN.redMul(this.z);
55336 for (;;) {
55337 xc.iadd(this.curve.n);
55338 if (xc.cmp(this.curve.p) >= 0)
55339 return false;
55340
55341 rx.redIAdd(t);
55342 if (this.x.cmp(rx) === 0)
55343 return true;
55344 }
55345 return false;
55346 };
55347
55348 // Compatibility with BaseCurve
55349 Point.prototype.toP = Point.prototype.normalize;
55350 Point.prototype.mixedAdd = Point.prototype.add;
55351
55352 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],70:[function(require,module,exports){
55353 'use strict';
55354
55355 var curve = exports;
55356
55357 curve.base = require('./base');
55358 curve.short = require('./short');
55359 curve.mont = require('./mont');
55360 curve.edwards = require('./edwards');
55361
55362 },{"./base":68,"./edwards":69,"./mont":71,"./short":72}],71:[function(require,module,exports){
55363 'use strict';
55364
55365 var curve = require('../curve');
55366 var BN = require('bn.js');
55367 var inherits = require('inherits');
55368 var Base = curve.base;
55369
55370 var elliptic = require('../../elliptic');
55371 var utils = elliptic.utils;
55372
55373 function MontCurve(conf) {
55374 Base.call(this, 'mont', conf);
55375
55376 this.a = new BN(conf.a, 16).toRed(this.red);
55377 this.b = new BN(conf.b, 16).toRed(this.red);
55378 this.i4 = new BN(4).toRed(this.red).redInvm();
55379 this.two = new BN(2).toRed(this.red);
55380 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
55381 }
55382 inherits(MontCurve, Base);
55383 module.exports = MontCurve;
55384
55385 MontCurve.prototype.validate = function validate(point) {
55386 var x = point.normalize().x;
55387 var x2 = x.redSqr();
55388 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
55389 var y = rhs.redSqrt();
55390
55391 return y.redSqr().cmp(rhs) === 0;
55392 };
55393
55394 function Point(curve, x, z) {
55395 Base.BasePoint.call(this, curve, 'projective');
55396 if (x === null && z === null) {
55397 this.x = this.curve.one;
55398 this.z = this.curve.zero;
55399 } else {
55400 this.x = new BN(x, 16);
55401 this.z = new BN(z, 16);
55402 if (!this.x.red)
55403 this.x = this.x.toRed(this.curve.red);
55404 if (!this.z.red)
55405 this.z = this.z.toRed(this.curve.red);
55406 }
55407 }
55408 inherits(Point, Base.BasePoint);
55409
55410 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
55411 return this.point(utils.toArray(bytes, enc), 1);
55412 };
55413
55414 MontCurve.prototype.point = function point(x, z) {
55415 return new Point(this, x, z);
55416 };
55417
55418 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
55419 return Point.fromJSON(this, obj);
55420 };
55421
55422 Point.prototype.precompute = function precompute() {
55423 // No-op
55424 };
55425
55426 Point.prototype._encode = function _encode() {
55427 return this.getX().toArray('be', this.curve.p.byteLength());
55428 };
55429
55430 Point.fromJSON = function fromJSON(curve, obj) {
55431 return new Point(curve, obj[0], obj[1] || curve.one);
55432 };
55433
55434 Point.prototype.inspect = function inspect() {
55435 if (this.isInfinity())
55436 return '<EC Point Infinity>';
55437 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55438 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
55439 };
55440
55441 Point.prototype.isInfinity = function isInfinity() {
55442 // XXX This code assumes that zero is always zero in red
55443 return this.z.cmpn(0) === 0;
55444 };
55445
55446 Point.prototype.dbl = function dbl() {
55447 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
55448 // 2M + 2S + 4A
55449
55450 // A = X1 + Z1
55451 var a = this.x.redAdd(this.z);
55452 // AA = A^2
55453 var aa = a.redSqr();
55454 // B = X1 - Z1
55455 var b = this.x.redSub(this.z);
55456 // BB = B^2
55457 var bb = b.redSqr();
55458 // C = AA - BB
55459 var c = aa.redSub(bb);
55460 // X3 = AA * BB
55461 var nx = aa.redMul(bb);
55462 // Z3 = C * (BB + A24 * C)
55463 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
55464 return this.curve.point(nx, nz);
55465 };
55466
55467 Point.prototype.add = function add() {
55468 throw new Error('Not supported on Montgomery curve');
55469 };
55470
55471 Point.prototype.diffAdd = function diffAdd(p, diff) {
55472 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
55473 // 4M + 2S + 6A
55474
55475 // A = X2 + Z2
55476 var a = this.x.redAdd(this.z);
55477 // B = X2 - Z2
55478 var b = this.x.redSub(this.z);
55479 // C = X3 + Z3
55480 var c = p.x.redAdd(p.z);
55481 // D = X3 - Z3
55482 var d = p.x.redSub(p.z);
55483 // DA = D * A
55484 var da = d.redMul(a);
55485 // CB = C * B
55486 var cb = c.redMul(b);
55487 // X5 = Z1 * (DA + CB)^2
55488 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
55489 // Z5 = X1 * (DA - CB)^2
55490 var nz = diff.x.redMul(da.redISub(cb).redSqr());
55491 return this.curve.point(nx, nz);
55492 };
55493
55494 Point.prototype.mul = function mul(k) {
55495 var t = k.clone();
55496 var a = this; // (N / 2) * Q + Q
55497 var b = this.curve.point(null, null); // (N / 2) * Q
55498 var c = this; // Q
55499
55500 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
55501 bits.push(t.andln(1));
55502
55503 for (var i = bits.length - 1; i >= 0; i--) {
55504 if (bits[i] === 0) {
55505 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
55506 a = a.diffAdd(b, c);
55507 // N * Q = 2 * ((N / 2) * Q + Q))
55508 b = b.dbl();
55509 } else {
55510 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
55511 b = a.diffAdd(b, c);
55512 // N * Q + Q = 2 * ((N / 2) * Q + Q)
55513 a = a.dbl();
55514 }
55515 }
55516 return b;
55517 };
55518
55519 Point.prototype.mulAdd = function mulAdd() {
55520 throw new Error('Not supported on Montgomery curve');
55521 };
55522
55523 Point.prototype.jumlAdd = function jumlAdd() {
55524 throw new Error('Not supported on Montgomery curve');
55525 };
55526
55527 Point.prototype.eq = function eq(other) {
55528 return this.getX().cmp(other.getX()) === 0;
55529 };
55530
55531 Point.prototype.normalize = function normalize() {
55532 this.x = this.x.redMul(this.z.redInvm());
55533 this.z = this.curve.one;
55534 return this;
55535 };
55536
55537 Point.prototype.getX = function getX() {
55538 // Normalize coordinates
55539 this.normalize();
55540
55541 return this.x.fromRed();
55542 };
55543
55544 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],72:[function(require,module,exports){
55545 'use strict';
55546
55547 var curve = require('../curve');
55548 var elliptic = require('../../elliptic');
55549 var BN = require('bn.js');
55550 var inherits = require('inherits');
55551 var Base = curve.base;
55552
55553 var assert = elliptic.utils.assert;
55554
55555 function ShortCurve(conf) {
55556 Base.call(this, 'short', conf);
55557
55558 this.a = new BN(conf.a, 16).toRed(this.red);
55559 this.b = new BN(conf.b, 16).toRed(this.red);
55560 this.tinv = this.two.redInvm();
55561
55562 this.zeroA = this.a.fromRed().cmpn(0) === 0;
55563 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
55564
55565 // If the curve is endomorphic, precalculate beta and lambda
55566 this.endo = this._getEndomorphism(conf);
55567 this._endoWnafT1 = new Array(4);
55568 this._endoWnafT2 = new Array(4);
55569 }
55570 inherits(ShortCurve, Base);
55571 module.exports = ShortCurve;
55572
55573 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
55574 // No efficient endomorphism
55575 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
55576 return;
55577
55578 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
55579 var beta;
55580 var lambda;
55581 if (conf.beta) {
55582 beta = new BN(conf.beta, 16).toRed(this.red);
55583 } else {
55584 var betas = this._getEndoRoots(this.p);
55585 // Choose the smallest beta
55586 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
55587 beta = beta.toRed(this.red);
55588 }
55589 if (conf.lambda) {
55590 lambda = new BN(conf.lambda, 16);
55591 } else {
55592 // Choose the lambda that is matching selected beta
55593 var lambdas = this._getEndoRoots(this.n);
55594 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
55595 lambda = lambdas[0];
55596 } else {
55597 lambda = lambdas[1];
55598 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
55599 }
55600 }
55601
55602 // Get basis vectors, used for balanced length-two representation
55603 var basis;
55604 if (conf.basis) {
55605 basis = conf.basis.map(function(vec) {
55606 return {
55607 a: new BN(vec.a, 16),
55608 b: new BN(vec.b, 16)
55609 };
55610 });
55611 } else {
55612 basis = this._getEndoBasis(lambda);
55613 }
55614
55615 return {
55616 beta: beta,
55617 lambda: lambda,
55618 basis: basis
55619 };
55620 };
55621
55622 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
55623 // Find roots of for x^2 + x + 1 in F
55624 // Root = (-1 +- Sqrt(-3)) / 2
55625 //
55626 var red = num === this.p ? this.red : BN.mont(num);
55627 var tinv = new BN(2).toRed(red).redInvm();
55628 var ntinv = tinv.redNeg();
55629
55630 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
55631
55632 var l1 = ntinv.redAdd(s).fromRed();
55633 var l2 = ntinv.redSub(s).fromRed();
55634 return [ l1, l2 ];
55635 };
55636
55637 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
55638 // aprxSqrt >= sqrt(this.n)
55639 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
55640
55641 // 3.74
55642 // Run EGCD, until r(L + 1) < aprxSqrt
55643 var u = lambda;
55644 var v = this.n.clone();
55645 var x1 = new BN(1);
55646 var y1 = new BN(0);
55647 var x2 = new BN(0);
55648 var y2 = new BN(1);
55649
55650 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
55651 var a0;
55652 var b0;
55653 // First vector
55654 var a1;
55655 var b1;
55656 // Second vector
55657 var a2;
55658 var b2;
55659
55660 var prevR;
55661 var i = 0;
55662 var r;
55663 var x;
55664 while (u.cmpn(0) !== 0) {
55665 var q = v.div(u);
55666 r = v.sub(q.mul(u));
55667 x = x2.sub(q.mul(x1));
55668 var y = y2.sub(q.mul(y1));
55669
55670 if (!a1 && r.cmp(aprxSqrt) < 0) {
55671 a0 = prevR.neg();
55672 b0 = x1;
55673 a1 = r.neg();
55674 b1 = x;
55675 } else if (a1 && ++i === 2) {
55676 break;
55677 }
55678 prevR = r;
55679
55680 v = u;
55681 u = r;
55682 x2 = x1;
55683 x1 = x;
55684 y2 = y1;
55685 y1 = y;
55686 }
55687 a2 = r.neg();
55688 b2 = x;
55689
55690 var len1 = a1.sqr().add(b1.sqr());
55691 var len2 = a2.sqr().add(b2.sqr());
55692 if (len2.cmp(len1) >= 0) {
55693 a2 = a0;
55694 b2 = b0;
55695 }
55696
55697 // Normalize signs
55698 if (a1.negative) {
55699 a1 = a1.neg();
55700 b1 = b1.neg();
55701 }
55702 if (a2.negative) {
55703 a2 = a2.neg();
55704 b2 = b2.neg();
55705 }
55706
55707 return [
55708 { a: a1, b: b1 },
55709 { a: a2, b: b2 }
55710 ];
55711 };
55712
55713 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
55714 var basis = this.endo.basis;
55715 var v1 = basis[0];
55716 var v2 = basis[1];
55717
55718 var c1 = v2.b.mul(k).divRound(this.n);
55719 var c2 = v1.b.neg().mul(k).divRound(this.n);
55720
55721 var p1 = c1.mul(v1.a);
55722 var p2 = c2.mul(v2.a);
55723 var q1 = c1.mul(v1.b);
55724 var q2 = c2.mul(v2.b);
55725
55726 // Calculate answer
55727 var k1 = k.sub(p1).sub(p2);
55728 var k2 = q1.add(q2).neg();
55729 return { k1: k1, k2: k2 };
55730 };
55731
55732 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
55733 x = new BN(x, 16);
55734 if (!x.red)
55735 x = x.toRed(this.red);
55736
55737 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
55738 var y = y2.redSqrt();
55739 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
55740 throw new Error('invalid point');
55741
55742 // XXX Is there any way to tell if the number is odd without converting it
55743 // to non-red form?
55744 var isOdd = y.fromRed().isOdd();
55745 if (odd && !isOdd || !odd && isOdd)
55746 y = y.redNeg();
55747
55748 return this.point(x, y);
55749 };
55750
55751 ShortCurve.prototype.validate = function validate(point) {
55752 if (point.inf)
55753 return true;
55754
55755 var x = point.x;
55756 var y = point.y;
55757
55758 var ax = this.a.redMul(x);
55759 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
55760 return y.redSqr().redISub(rhs).cmpn(0) === 0;
55761 };
55762
55763 ShortCurve.prototype._endoWnafMulAdd =
55764 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
55765 var npoints = this._endoWnafT1;
55766 var ncoeffs = this._endoWnafT2;
55767 for (var i = 0; i < points.length; i++) {
55768 var split = this._endoSplit(coeffs[i]);
55769 var p = points[i];
55770 var beta = p._getBeta();
55771
55772 if (split.k1.negative) {
55773 split.k1.ineg();
55774 p = p.neg(true);
55775 }
55776 if (split.k2.negative) {
55777 split.k2.ineg();
55778 beta = beta.neg(true);
55779 }
55780
55781 npoints[i * 2] = p;
55782 npoints[i * 2 + 1] = beta;
55783 ncoeffs[i * 2] = split.k1;
55784 ncoeffs[i * 2 + 1] = split.k2;
55785 }
55786 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
55787
55788 // Clean-up references to points and coefficients
55789 for (var j = 0; j < i * 2; j++) {
55790 npoints[j] = null;
55791 ncoeffs[j] = null;
55792 }
55793 return res;
55794 };
55795
55796 function Point(curve, x, y, isRed) {
55797 Base.BasePoint.call(this, curve, 'affine');
55798 if (x === null && y === null) {
55799 this.x = null;
55800 this.y = null;
55801 this.inf = true;
55802 } else {
55803 this.x = new BN(x, 16);
55804 this.y = new BN(y, 16);
55805 // Force redgomery representation when loading from JSON
55806 if (isRed) {
55807 this.x.forceRed(this.curve.red);
55808 this.y.forceRed(this.curve.red);
55809 }
55810 if (!this.x.red)
55811 this.x = this.x.toRed(this.curve.red);
55812 if (!this.y.red)
55813 this.y = this.y.toRed(this.curve.red);
55814 this.inf = false;
55815 }
55816 }
55817 inherits(Point, Base.BasePoint);
55818
55819 ShortCurve.prototype.point = function point(x, y, isRed) {
55820 return new Point(this, x, y, isRed);
55821 };
55822
55823 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
55824 return Point.fromJSON(this, obj, red);
55825 };
55826
55827 Point.prototype._getBeta = function _getBeta() {
55828 if (!this.curve.endo)
55829 return;
55830
55831 var pre = this.precomputed;
55832 if (pre && pre.beta)
55833 return pre.beta;
55834
55835 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
55836 if (pre) {
55837 var curve = this.curve;
55838 var endoMul = function(p) {
55839 return curve.point(p.x.redMul(curve.endo.beta), p.y);
55840 };
55841 pre.beta = beta;
55842 beta.precomputed = {
55843 beta: null,
55844 naf: pre.naf && {
55845 wnd: pre.naf.wnd,
55846 points: pre.naf.points.map(endoMul)
55847 },
55848 doubles: pre.doubles && {
55849 step: pre.doubles.step,
55850 points: pre.doubles.points.map(endoMul)
55851 }
55852 };
55853 }
55854 return beta;
55855 };
55856
55857 Point.prototype.toJSON = function toJSON() {
55858 if (!this.precomputed)
55859 return [ this.x, this.y ];
55860
55861 return [ this.x, this.y, this.precomputed && {
55862 doubles: this.precomputed.doubles && {
55863 step: this.precomputed.doubles.step,
55864 points: this.precomputed.doubles.points.slice(1)
55865 },
55866 naf: this.precomputed.naf && {
55867 wnd: this.precomputed.naf.wnd,
55868 points: this.precomputed.naf.points.slice(1)
55869 }
55870 } ];
55871 };
55872
55873 Point.fromJSON = function fromJSON(curve, obj, red) {
55874 if (typeof obj === 'string')
55875 obj = JSON.parse(obj);
55876 var res = curve.point(obj[0], obj[1], red);
55877 if (!obj[2])
55878 return res;
55879
55880 function obj2point(obj) {
55881 return curve.point(obj[0], obj[1], red);
55882 }
55883
55884 var pre = obj[2];
55885 res.precomputed = {
55886 beta: null,
55887 doubles: pre.doubles && {
55888 step: pre.doubles.step,
55889 points: [ res ].concat(pre.doubles.points.map(obj2point))
55890 },
55891 naf: pre.naf && {
55892 wnd: pre.naf.wnd,
55893 points: [ res ].concat(pre.naf.points.map(obj2point))
55894 }
55895 };
55896 return res;
55897 };
55898
55899 Point.prototype.inspect = function inspect() {
55900 if (this.isInfinity())
55901 return '<EC Point Infinity>';
55902 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
55903 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
55904 };
55905
55906 Point.prototype.isInfinity = function isInfinity() {
55907 return this.inf;
55908 };
55909
55910 Point.prototype.add = function add(p) {
55911 // O + P = P
55912 if (this.inf)
55913 return p;
55914
55915 // P + O = P
55916 if (p.inf)
55917 return this;
55918
55919 // P + P = 2P
55920 if (this.eq(p))
55921 return this.dbl();
55922
55923 // P + (-P) = O
55924 if (this.neg().eq(p))
55925 return this.curve.point(null, null);
55926
55927 // P + Q = O
55928 if (this.x.cmp(p.x) === 0)
55929 return this.curve.point(null, null);
55930
55931 var c = this.y.redSub(p.y);
55932 if (c.cmpn(0) !== 0)
55933 c = c.redMul(this.x.redSub(p.x).redInvm());
55934 var nx = c.redSqr().redISub(this.x).redISub(p.x);
55935 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55936 return this.curve.point(nx, ny);
55937 };
55938
55939 Point.prototype.dbl = function dbl() {
55940 if (this.inf)
55941 return this;
55942
55943 // 2P = O
55944 var ys1 = this.y.redAdd(this.y);
55945 if (ys1.cmpn(0) === 0)
55946 return this.curve.point(null, null);
55947
55948 var a = this.curve.a;
55949
55950 var x2 = this.x.redSqr();
55951 var dyinv = ys1.redInvm();
55952 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
55953
55954 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
55955 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
55956 return this.curve.point(nx, ny);
55957 };
55958
55959 Point.prototype.getX = function getX() {
55960 return this.x.fromRed();
55961 };
55962
55963 Point.prototype.getY = function getY() {
55964 return this.y.fromRed();
55965 };
55966
55967 Point.prototype.mul = function mul(k) {
55968 k = new BN(k, 16);
55969
55970 if (this._hasDoubles(k))
55971 return this.curve._fixedNafMul(this, k);
55972 else if (this.curve.endo)
55973 return this.curve._endoWnafMulAdd([ this ], [ k ]);
55974 else
55975 return this.curve._wnafMul(this, k);
55976 };
55977
55978 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
55979 var points = [ this, p2 ];
55980 var coeffs = [ k1, k2 ];
55981 if (this.curve.endo)
55982 return this.curve._endoWnafMulAdd(points, coeffs);
55983 else
55984 return this.curve._wnafMulAdd(1, points, coeffs, 2);
55985 };
55986
55987 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
55988 var points = [ this, p2 ];
55989 var coeffs = [ k1, k2 ];
55990 if (this.curve.endo)
55991 return this.curve._endoWnafMulAdd(points, coeffs, true);
55992 else
55993 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
55994 };
55995
55996 Point.prototype.eq = function eq(p) {
55997 return this === p ||
55998 this.inf === p.inf &&
55999 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
56000 };
56001
56002 Point.prototype.neg = function neg(_precompute) {
56003 if (this.inf)
56004 return this;
56005
56006 var res = this.curve.point(this.x, this.y.redNeg());
56007 if (_precompute && this.precomputed) {
56008 var pre = this.precomputed;
56009 var negate = function(p) {
56010 return p.neg();
56011 };
56012 res.precomputed = {
56013 naf: pre.naf && {
56014 wnd: pre.naf.wnd,
56015 points: pre.naf.points.map(negate)
56016 },
56017 doubles: pre.doubles && {
56018 step: pre.doubles.step,
56019 points: pre.doubles.points.map(negate)
56020 }
56021 };
56022 }
56023 return res;
56024 };
56025
56026 Point.prototype.toJ = function toJ() {
56027 if (this.inf)
56028 return this.curve.jpoint(null, null, null);
56029
56030 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
56031 return res;
56032 };
56033
56034 function JPoint(curve, x, y, z) {
56035 Base.BasePoint.call(this, curve, 'jacobian');
56036 if (x === null && y === null && z === null) {
56037 this.x = this.curve.one;
56038 this.y = this.curve.one;
56039 this.z = new BN(0);
56040 } else {
56041 this.x = new BN(x, 16);
56042 this.y = new BN(y, 16);
56043 this.z = new BN(z, 16);
56044 }
56045 if (!this.x.red)
56046 this.x = this.x.toRed(this.curve.red);
56047 if (!this.y.red)
56048 this.y = this.y.toRed(this.curve.red);
56049 if (!this.z.red)
56050 this.z = this.z.toRed(this.curve.red);
56051
56052 this.zOne = this.z === this.curve.one;
56053 }
56054 inherits(JPoint, Base.BasePoint);
56055
56056 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
56057 return new JPoint(this, x, y, z);
56058 };
56059
56060 JPoint.prototype.toP = function toP() {
56061 if (this.isInfinity())
56062 return this.curve.point(null, null);
56063
56064 var zinv = this.z.redInvm();
56065 var zinv2 = zinv.redSqr();
56066 var ax = this.x.redMul(zinv2);
56067 var ay = this.y.redMul(zinv2).redMul(zinv);
56068
56069 return this.curve.point(ax, ay);
56070 };
56071
56072 JPoint.prototype.neg = function neg() {
56073 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
56074 };
56075
56076 JPoint.prototype.add = function add(p) {
56077 // O + P = P
56078 if (this.isInfinity())
56079 return p;
56080
56081 // P + O = P
56082 if (p.isInfinity())
56083 return this;
56084
56085 // 12M + 4S + 7A
56086 var pz2 = p.z.redSqr();
56087 var z2 = this.z.redSqr();
56088 var u1 = this.x.redMul(pz2);
56089 var u2 = p.x.redMul(z2);
56090 var s1 = this.y.redMul(pz2.redMul(p.z));
56091 var s2 = p.y.redMul(z2.redMul(this.z));
56092
56093 var h = u1.redSub(u2);
56094 var r = s1.redSub(s2);
56095 if (h.cmpn(0) === 0) {
56096 if (r.cmpn(0) !== 0)
56097 return this.curve.jpoint(null, null, null);
56098 else
56099 return this.dbl();
56100 }
56101
56102 var h2 = h.redSqr();
56103 var h3 = h2.redMul(h);
56104 var v = u1.redMul(h2);
56105
56106 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
56107 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
56108 var nz = this.z.redMul(p.z).redMul(h);
56109
56110 return this.curve.jpoint(nx, ny, nz);
56111 };
56112
56113 JPoint.prototype.mixedAdd = function mixedAdd(p) {
56114 // O + P = P
56115 if (this.isInfinity())
56116 return p.toJ();
56117
56118 // P + O = P
56119 if (p.isInfinity())
56120 return this;
56121
56122 // 8M + 3S + 7A
56123 var z2 = this.z.redSqr();
56124 var u1 = this.x;
56125 var u2 = p.x.redMul(z2);
56126 var s1 = this.y;
56127 var s2 = p.y.redMul(z2).redMul(this.z);
56128
56129 var h = u1.redSub(u2);
56130 var r = s1.redSub(s2);
56131 if (h.cmpn(0) === 0) {
56132 if (r.cmpn(0) !== 0)
56133 return this.curve.jpoint(null, null, null);
56134 else
56135 return this.dbl();
56136 }
56137
56138 var h2 = h.redSqr();
56139 var h3 = h2.redMul(h);
56140 var v = u1.redMul(h2);
56141
56142 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
56143 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
56144 var nz = this.z.redMul(h);
56145
56146 return this.curve.jpoint(nx, ny, nz);
56147 };
56148
56149 JPoint.prototype.dblp = function dblp(pow) {
56150 if (pow === 0)
56151 return this;
56152 if (this.isInfinity())
56153 return this;
56154 if (!pow)
56155 return this.dbl();
56156
56157 if (this.curve.zeroA || this.curve.threeA) {
56158 var r = this;
56159 for (var i = 0; i < pow; i++)
56160 r = r.dbl();
56161 return r;
56162 }
56163
56164 // 1M + 2S + 1A + N * (4S + 5M + 8A)
56165 // N = 1 => 6M + 6S + 9A
56166 var a = this.curve.a;
56167 var tinv = this.curve.tinv;
56168
56169 var jx = this.x;
56170 var jy = this.y;
56171 var jz = this.z;
56172 var jz4 = jz.redSqr().redSqr();
56173
56174 // Reuse results
56175 var jyd = jy.redAdd(jy);
56176 for (var i = 0; i < pow; i++) {
56177 var jx2 = jx.redSqr();
56178 var jyd2 = jyd.redSqr();
56179 var jyd4 = jyd2.redSqr();
56180 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56181
56182 var t1 = jx.redMul(jyd2);
56183 var nx = c.redSqr().redISub(t1.redAdd(t1));
56184 var t2 = t1.redISub(nx);
56185 var dny = c.redMul(t2);
56186 dny = dny.redIAdd(dny).redISub(jyd4);
56187 var nz = jyd.redMul(jz);
56188 if (i + 1 < pow)
56189 jz4 = jz4.redMul(jyd4);
56190
56191 jx = nx;
56192 jz = nz;
56193 jyd = dny;
56194 }
56195
56196 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
56197 };
56198
56199 JPoint.prototype.dbl = function dbl() {
56200 if (this.isInfinity())
56201 return this;
56202
56203 if (this.curve.zeroA)
56204 return this._zeroDbl();
56205 else if (this.curve.threeA)
56206 return this._threeDbl();
56207 else
56208 return this._dbl();
56209 };
56210
56211 JPoint.prototype._zeroDbl = function _zeroDbl() {
56212 var nx;
56213 var ny;
56214 var nz;
56215 // Z = 1
56216 if (this.zOne) {
56217 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56218 // #doubling-mdbl-2007-bl
56219 // 1M + 5S + 14A
56220
56221 // XX = X1^2
56222 var xx = this.x.redSqr();
56223 // YY = Y1^2
56224 var yy = this.y.redSqr();
56225 // YYYY = YY^2
56226 var yyyy = yy.redSqr();
56227 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56228 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56229 s = s.redIAdd(s);
56230 // M = 3 * XX + a; a = 0
56231 var m = xx.redAdd(xx).redIAdd(xx);
56232 // T = M ^ 2 - 2*S
56233 var t = m.redSqr().redISub(s).redISub(s);
56234
56235 // 8 * YYYY
56236 var yyyy8 = yyyy.redIAdd(yyyy);
56237 yyyy8 = yyyy8.redIAdd(yyyy8);
56238 yyyy8 = yyyy8.redIAdd(yyyy8);
56239
56240 // X3 = T
56241 nx = t;
56242 // Y3 = M * (S - T) - 8 * YYYY
56243 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56244 // Z3 = 2*Y1
56245 nz = this.y.redAdd(this.y);
56246 } else {
56247 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
56248 // #doubling-dbl-2009-l
56249 // 2M + 5S + 13A
56250
56251 // A = X1^2
56252 var a = this.x.redSqr();
56253 // B = Y1^2
56254 var b = this.y.redSqr();
56255 // C = B^2
56256 var c = b.redSqr();
56257 // D = 2 * ((X1 + B)^2 - A - C)
56258 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
56259 d = d.redIAdd(d);
56260 // E = 3 * A
56261 var e = a.redAdd(a).redIAdd(a);
56262 // F = E^2
56263 var f = e.redSqr();
56264
56265 // 8 * C
56266 var c8 = c.redIAdd(c);
56267 c8 = c8.redIAdd(c8);
56268 c8 = c8.redIAdd(c8);
56269
56270 // X3 = F - 2 * D
56271 nx = f.redISub(d).redISub(d);
56272 // Y3 = E * (D - X3) - 8 * C
56273 ny = e.redMul(d.redISub(nx)).redISub(c8);
56274 // Z3 = 2 * Y1 * Z1
56275 nz = this.y.redMul(this.z);
56276 nz = nz.redIAdd(nz);
56277 }
56278
56279 return this.curve.jpoint(nx, ny, nz);
56280 };
56281
56282 JPoint.prototype._threeDbl = function _threeDbl() {
56283 var nx;
56284 var ny;
56285 var nz;
56286 // Z = 1
56287 if (this.zOne) {
56288 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
56289 // #doubling-mdbl-2007-bl
56290 // 1M + 5S + 15A
56291
56292 // XX = X1^2
56293 var xx = this.x.redSqr();
56294 // YY = Y1^2
56295 var yy = this.y.redSqr();
56296 // YYYY = YY^2
56297 var yyyy = yy.redSqr();
56298 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
56299 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56300 s = s.redIAdd(s);
56301 // M = 3 * XX + a
56302 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
56303 // T = M^2 - 2 * S
56304 var t = m.redSqr().redISub(s).redISub(s);
56305 // X3 = T
56306 nx = t;
56307 // Y3 = M * (S - T) - 8 * YYYY
56308 var yyyy8 = yyyy.redIAdd(yyyy);
56309 yyyy8 = yyyy8.redIAdd(yyyy8);
56310 yyyy8 = yyyy8.redIAdd(yyyy8);
56311 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
56312 // Z3 = 2 * Y1
56313 nz = this.y.redAdd(this.y);
56314 } else {
56315 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
56316 // 3M + 5S
56317
56318 // delta = Z1^2
56319 var delta = this.z.redSqr();
56320 // gamma = Y1^2
56321 var gamma = this.y.redSqr();
56322 // beta = X1 * gamma
56323 var beta = this.x.redMul(gamma);
56324 // alpha = 3 * (X1 - delta) * (X1 + delta)
56325 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
56326 alpha = alpha.redAdd(alpha).redIAdd(alpha);
56327 // X3 = alpha^2 - 8 * beta
56328 var beta4 = beta.redIAdd(beta);
56329 beta4 = beta4.redIAdd(beta4);
56330 var beta8 = beta4.redAdd(beta4);
56331 nx = alpha.redSqr().redISub(beta8);
56332 // Z3 = (Y1 + Z1)^2 - gamma - delta
56333 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
56334 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
56335 var ggamma8 = gamma.redSqr();
56336 ggamma8 = ggamma8.redIAdd(ggamma8);
56337 ggamma8 = ggamma8.redIAdd(ggamma8);
56338 ggamma8 = ggamma8.redIAdd(ggamma8);
56339 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
56340 }
56341
56342 return this.curve.jpoint(nx, ny, nz);
56343 };
56344
56345 JPoint.prototype._dbl = function _dbl() {
56346 var a = this.curve.a;
56347
56348 // 4M + 6S + 10A
56349 var jx = this.x;
56350 var jy = this.y;
56351 var jz = this.z;
56352 var jz4 = jz.redSqr().redSqr();
56353
56354 var jx2 = jx.redSqr();
56355 var jy2 = jy.redSqr();
56356
56357 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
56358
56359 var jxd4 = jx.redAdd(jx);
56360 jxd4 = jxd4.redIAdd(jxd4);
56361 var t1 = jxd4.redMul(jy2);
56362 var nx = c.redSqr().redISub(t1.redAdd(t1));
56363 var t2 = t1.redISub(nx);
56364
56365 var jyd8 = jy2.redSqr();
56366 jyd8 = jyd8.redIAdd(jyd8);
56367 jyd8 = jyd8.redIAdd(jyd8);
56368 jyd8 = jyd8.redIAdd(jyd8);
56369 var ny = c.redMul(t2).redISub(jyd8);
56370 var nz = jy.redAdd(jy).redMul(jz);
56371
56372 return this.curve.jpoint(nx, ny, nz);
56373 };
56374
56375 JPoint.prototype.trpl = function trpl() {
56376 if (!this.curve.zeroA)
56377 return this.dbl().add(this);
56378
56379 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
56380 // 5M + 10S + ...
56381
56382 // XX = X1^2
56383 var xx = this.x.redSqr();
56384 // YY = Y1^2
56385 var yy = this.y.redSqr();
56386 // ZZ = Z1^2
56387 var zz = this.z.redSqr();
56388 // YYYY = YY^2
56389 var yyyy = yy.redSqr();
56390 // M = 3 * XX + a * ZZ2; a = 0
56391 var m = xx.redAdd(xx).redIAdd(xx);
56392 // MM = M^2
56393 var mm = m.redSqr();
56394 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
56395 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
56396 e = e.redIAdd(e);
56397 e = e.redAdd(e).redIAdd(e);
56398 e = e.redISub(mm);
56399 // EE = E^2
56400 var ee = e.redSqr();
56401 // T = 16*YYYY
56402 var t = yyyy.redIAdd(yyyy);
56403 t = t.redIAdd(t);
56404 t = t.redIAdd(t);
56405 t = t.redIAdd(t);
56406 // U = (M + E)^2 - MM - EE - T
56407 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
56408 // X3 = 4 * (X1 * EE - 4 * YY * U)
56409 var yyu4 = yy.redMul(u);
56410 yyu4 = yyu4.redIAdd(yyu4);
56411 yyu4 = yyu4.redIAdd(yyu4);
56412 var nx = this.x.redMul(ee).redISub(yyu4);
56413 nx = nx.redIAdd(nx);
56414 nx = nx.redIAdd(nx);
56415 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
56416 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
56417 ny = ny.redIAdd(ny);
56418 ny = ny.redIAdd(ny);
56419 ny = ny.redIAdd(ny);
56420 // Z3 = (Z1 + E)^2 - ZZ - EE
56421 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
56422
56423 return this.curve.jpoint(nx, ny, nz);
56424 };
56425
56426 JPoint.prototype.mul = function mul(k, kbase) {
56427 k = new BN(k, kbase);
56428
56429 return this.curve._wnafMul(this, k);
56430 };
56431
56432 JPoint.prototype.eq = function eq(p) {
56433 if (p.type === 'affine')
56434 return this.eq(p.toJ());
56435
56436 if (this === p)
56437 return true;
56438
56439 // x1 * z2^2 == x2 * z1^2
56440 var z2 = this.z.redSqr();
56441 var pz2 = p.z.redSqr();
56442 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
56443 return false;
56444
56445 // y1 * z2^3 == y2 * z1^3
56446 var z3 = z2.redMul(this.z);
56447 var pz3 = pz2.redMul(p.z);
56448 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
56449 };
56450
56451 JPoint.prototype.eqXToP = function eqXToP(x) {
56452 var zs = this.z.redSqr();
56453 var rx = x.toRed(this.curve.red).redMul(zs);
56454 if (this.x.cmp(rx) === 0)
56455 return true;
56456
56457 var xc = x.clone();
56458 var t = this.curve.redN.redMul(zs);
56459 for (;;) {
56460 xc.iadd(this.curve.n);
56461 if (xc.cmp(this.curve.p) >= 0)
56462 return false;
56463
56464 rx.redIAdd(t);
56465 if (this.x.cmp(rx) === 0)
56466 return true;
56467 }
56468 return false;
56469 };
56470
56471 JPoint.prototype.inspect = function inspect() {
56472 if (this.isInfinity())
56473 return '<EC JPoint Infinity>';
56474 return '<EC JPoint x: ' + this.x.toString(16, 2) +
56475 ' y: ' + this.y.toString(16, 2) +
56476 ' z: ' + this.z.toString(16, 2) + '>';
56477 };
56478
56479 JPoint.prototype.isInfinity = function isInfinity() {
56480 // XXX This code assumes that zero is always zero in red
56481 return this.z.cmpn(0) === 0;
56482 };
56483
56484 },{"../../elliptic":67,"../curve":70,"bn.js":17,"inherits":95}],73:[function(require,module,exports){
56485 'use strict';
56486
56487 var curves = exports;
56488
56489 var hash = require('hash.js');
56490 var elliptic = require('../elliptic');
56491
56492 var assert = elliptic.utils.assert;
56493
56494 function PresetCurve(options) {
56495 if (options.type === 'short')
56496 this.curve = new elliptic.curve.short(options);
56497 else if (options.type === 'edwards')
56498 this.curve = new elliptic.curve.edwards(options);
56499 else
56500 this.curve = new elliptic.curve.mont(options);
56501 this.g = this.curve.g;
56502 this.n = this.curve.n;
56503 this.hash = options.hash;
56504
56505 assert(this.g.validate(), 'Invalid curve');
56506 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
56507 }
56508 curves.PresetCurve = PresetCurve;
56509
56510 function defineCurve(name, options) {
56511 Object.defineProperty(curves, name, {
56512 configurable: true,
56513 enumerable: true,
56514 get: function() {
56515 var curve = new PresetCurve(options);
56516 Object.defineProperty(curves, name, {
56517 configurable: true,
56518 enumerable: true,
56519 value: curve
56520 });
56521 return curve;
56522 }
56523 });
56524 }
56525
56526 defineCurve('p192', {
56527 type: 'short',
56528 prime: 'p192',
56529 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
56530 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
56531 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
56532 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
56533 hash: hash.sha256,
56534 gRed: false,
56535 g: [
56536 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
56537 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
56538 ]
56539 });
56540
56541 defineCurve('p224', {
56542 type: 'short',
56543 prime: 'p224',
56544 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
56545 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
56546 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
56547 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
56548 hash: hash.sha256,
56549 gRed: false,
56550 g: [
56551 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
56552 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
56553 ]
56554 });
56555
56556 defineCurve('p256', {
56557 type: 'short',
56558 prime: null,
56559 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
56560 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
56561 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
56562 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
56563 hash: hash.sha256,
56564 gRed: false,
56565 g: [
56566 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
56567 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
56568 ]
56569 });
56570
56571 defineCurve('p384', {
56572 type: 'short',
56573 prime: null,
56574 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56575 'fffffffe ffffffff 00000000 00000000 ffffffff',
56576 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56577 'fffffffe ffffffff 00000000 00000000 fffffffc',
56578 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
56579 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
56580 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
56581 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
56582 hash: hash.sha384,
56583 gRed: false,
56584 g: [
56585 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
56586 '5502f25d bf55296c 3a545e38 72760ab7',
56587 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
56588 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
56589 ]
56590 });
56591
56592 defineCurve('p521', {
56593 type: 'short',
56594 prime: null,
56595 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56596 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56597 'ffffffff ffffffff ffffffff ffffffff ffffffff',
56598 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56599 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56600 'ffffffff ffffffff ffffffff ffffffff fffffffc',
56601 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
56602 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
56603 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
56604 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
56605 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
56606 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
56607 hash: hash.sha512,
56608 gRed: false,
56609 g: [
56610 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
56611 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
56612 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
56613 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
56614 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
56615 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
56616 ]
56617 });
56618
56619 defineCurve('curve25519', {
56620 type: 'mont',
56621 prime: 'p25519',
56622 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56623 a: '76d06',
56624 b: '1',
56625 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56626 hash: hash.sha256,
56627 gRed: false,
56628 g: [
56629 '9'
56630 ]
56631 });
56632
56633 defineCurve('ed25519', {
56634 type: 'edwards',
56635 prime: 'p25519',
56636 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
56637 a: '-1',
56638 c: '1',
56639 // -121665 * (121666^(-1)) (mod P)
56640 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
56641 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
56642 hash: hash.sha256,
56643 gRed: false,
56644 g: [
56645 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
56646
56647 // 4/5
56648 '6666666666666666666666666666666666666666666666666666666666666658'
56649 ]
56650 });
56651
56652 var pre;
56653 try {
56654 pre = require('./precomputed/secp256k1');
56655 } catch (e) {
56656 pre = undefined;
56657 }
56658
56659 defineCurve('secp256k1', {
56660 type: 'short',
56661 prime: 'k256',
56662 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
56663 a: '0',
56664 b: '7',
56665 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
56666 h: '1',
56667 hash: hash.sha256,
56668
56669 // Precomputed endomorphism
56670 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
56671 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
56672 basis: [
56673 {
56674 a: '3086d221a7d46bcde86c90e49284eb15',
56675 b: '-e4437ed6010e88286f547fa90abfe4c3'
56676 },
56677 {
56678 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
56679 b: '3086d221a7d46bcde86c90e49284eb15'
56680 }
56681 ],
56682
56683 gRed: false,
56684 g: [
56685 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
56686 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
56687 pre
56688 ]
56689 });
56690
56691 },{"../elliptic":67,"./precomputed/secp256k1":80,"hash.js":86}],74:[function(require,module,exports){
56692 'use strict';
56693
56694 var BN = require('bn.js');
56695 var HmacDRBG = require('hmac-drbg');
56696 var elliptic = require('../../elliptic');
56697 var utils = elliptic.utils;
56698 var assert = utils.assert;
56699
56700 var KeyPair = require('./key');
56701 var Signature = require('./signature');
56702
56703 function EC(options) {
56704 if (!(this instanceof EC))
56705 return new EC(options);
56706
56707 // Shortcut `elliptic.ec(curve-name)`
56708 if (typeof options === 'string') {
56709 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
56710
56711 options = elliptic.curves[options];
56712 }
56713
56714 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
56715 if (options instanceof elliptic.curves.PresetCurve)
56716 options = { curve: options };
56717
56718 this.curve = options.curve.curve;
56719 this.n = this.curve.n;
56720 this.nh = this.n.ushrn(1);
56721 this.g = this.curve.g;
56722
56723 // Point on curve
56724 this.g = options.curve.g;
56725 this.g.precompute(options.curve.n.bitLength() + 1);
56726
56727 // Hash for function for DRBG
56728 this.hash = options.hash || options.curve.hash;
56729 }
56730 module.exports = EC;
56731
56732 EC.prototype.keyPair = function keyPair(options) {
56733 return new KeyPair(this, options);
56734 };
56735
56736 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
56737 return KeyPair.fromPrivate(this, priv, enc);
56738 };
56739
56740 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
56741 return KeyPair.fromPublic(this, pub, enc);
56742 };
56743
56744 EC.prototype.genKeyPair = function genKeyPair(options) {
56745 if (!options)
56746 options = {};
56747
56748 // Instantiate Hmac_DRBG
56749 var drbg = new HmacDRBG({
56750 hash: this.hash,
56751 pers: options.pers,
56752 persEnc: options.persEnc || 'utf8',
56753 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
56754 entropyEnc: options.entropy && options.entropyEnc || 'utf8',
56755 nonce: this.n.toArray()
56756 });
56757
56758 var bytes = this.n.byteLength();
56759 var ns2 = this.n.sub(new BN(2));
56760 do {
56761 var priv = new BN(drbg.generate(bytes));
56762 if (priv.cmp(ns2) > 0)
56763 continue;
56764
56765 priv.iaddn(1);
56766 return this.keyFromPrivate(priv);
56767 } while (true);
56768 };
56769
56770 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
56771 var delta = msg.byteLength() * 8 - this.n.bitLength();
56772 if (delta > 0)
56773 msg = msg.ushrn(delta);
56774 if (!truncOnly && msg.cmp(this.n) >= 0)
56775 return msg.sub(this.n);
56776 else
56777 return msg;
56778 };
56779
56780 EC.prototype.sign = function sign(msg, key, enc, options) {
56781 if (typeof enc === 'object') {
56782 options = enc;
56783 enc = null;
56784 }
56785 if (!options)
56786 options = {};
56787
56788 key = this.keyFromPrivate(key, enc);
56789 msg = this._truncateToN(new BN(msg, 16));
56790
56791 // Zero-extend key to provide enough entropy
56792 var bytes = this.n.byteLength();
56793 var bkey = key.getPrivate().toArray('be', bytes);
56794
56795 // Zero-extend nonce to have the same byte size as N
56796 var nonce = msg.toArray('be', bytes);
56797
56798 // Instantiate Hmac_DRBG
56799 var drbg = new HmacDRBG({
56800 hash: this.hash,
56801 entropy: bkey,
56802 nonce: nonce,
56803 pers: options.pers,
56804 persEnc: options.persEnc || 'utf8'
56805 });
56806
56807 // Number of bytes to generate
56808 var ns1 = this.n.sub(new BN(1));
56809
56810 for (var iter = 0; true; iter++) {
56811 var k = options.k ?
56812 options.k(iter) :
56813 new BN(drbg.generate(this.n.byteLength()));
56814 k = this._truncateToN(k, true);
56815 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
56816 continue;
56817
56818 var kp = this.g.mul(k);
56819 if (kp.isInfinity())
56820 continue;
56821
56822 var kpX = kp.getX();
56823 var r = kpX.umod(this.n);
56824 if (r.cmpn(0) === 0)
56825 continue;
56826
56827 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
56828 s = s.umod(this.n);
56829 if (s.cmpn(0) === 0)
56830 continue;
56831
56832 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
56833 (kpX.cmp(r) !== 0 ? 2 : 0);
56834
56835 // Use complement of `s`, if it is > `n / 2`
56836 if (options.canonical && s.cmp(this.nh) > 0) {
56837 s = this.n.sub(s);
56838 recoveryParam ^= 1;
56839 }
56840
56841 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
56842 }
56843 };
56844
56845 EC.prototype.verify = function verify(msg, signature, key, enc) {
56846 msg = this._truncateToN(new BN(msg, 16));
56847 key = this.keyFromPublic(key, enc);
56848 signature = new Signature(signature, 'hex');
56849
56850 // Perform primitive values validation
56851 var r = signature.r;
56852 var s = signature.s;
56853 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
56854 return false;
56855 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
56856 return false;
56857
56858 // Validate signature
56859 var sinv = s.invm(this.n);
56860 var u1 = sinv.mul(msg).umod(this.n);
56861 var u2 = sinv.mul(r).umod(this.n);
56862
56863 if (!this.curve._maxwellTrick) {
56864 var p = this.g.mulAdd(u1, key.getPublic(), u2);
56865 if (p.isInfinity())
56866 return false;
56867
56868 return p.getX().umod(this.n).cmp(r) === 0;
56869 }
56870
56871 // NOTE: Greg Maxwell's trick, inspired by:
56872 // https://git.io/vad3K
56873
56874 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
56875 if (p.isInfinity())
56876 return false;
56877
56878 // Compare `p.x` of Jacobian point with `r`,
56879 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
56880 // inverse of `p.z^2`
56881 return p.eqXToP(r);
56882 };
56883
56884 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
56885 assert((3 & j) === j, 'The recovery param is more than two bits');
56886 signature = new Signature(signature, enc);
56887
56888 var n = this.n;
56889 var e = new BN(msg);
56890 var r = signature.r;
56891 var s = signature.s;
56892
56893 // A set LSB signifies that the y-coordinate is odd
56894 var isYOdd = j & 1;
56895 var isSecondKey = j >> 1;
56896 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
56897 throw new Error('Unable to find sencond key candinate');
56898
56899 // 1.1. Let x = r + jn.
56900 if (isSecondKey)
56901 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
56902 else
56903 r = this.curve.pointFromX(r, isYOdd);
56904
56905 var rInv = signature.r.invm(n);
56906 var s1 = n.sub(e).mul(rInv).umod(n);
56907 var s2 = s.mul(rInv).umod(n);
56908
56909 // 1.6.1 Compute Q = r^-1 (sR - eG)
56910 // Q = r^-1 (sR + -eG)
56911 return this.g.mulAdd(s1, r, s2);
56912 };
56913
56914 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
56915 signature = new Signature(signature, enc);
56916 if (signature.recoveryParam !== null)
56917 return signature.recoveryParam;
56918
56919 for (var i = 0; i < 4; i++) {
56920 var Qprime;
56921 try {
56922 Qprime = this.recoverPubKey(e, signature, i);
56923 } catch (e) {
56924 continue;
56925 }
56926
56927 if (Qprime.eq(Q))
56928 return i;
56929 }
56930 throw new Error('Unable to find valid recovery factor');
56931 };
56932
56933 },{"../../elliptic":67,"./key":75,"./signature":76,"bn.js":17,"hmac-drbg":92}],75:[function(require,module,exports){
56934 'use strict';
56935
56936 var BN = require('bn.js');
56937 var elliptic = require('../../elliptic');
56938 var utils = elliptic.utils;
56939 var assert = utils.assert;
56940
56941 function KeyPair(ec, options) {
56942 this.ec = ec;
56943 this.priv = null;
56944 this.pub = null;
56945
56946 // KeyPair(ec, { priv: ..., pub: ... })
56947 if (options.priv)
56948 this._importPrivate(options.priv, options.privEnc);
56949 if (options.pub)
56950 this._importPublic(options.pub, options.pubEnc);
56951 }
56952 module.exports = KeyPair;
56953
56954 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
56955 if (pub instanceof KeyPair)
56956 return pub;
56957
56958 return new KeyPair(ec, {
56959 pub: pub,
56960 pubEnc: enc
56961 });
56962 };
56963
56964 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
56965 if (priv instanceof KeyPair)
56966 return priv;
56967
56968 return new KeyPair(ec, {
56969 priv: priv,
56970 privEnc: enc
56971 });
56972 };
56973
56974 KeyPair.prototype.validate = function validate() {
56975 var pub = this.getPublic();
56976
56977 if (pub.isInfinity())
56978 return { result: false, reason: 'Invalid public key' };
56979 if (!pub.validate())
56980 return { result: false, reason: 'Public key is not a point' };
56981 if (!pub.mul(this.ec.curve.n).isInfinity())
56982 return { result: false, reason: 'Public key * N != O' };
56983
56984 return { result: true, reason: null };
56985 };
56986
56987 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
56988 // compact is optional argument
56989 if (typeof compact === 'string') {
56990 enc = compact;
56991 compact = null;
56992 }
56993
56994 if (!this.pub)
56995 this.pub = this.ec.g.mul(this.priv);
56996
56997 if (!enc)
56998 return this.pub;
56999
57000 return this.pub.encode(enc, compact);
57001 };
57002
57003 KeyPair.prototype.getPrivate = function getPrivate(enc) {
57004 if (enc === 'hex')
57005 return this.priv.toString(16, 2);
57006 else
57007 return this.priv;
57008 };
57009
57010 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
57011 this.priv = new BN(key, enc || 16);
57012
57013 // Ensure that the priv won't be bigger than n, otherwise we may fail
57014 // in fixed multiplication method
57015 this.priv = this.priv.umod(this.ec.curve.n);
57016 };
57017
57018 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
57019 if (key.x || key.y) {
57020 // Montgomery points only have an `x` coordinate.
57021 // Weierstrass/Edwards points on the other hand have both `x` and
57022 // `y` coordinates.
57023 if (this.ec.curve.type === 'mont') {
57024 assert(key.x, 'Need x coordinate');
57025 } else if (this.ec.curve.type === 'short' ||
57026 this.ec.curve.type === 'edwards') {
57027 assert(key.x && key.y, 'Need both x and y coordinate');
57028 }
57029 this.pub = this.ec.curve.point(key.x, key.y);
57030 return;
57031 }
57032 this.pub = this.ec.curve.decodePoint(key, enc);
57033 };
57034
57035 // ECDH
57036 KeyPair.prototype.derive = function derive(pub) {
57037 return pub.mul(this.priv).getX();
57038 };
57039
57040 // ECDSA
57041 KeyPair.prototype.sign = function sign(msg, enc, options) {
57042 return this.ec.sign(msg, this, enc, options);
57043 };
57044
57045 KeyPair.prototype.verify = function verify(msg, signature) {
57046 return this.ec.verify(msg, signature, this);
57047 };
57048
57049 KeyPair.prototype.inspect = function inspect() {
57050 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
57051 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
57052 };
57053
57054 },{"../../elliptic":67,"bn.js":17}],76:[function(require,module,exports){
57055 'use strict';
57056
57057 var BN = require('bn.js');
57058
57059 var elliptic = require('../../elliptic');
57060 var utils = elliptic.utils;
57061 var assert = utils.assert;
57062
57063 function Signature(options, enc) {
57064 if (options instanceof Signature)
57065 return options;
57066
57067 if (this._importDER(options, enc))
57068 return;
57069
57070 assert(options.r && options.s, 'Signature without r or s');
57071 this.r = new BN(options.r, 16);
57072 this.s = new BN(options.s, 16);
57073 if (options.recoveryParam === undefined)
57074 this.recoveryParam = null;
57075 else
57076 this.recoveryParam = options.recoveryParam;
57077 }
57078 module.exports = Signature;
57079
57080 function Position() {
57081 this.place = 0;
57082 }
57083
57084 function getLength(buf, p) {
57085 var initial = buf[p.place++];
57086 if (!(initial & 0x80)) {
57087 return initial;
57088 }
57089 var octetLen = initial & 0xf;
57090 var val = 0;
57091 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
57092 val <<= 8;
57093 val |= buf[off];
57094 }
57095 p.place = off;
57096 return val;
57097 }
57098
57099 function rmPadding(buf) {
57100 var i = 0;
57101 var len = buf.length - 1;
57102 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
57103 i++;
57104 }
57105 if (i === 0) {
57106 return buf;
57107 }
57108 return buf.slice(i);
57109 }
57110
57111 Signature.prototype._importDER = function _importDER(data, enc) {
57112 data = utils.toArray(data, enc);
57113 var p = new Position();
57114 if (data[p.place++] !== 0x30) {
57115 return false;
57116 }
57117 var len = getLength(data, p);
57118 if ((len + p.place) !== data.length) {
57119 return false;
57120 }
57121 if (data[p.place++] !== 0x02) {
57122 return false;
57123 }
57124 var rlen = getLength(data, p);
57125 var r = data.slice(p.place, rlen + p.place);
57126 p.place += rlen;
57127 if (data[p.place++] !== 0x02) {
57128 return false;
57129 }
57130 var slen = getLength(data, p);
57131 if (data.length !== slen + p.place) {
57132 return false;
57133 }
57134 var s = data.slice(p.place, slen + p.place);
57135 if (r[0] === 0 && (r[1] & 0x80)) {
57136 r = r.slice(1);
57137 }
57138 if (s[0] === 0 && (s[1] & 0x80)) {
57139 s = s.slice(1);
57140 }
57141
57142 this.r = new BN(r);
57143 this.s = new BN(s);
57144 this.recoveryParam = null;
57145
57146 return true;
57147 };
57148
57149 function constructLength(arr, len) {
57150 if (len < 0x80) {
57151 arr.push(len);
57152 return;
57153 }
57154 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
57155 arr.push(octets | 0x80);
57156 while (--octets) {
57157 arr.push((len >>> (octets << 3)) & 0xff);
57158 }
57159 arr.push(len);
57160 }
57161
57162 Signature.prototype.toDER = function toDER(enc) {
57163 var r = this.r.toArray();
57164 var s = this.s.toArray();
57165
57166 // Pad values
57167 if (r[0] & 0x80)
57168 r = [ 0 ].concat(r);
57169 // Pad values
57170 if (s[0] & 0x80)
57171 s = [ 0 ].concat(s);
57172
57173 r = rmPadding(r);
57174 s = rmPadding(s);
57175
57176 while (!s[0] && !(s[1] & 0x80)) {
57177 s = s.slice(1);
57178 }
57179 var arr = [ 0x02 ];
57180 constructLength(arr, r.length);
57181 arr = arr.concat(r);
57182 arr.push(0x02);
57183 constructLength(arr, s.length);
57184 var backHalf = arr.concat(s);
57185 var res = [ 0x30 ];
57186 constructLength(res, backHalf.length);
57187 res = res.concat(backHalf);
57188 return utils.encode(res, enc);
57189 };
57190
57191 },{"../../elliptic":67,"bn.js":17}],77:[function(require,module,exports){
57192 'use strict';
57193
57194 var hash = require('hash.js');
57195 var elliptic = require('../../elliptic');
57196 var utils = elliptic.utils;
57197 var assert = utils.assert;
57198 var parseBytes = utils.parseBytes;
57199 var KeyPair = require('./key');
57200 var Signature = require('./signature');
57201
57202 function EDDSA(curve) {
57203 assert(curve === 'ed25519', 'only tested with ed25519 so far');
57204
57205 if (!(this instanceof EDDSA))
57206 return new EDDSA(curve);
57207
57208 var curve = elliptic.curves[curve].curve;
57209 this.curve = curve;
57210 this.g = curve.g;
57211 this.g.precompute(curve.n.bitLength() + 1);
57212
57213 this.pointClass = curve.point().constructor;
57214 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
57215 this.hash = hash.sha512;
57216 }
57217
57218 module.exports = EDDSA;
57219
57220 /**
57221 * @param {Array|String} message - message bytes
57222 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
57223 * @returns {Signature} - signature
57224 */
57225 EDDSA.prototype.sign = function sign(message, secret) {
57226 message = parseBytes(message);
57227 var key = this.keyFromSecret(secret);
57228 var r = this.hashInt(key.messagePrefix(), message);
57229 var R = this.g.mul(r);
57230 var Rencoded = this.encodePoint(R);
57231 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
57232 .mul(key.priv());
57233 var S = r.add(s_).umod(this.curve.n);
57234 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
57235 };
57236
57237 /**
57238 * @param {Array} message - message bytes
57239 * @param {Array|String|Signature} sig - sig bytes
57240 * @param {Array|String|Point|KeyPair} pub - public key
57241 * @returns {Boolean} - true if public key matches sig of message
57242 */
57243 EDDSA.prototype.verify = function verify(message, sig, pub) {
57244 message = parseBytes(message);
57245 sig = this.makeSignature(sig);
57246 var key = this.keyFromPublic(pub);
57247 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
57248 var SG = this.g.mul(sig.S());
57249 var RplusAh = sig.R().add(key.pub().mul(h));
57250 return RplusAh.eq(SG);
57251 };
57252
57253 EDDSA.prototype.hashInt = function hashInt() {
57254 var hash = this.hash();
57255 for (var i = 0; i < arguments.length; i++)
57256 hash.update(arguments[i]);
57257 return utils.intFromLE(hash.digest()).umod(this.curve.n);
57258 };
57259
57260 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
57261 return KeyPair.fromPublic(this, pub);
57262 };
57263
57264 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
57265 return KeyPair.fromSecret(this, secret);
57266 };
57267
57268 EDDSA.prototype.makeSignature = function makeSignature(sig) {
57269 if (sig instanceof Signature)
57270 return sig;
57271 return new Signature(this, sig);
57272 };
57273
57274 /**
57275 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
57276 *
57277 * EDDSA defines methods for encoding and decoding points and integers. These are
57278 * helper convenience methods, that pass along to utility functions implied
57279 * parameters.
57280 *
57281 */
57282 EDDSA.prototype.encodePoint = function encodePoint(point) {
57283 var enc = point.getY().toArray('le', this.encodingLength);
57284 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
57285 return enc;
57286 };
57287
57288 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
57289 bytes = utils.parseBytes(bytes);
57290
57291 var lastIx = bytes.length - 1;
57292 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
57293 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
57294
57295 var y = utils.intFromLE(normed);
57296 return this.curve.pointFromY(y, xIsOdd);
57297 };
57298
57299 EDDSA.prototype.encodeInt = function encodeInt(num) {
57300 return num.toArray('le', this.encodingLength);
57301 };
57302
57303 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
57304 return utils.intFromLE(bytes);
57305 };
57306
57307 EDDSA.prototype.isPoint = function isPoint(val) {
57308 return val instanceof this.pointClass;
57309 };
57310
57311 },{"../../elliptic":67,"./key":78,"./signature":79,"hash.js":86}],78:[function(require,module,exports){
57312 'use strict';
57313
57314 var elliptic = require('../../elliptic');
57315 var utils = elliptic.utils;
57316 var assert = utils.assert;
57317 var parseBytes = utils.parseBytes;
57318 var cachedProperty = utils.cachedProperty;
57319
57320 /**
57321 * @param {EDDSA} eddsa - instance
57322 * @param {Object} params - public/private key parameters
57323 *
57324 * @param {Array<Byte>} [params.secret] - secret seed bytes
57325 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
57326 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
57327 *
57328 */
57329 function KeyPair(eddsa, params) {
57330 this.eddsa = eddsa;
57331 this._secret = parseBytes(params.secret);
57332 if (eddsa.isPoint(params.pub))
57333 this._pub = params.pub;
57334 else
57335 this._pubBytes = parseBytes(params.pub);
57336 }
57337
57338 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
57339 if (pub instanceof KeyPair)
57340 return pub;
57341 return new KeyPair(eddsa, { pub: pub });
57342 };
57343
57344 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
57345 if (secret instanceof KeyPair)
57346 return secret;
57347 return new KeyPair(eddsa, { secret: secret });
57348 };
57349
57350 KeyPair.prototype.secret = function secret() {
57351 return this._secret;
57352 };
57353
57354 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
57355 return this.eddsa.encodePoint(this.pub());
57356 });
57357
57358 cachedProperty(KeyPair, 'pub', function pub() {
57359 if (this._pubBytes)
57360 return this.eddsa.decodePoint(this._pubBytes);
57361 return this.eddsa.g.mul(this.priv());
57362 });
57363
57364 cachedProperty(KeyPair, 'privBytes', function privBytes() {
57365 var eddsa = this.eddsa;
57366 var hash = this.hash();
57367 var lastIx = eddsa.encodingLength - 1;
57368
57369 var a = hash.slice(0, eddsa.encodingLength);
57370 a[0] &= 248;
57371 a[lastIx] &= 127;
57372 a[lastIx] |= 64;
57373
57374 return a;
57375 });
57376
57377 cachedProperty(KeyPair, 'priv', function priv() {
57378 return this.eddsa.decodeInt(this.privBytes());
57379 });
57380
57381 cachedProperty(KeyPair, 'hash', function hash() {
57382 return this.eddsa.hash().update(this.secret()).digest();
57383 });
57384
57385 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
57386 return this.hash().slice(this.eddsa.encodingLength);
57387 });
57388
57389 KeyPair.prototype.sign = function sign(message) {
57390 assert(this._secret, 'KeyPair can only verify');
57391 return this.eddsa.sign(message, this);
57392 };
57393
57394 KeyPair.prototype.verify = function verify(message, sig) {
57395 return this.eddsa.verify(message, sig, this);
57396 };
57397
57398 KeyPair.prototype.getSecret = function getSecret(enc) {
57399 assert(this._secret, 'KeyPair is public only');
57400 return utils.encode(this.secret(), enc);
57401 };
57402
57403 KeyPair.prototype.getPublic = function getPublic(enc) {
57404 return utils.encode(this.pubBytes(), enc);
57405 };
57406
57407 module.exports = KeyPair;
57408
57409 },{"../../elliptic":67}],79:[function(require,module,exports){
57410 'use strict';
57411
57412 var BN = require('bn.js');
57413 var elliptic = require('../../elliptic');
57414 var utils = elliptic.utils;
57415 var assert = utils.assert;
57416 var cachedProperty = utils.cachedProperty;
57417 var parseBytes = utils.parseBytes;
57418
57419 /**
57420 * @param {EDDSA} eddsa - eddsa instance
57421 * @param {Array<Bytes>|Object} sig -
57422 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
57423 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
57424 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
57425 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
57426 */
57427 function Signature(eddsa, sig) {
57428 this.eddsa = eddsa;
57429
57430 if (typeof sig !== 'object')
57431 sig = parseBytes(sig);
57432
57433 if (Array.isArray(sig)) {
57434 sig = {
57435 R: sig.slice(0, eddsa.encodingLength),
57436 S: sig.slice(eddsa.encodingLength)
57437 };
57438 }
57439
57440 assert(sig.R && sig.S, 'Signature without R or S');
57441
57442 if (eddsa.isPoint(sig.R))
57443 this._R = sig.R;
57444 if (sig.S instanceof BN)
57445 this._S = sig.S;
57446
57447 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
57448 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
57449 }
57450
57451 cachedProperty(Signature, 'S', function S() {
57452 return this.eddsa.decodeInt(this.Sencoded());
57453 });
57454
57455 cachedProperty(Signature, 'R', function R() {
57456 return this.eddsa.decodePoint(this.Rencoded());
57457 });
57458
57459 cachedProperty(Signature, 'Rencoded', function Rencoded() {
57460 return this.eddsa.encodePoint(this.R());
57461 });
57462
57463 cachedProperty(Signature, 'Sencoded', function Sencoded() {
57464 return this.eddsa.encodeInt(this.S());
57465 });
57466
57467 Signature.prototype.toBytes = function toBytes() {
57468 return this.Rencoded().concat(this.Sencoded());
57469 };
57470
57471 Signature.prototype.toHex = function toHex() {
57472 return utils.encode(this.toBytes(), 'hex').toUpperCase();
57473 };
57474
57475 module.exports = Signature;
57476
57477 },{"../../elliptic":67,"bn.js":17}],80:[function(require,module,exports){
57478 module.exports = {
57479 doubles: {
57480 step: 4,
57481 points: [
57482 [
57483 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
57484 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
57485 ],
57486 [
57487 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
57488 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
57489 ],
57490 [
57491 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
57492 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
57493 ],
57494 [
57495 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
57496 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
57497 ],
57498 [
57499 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
57500 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
57501 ],
57502 [
57503 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
57504 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
57505 ],
57506 [
57507 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
57508 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
57509 ],
57510 [
57511 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
57512 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
57513 ],
57514 [
57515 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
57516 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
57517 ],
57518 [
57519 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
57520 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
57521 ],
57522 [
57523 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
57524 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
57525 ],
57526 [
57527 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
57528 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
57529 ],
57530 [
57531 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
57532 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
57533 ],
57534 [
57535 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
57536 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
57537 ],
57538 [
57539 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
57540 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
57541 ],
57542 [
57543 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
57544 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
57545 ],
57546 [
57547 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
57548 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
57549 ],
57550 [
57551 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
57552 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
57553 ],
57554 [
57555 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
57556 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
57557 ],
57558 [
57559 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
57560 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
57561 ],
57562 [
57563 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
57564 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
57565 ],
57566 [
57567 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
57568 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
57569 ],
57570 [
57571 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
57572 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
57573 ],
57574 [
57575 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
57576 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
57577 ],
57578 [
57579 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
57580 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
57581 ],
57582 [
57583 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
57584 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
57585 ],
57586 [
57587 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
57588 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
57589 ],
57590 [
57591 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
57592 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
57593 ],
57594 [
57595 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
57596 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
57597 ],
57598 [
57599 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
57600 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
57601 ],
57602 [
57603 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
57604 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
57605 ],
57606 [
57607 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
57608 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
57609 ],
57610 [
57611 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
57612 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
57613 ],
57614 [
57615 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
57616 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
57617 ],
57618 [
57619 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
57620 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
57621 ],
57622 [
57623 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
57624 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
57625 ],
57626 [
57627 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
57628 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
57629 ],
57630 [
57631 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
57632 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
57633 ],
57634 [
57635 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
57636 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
57637 ],
57638 [
57639 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
57640 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
57641 ],
57642 [
57643 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
57644 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
57645 ],
57646 [
57647 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
57648 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
57649 ],
57650 [
57651 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
57652 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
57653 ],
57654 [
57655 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
57656 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
57657 ],
57658 [
57659 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
57660 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
57661 ],
57662 [
57663 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
57664 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
57665 ],
57666 [
57667 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
57668 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
57669 ],
57670 [
57671 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
57672 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
57673 ],
57674 [
57675 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
57676 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
57677 ],
57678 [
57679 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
57680 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
57681 ],
57682 [
57683 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
57684 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
57685 ],
57686 [
57687 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
57688 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
57689 ],
57690 [
57691 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
57692 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
57693 ],
57694 [
57695 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
57696 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
57697 ],
57698 [
57699 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
57700 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
57701 ],
57702 [
57703 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
57704 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
57705 ],
57706 [
57707 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
57708 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
57709 ],
57710 [
57711 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
57712 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
57713 ],
57714 [
57715 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
57716 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
57717 ],
57718 [
57719 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
57720 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
57721 ],
57722 [
57723 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
57724 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
57725 ],
57726 [
57727 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
57728 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
57729 ],
57730 [
57731 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
57732 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
57733 ],
57734 [
57735 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
57736 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
57737 ],
57738 [
57739 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
57740 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
57741 ]
57742 ]
57743 },
57744 naf: {
57745 wnd: 7,
57746 points: [
57747 [
57748 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
57749 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
57750 ],
57751 [
57752 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
57753 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
57754 ],
57755 [
57756 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
57757 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
57758 ],
57759 [
57760 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
57761 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
57762 ],
57763 [
57764 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
57765 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
57766 ],
57767 [
57768 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
57769 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
57770 ],
57771 [
57772 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
57773 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
57774 ],
57775 [
57776 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
57777 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
57778 ],
57779 [
57780 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
57781 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
57782 ],
57783 [
57784 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
57785 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
57786 ],
57787 [
57788 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
57789 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
57790 ],
57791 [
57792 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
57793 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
57794 ],
57795 [
57796 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
57797 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
57798 ],
57799 [
57800 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
57801 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
57802 ],
57803 [
57804 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
57805 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
57806 ],
57807 [
57808 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
57809 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
57810 ],
57811 [
57812 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
57813 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
57814 ],
57815 [
57816 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
57817 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
57818 ],
57819 [
57820 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
57821 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
57822 ],
57823 [
57824 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
57825 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
57826 ],
57827 [
57828 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
57829 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
57830 ],
57831 [
57832 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
57833 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
57834 ],
57835 [
57836 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
57837 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
57838 ],
57839 [
57840 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
57841 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
57842 ],
57843 [
57844 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
57845 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
57846 ],
57847 [
57848 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
57849 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
57850 ],
57851 [
57852 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
57853 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
57854 ],
57855 [
57856 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
57857 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
57858 ],
57859 [
57860 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
57861 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
57862 ],
57863 [
57864 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
57865 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
57866 ],
57867 [
57868 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
57869 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
57870 ],
57871 [
57872 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
57873 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
57874 ],
57875 [
57876 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
57877 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
57878 ],
57879 [
57880 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
57881 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
57882 ],
57883 [
57884 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
57885 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
57886 ],
57887 [
57888 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
57889 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
57890 ],
57891 [
57892 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
57893 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
57894 ],
57895 [
57896 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
57897 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
57898 ],
57899 [
57900 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
57901 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
57902 ],
57903 [
57904 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
57905 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
57906 ],
57907 [
57908 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
57909 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
57910 ],
57911 [
57912 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
57913 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
57914 ],
57915 [
57916 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
57917 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
57918 ],
57919 [
57920 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
57921 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
57922 ],
57923 [
57924 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
57925 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
57926 ],
57927 [
57928 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
57929 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
57930 ],
57931 [
57932 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
57933 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
57934 ],
57935 [
57936 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
57937 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
57938 ],
57939 [
57940 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
57941 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
57942 ],
57943 [
57944 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
57945 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
57946 ],
57947 [
57948 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
57949 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
57950 ],
57951 [
57952 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
57953 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
57954 ],
57955 [
57956 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
57957 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
57958 ],
57959 [
57960 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
57961 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
57962 ],
57963 [
57964 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
57965 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
57966 ],
57967 [
57968 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
57969 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
57970 ],
57971 [
57972 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
57973 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
57974 ],
57975 [
57976 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
57977 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
57978 ],
57979 [
57980 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
57981 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
57982 ],
57983 [
57984 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
57985 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
57986 ],
57987 [
57988 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
57989 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
57990 ],
57991 [
57992 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
57993 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
57994 ],
57995 [
57996 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
57997 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
57998 ],
57999 [
58000 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
58001 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
58002 ],
58003 [
58004 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
58005 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
58006 ],
58007 [
58008 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
58009 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
58010 ],
58011 [
58012 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
58013 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
58014 ],
58015 [
58016 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
58017 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
58018 ],
58019 [
58020 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
58021 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
58022 ],
58023 [
58024 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
58025 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
58026 ],
58027 [
58028 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
58029 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
58030 ],
58031 [
58032 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
58033 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
58034 ],
58035 [
58036 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
58037 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
58038 ],
58039 [
58040 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
58041 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
58042 ],
58043 [
58044 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
58045 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
58046 ],
58047 [
58048 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
58049 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
58050 ],
58051 [
58052 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
58053 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
58054 ],
58055 [
58056 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
58057 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
58058 ],
58059 [
58060 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
58061 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
58062 ],
58063 [
58064 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
58065 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
58066 ],
58067 [
58068 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
58069 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
58070 ],
58071 [
58072 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
58073 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
58074 ],
58075 [
58076 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
58077 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
58078 ],
58079 [
58080 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
58081 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
58082 ],
58083 [
58084 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
58085 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
58086 ],
58087 [
58088 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
58089 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
58090 ],
58091 [
58092 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
58093 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
58094 ],
58095 [
58096 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
58097 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
58098 ],
58099 [
58100 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
58101 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
58102 ],
58103 [
58104 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
58105 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
58106 ],
58107 [
58108 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
58109 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
58110 ],
58111 [
58112 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
58113 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
58114 ],
58115 [
58116 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
58117 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
58118 ],
58119 [
58120 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
58121 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
58122 ],
58123 [
58124 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
58125 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
58126 ],
58127 [
58128 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
58129 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
58130 ],
58131 [
58132 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
58133 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
58134 ],
58135 [
58136 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
58137 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
58138 ],
58139 [
58140 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
58141 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
58142 ],
58143 [
58144 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
58145 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
58146 ],
58147 [
58148 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
58149 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
58150 ],
58151 [
58152 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
58153 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
58154 ],
58155 [
58156 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
58157 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
58158 ],
58159 [
58160 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
58161 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
58162 ],
58163 [
58164 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
58165 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
58166 ],
58167 [
58168 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
58169 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
58170 ],
58171 [
58172 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
58173 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
58174 ],
58175 [
58176 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
58177 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
58178 ],
58179 [
58180 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
58181 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
58182 ],
58183 [
58184 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
58185 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
58186 ],
58187 [
58188 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
58189 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
58190 ],
58191 [
58192 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
58193 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
58194 ],
58195 [
58196 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
58197 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
58198 ],
58199 [
58200 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
58201 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
58202 ],
58203 [
58204 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
58205 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
58206 ],
58207 [
58208 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
58209 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
58210 ],
58211 [
58212 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
58213 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
58214 ],
58215 [
58216 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
58217 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
58218 ],
58219 [
58220 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
58221 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
58222 ],
58223 [
58224 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
58225 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
58226 ],
58227 [
58228 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
58229 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
58230 ],
58231 [
58232 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
58233 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
58234 ],
58235 [
58236 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
58237 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
58238 ],
58239 [
58240 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
58241 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
58242 ],
58243 [
58244 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
58245 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
58246 ],
58247 [
58248 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
58249 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
58250 ],
58251 [
58252 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
58253 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
58254 ]
58255 ]
58256 }
58257 };
58258
58259 },{}],81:[function(require,module,exports){
58260 'use strict';
58261
58262 var utils = exports;
58263 var BN = require('bn.js');
58264 var minAssert = require('minimalistic-assert');
58265 var minUtils = require('minimalistic-crypto-utils');
58266
58267 utils.assert = minAssert;
58268 utils.toArray = minUtils.toArray;
58269 utils.zero2 = minUtils.zero2;
58270 utils.toHex = minUtils.toHex;
58271 utils.encode = minUtils.encode;
58272
58273 // Represent num in a w-NAF form
58274 function getNAF(num, w) {
58275 var naf = [];
58276 var ws = 1 << (w + 1);
58277 var k = num.clone();
58278 while (k.cmpn(1) >= 0) {
58279 var z;
58280 if (k.isOdd()) {
58281 var mod = k.andln(ws - 1);
58282 if (mod > (ws >> 1) - 1)
58283 z = (ws >> 1) - mod;
58284 else
58285 z = mod;
58286 k.isubn(z);
58287 } else {
58288 z = 0;
58289 }
58290 naf.push(z);
58291
58292 // Optimization, shift by word if possible
58293 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
58294 for (var i = 1; i < shift; i++)
58295 naf.push(0);
58296 k.iushrn(shift);
58297 }
58298
58299 return naf;
58300 }
58301 utils.getNAF = getNAF;
58302
58303 // Represent k1, k2 in a Joint Sparse Form
58304 function getJSF(k1, k2) {
58305 var jsf = [
58306 [],
58307 []
58308 ];
58309
58310 k1 = k1.clone();
58311 k2 = k2.clone();
58312 var d1 = 0;
58313 var d2 = 0;
58314 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
58315
58316 // First phase
58317 var m14 = (k1.andln(3) + d1) & 3;
58318 var m24 = (k2.andln(3) + d2) & 3;
58319 if (m14 === 3)
58320 m14 = -1;
58321 if (m24 === 3)
58322 m24 = -1;
58323 var u1;
58324 if ((m14 & 1) === 0) {
58325 u1 = 0;
58326 } else {
58327 var m8 = (k1.andln(7) + d1) & 7;
58328 if ((m8 === 3 || m8 === 5) && m24 === 2)
58329 u1 = -m14;
58330 else
58331 u1 = m14;
58332 }
58333 jsf[0].push(u1);
58334
58335 var u2;
58336 if ((m24 & 1) === 0) {
58337 u2 = 0;
58338 } else {
58339 var m8 = (k2.andln(7) + d2) & 7;
58340 if ((m8 === 3 || m8 === 5) && m14 === 2)
58341 u2 = -m24;
58342 else
58343 u2 = m24;
58344 }
58345 jsf[1].push(u2);
58346
58347 // Second phase
58348 if (2 * d1 === u1 + 1)
58349 d1 = 1 - d1;
58350 if (2 * d2 === u2 + 1)
58351 d2 = 1 - d2;
58352 k1.iushrn(1);
58353 k2.iushrn(1);
58354 }
58355
58356 return jsf;
58357 }
58358 utils.getJSF = getJSF;
58359
58360 function cachedProperty(obj, name, computer) {
58361 var key = '_' + name;
58362 obj.prototype[name] = function cachedProperty() {
58363 return this[key] !== undefined ? this[key] :
58364 this[key] = computer.call(this);
58365 };
58366 }
58367 utils.cachedProperty = cachedProperty;
58368
58369 function parseBytes(bytes) {
58370 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
58371 bytes;
58372 }
58373 utils.parseBytes = parseBytes;
58374
58375 function intFromLE(bytes) {
58376 return new BN(bytes, 'hex', 'le');
58377 }
58378 utils.intFromLE = intFromLE;
58379
58380
58381 },{"bn.js":17,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],82:[function(require,module,exports){
58382 module.exports={
58383 "_args": [
58384 [
58385 "elliptic@^6.0.0",
58386 "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign"
58387 ]
58388 ],
58389 "_from": "elliptic@>=6.0.0 <7.0.0",
58390 "_id": "elliptic@6.4.0",
58391 "_inCache": true,
58392 "_installable": true,
58393 "_location": "/browserify/elliptic",
58394 "_nodeVersion": "7.0.0",
58395 "_npmOperationalInternal": {
58396 "host": "packages-18-east.internal.npmjs.com",
58397 "tmp": "tmp/elliptic-6.4.0.tgz_1487798866428_0.30510620190761983"
58398 },
58399 "_npmUser": {
58400 "email": "fedor@indutny.com",
58401 "name": "indutny"
58402 },
58403 "_npmVersion": "3.10.8",
58404 "_phantomChildren": {},
58405 "_requested": {
58406 "name": "elliptic",
58407 "raw": "elliptic@^6.0.0",
58408 "rawSpec": "^6.0.0",
58409 "scope": null,
58410 "spec": ">=6.0.0 <7.0.0",
58411 "type": "range"
58412 },
58413 "_requiredBy": [
58414 "/browserify/browserify-sign",
58415 "/browserify/create-ecdh"
58416 ],
58417 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz",
58418 "_shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58419 "_shrinkwrap": null,
58420 "_spec": "elliptic@^6.0.0",
58421 "_where": "/home/ian/.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/browserify-sign",
58422 "author": {
58423 "email": "fedor@indutny.com",
58424 "name": "Fedor Indutny"
58425 },
58426 "bugs": {
58427 "url": "https://github.com/indutny/elliptic/issues"
58428 },
58429 "dependencies": {
58430 "bn.js": "^4.4.0",
58431 "brorand": "^1.0.1",
58432 "hash.js": "^1.0.0",
58433 "hmac-drbg": "^1.0.0",
58434 "inherits": "^2.0.1",
58435 "minimalistic-assert": "^1.0.0",
58436 "minimalistic-crypto-utils": "^1.0.0"
58437 },
58438 "description": "EC cryptography",
58439 "devDependencies": {
58440 "brfs": "^1.4.3",
58441 "coveralls": "^2.11.3",
58442 "grunt": "^0.4.5",
58443 "grunt-browserify": "^5.0.0",
58444 "grunt-cli": "^1.2.0",
58445 "grunt-contrib-connect": "^1.0.0",
58446 "grunt-contrib-copy": "^1.0.0",
58447 "grunt-contrib-uglify": "^1.0.1",
58448 "grunt-mocha-istanbul": "^3.0.1",
58449 "grunt-saucelabs": "^8.6.2",
58450 "istanbul": "^0.4.2",
58451 "jscs": "^2.9.0",
58452 "jshint": "^2.6.0",
58453 "mocha": "^2.1.0"
58454 },
58455 "directories": {},
58456 "dist": {
58457 "shasum": "cac9af8762c85836187003c8dfe193e5e2eae5df",
58458 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.0.tgz"
58459 },
58460 "files": [
58461 "lib"
58462 ],
58463 "gitHead": "6b0d2b76caae91471649c8e21f0b1d3ba0f96090",
58464 "homepage": "https://github.com/indutny/elliptic",
58465 "keywords": [
58466 "EC",
58467 "Elliptic",
58468 "curve",
58469 "Cryptography"
58470 ],
58471 "license": "MIT",
58472 "main": "lib/elliptic.js",
58473 "maintainers": [
58474 {
58475 "email": "fedor@indutny.com",
58476 "name": "indutny"
58477 }
58478 ],
58479 "name": "elliptic",
58480 "optionalDependencies": {},
58481 "readme": "ERROR: No README data found!",
58482 "repository": {
58483 "type": "git",
58484 "url": "git+ssh://git@github.com/indutny/elliptic.git"
58485 },
58486 "scripts": {
58487 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58488 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
58489 "lint": "npm run jscs && npm run jshint",
58490 "test": "npm run lint && npm run unit",
58491 "unit": "istanbul test _mocha --reporter=spec test/index.js",
58492 "version": "grunt dist && git add dist/"
58493 },
58494 "version": "6.4.0"
58495 }
58496
58497 },{}],83:[function(require,module,exports){
58498 // Copyright Joyent, Inc. and other Node contributors.
58499 //
58500 // Permission is hereby granted, free of charge, to any person obtaining a
58501 // copy of this software and associated documentation files (the
58502 // "Software"), to deal in the Software without restriction, including
58503 // without limitation the rights to use, copy, modify, merge, publish,
58504 // distribute, sublicense, and/or sell copies of the Software, and to permit
58505 // persons to whom the Software is furnished to do so, subject to the
58506 // following conditions:
58507 //
58508 // The above copyright notice and this permission notice shall be included
58509 // in all copies or substantial portions of the Software.
58510 //
58511 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
58512 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
58513 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
58514 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
58515 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
58516 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
58517 // USE OR OTHER DEALINGS IN THE SOFTWARE.
58518
58519 function EventEmitter() {
58520 this._events = this._events || {};
58521 this._maxListeners = this._maxListeners || undefined;
58522 }
58523 module.exports = EventEmitter;
58524
58525 // Backwards-compat with node 0.10.x
58526 EventEmitter.EventEmitter = EventEmitter;
58527
58528 EventEmitter.prototype._events = undefined;
58529 EventEmitter.prototype._maxListeners = undefined;
58530
58531 // By default EventEmitters will print a warning if more than 10 listeners are
58532 // added to it. This is a useful default which helps finding memory leaks.
58533 EventEmitter.defaultMaxListeners = 10;
58534
58535 // Obviously not all Emitters should be limited to 10. This function allows
58536 // that to be increased. Set to zero for unlimited.
58537 EventEmitter.prototype.setMaxListeners = function(n) {
58538 if (!isNumber(n) || n < 0 || isNaN(n))
58539 throw TypeError('n must be a positive number');
58540 this._maxListeners = n;
58541 return this;
58542 };
58543
58544 EventEmitter.prototype.emit = function(type) {
58545 var er, handler, len, args, i, listeners;
58546
58547 if (!this._events)
58548 this._events = {};
58549
58550 // If there is no 'error' event listener then throw.
58551 if (type === 'error') {
58552 if (!this._events.error ||
58553 (isObject(this._events.error) && !this._events.error.length)) {
58554 er = arguments[1];
58555 if (er instanceof Error) {
58556 throw er; // Unhandled 'error' event
58557 } else {
58558 // At least give some kind of context to the user
58559 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
58560 err.context = er;
58561 throw err;
58562 }
58563 }
58564 }
58565
58566 handler = this._events[type];
58567
58568 if (isUndefined(handler))
58569 return false;
58570
58571 if (isFunction(handler)) {
58572 switch (arguments.length) {
58573 // fast cases
58574 case 1:
58575 handler.call(this);
58576 break;
58577 case 2:
58578 handler.call(this, arguments[1]);
58579 break;
58580 case 3:
58581 handler.call(this, arguments[1], arguments[2]);
58582 break;
58583 // slower
58584 default:
58585 args = Array.prototype.slice.call(arguments, 1);
58586 handler.apply(this, args);
58587 }
58588 } else if (isObject(handler)) {
58589 args = Array.prototype.slice.call(arguments, 1);
58590 listeners = handler.slice();
58591 len = listeners.length;
58592 for (i = 0; i < len; i++)
58593 listeners[i].apply(this, args);
58594 }
58595
58596 return true;
58597 };
58598
58599 EventEmitter.prototype.addListener = function(type, listener) {
58600 var m;
58601
58602 if (!isFunction(listener))
58603 throw TypeError('listener must be a function');
58604
58605 if (!this._events)
58606 this._events = {};
58607
58608 // To avoid recursion in the case that type === "newListener"! Before
58609 // adding it to the listeners, first emit "newListener".
58610 if (this._events.newListener)
58611 this.emit('newListener', type,
58612 isFunction(listener.listener) ?
58613 listener.listener : listener);
58614
58615 if (!this._events[type])
58616 // Optimize the case of one listener. Don't need the extra array object.
58617 this._events[type] = listener;
58618 else if (isObject(this._events[type]))
58619 // If we've already got an array, just append.
58620 this._events[type].push(listener);
58621 else
58622 // Adding the second element, need to change to array.
58623 this._events[type] = [this._events[type], listener];
58624
58625 // Check for listener leak
58626 if (isObject(this._events[type]) && !this._events[type].warned) {
58627 if (!isUndefined(this._maxListeners)) {
58628 m = this._maxListeners;
58629 } else {
58630 m = EventEmitter.defaultMaxListeners;
58631 }
58632
58633 if (m && m > 0 && this._events[type].length > m) {
58634 this._events[type].warned = true;
58635 console.error('(node) warning: possible EventEmitter memory ' +
58636 'leak detected. %d listeners added. ' +
58637 'Use emitter.setMaxListeners() to increase limit.',
58638 this._events[type].length);
58639 if (typeof console.trace === 'function') {
58640 // not supported in IE 10
58641 console.trace();
58642 }
58643 }
58644 }
58645
58646 return this;
58647 };
58648
58649 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
58650
58651 EventEmitter.prototype.once = function(type, listener) {
58652 if (!isFunction(listener))
58653 throw TypeError('listener must be a function');
58654
58655 var fired = false;
58656
58657 function g() {
58658 this.removeListener(type, g);
58659
58660 if (!fired) {
58661 fired = true;
58662 listener.apply(this, arguments);
58663 }
58664 }
58665
58666 g.listener = listener;
58667 this.on(type, g);
58668
58669 return this;
58670 };
58671
58672 // emits a 'removeListener' event iff the listener was removed
58673 EventEmitter.prototype.removeListener = function(type, listener) {
58674 var list, position, length, i;
58675
58676 if (!isFunction(listener))
58677 throw TypeError('listener must be a function');
58678
58679 if (!this._events || !this._events[type])
58680 return this;
58681
58682 list = this._events[type];
58683 length = list.length;
58684 position = -1;
58685
58686 if (list === listener ||
58687 (isFunction(list.listener) && list.listener === listener)) {
58688 delete this._events[type];
58689 if (this._events.removeListener)
58690 this.emit('removeListener', type, listener);
58691
58692 } else if (isObject(list)) {
58693 for (i = length; i-- > 0;) {
58694 if (list[i] === listener ||
58695 (list[i].listener && list[i].listener === listener)) {
58696 position = i;
58697 break;
58698 }
58699 }
58700
58701 if (position < 0)
58702 return this;
58703
58704 if (list.length === 1) {
58705 list.length = 0;
58706 delete this._events[type];
58707 } else {
58708 list.splice(position, 1);
58709 }
58710
58711 if (this._events.removeListener)
58712 this.emit('removeListener', type, listener);
58713 }
58714
58715 return this;
58716 };
58717
58718 EventEmitter.prototype.removeAllListeners = function(type) {
58719 var key, listeners;
58720
58721 if (!this._events)
58722 return this;
58723
58724 // not listening for removeListener, no need to emit
58725 if (!this._events.removeListener) {
58726 if (arguments.length === 0)
58727 this._events = {};
58728 else if (this._events[type])
58729 delete this._events[type];
58730 return this;
58731 }
58732
58733 // emit removeListener for all listeners on all events
58734 if (arguments.length === 0) {
58735 for (key in this._events) {
58736 if (key === 'removeListener') continue;
58737 this.removeAllListeners(key);
58738 }
58739 this.removeAllListeners('removeListener');
58740 this._events = {};
58741 return this;
58742 }
58743
58744 listeners = this._events[type];
58745
58746 if (isFunction(listeners)) {
58747 this.removeListener(type, listeners);
58748 } else if (listeners) {
58749 // LIFO order
58750 while (listeners.length)
58751 this.removeListener(type, listeners[listeners.length - 1]);
58752 }
58753 delete this._events[type];
58754
58755 return this;
58756 };
58757
58758 EventEmitter.prototype.listeners = function(type) {
58759 var ret;
58760 if (!this._events || !this._events[type])
58761 ret = [];
58762 else if (isFunction(this._events[type]))
58763 ret = [this._events[type]];
58764 else
58765 ret = this._events[type].slice();
58766 return ret;
58767 };
58768
58769 EventEmitter.prototype.listenerCount = function(type) {
58770 if (this._events) {
58771 var evlistener = this._events[type];
58772
58773 if (isFunction(evlistener))
58774 return 1;
58775 else if (evlistener)
58776 return evlistener.length;
58777 }
58778 return 0;
58779 };
58780
58781 EventEmitter.listenerCount = function(emitter, type) {
58782 return emitter.listenerCount(type);
58783 };
58784
58785 function isFunction(arg) {
58786 return typeof arg === 'function';
58787 }
58788
58789 function isNumber(arg) {
58790 return typeof arg === 'number';
58791 }
58792
58793 function isObject(arg) {
58794 return typeof arg === 'object' && arg !== null;
58795 }
58796
58797 function isUndefined(arg) {
58798 return arg === void 0;
58799 }
58800
58801 },{}],84:[function(require,module,exports){
58802 (function (Buffer){
58803 var md5 = require('create-hash/md5')
58804 module.exports = EVP_BytesToKey
58805 function EVP_BytesToKey (password, salt, keyLen, ivLen) {
58806 if (!Buffer.isBuffer(password)) {
58807 password = new Buffer(password, 'binary')
58808 }
58809 if (salt && !Buffer.isBuffer(salt)) {
58810 salt = new Buffer(salt, 'binary')
58811 }
58812 keyLen = keyLen / 8
58813 ivLen = ivLen || 0
58814 var ki = 0
58815 var ii = 0
58816 var key = new Buffer(keyLen)
58817 var iv = new Buffer(ivLen)
58818 var addmd = 0
58819 var md_buf
58820 var i
58821 var bufs = []
58822 while (true) {
58823 if (addmd++ > 0) {
58824 bufs.push(md_buf)
58825 }
58826 bufs.push(password)
58827 if (salt) {
58828 bufs.push(salt)
58829 }
58830 md_buf = md5(Buffer.concat(bufs))
58831 bufs = []
58832 i = 0
58833 if (keyLen > 0) {
58834 while (true) {
58835 if (keyLen === 0) {
58836 break
58837 }
58838 if (i === md_buf.length) {
58839 break
58840 }
58841 key[ki++] = md_buf[i]
58842 keyLen--
58843 i++
58844 }
58845 }
58846 if (ivLen > 0 && i !== md_buf.length) {
58847 while (true) {
58848 if (ivLen === 0) {
58849 break
58850 }
58851 if (i === md_buf.length) {
58852 break
58853 }
58854 iv[ii++] = md_buf[i]
58855 ivLen--
58856 i++
58857 }
58858 }
58859 if (keyLen === 0 && ivLen === 0) {
58860 break
58861 }
58862 }
58863 for (i = 0; i < md_buf.length; i++) {
58864 md_buf[i] = 0
58865 }
58866 return {
58867 key: key,
58868 iv: iv
58869 }
58870 }
58871
58872 }).call(this,require("buffer").Buffer)
58873 },{"buffer":47,"create-hash/md5":53}],85:[function(require,module,exports){
58874 (function (Buffer){
58875 'use strict'
58876 var Transform = require('stream').Transform
58877 var inherits = require('inherits')
58878
58879 function HashBase (blockSize) {
58880 Transform.call(this)
58881
58882 this._block = new Buffer(blockSize)
58883 this._blockSize = blockSize
58884 this._blockOffset = 0
58885 this._length = [0, 0, 0, 0]
58886
58887 this._finalized = false
58888 }
58889
58890 inherits(HashBase, Transform)
58891
58892 HashBase.prototype._transform = function (chunk, encoding, callback) {
58893 var error = null
58894 try {
58895 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
58896 this.update(chunk)
58897 } catch (err) {
58898 error = err
58899 }
58900
58901 callback(error)
58902 }
58903
58904 HashBase.prototype._flush = function (callback) {
58905 var error = null
58906 try {
58907 this.push(this._digest())
58908 } catch (err) {
58909 error = err
58910 }
58911
58912 callback(error)
58913 }
58914
58915 HashBase.prototype.update = function (data, encoding) {
58916 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
58917 if (this._finalized) throw new Error('Digest already called')
58918 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
58919
58920 // consume data
58921 var block = this._block
58922 var offset = 0
58923 while (this._blockOffset + data.length - offset >= this._blockSize) {
58924 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
58925 this._update()
58926 this._blockOffset = 0
58927 }
58928 while (offset < data.length) block[this._blockOffset++] = data[offset++]
58929
58930 // update length
58931 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
58932 this._length[j] += carry
58933 carry = (this._length[j] / 0x0100000000) | 0
58934 if (carry > 0) this._length[j] -= 0x0100000000 * carry
58935 }
58936
58937 return this
58938 }
58939
58940 HashBase.prototype._update = function (data) {
58941 throw new Error('_update is not implemented')
58942 }
58943
58944 HashBase.prototype.digest = function (encoding) {
58945 if (this._finalized) throw new Error('Digest already called')
58946 this._finalized = true
58947
58948 var digest = this._digest()
58949 if (encoding !== undefined) digest = digest.toString(encoding)
58950 return digest
58951 }
58952
58953 HashBase.prototype._digest = function () {
58954 throw new Error('_digest is not implemented')
58955 }
58956
58957 module.exports = HashBase
58958
58959 }).call(this,require("buffer").Buffer)
58960 },{"buffer":47,"inherits":95,"stream":143}],86:[function(require,module,exports){
58961 var hash = exports;
58962
58963 hash.utils = require('./hash/utils');
58964 hash.common = require('./hash/common');
58965 hash.sha = require('./hash/sha');
58966 hash.ripemd = require('./hash/ripemd');
58967 hash.hmac = require('./hash/hmac');
58968
58969 // Proxy hash functions to the main object
58970 hash.sha1 = hash.sha.sha1;
58971 hash.sha256 = hash.sha.sha256;
58972 hash.sha224 = hash.sha.sha224;
58973 hash.sha384 = hash.sha.sha384;
58974 hash.sha512 = hash.sha.sha512;
58975 hash.ripemd160 = hash.ripemd.ripemd160;
58976
58977 },{"./hash/common":87,"./hash/hmac":88,"./hash/ripemd":89,"./hash/sha":90,"./hash/utils":91}],87:[function(require,module,exports){
58978 var hash = require('../hash');
58979 var utils = hash.utils;
58980 var assert = utils.assert;
58981
58982 function BlockHash() {
58983 this.pending = null;
58984 this.pendingTotal = 0;
58985 this.blockSize = this.constructor.blockSize;
58986 this.outSize = this.constructor.outSize;
58987 this.hmacStrength = this.constructor.hmacStrength;
58988 this.padLength = this.constructor.padLength / 8;
58989 this.endian = 'big';
58990
58991 this._delta8 = this.blockSize / 8;
58992 this._delta32 = this.blockSize / 32;
58993 }
58994 exports.BlockHash = BlockHash;
58995
58996 BlockHash.prototype.update = function update(msg, enc) {
58997 // Convert message to array, pad it, and join into 32bit blocks
58998 msg = utils.toArray(msg, enc);
58999 if (!this.pending)
59000 this.pending = msg;
59001 else
59002 this.pending = this.pending.concat(msg);
59003 this.pendingTotal += msg.length;
59004
59005 // Enough data, try updating
59006 if (this.pending.length >= this._delta8) {
59007 msg = this.pending;
59008
59009 // Process pending data in blocks
59010 var r = msg.length % this._delta8;
59011 this.pending = msg.slice(msg.length - r, msg.length);
59012 if (this.pending.length === 0)
59013 this.pending = null;
59014
59015 msg = utils.join32(msg, 0, msg.length - r, this.endian);
59016 for (var i = 0; i < msg.length; i += this._delta32)
59017 this._update(msg, i, i + this._delta32);
59018 }
59019
59020 return this;
59021 };
59022
59023 BlockHash.prototype.digest = function digest(enc) {
59024 this.update(this._pad());
59025 assert(this.pending === null);
59026
59027 return this._digest(enc);
59028 };
59029
59030 BlockHash.prototype._pad = function pad() {
59031 var len = this.pendingTotal;
59032 var bytes = this._delta8;
59033 var k = bytes - ((len + this.padLength) % bytes);
59034 var res = new Array(k + this.padLength);
59035 res[0] = 0x80;
59036 for (var i = 1; i < k; i++)
59037 res[i] = 0;
59038
59039 // Append length
59040 len <<= 3;
59041 if (this.endian === 'big') {
59042 for (var t = 8; t < this.padLength; t++)
59043 res[i++] = 0;
59044
59045 res[i++] = 0;
59046 res[i++] = 0;
59047 res[i++] = 0;
59048 res[i++] = 0;
59049 res[i++] = (len >>> 24) & 0xff;
59050 res[i++] = (len >>> 16) & 0xff;
59051 res[i++] = (len >>> 8) & 0xff;
59052 res[i++] = len & 0xff;
59053 } else {
59054 res[i++] = len & 0xff;
59055 res[i++] = (len >>> 8) & 0xff;
59056 res[i++] = (len >>> 16) & 0xff;
59057 res[i++] = (len >>> 24) & 0xff;
59058 res[i++] = 0;
59059 res[i++] = 0;
59060 res[i++] = 0;
59061 res[i++] = 0;
59062
59063 for (var t = 8; t < this.padLength; t++)
59064 res[i++] = 0;
59065 }
59066
59067 return res;
59068 };
59069
59070 },{"../hash":86}],88:[function(require,module,exports){
59071 var hmac = exports;
59072
59073 var hash = require('../hash');
59074 var utils = hash.utils;
59075 var assert = utils.assert;
59076
59077 function Hmac(hash, key, enc) {
59078 if (!(this instanceof Hmac))
59079 return new Hmac(hash, key, enc);
59080 this.Hash = hash;
59081 this.blockSize = hash.blockSize / 8;
59082 this.outSize = hash.outSize / 8;
59083 this.inner = null;
59084 this.outer = null;
59085
59086 this._init(utils.toArray(key, enc));
59087 }
59088 module.exports = Hmac;
59089
59090 Hmac.prototype._init = function init(key) {
59091 // Shorten key, if needed
59092 if (key.length > this.blockSize)
59093 key = new this.Hash().update(key).digest();
59094 assert(key.length <= this.blockSize);
59095
59096 // Add padding to key
59097 for (var i = key.length; i < this.blockSize; i++)
59098 key.push(0);
59099
59100 for (var i = 0; i < key.length; i++)
59101 key[i] ^= 0x36;
59102 this.inner = new this.Hash().update(key);
59103
59104 // 0x36 ^ 0x5c = 0x6a
59105 for (var i = 0; i < key.length; i++)
59106 key[i] ^= 0x6a;
59107 this.outer = new this.Hash().update(key);
59108 };
59109
59110 Hmac.prototype.update = function update(msg, enc) {
59111 this.inner.update(msg, enc);
59112 return this;
59113 };
59114
59115 Hmac.prototype.digest = function digest(enc) {
59116 this.outer.update(this.inner.digest());
59117 return this.outer.digest(enc);
59118 };
59119
59120 },{"../hash":86}],89:[function(require,module,exports){
59121 var hash = require('../hash');
59122 var utils = hash.utils;
59123
59124 var rotl32 = utils.rotl32;
59125 var sum32 = utils.sum32;
59126 var sum32_3 = utils.sum32_3;
59127 var sum32_4 = utils.sum32_4;
59128 var BlockHash = hash.common.BlockHash;
59129
59130 function RIPEMD160() {
59131 if (!(this instanceof RIPEMD160))
59132 return new RIPEMD160();
59133
59134 BlockHash.call(this);
59135
59136 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
59137 this.endian = 'little';
59138 }
59139 utils.inherits(RIPEMD160, BlockHash);
59140 exports.ripemd160 = RIPEMD160;
59141
59142 RIPEMD160.blockSize = 512;
59143 RIPEMD160.outSize = 160;
59144 RIPEMD160.hmacStrength = 192;
59145 RIPEMD160.padLength = 64;
59146
59147 RIPEMD160.prototype._update = function update(msg, start) {
59148 var A = this.h[0];
59149 var B = this.h[1];
59150 var C = this.h[2];
59151 var D = this.h[3];
59152 var E = this.h[4];
59153 var Ah = A;
59154 var Bh = B;
59155 var Ch = C;
59156 var Dh = D;
59157 var Eh = E;
59158 for (var j = 0; j < 80; j++) {
59159 var T = sum32(
59160 rotl32(
59161 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
59162 s[j]),
59163 E);
59164 A = E;
59165 E = D;
59166 D = rotl32(C, 10);
59167 C = B;
59168 B = T;
59169 T = sum32(
59170 rotl32(
59171 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
59172 sh[j]),
59173 Eh);
59174 Ah = Eh;
59175 Eh = Dh;
59176 Dh = rotl32(Ch, 10);
59177 Ch = Bh;
59178 Bh = T;
59179 }
59180 T = sum32_3(this.h[1], C, Dh);
59181 this.h[1] = sum32_3(this.h[2], D, Eh);
59182 this.h[2] = sum32_3(this.h[3], E, Ah);
59183 this.h[3] = sum32_3(this.h[4], A, Bh);
59184 this.h[4] = sum32_3(this.h[0], B, Ch);
59185 this.h[0] = T;
59186 };
59187
59188 RIPEMD160.prototype._digest = function digest(enc) {
59189 if (enc === 'hex')
59190 return utils.toHex32(this.h, 'little');
59191 else
59192 return utils.split32(this.h, 'little');
59193 };
59194
59195 function f(j, x, y, z) {
59196 if (j <= 15)
59197 return x ^ y ^ z;
59198 else if (j <= 31)
59199 return (x & y) | ((~x) & z);
59200 else if (j <= 47)
59201 return (x | (~y)) ^ z;
59202 else if (j <= 63)
59203 return (x & z) | (y & (~z));
59204 else
59205 return x ^ (y | (~z));
59206 }
59207
59208 function K(j) {
59209 if (j <= 15)
59210 return 0x00000000;
59211 else if (j <= 31)
59212 return 0x5a827999;
59213 else if (j <= 47)
59214 return 0x6ed9eba1;
59215 else if (j <= 63)
59216 return 0x8f1bbcdc;
59217 else
59218 return 0xa953fd4e;
59219 }
59220
59221 function Kh(j) {
59222 if (j <= 15)
59223 return 0x50a28be6;
59224 else if (j <= 31)
59225 return 0x5c4dd124;
59226 else if (j <= 47)
59227 return 0x6d703ef3;
59228 else if (j <= 63)
59229 return 0x7a6d76e9;
59230 else
59231 return 0x00000000;
59232 }
59233
59234 var r = [
59235 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
59236 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
59237 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
59238 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
59239 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
59240 ];
59241
59242 var rh = [
59243 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
59244 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
59245 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
59246 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
59247 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
59248 ];
59249
59250 var s = [
59251 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
59252 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
59253 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
59254 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
59255 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
59256 ];
59257
59258 var sh = [
59259 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
59260 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
59261 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
59262 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
59263 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
59264 ];
59265
59266 },{"../hash":86}],90:[function(require,module,exports){
59267 var hash = require('../hash');
59268 var utils = hash.utils;
59269 var assert = utils.assert;
59270
59271 var rotr32 = utils.rotr32;
59272 var rotl32 = utils.rotl32;
59273 var sum32 = utils.sum32;
59274 var sum32_4 = utils.sum32_4;
59275 var sum32_5 = utils.sum32_5;
59276 var rotr64_hi = utils.rotr64_hi;
59277 var rotr64_lo = utils.rotr64_lo;
59278 var shr64_hi = utils.shr64_hi;
59279 var shr64_lo = utils.shr64_lo;
59280 var sum64 = utils.sum64;
59281 var sum64_hi = utils.sum64_hi;
59282 var sum64_lo = utils.sum64_lo;
59283 var sum64_4_hi = utils.sum64_4_hi;
59284 var sum64_4_lo = utils.sum64_4_lo;
59285 var sum64_5_hi = utils.sum64_5_hi;
59286 var sum64_5_lo = utils.sum64_5_lo;
59287 var BlockHash = hash.common.BlockHash;
59288
59289 var sha256_K = [
59290 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
59291 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
59292 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
59293 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
59294 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
59295 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
59296 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
59297 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
59298 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
59299 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
59300 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
59301 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
59302 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
59303 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
59304 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
59305 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
59306 ];
59307
59308 var sha512_K = [
59309 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
59310 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
59311 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
59312 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
59313 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
59314 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
59315 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
59316 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
59317 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
59318 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
59319 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
59320 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
59321 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
59322 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
59323 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
59324 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
59325 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
59326 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
59327 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
59328 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
59329 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
59330 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
59331 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
59332 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
59333 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
59334 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
59335 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
59336 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
59337 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
59338 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
59339 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
59340 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
59341 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
59342 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
59343 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
59344 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
59345 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
59346 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
59347 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
59348 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
59349 ];
59350
59351 var sha1_K = [
59352 0x5A827999, 0x6ED9EBA1,
59353 0x8F1BBCDC, 0xCA62C1D6
59354 ];
59355
59356 function SHA256() {
59357 if (!(this instanceof SHA256))
59358 return new SHA256();
59359
59360 BlockHash.call(this);
59361 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
59362 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
59363 this.k = sha256_K;
59364 this.W = new Array(64);
59365 }
59366 utils.inherits(SHA256, BlockHash);
59367 exports.sha256 = SHA256;
59368
59369 SHA256.blockSize = 512;
59370 SHA256.outSize = 256;
59371 SHA256.hmacStrength = 192;
59372 SHA256.padLength = 64;
59373
59374 SHA256.prototype._update = function _update(msg, start) {
59375 var W = this.W;
59376
59377 for (var i = 0; i < 16; i++)
59378 W[i] = msg[start + i];
59379 for (; i < W.length; i++)
59380 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
59381
59382 var a = this.h[0];
59383 var b = this.h[1];
59384 var c = this.h[2];
59385 var d = this.h[3];
59386 var e = this.h[4];
59387 var f = this.h[5];
59388 var g = this.h[6];
59389 var h = this.h[7];
59390
59391 assert(this.k.length === W.length);
59392 for (var i = 0; i < W.length; i++) {
59393 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
59394 var T2 = sum32(s0_256(a), maj32(a, b, c));
59395 h = g;
59396 g = f;
59397 f = e;
59398 e = sum32(d, T1);
59399 d = c;
59400 c = b;
59401 b = a;
59402 a = sum32(T1, T2);
59403 }
59404
59405 this.h[0] = sum32(this.h[0], a);
59406 this.h[1] = sum32(this.h[1], b);
59407 this.h[2] = sum32(this.h[2], c);
59408 this.h[3] = sum32(this.h[3], d);
59409 this.h[4] = sum32(this.h[4], e);
59410 this.h[5] = sum32(this.h[5], f);
59411 this.h[6] = sum32(this.h[6], g);
59412 this.h[7] = sum32(this.h[7], h);
59413 };
59414
59415 SHA256.prototype._digest = function digest(enc) {
59416 if (enc === 'hex')
59417 return utils.toHex32(this.h, 'big');
59418 else
59419 return utils.split32(this.h, 'big');
59420 };
59421
59422 function SHA224() {
59423 if (!(this instanceof SHA224))
59424 return new SHA224();
59425
59426 SHA256.call(this);
59427 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
59428 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
59429 }
59430 utils.inherits(SHA224, SHA256);
59431 exports.sha224 = SHA224;
59432
59433 SHA224.blockSize = 512;
59434 SHA224.outSize = 224;
59435 SHA224.hmacStrength = 192;
59436 SHA224.padLength = 64;
59437
59438 SHA224.prototype._digest = function digest(enc) {
59439 // Just truncate output
59440 if (enc === 'hex')
59441 return utils.toHex32(this.h.slice(0, 7), 'big');
59442 else
59443 return utils.split32(this.h.slice(0, 7), 'big');
59444 };
59445
59446 function SHA512() {
59447 if (!(this instanceof SHA512))
59448 return new SHA512();
59449
59450 BlockHash.call(this);
59451 this.h = [ 0x6a09e667, 0xf3bcc908,
59452 0xbb67ae85, 0x84caa73b,
59453 0x3c6ef372, 0xfe94f82b,
59454 0xa54ff53a, 0x5f1d36f1,
59455 0x510e527f, 0xade682d1,
59456 0x9b05688c, 0x2b3e6c1f,
59457 0x1f83d9ab, 0xfb41bd6b,
59458 0x5be0cd19, 0x137e2179 ];
59459 this.k = sha512_K;
59460 this.W = new Array(160);
59461 }
59462 utils.inherits(SHA512, BlockHash);
59463 exports.sha512 = SHA512;
59464
59465 SHA512.blockSize = 1024;
59466 SHA512.outSize = 512;
59467 SHA512.hmacStrength = 192;
59468 SHA512.padLength = 128;
59469
59470 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
59471 var W = this.W;
59472
59473 // 32 x 32bit words
59474 for (var i = 0; i < 32; i++)
59475 W[i] = msg[start + i];
59476 for (; i < W.length; i += 2) {
59477 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
59478 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
59479 var c1_hi = W[i - 14]; // i - 7
59480 var c1_lo = W[i - 13];
59481 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
59482 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
59483 var c3_hi = W[i - 32]; // i - 16
59484 var c3_lo = W[i - 31];
59485
59486 W[i] = sum64_4_hi(c0_hi, c0_lo,
59487 c1_hi, c1_lo,
59488 c2_hi, c2_lo,
59489 c3_hi, c3_lo);
59490 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
59491 c1_hi, c1_lo,
59492 c2_hi, c2_lo,
59493 c3_hi, c3_lo);
59494 }
59495 };
59496
59497 SHA512.prototype._update = function _update(msg, start) {
59498 this._prepareBlock(msg, start);
59499
59500 var W = this.W;
59501
59502 var ah = this.h[0];
59503 var al = this.h[1];
59504 var bh = this.h[2];
59505 var bl = this.h[3];
59506 var ch = this.h[4];
59507 var cl = this.h[5];
59508 var dh = this.h[6];
59509 var dl = this.h[7];
59510 var eh = this.h[8];
59511 var el = this.h[9];
59512 var fh = this.h[10];
59513 var fl = this.h[11];
59514 var gh = this.h[12];
59515 var gl = this.h[13];
59516 var hh = this.h[14];
59517 var hl = this.h[15];
59518
59519 assert(this.k.length === W.length);
59520 for (var i = 0; i < W.length; i += 2) {
59521 var c0_hi = hh;
59522 var c0_lo = hl;
59523 var c1_hi = s1_512_hi(eh, el);
59524 var c1_lo = s1_512_lo(eh, el);
59525 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
59526 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
59527 var c3_hi = this.k[i];
59528 var c3_lo = this.k[i + 1];
59529 var c4_hi = W[i];
59530 var c4_lo = W[i + 1];
59531
59532 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
59533 c1_hi, c1_lo,
59534 c2_hi, c2_lo,
59535 c3_hi, c3_lo,
59536 c4_hi, c4_lo);
59537 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
59538 c1_hi, c1_lo,
59539 c2_hi, c2_lo,
59540 c3_hi, c3_lo,
59541 c4_hi, c4_lo);
59542
59543 var c0_hi = s0_512_hi(ah, al);
59544 var c0_lo = s0_512_lo(ah, al);
59545 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
59546 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
59547
59548 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
59549 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
59550
59551 hh = gh;
59552 hl = gl;
59553
59554 gh = fh;
59555 gl = fl;
59556
59557 fh = eh;
59558 fl = el;
59559
59560 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
59561 el = sum64_lo(dl, dl, T1_hi, T1_lo);
59562
59563 dh = ch;
59564 dl = cl;
59565
59566 ch = bh;
59567 cl = bl;
59568
59569 bh = ah;
59570 bl = al;
59571
59572 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
59573 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
59574 }
59575
59576 sum64(this.h, 0, ah, al);
59577 sum64(this.h, 2, bh, bl);
59578 sum64(this.h, 4, ch, cl);
59579 sum64(this.h, 6, dh, dl);
59580 sum64(this.h, 8, eh, el);
59581 sum64(this.h, 10, fh, fl);
59582 sum64(this.h, 12, gh, gl);
59583 sum64(this.h, 14, hh, hl);
59584 };
59585
59586 SHA512.prototype._digest = function digest(enc) {
59587 if (enc === 'hex')
59588 return utils.toHex32(this.h, 'big');
59589 else
59590 return utils.split32(this.h, 'big');
59591 };
59592
59593 function SHA384() {
59594 if (!(this instanceof SHA384))
59595 return new SHA384();
59596
59597 SHA512.call(this);
59598 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
59599 0x629a292a, 0x367cd507,
59600 0x9159015a, 0x3070dd17,
59601 0x152fecd8, 0xf70e5939,
59602 0x67332667, 0xffc00b31,
59603 0x8eb44a87, 0x68581511,
59604 0xdb0c2e0d, 0x64f98fa7,
59605 0x47b5481d, 0xbefa4fa4 ];
59606 }
59607 utils.inherits(SHA384, SHA512);
59608 exports.sha384 = SHA384;
59609
59610 SHA384.blockSize = 1024;
59611 SHA384.outSize = 384;
59612 SHA384.hmacStrength = 192;
59613 SHA384.padLength = 128;
59614
59615 SHA384.prototype._digest = function digest(enc) {
59616 if (enc === 'hex')
59617 return utils.toHex32(this.h.slice(0, 12), 'big');
59618 else
59619 return utils.split32(this.h.slice(0, 12), 'big');
59620 };
59621
59622 function SHA1() {
59623 if (!(this instanceof SHA1))
59624 return new SHA1();
59625
59626 BlockHash.call(this);
59627 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
59628 0x10325476, 0xc3d2e1f0 ];
59629 this.W = new Array(80);
59630 }
59631
59632 utils.inherits(SHA1, BlockHash);
59633 exports.sha1 = SHA1;
59634
59635 SHA1.blockSize = 512;
59636 SHA1.outSize = 160;
59637 SHA1.hmacStrength = 80;
59638 SHA1.padLength = 64;
59639
59640 SHA1.prototype._update = function _update(msg, start) {
59641 var W = this.W;
59642
59643 for (var i = 0; i < 16; i++)
59644 W[i] = msg[start + i];
59645
59646 for(; i < W.length; i++)
59647 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
59648
59649 var a = this.h[0];
59650 var b = this.h[1];
59651 var c = this.h[2];
59652 var d = this.h[3];
59653 var e = this.h[4];
59654
59655 for (var i = 0; i < W.length; i++) {
59656 var s = ~~(i / 20);
59657 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
59658 e = d;
59659 d = c;
59660 c = rotl32(b, 30);
59661 b = a;
59662 a = t;
59663 }
59664
59665 this.h[0] = sum32(this.h[0], a);
59666 this.h[1] = sum32(this.h[1], b);
59667 this.h[2] = sum32(this.h[2], c);
59668 this.h[3] = sum32(this.h[3], d);
59669 this.h[4] = sum32(this.h[4], e);
59670 };
59671
59672 SHA1.prototype._digest = function digest(enc) {
59673 if (enc === 'hex')
59674 return utils.toHex32(this.h, 'big');
59675 else
59676 return utils.split32(this.h, 'big');
59677 };
59678
59679 function ch32(x, y, z) {
59680 return (x & y) ^ ((~x) & z);
59681 }
59682
59683 function maj32(x, y, z) {
59684 return (x & y) ^ (x & z) ^ (y & z);
59685 }
59686
59687 function p32(x, y, z) {
59688 return x ^ y ^ z;
59689 }
59690
59691 function s0_256(x) {
59692 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
59693 }
59694
59695 function s1_256(x) {
59696 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
59697 }
59698
59699 function g0_256(x) {
59700 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
59701 }
59702
59703 function g1_256(x) {
59704 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
59705 }
59706
59707 function ft_1(s, x, y, z) {
59708 if (s === 0)
59709 return ch32(x, y, z);
59710 if (s === 1 || s === 3)
59711 return p32(x, y, z);
59712 if (s === 2)
59713 return maj32(x, y, z);
59714 }
59715
59716 function ch64_hi(xh, xl, yh, yl, zh, zl) {
59717 var r = (xh & yh) ^ ((~xh) & zh);
59718 if (r < 0)
59719 r += 0x100000000;
59720 return r;
59721 }
59722
59723 function ch64_lo(xh, xl, yh, yl, zh, zl) {
59724 var r = (xl & yl) ^ ((~xl) & zl);
59725 if (r < 0)
59726 r += 0x100000000;
59727 return r;
59728 }
59729
59730 function maj64_hi(xh, xl, yh, yl, zh, zl) {
59731 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
59732 if (r < 0)
59733 r += 0x100000000;
59734 return r;
59735 }
59736
59737 function maj64_lo(xh, xl, yh, yl, zh, zl) {
59738 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
59739 if (r < 0)
59740 r += 0x100000000;
59741 return r;
59742 }
59743
59744 function s0_512_hi(xh, xl) {
59745 var c0_hi = rotr64_hi(xh, xl, 28);
59746 var c1_hi = rotr64_hi(xl, xh, 2); // 34
59747 var c2_hi = rotr64_hi(xl, xh, 7); // 39
59748
59749 var r = c0_hi ^ c1_hi ^ c2_hi;
59750 if (r < 0)
59751 r += 0x100000000;
59752 return r;
59753 }
59754
59755 function s0_512_lo(xh, xl) {
59756 var c0_lo = rotr64_lo(xh, xl, 28);
59757 var c1_lo = rotr64_lo(xl, xh, 2); // 34
59758 var c2_lo = rotr64_lo(xl, xh, 7); // 39
59759
59760 var r = c0_lo ^ c1_lo ^ c2_lo;
59761 if (r < 0)
59762 r += 0x100000000;
59763 return r;
59764 }
59765
59766 function s1_512_hi(xh, xl) {
59767 var c0_hi = rotr64_hi(xh, xl, 14);
59768 var c1_hi = rotr64_hi(xh, xl, 18);
59769 var c2_hi = rotr64_hi(xl, xh, 9); // 41
59770
59771 var r = c0_hi ^ c1_hi ^ c2_hi;
59772 if (r < 0)
59773 r += 0x100000000;
59774 return r;
59775 }
59776
59777 function s1_512_lo(xh, xl) {
59778 var c0_lo = rotr64_lo(xh, xl, 14);
59779 var c1_lo = rotr64_lo(xh, xl, 18);
59780 var c2_lo = rotr64_lo(xl, xh, 9); // 41
59781
59782 var r = c0_lo ^ c1_lo ^ c2_lo;
59783 if (r < 0)
59784 r += 0x100000000;
59785 return r;
59786 }
59787
59788 function g0_512_hi(xh, xl) {
59789 var c0_hi = rotr64_hi(xh, xl, 1);
59790 var c1_hi = rotr64_hi(xh, xl, 8);
59791 var c2_hi = shr64_hi(xh, xl, 7);
59792
59793 var r = c0_hi ^ c1_hi ^ c2_hi;
59794 if (r < 0)
59795 r += 0x100000000;
59796 return r;
59797 }
59798
59799 function g0_512_lo(xh, xl) {
59800 var c0_lo = rotr64_lo(xh, xl, 1);
59801 var c1_lo = rotr64_lo(xh, xl, 8);
59802 var c2_lo = shr64_lo(xh, xl, 7);
59803
59804 var r = c0_lo ^ c1_lo ^ c2_lo;
59805 if (r < 0)
59806 r += 0x100000000;
59807 return r;
59808 }
59809
59810 function g1_512_hi(xh, xl) {
59811 var c0_hi = rotr64_hi(xh, xl, 19);
59812 var c1_hi = rotr64_hi(xl, xh, 29); // 61
59813 var c2_hi = shr64_hi(xh, xl, 6);
59814
59815 var r = c0_hi ^ c1_hi ^ c2_hi;
59816 if (r < 0)
59817 r += 0x100000000;
59818 return r;
59819 }
59820
59821 function g1_512_lo(xh, xl) {
59822 var c0_lo = rotr64_lo(xh, xl, 19);
59823 var c1_lo = rotr64_lo(xl, xh, 29); // 61
59824 var c2_lo = shr64_lo(xh, xl, 6);
59825
59826 var r = c0_lo ^ c1_lo ^ c2_lo;
59827 if (r < 0)
59828 r += 0x100000000;
59829 return r;
59830 }
59831
59832 },{"../hash":86}],91:[function(require,module,exports){
59833 var utils = exports;
59834 var inherits = require('inherits');
59835
59836 function toArray(msg, enc) {
59837 if (Array.isArray(msg))
59838 return msg.slice();
59839 if (!msg)
59840 return [];
59841 var res = [];
59842 if (typeof msg === 'string') {
59843 if (!enc) {
59844 for (var i = 0; i < msg.length; i++) {
59845 var c = msg.charCodeAt(i);
59846 var hi = c >> 8;
59847 var lo = c & 0xff;
59848 if (hi)
59849 res.push(hi, lo);
59850 else
59851 res.push(lo);
59852 }
59853 } else if (enc === 'hex') {
59854 msg = msg.replace(/[^a-z0-9]+/ig, '');
59855 if (msg.length % 2 !== 0)
59856 msg = '0' + msg;
59857 for (var i = 0; i < msg.length; i += 2)
59858 res.push(parseInt(msg[i] + msg[i + 1], 16));
59859 }
59860 } else {
59861 for (var i = 0; i < msg.length; i++)
59862 res[i] = msg[i] | 0;
59863 }
59864 return res;
59865 }
59866 utils.toArray = toArray;
59867
59868 function toHex(msg) {
59869 var res = '';
59870 for (var i = 0; i < msg.length; i++)
59871 res += zero2(msg[i].toString(16));
59872 return res;
59873 }
59874 utils.toHex = toHex;
59875
59876 function htonl(w) {
59877 var res = (w >>> 24) |
59878 ((w >>> 8) & 0xff00) |
59879 ((w << 8) & 0xff0000) |
59880 ((w & 0xff) << 24);
59881 return res >>> 0;
59882 }
59883 utils.htonl = htonl;
59884
59885 function toHex32(msg, endian) {
59886 var res = '';
59887 for (var i = 0; i < msg.length; i++) {
59888 var w = msg[i];
59889 if (endian === 'little')
59890 w = htonl(w);
59891 res += zero8(w.toString(16));
59892 }
59893 return res;
59894 }
59895 utils.toHex32 = toHex32;
59896
59897 function zero2(word) {
59898 if (word.length === 1)
59899 return '0' + word;
59900 else
59901 return word;
59902 }
59903 utils.zero2 = zero2;
59904
59905 function zero8(word) {
59906 if (word.length === 7)
59907 return '0' + word;
59908 else if (word.length === 6)
59909 return '00' + word;
59910 else if (word.length === 5)
59911 return '000' + word;
59912 else if (word.length === 4)
59913 return '0000' + word;
59914 else if (word.length === 3)
59915 return '00000' + word;
59916 else if (word.length === 2)
59917 return '000000' + word;
59918 else if (word.length === 1)
59919 return '0000000' + word;
59920 else
59921 return word;
59922 }
59923 utils.zero8 = zero8;
59924
59925 function join32(msg, start, end, endian) {
59926 var len = end - start;
59927 assert(len % 4 === 0);
59928 var res = new Array(len / 4);
59929 for (var i = 0, k = start; i < res.length; i++, k += 4) {
59930 var w;
59931 if (endian === 'big')
59932 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
59933 else
59934 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
59935 res[i] = w >>> 0;
59936 }
59937 return res;
59938 }
59939 utils.join32 = join32;
59940
59941 function split32(msg, endian) {
59942 var res = new Array(msg.length * 4);
59943 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
59944 var m = msg[i];
59945 if (endian === 'big') {
59946 res[k] = m >>> 24;
59947 res[k + 1] = (m >>> 16) & 0xff;
59948 res[k + 2] = (m >>> 8) & 0xff;
59949 res[k + 3] = m & 0xff;
59950 } else {
59951 res[k + 3] = m >>> 24;
59952 res[k + 2] = (m >>> 16) & 0xff;
59953 res[k + 1] = (m >>> 8) & 0xff;
59954 res[k] = m & 0xff;
59955 }
59956 }
59957 return res;
59958 }
59959 utils.split32 = split32;
59960
59961 function rotr32(w, b) {
59962 return (w >>> b) | (w << (32 - b));
59963 }
59964 utils.rotr32 = rotr32;
59965
59966 function rotl32(w, b) {
59967 return (w << b) | (w >>> (32 - b));
59968 }
59969 utils.rotl32 = rotl32;
59970
59971 function sum32(a, b) {
59972 return (a + b) >>> 0;
59973 }
59974 utils.sum32 = sum32;
59975
59976 function sum32_3(a, b, c) {
59977 return (a + b + c) >>> 0;
59978 }
59979 utils.sum32_3 = sum32_3;
59980
59981 function sum32_4(a, b, c, d) {
59982 return (a + b + c + d) >>> 0;
59983 }
59984 utils.sum32_4 = sum32_4;
59985
59986 function sum32_5(a, b, c, d, e) {
59987 return (a + b + c + d + e) >>> 0;
59988 }
59989 utils.sum32_5 = sum32_5;
59990
59991 function assert(cond, msg) {
59992 if (!cond)
59993 throw new Error(msg || 'Assertion failed');
59994 }
59995 utils.assert = assert;
59996
59997 utils.inherits = inherits;
59998
59999 function sum64(buf, pos, ah, al) {
60000 var bh = buf[pos];
60001 var bl = buf[pos + 1];
60002
60003 var lo = (al + bl) >>> 0;
60004 var hi = (lo < al ? 1 : 0) + ah + bh;
60005 buf[pos] = hi >>> 0;
60006 buf[pos + 1] = lo;
60007 }
60008 exports.sum64 = sum64;
60009
60010 function sum64_hi(ah, al, bh, bl) {
60011 var lo = (al + bl) >>> 0;
60012 var hi = (lo < al ? 1 : 0) + ah + bh;
60013 return hi >>> 0;
60014 };
60015 exports.sum64_hi = sum64_hi;
60016
60017 function sum64_lo(ah, al, bh, bl) {
60018 var lo = al + bl;
60019 return lo >>> 0;
60020 };
60021 exports.sum64_lo = sum64_lo;
60022
60023 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
60024 var carry = 0;
60025 var lo = al;
60026 lo = (lo + bl) >>> 0;
60027 carry += lo < al ? 1 : 0;
60028 lo = (lo + cl) >>> 0;
60029 carry += lo < cl ? 1 : 0;
60030 lo = (lo + dl) >>> 0;
60031 carry += lo < dl ? 1 : 0;
60032
60033 var hi = ah + bh + ch + dh + carry;
60034 return hi >>> 0;
60035 };
60036 exports.sum64_4_hi = sum64_4_hi;
60037
60038 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
60039 var lo = al + bl + cl + dl;
60040 return lo >>> 0;
60041 };
60042 exports.sum64_4_lo = sum64_4_lo;
60043
60044 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
60045 var carry = 0;
60046 var lo = al;
60047 lo = (lo + bl) >>> 0;
60048 carry += lo < al ? 1 : 0;
60049 lo = (lo + cl) >>> 0;
60050 carry += lo < cl ? 1 : 0;
60051 lo = (lo + dl) >>> 0;
60052 carry += lo < dl ? 1 : 0;
60053 lo = (lo + el) >>> 0;
60054 carry += lo < el ? 1 : 0;
60055
60056 var hi = ah + bh + ch + dh + eh + carry;
60057 return hi >>> 0;
60058 };
60059 exports.sum64_5_hi = sum64_5_hi;
60060
60061 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
60062 var lo = al + bl + cl + dl + el;
60063
60064 return lo >>> 0;
60065 };
60066 exports.sum64_5_lo = sum64_5_lo;
60067
60068 function rotr64_hi(ah, al, num) {
60069 var r = (al << (32 - num)) | (ah >>> num);
60070 return r >>> 0;
60071 };
60072 exports.rotr64_hi = rotr64_hi;
60073
60074 function rotr64_lo(ah, al, num) {
60075 var r = (ah << (32 - num)) | (al >>> num);
60076 return r >>> 0;
60077 };
60078 exports.rotr64_lo = rotr64_lo;
60079
60080 function shr64_hi(ah, al, num) {
60081 return ah >>> num;
60082 };
60083 exports.shr64_hi = shr64_hi;
60084
60085 function shr64_lo(ah, al, num) {
60086 var r = (ah << (32 - num)) | (al >>> num);
60087 return r >>> 0;
60088 };
60089 exports.shr64_lo = shr64_lo;
60090
60091 },{"inherits":95}],92:[function(require,module,exports){
60092 'use strict';
60093
60094 var hash = require('hash.js');
60095 var utils = require('minimalistic-crypto-utils');
60096 var assert = require('minimalistic-assert');
60097
60098 function HmacDRBG(options) {
60099 if (!(this instanceof HmacDRBG))
60100 return new HmacDRBG(options);
60101 this.hash = options.hash;
60102 this.predResist = !!options.predResist;
60103
60104 this.outLen = this.hash.outSize;
60105 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
60106
60107 this._reseed = null;
60108 this.reseedInterval = null;
60109 this.K = null;
60110 this.V = null;
60111
60112 var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');
60113 var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');
60114 var pers = utils.toArray(options.pers, options.persEnc || 'hex');
60115 assert(entropy.length >= (this.minEntropy / 8),
60116 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
60117 this._init(entropy, nonce, pers);
60118 }
60119 module.exports = HmacDRBG;
60120
60121 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
60122 var seed = entropy.concat(nonce).concat(pers);
60123
60124 this.K = new Array(this.outLen / 8);
60125 this.V = new Array(this.outLen / 8);
60126 for (var i = 0; i < this.V.length; i++) {
60127 this.K[i] = 0x00;
60128 this.V[i] = 0x01;
60129 }
60130
60131 this._update(seed);
60132 this._reseed = 1;
60133 this.reseedInterval = 0x1000000000000; // 2^48
60134 };
60135
60136 HmacDRBG.prototype._hmac = function hmac() {
60137 return new hash.hmac(this.hash, this.K);
60138 };
60139
60140 HmacDRBG.prototype._update = function update(seed) {
60141 var kmac = this._hmac()
60142 .update(this.V)
60143 .update([ 0x00 ]);
60144 if (seed)
60145 kmac = kmac.update(seed);
60146 this.K = kmac.digest();
60147 this.V = this._hmac().update(this.V).digest();
60148 if (!seed)
60149 return;
60150
60151 this.K = this._hmac()
60152 .update(this.V)
60153 .update([ 0x01 ])
60154 .update(seed)
60155 .digest();
60156 this.V = this._hmac().update(this.V).digest();
60157 };
60158
60159 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
60160 // Optional entropy enc
60161 if (typeof entropyEnc !== 'string') {
60162 addEnc = add;
60163 add = entropyEnc;
60164 entropyEnc = null;
60165 }
60166
60167 entropy = utils.toArray(entropy, entropyEnc);
60168 add = utils.toArray(add, addEnc);
60169
60170 assert(entropy.length >= (this.minEntropy / 8),
60171 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
60172
60173 this._update(entropy.concat(add || []));
60174 this._reseed = 1;
60175 };
60176
60177 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
60178 if (this._reseed > this.reseedInterval)
60179 throw new Error('Reseed is required');
60180
60181 // Optional encoding
60182 if (typeof enc !== 'string') {
60183 addEnc = add;
60184 add = enc;
60185 enc = null;
60186 }
60187
60188 // Optional additional data
60189 if (add) {
60190 add = utils.toArray(add, addEnc || 'hex');
60191 this._update(add);
60192 }
60193
60194 var temp = [];
60195 while (temp.length < len) {
60196 this.V = this._hmac().update(this.V).digest();
60197 temp = temp.concat(this.V);
60198 }
60199
60200 var res = temp.slice(0, len);
60201 this._update(add);
60202 this._reseed++;
60203 return utils.encode(res, enc);
60204 };
60205
60206 },{"hash.js":86,"minimalistic-assert":99,"minimalistic-crypto-utils":100}],93:[function(require,module,exports){
60207 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
60208 var e, m
60209 var eLen = nBytes * 8 - mLen - 1
60210 var eMax = (1 << eLen) - 1
60211 var eBias = eMax >> 1
60212 var nBits = -7
60213 var i = isLE ? (nBytes - 1) : 0
60214 var d = isLE ? -1 : 1
60215 var s = buffer[offset + i]
60216
60217 i += d
60218
60219 e = s & ((1 << (-nBits)) - 1)
60220 s >>= (-nBits)
60221 nBits += eLen
60222 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60223
60224 m = e & ((1 << (-nBits)) - 1)
60225 e >>= (-nBits)
60226 nBits += mLen
60227 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
60228
60229 if (e === 0) {
60230 e = 1 - eBias
60231 } else if (e === eMax) {
60232 return m ? NaN : ((s ? -1 : 1) * Infinity)
60233 } else {
60234 m = m + Math.pow(2, mLen)
60235 e = e - eBias
60236 }
60237 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
60238 }
60239
60240 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
60241 var e, m, c
60242 var eLen = nBytes * 8 - mLen - 1
60243 var eMax = (1 << eLen) - 1
60244 var eBias = eMax >> 1
60245 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
60246 var i = isLE ? 0 : (nBytes - 1)
60247 var d = isLE ? 1 : -1
60248 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
60249
60250 value = Math.abs(value)
60251
60252 if (isNaN(value) || value === Infinity) {
60253 m = isNaN(value) ? 1 : 0
60254 e = eMax
60255 } else {
60256 e = Math.floor(Math.log(value) / Math.LN2)
60257 if (value * (c = Math.pow(2, -e)) < 1) {
60258 e--
60259 c *= 2
60260 }
60261 if (e + eBias >= 1) {
60262 value += rt / c
60263 } else {
60264 value += rt * Math.pow(2, 1 - eBias)
60265 }
60266 if (value * c >= 2) {
60267 e++
60268 c /= 2
60269 }
60270
60271 if (e + eBias >= eMax) {
60272 m = 0
60273 e = eMax
60274 } else if (e + eBias >= 1) {
60275 m = (value * c - 1) * Math.pow(2, mLen)
60276 e = e + eBias
60277 } else {
60278 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
60279 e = 0
60280 }
60281 }
60282
60283 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
60284
60285 e = (e << mLen) | m
60286 eLen += mLen
60287 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
60288
60289 buffer[offset + i - d] |= s * 128
60290 }
60291
60292 },{}],94:[function(require,module,exports){
60293
60294 var indexOf = [].indexOf;
60295
60296 module.exports = function(arr, obj){
60297 if (indexOf) return arr.indexOf(obj);
60298 for (var i = 0; i < arr.length; ++i) {
60299 if (arr[i] === obj) return i;
60300 }
60301 return -1;
60302 };
60303 },{}],95:[function(require,module,exports){
60304 if (typeof Object.create === 'function') {
60305 // implementation from standard node.js 'util' module
60306 module.exports = function inherits(ctor, superCtor) {
60307 ctor.super_ = superCtor
60308 ctor.prototype = Object.create(superCtor.prototype, {
60309 constructor: {
60310 value: ctor,
60311 enumerable: false,
60312 writable: true,
60313 configurable: true
60314 }
60315 });
60316 };
60317 } else {
60318 // old school shim for old browsers
60319 module.exports = function inherits(ctor, superCtor) {
60320 ctor.super_ = superCtor
60321 var TempCtor = function () {}
60322 TempCtor.prototype = superCtor.prototype
60323 ctor.prototype = new TempCtor()
60324 ctor.prototype.constructor = ctor
60325 }
60326 }
60327
60328 },{}],96:[function(require,module,exports){
60329 /*!
60330 * Determine if an object is a Buffer
60331 *
60332 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
60333 * @license MIT
60334 */
60335
60336 // The _isBuffer check is for Safari 5-7 support, because it's missing
60337 // Object.prototype.constructor. Remove this eventually
60338 module.exports = function (obj) {
60339 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
60340 }
60341
60342 function isBuffer (obj) {
60343 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
60344 }
60345
60346 // For Node v0.10 support. Remove this eventually.
60347 function isSlowBuffer (obj) {
60348 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
60349 }
60350
60351 },{}],97:[function(require,module,exports){
60352 var toString = {}.toString;
60353
60354 module.exports = Array.isArray || function (arr) {
60355 return toString.call(arr) == '[object Array]';
60356 };
60357
60358 },{}],98:[function(require,module,exports){
60359 var bn = require('bn.js');
60360 var brorand = require('brorand');
60361
60362 function MillerRabin(rand) {
60363 this.rand = rand || new brorand.Rand();
60364 }
60365 module.exports = MillerRabin;
60366
60367 MillerRabin.create = function create(rand) {
60368 return new MillerRabin(rand);
60369 };
60370
60371 MillerRabin.prototype._rand = function _rand(n) {
60372 var len = n.bitLength();
60373 var buf = this.rand.generate(Math.ceil(len / 8));
60374
60375 // Set low bits
60376 buf[0] |= 3;
60377
60378 // Mask high bits
60379 var mask = len & 0x7;
60380 if (mask !== 0)
60381 buf[buf.length - 1] >>= 7 - mask;
60382
60383 return new bn(buf);
60384 }
60385
60386 MillerRabin.prototype.test = function test(n, k, cb) {
60387 var len = n.bitLength();
60388 var red = bn.mont(n);
60389 var rone = new bn(1).toRed(red);
60390
60391 if (!k)
60392 k = Math.max(1, (len / 48) | 0);
60393
60394 // Find d and s, (n - 1) = (2 ^ s) * d;
60395 var n1 = n.subn(1);
60396 var n2 = n1.subn(1);
60397 for (var s = 0; !n1.testn(s); s++) {}
60398 var d = n.shrn(s);
60399
60400 var rn1 = n1.toRed(red);
60401
60402 var prime = true;
60403 for (; k > 0; k--) {
60404 var a = this._rand(n2);
60405 if (cb)
60406 cb(a);
60407
60408 var x = a.toRed(red).redPow(d);
60409 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60410 continue;
60411
60412 for (var i = 1; i < s; i++) {
60413 x = x.redSqr();
60414
60415 if (x.cmp(rone) === 0)
60416 return false;
60417 if (x.cmp(rn1) === 0)
60418 break;
60419 }
60420
60421 if (i === s)
60422 return false;
60423 }
60424
60425 return prime;
60426 };
60427
60428 MillerRabin.prototype.getDivisor = function getDivisor(n, k) {
60429 var len = n.bitLength();
60430 var red = bn.mont(n);
60431 var rone = new bn(1).toRed(red);
60432
60433 if (!k)
60434 k = Math.max(1, (len / 48) | 0);
60435
60436 // Find d and s, (n - 1) = (2 ^ s) * d;
60437 var n1 = n.subn(1);
60438 var n2 = n1.subn(1);
60439 for (var s = 0; !n1.testn(s); s++) {}
60440 var d = n.shrn(s);
60441
60442 var rn1 = n1.toRed(red);
60443
60444 for (; k > 0; k--) {
60445 var a = this._rand(n2);
60446
60447 var g = n.gcd(a);
60448 if (g.cmpn(1) !== 0)
60449 return g;
60450
60451 var x = a.toRed(red).redPow(d);
60452 if (x.cmp(rone) === 0 || x.cmp(rn1) === 0)
60453 continue;
60454
60455 for (var i = 1; i < s; i++) {
60456 x = x.redSqr();
60457
60458 if (x.cmp(rone) === 0)
60459 return x.fromRed().subn(1).gcd(n);
60460 if (x.cmp(rn1) === 0)
60461 break;
60462 }
60463
60464 if (i === s) {
60465 x = x.redSqr();
60466 return x.fromRed().subn(1).gcd(n);
60467 }
60468 }
60469
60470 return false;
60471 };
60472
60473 },{"bn.js":17,"brorand":18}],99:[function(require,module,exports){
60474 module.exports = assert;
60475
60476 function assert(val, msg) {
60477 if (!val)
60478 throw new Error(msg || 'Assertion failed');
60479 }
60480
60481 assert.equal = function assertEqual(l, r, msg) {
60482 if (l != r)
60483 throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r));
60484 };
60485
60486 },{}],100:[function(require,module,exports){
60487 'use strict';
60488
60489 var utils = exports;
60490
60491 function toArray(msg, enc) {
60492 if (Array.isArray(msg))
60493 return msg.slice();
60494 if (!msg)
60495 return [];
60496 var res = [];
60497 if (typeof msg !== 'string') {
60498 for (var i = 0; i < msg.length; i++)
60499 res[i] = msg[i] | 0;
60500 return res;
60501 }
60502 if (enc === 'hex') {
60503 msg = msg.replace(/[^a-z0-9]+/ig, '');
60504 if (msg.length % 2 !== 0)
60505 msg = '0' + msg;
60506 for (var i = 0; i < msg.length; i += 2)
60507 res.push(parseInt(msg[i] + msg[i + 1], 16));
60508 } else {
60509 for (var i = 0; i < msg.length; i++) {
60510 var c = msg.charCodeAt(i);
60511 var hi = c >> 8;
60512 var lo = c & 0xff;
60513 if (hi)
60514 res.push(hi, lo);
60515 else
60516 res.push(lo);
60517 }
60518 }
60519 return res;
60520 }
60521 utils.toArray = toArray;
60522
60523 function zero2(word) {
60524 if (word.length === 1)
60525 return '0' + word;
60526 else
60527 return word;
60528 }
60529 utils.zero2 = zero2;
60530
60531 function toHex(msg) {
60532 var res = '';
60533 for (var i = 0; i < msg.length; i++)
60534 res += zero2(msg[i].toString(16));
60535 return res;
60536 }
60537 utils.toHex = toHex;
60538
60539 utils.encode = function encode(arr, enc) {
60540 if (enc === 'hex')
60541 return toHex(arr);
60542 else
60543 return arr;
60544 };
60545
60546 },{}],101:[function(require,module,exports){
60547 module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb",
60548 "2.16.840.1.101.3.4.1.2": "aes-128-cbc",
60549 "2.16.840.1.101.3.4.1.3": "aes-128-ofb",
60550 "2.16.840.1.101.3.4.1.4": "aes-128-cfb",
60551 "2.16.840.1.101.3.4.1.21": "aes-192-ecb",
60552 "2.16.840.1.101.3.4.1.22": "aes-192-cbc",
60553 "2.16.840.1.101.3.4.1.23": "aes-192-ofb",
60554 "2.16.840.1.101.3.4.1.24": "aes-192-cfb",
60555 "2.16.840.1.101.3.4.1.41": "aes-256-ecb",
60556 "2.16.840.1.101.3.4.1.42": "aes-256-cbc",
60557 "2.16.840.1.101.3.4.1.43": "aes-256-ofb",
60558 "2.16.840.1.101.3.4.1.44": "aes-256-cfb"
60559 }
60560 },{}],102:[function(require,module,exports){
60561 // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js
60562 // Fedor, you are amazing.
60563 'use strict'
60564
60565 var asn1 = require('asn1.js')
60566
60567 exports.certificate = require('./certificate')
60568
60569 var RSAPrivateKey = asn1.define('RSAPrivateKey', function () {
60570 this.seq().obj(
60571 this.key('version').int(),
60572 this.key('modulus').int(),
60573 this.key('publicExponent').int(),
60574 this.key('privateExponent').int(),
60575 this.key('prime1').int(),
60576 this.key('prime2').int(),
60577 this.key('exponent1').int(),
60578 this.key('exponent2').int(),
60579 this.key('coefficient').int()
60580 )
60581 })
60582 exports.RSAPrivateKey = RSAPrivateKey
60583
60584 var RSAPublicKey = asn1.define('RSAPublicKey', function () {
60585 this.seq().obj(
60586 this.key('modulus').int(),
60587 this.key('publicExponent').int()
60588 )
60589 })
60590 exports.RSAPublicKey = RSAPublicKey
60591
60592 var PublicKey = asn1.define('SubjectPublicKeyInfo', function () {
60593 this.seq().obj(
60594 this.key('algorithm').use(AlgorithmIdentifier),
60595 this.key('subjectPublicKey').bitstr()
60596 )
60597 })
60598 exports.PublicKey = PublicKey
60599
60600 var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {
60601 this.seq().obj(
60602 this.key('algorithm').objid(),
60603 this.key('none').null_().optional(),
60604 this.key('curve').objid().optional(),
60605 this.key('params').seq().obj(
60606 this.key('p').int(),
60607 this.key('q').int(),
60608 this.key('g').int()
60609 ).optional()
60610 )
60611 })
60612
60613 var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {
60614 this.seq().obj(
60615 this.key('version').int(),
60616 this.key('algorithm').use(AlgorithmIdentifier),
60617 this.key('subjectPrivateKey').octstr()
60618 )
60619 })
60620 exports.PrivateKey = PrivateKeyInfo
60621 var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {
60622 this.seq().obj(
60623 this.key('algorithm').seq().obj(
60624 this.key('id').objid(),
60625 this.key('decrypt').seq().obj(
60626 this.key('kde').seq().obj(
60627 this.key('id').objid(),
60628 this.key('kdeparams').seq().obj(
60629 this.key('salt').octstr(),
60630 this.key('iters').int()
60631 )
60632 ),
60633 this.key('cipher').seq().obj(
60634 this.key('algo').objid(),
60635 this.key('iv').octstr()
60636 )
60637 )
60638 ),
60639 this.key('subjectPrivateKey').octstr()
60640 )
60641 })
60642
60643 exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo
60644
60645 var DSAPrivateKey = asn1.define('DSAPrivateKey', function () {
60646 this.seq().obj(
60647 this.key('version').int(),
60648 this.key('p').int(),
60649 this.key('q').int(),
60650 this.key('g').int(),
60651 this.key('pub_key').int(),
60652 this.key('priv_key').int()
60653 )
60654 })
60655 exports.DSAPrivateKey = DSAPrivateKey
60656
60657 exports.DSAparam = asn1.define('DSAparam', function () {
60658 this.int()
60659 })
60660
60661 var ECPrivateKey = asn1.define('ECPrivateKey', function () {
60662 this.seq().obj(
60663 this.key('version').int(),
60664 this.key('privateKey').octstr(),
60665 this.key('parameters').optional().explicit(0).use(ECParameters),
60666 this.key('publicKey').optional().explicit(1).bitstr()
60667 )
60668 })
60669 exports.ECPrivateKey = ECPrivateKey
60670
60671 var ECParameters = asn1.define('ECParameters', function () {
60672 this.choice({
60673 namedCurve: this.objid()
60674 })
60675 })
60676
60677 exports.signature = asn1.define('signature', function () {
60678 this.seq().obj(
60679 this.key('r').int(),
60680 this.key('s').int()
60681 )
60682 })
60683
60684 },{"./certificate":103,"asn1.js":1}],103:[function(require,module,exports){
60685 // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js
60686 // thanks to @Rantanen
60687
60688 'use strict'
60689
60690 var asn = require('asn1.js')
60691
60692 var Time = asn.define('Time', function () {
60693 this.choice({
60694 utcTime: this.utctime(),
60695 generalTime: this.gentime()
60696 })
60697 })
60698
60699 var AttributeTypeValue = asn.define('AttributeTypeValue', function () {
60700 this.seq().obj(
60701 this.key('type').objid(),
60702 this.key('value').any()
60703 )
60704 })
60705
60706 var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {
60707 this.seq().obj(
60708 this.key('algorithm').objid(),
60709 this.key('parameters').optional()
60710 )
60711 })
60712
60713 var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {
60714 this.seq().obj(
60715 this.key('algorithm').use(AlgorithmIdentifier),
60716 this.key('subjectPublicKey').bitstr()
60717 )
60718 })
60719
60720 var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {
60721 this.setof(AttributeTypeValue)
60722 })
60723
60724 var RDNSequence = asn.define('RDNSequence', function () {
60725 this.seqof(RelativeDistinguishedName)
60726 })
60727
60728 var Name = asn.define('Name', function () {
60729 this.choice({
60730 rdnSequence: this.use(RDNSequence)
60731 })
60732 })
60733
60734 var Validity = asn.define('Validity', function () {
60735 this.seq().obj(
60736 this.key('notBefore').use(Time),
60737 this.key('notAfter').use(Time)
60738 )
60739 })
60740
60741 var Extension = asn.define('Extension', function () {
60742 this.seq().obj(
60743 this.key('extnID').objid(),
60744 this.key('critical').bool().def(false),
60745 this.key('extnValue').octstr()
60746 )
60747 })
60748
60749 var TBSCertificate = asn.define('TBSCertificate', function () {
60750 this.seq().obj(
60751 this.key('version').explicit(0).int(),
60752 this.key('serialNumber').int(),
60753 this.key('signature').use(AlgorithmIdentifier),
60754 this.key('issuer').use(Name),
60755 this.key('validity').use(Validity),
60756 this.key('subject').use(Name),
60757 this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo),
60758 this.key('issuerUniqueID').implicit(1).bitstr().optional(),
60759 this.key('subjectUniqueID').implicit(2).bitstr().optional(),
60760 this.key('extensions').explicit(3).seqof(Extension).optional()
60761 )
60762 })
60763
60764 var X509Certificate = asn.define('X509Certificate', function () {
60765 this.seq().obj(
60766 this.key('tbsCertificate').use(TBSCertificate),
60767 this.key('signatureAlgorithm').use(AlgorithmIdentifier),
60768 this.key('signatureValue').bitstr()
60769 )
60770 })
60771
60772 module.exports = X509Certificate
60773
60774 },{"asn1.js":1}],104:[function(require,module,exports){
60775 (function (Buffer){
60776 // adapted from https://github.com/apatil/pemstrip
60777 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
60778 var startRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n/m
60779 var fullRegex = /^-----BEGIN ((?:.* KEY)|CERTIFICATE)-----\n\r?([0-9A-z\n\r\+\/\=]+)\n\r?-----END \1-----$/m
60780 var evp = require('evp_bytestokey')
60781 var ciphers = require('browserify-aes')
60782 module.exports = function (okey, password) {
60783 var key = okey.toString()
60784 var match = key.match(findProc)
60785 var decrypted
60786 if (!match) {
60787 var match2 = key.match(fullRegex)
60788 decrypted = new Buffer(match2[2].replace(/\r?\n/g, ''), 'base64')
60789 } else {
60790 var suite = 'aes' + match[1]
60791 var iv = new Buffer(match[2], 'hex')
60792 var cipherText = new Buffer(match[3].replace(/\r?\n/g, ''), 'base64')
60793 var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key
60794 var out = []
60795 var cipher = ciphers.createDecipheriv(suite, cipherKey, iv)
60796 out.push(cipher.update(cipherText))
60797 out.push(cipher.final())
60798 decrypted = Buffer.concat(out)
60799 }
60800 var tag = key.match(startRegex)[1]
60801 return {
60802 tag: tag,
60803 data: decrypted
60804 }
60805 }
60806
60807 }).call(this,require("buffer").Buffer)
60808 },{"browserify-aes":22,"buffer":47,"evp_bytestokey":84}],105:[function(require,module,exports){
60809 (function (Buffer){
60810 var asn1 = require('./asn1')
60811 var aesid = require('./aesid.json')
60812 var fixProc = require('./fixProc')
60813 var ciphers = require('browserify-aes')
60814 var compat = require('pbkdf2')
60815 module.exports = parseKeys
60816
60817 function parseKeys (buffer) {
60818 var password
60819 if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) {
60820 password = buffer.passphrase
60821 buffer = buffer.key
60822 }
60823 if (typeof buffer === 'string') {
60824 buffer = new Buffer(buffer)
60825 }
60826
60827 var stripped = fixProc(buffer, password)
60828
60829 var type = stripped.tag
60830 var data = stripped.data
60831 var subtype, ndata
60832 switch (type) {
60833 case 'CERTIFICATE':
60834 ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo
60835 // falls through
60836 case 'PUBLIC KEY':
60837 if (!ndata) {
60838 ndata = asn1.PublicKey.decode(data, 'der')
60839 }
60840 subtype = ndata.algorithm.algorithm.join('.')
60841 switch (subtype) {
60842 case '1.2.840.113549.1.1.1':
60843 return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der')
60844 case '1.2.840.10045.2.1':
60845 ndata.subjectPrivateKey = ndata.subjectPublicKey
60846 return {
60847 type: 'ec',
60848 data: ndata
60849 }
60850 case '1.2.840.10040.4.1':
60851 ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der')
60852 return {
60853 type: 'dsa',
60854 data: ndata.algorithm.params
60855 }
60856 default: throw new Error('unknown key id ' + subtype)
60857 }
60858 throw new Error('unknown key type ' + type)
60859 case 'ENCRYPTED PRIVATE KEY':
60860 data = asn1.EncryptedPrivateKey.decode(data, 'der')
60861 data = decrypt(data, password)
60862 // falls through
60863 case 'PRIVATE KEY':
60864 ndata = asn1.PrivateKey.decode(data, 'der')
60865 subtype = ndata.algorithm.algorithm.join('.')
60866 switch (subtype) {
60867 case '1.2.840.113549.1.1.1':
60868 return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der')
60869 case '1.2.840.10045.2.1':
60870 return {
60871 curve: ndata.algorithm.curve,
60872 privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey
60873 }
60874 case '1.2.840.10040.4.1':
60875 ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der')
60876 return {
60877 type: 'dsa',
60878 params: ndata.algorithm.params
60879 }
60880 default: throw new Error('unknown key id ' + subtype)
60881 }
60882 throw new Error('unknown key type ' + type)
60883 case 'RSA PUBLIC KEY':
60884 return asn1.RSAPublicKey.decode(data, 'der')
60885 case 'RSA PRIVATE KEY':
60886 return asn1.RSAPrivateKey.decode(data, 'der')
60887 case 'DSA PRIVATE KEY':
60888 return {
60889 type: 'dsa',
60890 params: asn1.DSAPrivateKey.decode(data, 'der')
60891 }
60892 case 'EC PRIVATE KEY':
60893 data = asn1.ECPrivateKey.decode(data, 'der')
60894 return {
60895 curve: data.parameters.value,
60896 privateKey: data.privateKey
60897 }
60898 default: throw new Error('unknown key type ' + type)
60899 }
60900 }
60901 parseKeys.signature = asn1.signature
60902 function decrypt (data, password) {
60903 var salt = data.algorithm.decrypt.kde.kdeparams.salt
60904 var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10)
60905 var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')]
60906 var iv = data.algorithm.decrypt.cipher.iv
60907 var cipherText = data.subjectPrivateKey
60908 var keylen = parseInt(algo.split('-')[1], 10) / 8
60909 var key = compat.pbkdf2Sync(password, salt, iters, keylen)
60910 var cipher = ciphers.createDecipheriv(algo, key, iv)
60911 var out = []
60912 out.push(cipher.update(cipherText))
60913 out.push(cipher.final())
60914 return Buffer.concat(out)
60915 }
60916
60917 }).call(this,require("buffer").Buffer)
60918 },{"./aesid.json":101,"./asn1":102,"./fixProc":104,"browserify-aes":22,"buffer":47,"pbkdf2":106}],106:[function(require,module,exports){
60919
60920 exports.pbkdf2 = require('./lib/async')
60921
60922 exports.pbkdf2Sync = require('./lib/sync')
60923
60924 },{"./lib/async":107,"./lib/sync":110}],107:[function(require,module,exports){
60925 (function (process,global){
60926 var checkParameters = require('./precondition')
60927 var defaultEncoding = require('./default-encoding')
60928 var sync = require('./sync')
60929 var Buffer = require('safe-buffer').Buffer
60930
60931 var ZERO_BUF
60932 var subtle = global.crypto && global.crypto.subtle
60933 var toBrowser = {
60934 'sha': 'SHA-1',
60935 'sha-1': 'SHA-1',
60936 'sha1': 'SHA-1',
60937 'sha256': 'SHA-256',
60938 'sha-256': 'SHA-256',
60939 'sha384': 'SHA-384',
60940 'sha-384': 'SHA-384',
60941 'sha-512': 'SHA-512',
60942 'sha512': 'SHA-512'
60943 }
60944 var checks = []
60945 function checkNative (algo) {
60946 if (global.process && !global.process.browser) {
60947 return Promise.resolve(false)
60948 }
60949 if (!subtle || !subtle.importKey || !subtle.deriveBits) {
60950 return Promise.resolve(false)
60951 }
60952 if (checks[algo] !== undefined) {
60953 return checks[algo]
60954 }
60955 ZERO_BUF = ZERO_BUF || Buffer.alloc(8)
60956 var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
60957 .then(function () {
60958 return true
60959 }).catch(function () {
60960 return false
60961 })
60962 checks[algo] = prom
60963 return prom
60964 }
60965 function browserPbkdf2 (password, salt, iterations, length, algo) {
60966 return subtle.importKey(
60967 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits']
60968 ).then(function (key) {
60969 return subtle.deriveBits({
60970 name: 'PBKDF2',
60971 salt: salt,
60972 iterations: iterations,
60973 hash: {
60974 name: algo
60975 }
60976 }, key, length << 3)
60977 }).then(function (res) {
60978 return Buffer.from(res)
60979 })
60980 }
60981 function resolvePromise (promise, callback) {
60982 promise.then(function (out) {
60983 process.nextTick(function () {
60984 callback(null, out)
60985 })
60986 }, function (e) {
60987 process.nextTick(function () {
60988 callback(e)
60989 })
60990 })
60991 }
60992 module.exports = function (password, salt, iterations, keylen, digest, callback) {
60993 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
60994 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
60995
60996 checkParameters(iterations, keylen)
60997 if (typeof digest === 'function') {
60998 callback = digest
60999 digest = undefined
61000 }
61001 if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2')
61002
61003 digest = digest || 'sha1'
61004 var algo = toBrowser[digest.toLowerCase()]
61005 if (!algo || typeof global.Promise !== 'function') {
61006 return process.nextTick(function () {
61007 var out
61008 try {
61009 out = sync(password, salt, iterations, keylen, digest)
61010 } catch (e) {
61011 return callback(e)
61012 }
61013 callback(null, out)
61014 })
61015 }
61016 resolvePromise(checkNative(algo).then(function (resp) {
61017 if (resp) {
61018 return browserPbkdf2(password, salt, iterations, keylen, algo)
61019 } else {
61020 return sync(password, salt, iterations, keylen, digest)
61021 }
61022 }), callback)
61023 }
61024
61025 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
61026 },{"./default-encoding":108,"./precondition":109,"./sync":110,"_process":112,"safe-buffer":134}],108:[function(require,module,exports){
61027 (function (process){
61028 var defaultEncoding
61029 /* istanbul ignore next */
61030 if (process.browser) {
61031 defaultEncoding = 'utf-8'
61032 } else {
61033 var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10)
61034
61035 defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary'
61036 }
61037 module.exports = defaultEncoding
61038
61039 }).call(this,require('_process'))
61040 },{"_process":112}],109:[function(require,module,exports){
61041 var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs
61042 module.exports = function (iterations, keylen) {
61043 if (typeof iterations !== 'number') {
61044 throw new TypeError('Iterations not a number')
61045 }
61046
61047 if (iterations < 0) {
61048 throw new TypeError('Bad iterations')
61049 }
61050
61051 if (typeof keylen !== 'number') {
61052 throw new TypeError('Key length not a number')
61053 }
61054
61055 if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
61056 throw new TypeError('Bad key length')
61057 }
61058 }
61059
61060 },{}],110:[function(require,module,exports){
61061 var md5 = require('create-hash/md5')
61062 var rmd160 = require('ripemd160')
61063 var sha = require('sha.js')
61064
61065 var checkParameters = require('./precondition')
61066 var defaultEncoding = require('./default-encoding')
61067 var Buffer = require('safe-buffer').Buffer
61068 var ZEROS = Buffer.alloc(128)
61069 var sizes = {
61070 md5: 16,
61071 sha1: 20,
61072 sha224: 28,
61073 sha256: 32,
61074 sha384: 48,
61075 sha512: 64,
61076 rmd160: 20,
61077 ripemd160: 20
61078 }
61079 function Hmac (alg, key, saltLen) {
61080 var hash = getDigest(alg)
61081 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
61082
61083 if (key.length > blocksize) {
61084 key = hash(key)
61085 } else if (key.length < blocksize) {
61086 key = Buffer.concat([key, ZEROS], blocksize)
61087 }
61088
61089 var ipad = Buffer.allocUnsafe(blocksize + sizes[alg])
61090 var opad = Buffer.allocUnsafe(blocksize + sizes[alg])
61091 for (var i = 0; i < blocksize; i++) {
61092 ipad[i] = key[i] ^ 0x36
61093 opad[i] = key[i] ^ 0x5C
61094 }
61095
61096 var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4)
61097 ipad.copy(ipad1, 0, 0, blocksize)
61098 this.ipad1 = ipad1
61099 this.ipad2 = ipad
61100 this.opad = opad
61101 this.alg = alg
61102 this.blocksize = blocksize
61103 this.hash = hash
61104 this.size = sizes[alg]
61105 }
61106
61107 Hmac.prototype.run = function (data, ipad) {
61108 data.copy(ipad, this.blocksize)
61109 var h = this.hash(ipad)
61110 h.copy(this.opad, this.blocksize)
61111 return this.hash(this.opad)
61112 }
61113
61114 function getDigest (alg) {
61115 if (alg === 'rmd160' || alg === 'ripemd160') return rmd160
61116 if (alg === 'md5') return md5
61117 return shaFunc
61118
61119 function shaFunc (data) {
61120 return sha(alg).update(data).digest()
61121 }
61122 }
61123
61124 module.exports = function (password, salt, iterations, keylen, digest) {
61125 if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding)
61126 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding)
61127
61128 checkParameters(iterations, keylen)
61129
61130 digest = digest || 'sha1'
61131
61132 var hmac = new Hmac(digest, password, salt.length)
61133
61134 var DK = Buffer.allocUnsafe(keylen)
61135 var block1 = Buffer.allocUnsafe(salt.length + 4)
61136 salt.copy(block1, 0, 0, salt.length)
61137
61138 var U, j, destPos, len
61139
61140 var hLen = hmac.size
61141 var T = Buffer.allocUnsafe(hLen)
61142 var l = Math.ceil(keylen / hLen)
61143 var r = keylen - (l - 1) * hLen
61144
61145 for (var i = 1; i <= l; i++) {
61146 block1.writeUInt32BE(i, salt.length)
61147 U = hmac.run(block1, hmac.ipad1)
61148
61149 U.copy(T, 0, 0, hLen)
61150
61151 for (j = 1; j < iterations; j++) {
61152 U = hmac.run(U, hmac.ipad2)
61153 for (var k = 0; k < hLen; k++) T[k] ^= U[k]
61154 }
61155
61156 destPos = (i - 1) * hLen
61157 len = (i === l ? r : hLen)
61158 T.copy(DK, destPos, 0, len)
61159 }
61160
61161 return DK
61162 }
61163
61164 },{"./default-encoding":108,"./precondition":109,"create-hash/md5":53,"ripemd160":133,"safe-buffer":134,"sha.js":136}],111:[function(require,module,exports){
61165 (function (process){
61166 'use strict';
61167
61168 if (!process.version ||
61169 process.version.indexOf('v0.') === 0 ||
61170 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
61171 module.exports = nextTick;
61172 } else {
61173 module.exports = process.nextTick;
61174 }
61175
61176 function nextTick(fn, arg1, arg2, arg3) {
61177 if (typeof fn !== 'function') {
61178 throw new TypeError('"callback" argument must be a function');
61179 }
61180 var len = arguments.length;
61181 var args, i;
61182 switch (len) {
61183 case 0:
61184 case 1:
61185 return process.nextTick(fn);
61186 case 2:
61187 return process.nextTick(function afterTickOne() {
61188 fn.call(null, arg1);
61189 });
61190 case 3:
61191 return process.nextTick(function afterTickTwo() {
61192 fn.call(null, arg1, arg2);
61193 });
61194 case 4:
61195 return process.nextTick(function afterTickThree() {
61196 fn.call(null, arg1, arg2, arg3);
61197 });
61198 default:
61199 args = new Array(len - 1);
61200 i = 0;
61201 while (i < args.length) {
61202 args[i++] = arguments[i];
61203 }
61204 return process.nextTick(function afterTick() {
61205 fn.apply(null, args);
61206 });
61207 }
61208 }
61209
61210 }).call(this,require('_process'))
61211 },{"_process":112}],112:[function(require,module,exports){
61212 // shim for using process in browser
61213 var process = module.exports = {};
61214
61215 // cached from whatever global is present so that test runners that stub it
61216 // don't break things. But we need to wrap it in a try catch in case it is
61217 // wrapped in strict mode code which doesn't define any globals. It's inside a
61218 // function because try/catches deoptimize in certain engines.
61219
61220 var cachedSetTimeout;
61221 var cachedClearTimeout;
61222
61223 function defaultSetTimout() {
61224 throw new Error('setTimeout has not been defined');
61225 }
61226 function defaultClearTimeout () {
61227 throw new Error('clearTimeout has not been defined');
61228 }
61229 (function () {
61230 try {
61231 if (typeof setTimeout === 'function') {
61232 cachedSetTimeout = setTimeout;
61233 } else {
61234 cachedSetTimeout = defaultSetTimout;
61235 }
61236 } catch (e) {
61237 cachedSetTimeout = defaultSetTimout;
61238 }
61239 try {
61240 if (typeof clearTimeout === 'function') {
61241 cachedClearTimeout = clearTimeout;
61242 } else {
61243 cachedClearTimeout = defaultClearTimeout;
61244 }
61245 } catch (e) {
61246 cachedClearTimeout = defaultClearTimeout;
61247 }
61248 } ())
61249 function runTimeout(fun) {
61250 if (cachedSetTimeout === setTimeout) {
61251 //normal enviroments in sane situations
61252 return setTimeout(fun, 0);
61253 }
61254 // if setTimeout wasn't available but was latter defined
61255 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
61256 cachedSetTimeout = setTimeout;
61257 return setTimeout(fun, 0);
61258 }
61259 try {
61260 // when when somebody has screwed with setTimeout but no I.E. maddness
61261 return cachedSetTimeout(fun, 0);
61262 } catch(e){
61263 try {
61264 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61265 return cachedSetTimeout.call(null, fun, 0);
61266 } catch(e){
61267 // 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
61268 return cachedSetTimeout.call(this, fun, 0);
61269 }
61270 }
61271
61272
61273 }
61274 function runClearTimeout(marker) {
61275 if (cachedClearTimeout === clearTimeout) {
61276 //normal enviroments in sane situations
61277 return clearTimeout(marker);
61278 }
61279 // if clearTimeout wasn't available but was latter defined
61280 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
61281 cachedClearTimeout = clearTimeout;
61282 return clearTimeout(marker);
61283 }
61284 try {
61285 // when when somebody has screwed with setTimeout but no I.E. maddness
61286 return cachedClearTimeout(marker);
61287 } catch (e){
61288 try {
61289 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
61290 return cachedClearTimeout.call(null, marker);
61291 } catch (e){
61292 // 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.
61293 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
61294 return cachedClearTimeout.call(this, marker);
61295 }
61296 }
61297
61298
61299
61300 }
61301 var queue = [];
61302 var draining = false;
61303 var currentQueue;
61304 var queueIndex = -1;
61305
61306 function cleanUpNextTick() {
61307 if (!draining || !currentQueue) {
61308 return;
61309 }
61310 draining = false;
61311 if (currentQueue.length) {
61312 queue = currentQueue.concat(queue);
61313 } else {
61314 queueIndex = -1;
61315 }
61316 if (queue.length) {
61317 drainQueue();
61318 }
61319 }
61320
61321 function drainQueue() {
61322 if (draining) {
61323 return;
61324 }
61325 var timeout = runTimeout(cleanUpNextTick);
61326 draining = true;
61327
61328 var len = queue.length;
61329 while(len) {
61330 currentQueue = queue;
61331 queue = [];
61332 while (++queueIndex < len) {
61333 if (currentQueue) {
61334 currentQueue[queueIndex].run();
61335 }
61336 }
61337 queueIndex = -1;
61338 len = queue.length;
61339 }
61340 currentQueue = null;
61341 draining = false;
61342 runClearTimeout(timeout);
61343 }
61344
61345 process.nextTick = function (fun) {
61346 var args = new Array(arguments.length - 1);
61347 if (arguments.length > 1) {
61348 for (var i = 1; i < arguments.length; i++) {
61349 args[i - 1] = arguments[i];
61350 }
61351 }
61352 queue.push(new Item(fun, args));
61353 if (queue.length === 1 && !draining) {
61354 runTimeout(drainQueue);
61355 }
61356 };
61357
61358 // v8 likes predictible objects
61359 function Item(fun, array) {
61360 this.fun = fun;
61361 this.array = array;
61362 }
61363 Item.prototype.run = function () {
61364 this.fun.apply(null, this.array);
61365 };
61366 process.title = 'browser';
61367 process.browser = true;
61368 process.env = {};
61369 process.argv = [];
61370 process.version = ''; // empty string to avoid regexp issues
61371 process.versions = {};
61372
61373 function noop() {}
61374
61375 process.on = noop;
61376 process.addListener = noop;
61377 process.once = noop;
61378 process.off = noop;
61379 process.removeListener = noop;
61380 process.removeAllListeners = noop;
61381 process.emit = noop;
61382 process.prependListener = noop;
61383 process.prependOnceListener = noop;
61384
61385 process.listeners = function (name) { return [] }
61386
61387 process.binding = function (name) {
61388 throw new Error('process.binding is not supported');
61389 };
61390
61391 process.cwd = function () { return '/' };
61392 process.chdir = function (dir) {
61393 throw new Error('process.chdir is not supported');
61394 };
61395 process.umask = function() { return 0; };
61396
61397 },{}],113:[function(require,module,exports){
61398 exports.publicEncrypt = require('./publicEncrypt');
61399 exports.privateDecrypt = require('./privateDecrypt');
61400
61401 exports.privateEncrypt = function privateEncrypt(key, buf) {
61402 return exports.publicEncrypt(key, buf, true);
61403 };
61404
61405 exports.publicDecrypt = function publicDecrypt(key, buf) {
61406 return exports.privateDecrypt(key, buf, true);
61407 };
61408 },{"./privateDecrypt":115,"./publicEncrypt":116}],114:[function(require,module,exports){
61409 (function (Buffer){
61410 var createHash = require('create-hash');
61411 module.exports = function (seed, len) {
61412 var t = new Buffer('');
61413 var i = 0, c;
61414 while (t.length < len) {
61415 c = i2ops(i++);
61416 t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);
61417 }
61418 return t.slice(0, len);
61419 };
61420
61421 function i2ops(c) {
61422 var out = new Buffer(4);
61423 out.writeUInt32BE(c,0);
61424 return out;
61425 }
61426 }).call(this,require("buffer").Buffer)
61427 },{"buffer":47,"create-hash":51}],115:[function(require,module,exports){
61428 (function (Buffer){
61429 var parseKeys = require('parse-asn1');
61430 var mgf = require('./mgf');
61431 var xor = require('./xor');
61432 var bn = require('bn.js');
61433 var crt = require('browserify-rsa');
61434 var createHash = require('create-hash');
61435 var withPublic = require('./withPublic');
61436 module.exports = function privateDecrypt(private_key, enc, reverse) {
61437 var padding;
61438 if (private_key.padding) {
61439 padding = private_key.padding;
61440 } else if (reverse) {
61441 padding = 1;
61442 } else {
61443 padding = 4;
61444 }
61445
61446 var key = parseKeys(private_key);
61447 var k = key.modulus.byteLength();
61448 if (enc.length > k || new bn(enc).cmp(key.modulus) >= 0) {
61449 throw new Error('decryption error');
61450 }
61451 var msg;
61452 if (reverse) {
61453 msg = withPublic(new bn(enc), key);
61454 } else {
61455 msg = crt(enc, key);
61456 }
61457 var zBuffer = new Buffer(k - msg.length);
61458 zBuffer.fill(0);
61459 msg = Buffer.concat([zBuffer, msg], k);
61460 if (padding === 4) {
61461 return oaep(key, msg);
61462 } else if (padding === 1) {
61463 return pkcs1(key, msg, reverse);
61464 } else if (padding === 3) {
61465 return msg;
61466 } else {
61467 throw new Error('unknown padding');
61468 }
61469 };
61470
61471 function oaep(key, msg){
61472 var n = key.modulus;
61473 var k = key.modulus.byteLength();
61474 var mLen = msg.length;
61475 var iHash = createHash('sha1').update(new Buffer('')).digest();
61476 var hLen = iHash.length;
61477 var hLen2 = 2 * hLen;
61478 if (msg[0] !== 0) {
61479 throw new Error('decryption error');
61480 }
61481 var maskedSeed = msg.slice(1, hLen + 1);
61482 var maskedDb = msg.slice(hLen + 1);
61483 var seed = xor(maskedSeed, mgf(maskedDb, hLen));
61484 var db = xor(maskedDb, mgf(seed, k - hLen - 1));
61485 if (compare(iHash, db.slice(0, hLen))) {
61486 throw new Error('decryption error');
61487 }
61488 var i = hLen;
61489 while (db[i] === 0) {
61490 i++;
61491 }
61492 if (db[i++] !== 1) {
61493 throw new Error('decryption error');
61494 }
61495 return db.slice(i);
61496 }
61497
61498 function pkcs1(key, msg, reverse){
61499 var p1 = msg.slice(0, 2);
61500 var i = 2;
61501 var status = 0;
61502 while (msg[i++] !== 0) {
61503 if (i >= msg.length) {
61504 status++;
61505 break;
61506 }
61507 }
61508 var ps = msg.slice(2, i - 1);
61509 var p2 = msg.slice(i - 1, i);
61510
61511 if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)){
61512 status++;
61513 }
61514 if (ps.length < 8) {
61515 status++;
61516 }
61517 if (status) {
61518 throw new Error('decryption error');
61519 }
61520 return msg.slice(i);
61521 }
61522 function compare(a, b){
61523 a = new Buffer(a);
61524 b = new Buffer(b);
61525 var dif = 0;
61526 var len = a.length;
61527 if (a.length !== b.length) {
61528 dif++;
61529 len = Math.min(a.length, b.length);
61530 }
61531 var i = -1;
61532 while (++i < len) {
61533 dif += (a[i] ^ b[i]);
61534 }
61535 return dif;
61536 }
61537 }).call(this,require("buffer").Buffer)
61538 },{"./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){
61539 (function (Buffer){
61540 var parseKeys = require('parse-asn1');
61541 var randomBytes = require('randombytes');
61542 var createHash = require('create-hash');
61543 var mgf = require('./mgf');
61544 var xor = require('./xor');
61545 var bn = require('bn.js');
61546 var withPublic = require('./withPublic');
61547 var crt = require('browserify-rsa');
61548
61549 var constants = {
61550 RSA_PKCS1_OAEP_PADDING: 4,
61551 RSA_PKCS1_PADDIN: 1,
61552 RSA_NO_PADDING: 3
61553 };
61554
61555 module.exports = function publicEncrypt(public_key, msg, reverse) {
61556 var padding;
61557 if (public_key.padding) {
61558 padding = public_key.padding;
61559 } else if (reverse) {
61560 padding = 1;
61561 } else {
61562 padding = 4;
61563 }
61564 var key = parseKeys(public_key);
61565 var paddedMsg;
61566 if (padding === 4) {
61567 paddedMsg = oaep(key, msg);
61568 } else if (padding === 1) {
61569 paddedMsg = pkcs1(key, msg, reverse);
61570 } else if (padding === 3) {
61571 paddedMsg = new bn(msg);
61572 if (paddedMsg.cmp(key.modulus) >= 0) {
61573 throw new Error('data too long for modulus');
61574 }
61575 } else {
61576 throw new Error('unknown padding');
61577 }
61578 if (reverse) {
61579 return crt(paddedMsg, key);
61580 } else {
61581 return withPublic(paddedMsg, key);
61582 }
61583 };
61584
61585 function oaep(key, msg){
61586 var k = key.modulus.byteLength();
61587 var mLen = msg.length;
61588 var iHash = createHash('sha1').update(new Buffer('')).digest();
61589 var hLen = iHash.length;
61590 var hLen2 = 2 * hLen;
61591 if (mLen > k - hLen2 - 2) {
61592 throw new Error('message too long');
61593 }
61594 var ps = new Buffer(k - mLen - hLen2 - 2);
61595 ps.fill(0);
61596 var dblen = k - hLen - 1;
61597 var seed = randomBytes(hLen);
61598 var maskedDb = xor(Buffer.concat([iHash, ps, new Buffer([1]), msg], dblen), mgf(seed, dblen));
61599 var maskedSeed = xor(seed, mgf(maskedDb, hLen));
61600 return new bn(Buffer.concat([new Buffer([0]), maskedSeed, maskedDb], k));
61601 }
61602 function pkcs1(key, msg, reverse){
61603 var mLen = msg.length;
61604 var k = key.modulus.byteLength();
61605 if (mLen > k - 11) {
61606 throw new Error('message too long');
61607 }
61608 var ps;
61609 if (reverse) {
61610 ps = new Buffer(k - mLen - 3);
61611 ps.fill(0xff);
61612 } else {
61613 ps = nonZero(k - mLen - 3);
61614 }
61615 return new bn(Buffer.concat([new Buffer([0, reverse?1:2]), ps, new Buffer([0]), msg], k));
61616 }
61617 function nonZero(len, crypto) {
61618 var out = new Buffer(len);
61619 var i = 0;
61620 var cache = randomBytes(len*2);
61621 var cur = 0;
61622 var num;
61623 while (i < len) {
61624 if (cur === cache.length) {
61625 cache = randomBytes(len*2);
61626 cur = 0;
61627 }
61628 num = cache[cur++];
61629 if (num) {
61630 out[i++] = num;
61631 }
61632 }
61633 return out;
61634 }
61635 }).call(this,require("buffer").Buffer)
61636 },{"./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){
61637 (function (Buffer){
61638 var bn = require('bn.js');
61639 function withPublic(paddedMsg, key) {
61640 return new Buffer(paddedMsg
61641 .toRed(bn.mont(key.modulus))
61642 .redPow(new bn(key.publicExponent))
61643 .fromRed()
61644 .toArray());
61645 }
61646
61647 module.exports = withPublic;
61648 }).call(this,require("buffer").Buffer)
61649 },{"bn.js":17,"buffer":47}],118:[function(require,module,exports){
61650 module.exports = function xor(a, b) {
61651 var len = a.length;
61652 var i = -1;
61653 while (++i < len) {
61654 a[i] ^= b[i];
61655 }
61656 return a
61657 };
61658 },{}],119:[function(require,module,exports){
61659 (function (process,global,Buffer){
61660 'use strict'
61661
61662 function oldBrowser () {
61663 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
61664 }
61665
61666 var crypto = global.crypto || global.msCrypto
61667
61668 if (crypto && crypto.getRandomValues) {
61669 module.exports = randomBytes
61670 } else {
61671 module.exports = oldBrowser
61672 }
61673
61674 function randomBytes (size, cb) {
61675 // phantomjs needs to throw
61676 if (size > 65536) throw new Error('requested too many random bytes')
61677 // in case browserify isn't using the Uint8Array version
61678 var rawBytes = new global.Uint8Array(size)
61679
61680 // This will not work in older browsers.
61681 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
61682 if (size > 0) { // getRandomValues fails on IE if size == 0
61683 crypto.getRandomValues(rawBytes)
61684 }
61685 // phantomjs doesn't like a buffer being passed here
61686 var bytes = new Buffer(rawBytes.buffer)
61687
61688 if (typeof cb === 'function') {
61689 return process.nextTick(function () {
61690 cb(null, bytes)
61691 })
61692 }
61693
61694 return bytes
61695 }
61696
61697 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
61698 },{"_process":112,"buffer":47}],120:[function(require,module,exports){
61699 module.exports = require('./lib/_stream_duplex.js');
61700
61701 },{"./lib/_stream_duplex.js":121}],121:[function(require,module,exports){
61702 // a duplex stream is just a stream that is both readable and writable.
61703 // Since JS doesn't have multiple prototypal inheritance, this class
61704 // prototypally inherits from Readable, and then parasitically from
61705 // Writable.
61706
61707 'use strict';
61708
61709 /*<replacement>*/
61710
61711 var objectKeys = Object.keys || function (obj) {
61712 var keys = [];
61713 for (var key in obj) {
61714 keys.push(key);
61715 }return keys;
61716 };
61717 /*</replacement>*/
61718
61719 module.exports = Duplex;
61720
61721 /*<replacement>*/
61722 var processNextTick = require('process-nextick-args');
61723 /*</replacement>*/
61724
61725 /*<replacement>*/
61726 var util = require('core-util-is');
61727 util.inherits = require('inherits');
61728 /*</replacement>*/
61729
61730 var Readable = require('./_stream_readable');
61731 var Writable = require('./_stream_writable');
61732
61733 util.inherits(Duplex, Readable);
61734
61735 var keys = objectKeys(Writable.prototype);
61736 for (var v = 0; v < keys.length; v++) {
61737 var method = keys[v];
61738 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
61739 }
61740
61741 function Duplex(options) {
61742 if (!(this instanceof Duplex)) return new Duplex(options);
61743
61744 Readable.call(this, options);
61745 Writable.call(this, options);
61746
61747 if (options && options.readable === false) this.readable = false;
61748
61749 if (options && options.writable === false) this.writable = false;
61750
61751 this.allowHalfOpen = true;
61752 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
61753
61754 this.once('end', onend);
61755 }
61756
61757 // the no-half-open enforcer
61758 function onend() {
61759 // if we allow half-open state, or if the writable side ended,
61760 // then we're ok.
61761 if (this.allowHalfOpen || this._writableState.ended) return;
61762
61763 // no more data can be written.
61764 // But allow more writes to happen in this tick.
61765 processNextTick(onEndNT, this);
61766 }
61767
61768 function onEndNT(self) {
61769 self.end();
61770 }
61771
61772 function forEach(xs, f) {
61773 for (var i = 0, l = xs.length; i < l; i++) {
61774 f(xs[i], i);
61775 }
61776 }
61777 },{"./_stream_readable":123,"./_stream_writable":125,"core-util-is":49,"inherits":95,"process-nextick-args":111}],122:[function(require,module,exports){
61778 // a passthrough stream.
61779 // basically just the most minimal sort of Transform stream.
61780 // Every written chunk gets output as-is.
61781
61782 'use strict';
61783
61784 module.exports = PassThrough;
61785
61786 var Transform = require('./_stream_transform');
61787
61788 /*<replacement>*/
61789 var util = require('core-util-is');
61790 util.inherits = require('inherits');
61791 /*</replacement>*/
61792
61793 util.inherits(PassThrough, Transform);
61794
61795 function PassThrough(options) {
61796 if (!(this instanceof PassThrough)) return new PassThrough(options);
61797
61798 Transform.call(this, options);
61799 }
61800
61801 PassThrough.prototype._transform = function (chunk, encoding, cb) {
61802 cb(null, chunk);
61803 };
61804 },{"./_stream_transform":124,"core-util-is":49,"inherits":95}],123:[function(require,module,exports){
61805 (function (process){
61806 'use strict';
61807
61808 module.exports = Readable;
61809
61810 /*<replacement>*/
61811 var processNextTick = require('process-nextick-args');
61812 /*</replacement>*/
61813
61814 /*<replacement>*/
61815 var isArray = require('isarray');
61816 /*</replacement>*/
61817
61818 /*<replacement>*/
61819 var Duplex;
61820 /*</replacement>*/
61821
61822 Readable.ReadableState = ReadableState;
61823
61824 /*<replacement>*/
61825 var EE = require('events').EventEmitter;
61826
61827 var EElistenerCount = function (emitter, type) {
61828 return emitter.listeners(type).length;
61829 };
61830 /*</replacement>*/
61831
61832 /*<replacement>*/
61833 var Stream = require('./internal/streams/stream');
61834 /*</replacement>*/
61835
61836 var Buffer = require('buffer').Buffer;
61837 /*<replacement>*/
61838 var bufferShim = require('buffer-shims');
61839 /*</replacement>*/
61840
61841 /*<replacement>*/
61842 var util = require('core-util-is');
61843 util.inherits = require('inherits');
61844 /*</replacement>*/
61845
61846 /*<replacement>*/
61847 var debugUtil = require('util');
61848 var debug = void 0;
61849 if (debugUtil && debugUtil.debuglog) {
61850 debug = debugUtil.debuglog('stream');
61851 } else {
61852 debug = function () {};
61853 }
61854 /*</replacement>*/
61855
61856 var BufferList = require('./internal/streams/BufferList');
61857 var StringDecoder;
61858
61859 util.inherits(Readable, Stream);
61860
61861 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
61862
61863 function prependListener(emitter, event, fn) {
61864 // Sadly this is not cacheable as some libraries bundle their own
61865 // event emitter implementation with them.
61866 if (typeof emitter.prependListener === 'function') {
61867 return emitter.prependListener(event, fn);
61868 } else {
61869 // This is a hack to make sure that our error handler is attached before any
61870 // userland ones. NEVER DO THIS. This is here only because this code needs
61871 // to continue to work with older versions of Node.js that do not include
61872 // the prependListener() method. The goal is to eventually remove this hack.
61873 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]];
61874 }
61875 }
61876
61877 function ReadableState(options, stream) {
61878 Duplex = Duplex || require('./_stream_duplex');
61879
61880 options = options || {};
61881
61882 // object stream flag. Used to make read(n) ignore n and to
61883 // make all the buffer merging and length checks go away
61884 this.objectMode = !!options.objectMode;
61885
61886 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
61887
61888 // the point at which it stops calling _read() to fill the buffer
61889 // Note: 0 is a valid value, means "don't call _read preemptively ever"
61890 var hwm = options.highWaterMark;
61891 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
61892 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
61893
61894 // cast to ints.
61895 this.highWaterMark = ~~this.highWaterMark;
61896
61897 // A linked list is used to store data chunks instead of an array because the
61898 // linked list can remove elements from the beginning faster than
61899 // array.shift()
61900 this.buffer = new BufferList();
61901 this.length = 0;
61902 this.pipes = null;
61903 this.pipesCount = 0;
61904 this.flowing = null;
61905 this.ended = false;
61906 this.endEmitted = false;
61907 this.reading = false;
61908
61909 // a flag to be able to tell if the onwrite cb is called immediately,
61910 // or on a later tick. We set this to true at first, because any
61911 // actions that shouldn't happen until "later" should generally also
61912 // not happen before the first write call.
61913 this.sync = true;
61914
61915 // whenever we return null, then we set a flag to say
61916 // that we're awaiting a 'readable' event emission.
61917 this.needReadable = false;
61918 this.emittedReadable = false;
61919 this.readableListening = false;
61920 this.resumeScheduled = false;
61921
61922 // Crypto is kind of old and crusty. Historically, its default string
61923 // encoding is 'binary' so we have to make this configurable.
61924 // Everything else in the universe uses 'utf8', though.
61925 this.defaultEncoding = options.defaultEncoding || 'utf8';
61926
61927 // when piping, we only care about 'readable' events that happen
61928 // after read()ing all the bytes and not getting any pushback.
61929 this.ranOut = false;
61930
61931 // the number of writers that are awaiting a drain event in .pipe()s
61932 this.awaitDrain = 0;
61933
61934 // if true, a maybeReadMore has been scheduled
61935 this.readingMore = false;
61936
61937 this.decoder = null;
61938 this.encoding = null;
61939 if (options.encoding) {
61940 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
61941 this.decoder = new StringDecoder(options.encoding);
61942 this.encoding = options.encoding;
61943 }
61944 }
61945
61946 function Readable(options) {
61947 Duplex = Duplex || require('./_stream_duplex');
61948
61949 if (!(this instanceof Readable)) return new Readable(options);
61950
61951 this._readableState = new ReadableState(options, this);
61952
61953 // legacy
61954 this.readable = true;
61955
61956 if (options && typeof options.read === 'function') this._read = options.read;
61957
61958 Stream.call(this);
61959 }
61960
61961 // Manually shove something into the read() buffer.
61962 // This returns true if the highWaterMark has not been hit yet,
61963 // similar to how Writable.write() returns true if you should
61964 // write() some more.
61965 Readable.prototype.push = function (chunk, encoding) {
61966 var state = this._readableState;
61967
61968 if (!state.objectMode && typeof chunk === 'string') {
61969 encoding = encoding || state.defaultEncoding;
61970 if (encoding !== state.encoding) {
61971 chunk = bufferShim.from(chunk, encoding);
61972 encoding = '';
61973 }
61974 }
61975
61976 return readableAddChunk(this, state, chunk, encoding, false);
61977 };
61978
61979 // Unshift should *always* be something directly out of read()
61980 Readable.prototype.unshift = function (chunk) {
61981 var state = this._readableState;
61982 return readableAddChunk(this, state, chunk, '', true);
61983 };
61984
61985 Readable.prototype.isPaused = function () {
61986 return this._readableState.flowing === false;
61987 };
61988
61989 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
61990 var er = chunkInvalid(state, chunk);
61991 if (er) {
61992 stream.emit('error', er);
61993 } else if (chunk === null) {
61994 state.reading = false;
61995 onEofChunk(stream, state);
61996 } else if (state.objectMode || chunk && chunk.length > 0) {
61997 if (state.ended && !addToFront) {
61998 var e = new Error('stream.push() after EOF');
61999 stream.emit('error', e);
62000 } else if (state.endEmitted && addToFront) {
62001 var _e = new Error('stream.unshift() after end event');
62002 stream.emit('error', _e);
62003 } else {
62004 var skipAdd;
62005 if (state.decoder && !addToFront && !encoding) {
62006 chunk = state.decoder.write(chunk);
62007 skipAdd = !state.objectMode && chunk.length === 0;
62008 }
62009
62010 if (!addToFront) state.reading = false;
62011
62012 // Don't add to the buffer if we've decoded to an empty string chunk and
62013 // we're not in object mode
62014 if (!skipAdd) {
62015 // if we want the data now, just emit it.
62016 if (state.flowing && state.length === 0 && !state.sync) {
62017 stream.emit('data', chunk);
62018 stream.read(0);
62019 } else {
62020 // update the buffer info.
62021 state.length += state.objectMode ? 1 : chunk.length;
62022 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
62023
62024 if (state.needReadable) emitReadable(stream);
62025 }
62026 }
62027
62028 maybeReadMore(stream, state);
62029 }
62030 } else if (!addToFront) {
62031 state.reading = false;
62032 }
62033
62034 return needMoreData(state);
62035 }
62036
62037 // if it's past the high water mark, we can push in some more.
62038 // Also, if we have no data yet, we can stand some
62039 // more bytes. This is to work around cases where hwm=0,
62040 // such as the repl. Also, if the push() triggered a
62041 // readable event, and the user called read(largeNumber) such that
62042 // needReadable was set, then we ought to push more, so that another
62043 // 'readable' event will be triggered.
62044 function needMoreData(state) {
62045 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
62046 }
62047
62048 // backwards compatibility.
62049 Readable.prototype.setEncoding = function (enc) {
62050 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
62051 this._readableState.decoder = new StringDecoder(enc);
62052 this._readableState.encoding = enc;
62053 return this;
62054 };
62055
62056 // Don't raise the hwm > 8MB
62057 var MAX_HWM = 0x800000;
62058 function computeNewHighWaterMark(n) {
62059 if (n >= MAX_HWM) {
62060 n = MAX_HWM;
62061 } else {
62062 // Get the next highest power of 2 to prevent increasing hwm excessively in
62063 // tiny amounts
62064 n--;
62065 n |= n >>> 1;
62066 n |= n >>> 2;
62067 n |= n >>> 4;
62068 n |= n >>> 8;
62069 n |= n >>> 16;
62070 n++;
62071 }
62072 return n;
62073 }
62074
62075 // This function is designed to be inlinable, so please take care when making
62076 // changes to the function body.
62077 function howMuchToRead(n, state) {
62078 if (n <= 0 || state.length === 0 && state.ended) return 0;
62079 if (state.objectMode) return 1;
62080 if (n !== n) {
62081 // Only flow one buffer at a time
62082 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
62083 }
62084 // If we're asking for more than the current hwm, then raise the hwm.
62085 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
62086 if (n <= state.length) return n;
62087 // Don't have enough
62088 if (!state.ended) {
62089 state.needReadable = true;
62090 return 0;
62091 }
62092 return state.length;
62093 }
62094
62095 // you can override either this method, or the async _read(n) below.
62096 Readable.prototype.read = function (n) {
62097 debug('read', n);
62098 n = parseInt(n, 10);
62099 var state = this._readableState;
62100 var nOrig = n;
62101
62102 if (n !== 0) state.emittedReadable = false;
62103
62104 // if we're doing read(0) to trigger a readable event, but we
62105 // already have a bunch of data in the buffer, then just trigger
62106 // the 'readable' event and move on.
62107 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
62108 debug('read: emitReadable', state.length, state.ended);
62109 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
62110 return null;
62111 }
62112
62113 n = howMuchToRead(n, state);
62114
62115 // if we've ended, and we're now clear, then finish it up.
62116 if (n === 0 && state.ended) {
62117 if (state.length === 0) endReadable(this);
62118 return null;
62119 }
62120
62121 // All the actual chunk generation logic needs to be
62122 // *below* the call to _read. The reason is that in certain
62123 // synthetic stream cases, such as passthrough streams, _read
62124 // may be a completely synchronous operation which may change
62125 // the state of the read buffer, providing enough data when
62126 // before there was *not* enough.
62127 //
62128 // So, the steps are:
62129 // 1. Figure out what the state of things will be after we do
62130 // a read from the buffer.
62131 //
62132 // 2. If that resulting state will trigger a _read, then call _read.
62133 // Note that this may be asynchronous, or synchronous. Yes, it is
62134 // deeply ugly to write APIs this way, but that still doesn't mean
62135 // that the Readable class should behave improperly, as streams are
62136 // designed to be sync/async agnostic.
62137 // Take note if the _read call is sync or async (ie, if the read call
62138 // has returned yet), so that we know whether or not it's safe to emit
62139 // 'readable' etc.
62140 //
62141 // 3. Actually pull the requested chunks out of the buffer and return.
62142
62143 // if we need a readable event, then we need to do some reading.
62144 var doRead = state.needReadable;
62145 debug('need readable', doRead);
62146
62147 // if we currently have less than the highWaterMark, then also read some
62148 if (state.length === 0 || state.length - n < state.highWaterMark) {
62149 doRead = true;
62150 debug('length less than watermark', doRead);
62151 }
62152
62153 // however, if we've ended, then there's no point, and if we're already
62154 // reading, then it's unnecessary.
62155 if (state.ended || state.reading) {
62156 doRead = false;
62157 debug('reading or ended', doRead);
62158 } else if (doRead) {
62159 debug('do read');
62160 state.reading = true;
62161 state.sync = true;
62162 // if the length is currently zero, then we *need* a readable event.
62163 if (state.length === 0) state.needReadable = true;
62164 // call internal read method
62165 this._read(state.highWaterMark);
62166 state.sync = false;
62167 // If _read pushed data synchronously, then `reading` will be false,
62168 // and we need to re-evaluate how much data we can return to the user.
62169 if (!state.reading) n = howMuchToRead(nOrig, state);
62170 }
62171
62172 var ret;
62173 if (n > 0) ret = fromList(n, state);else ret = null;
62174
62175 if (ret === null) {
62176 state.needReadable = true;
62177 n = 0;
62178 } else {
62179 state.length -= n;
62180 }
62181
62182 if (state.length === 0) {
62183 // If we have nothing in the buffer, then we want to know
62184 // as soon as we *do* get something into the buffer.
62185 if (!state.ended) state.needReadable = true;
62186
62187 // If we tried to read() past the EOF, then emit end on the next tick.
62188 if (nOrig !== n && state.ended) endReadable(this);
62189 }
62190
62191 if (ret !== null) this.emit('data', ret);
62192
62193 return ret;
62194 };
62195
62196 function chunkInvalid(state, chunk) {
62197 var er = null;
62198 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
62199 er = new TypeError('Invalid non-string/buffer chunk');
62200 }
62201 return er;
62202 }
62203
62204 function onEofChunk(stream, state) {
62205 if (state.ended) return;
62206 if (state.decoder) {
62207 var chunk = state.decoder.end();
62208 if (chunk && chunk.length) {
62209 state.buffer.push(chunk);
62210 state.length += state.objectMode ? 1 : chunk.length;
62211 }
62212 }
62213 state.ended = true;
62214
62215 // emit 'readable' now to make sure it gets picked up.
62216 emitReadable(stream);
62217 }
62218
62219 // Don't emit readable right away in sync mode, because this can trigger
62220 // another read() call => stack overflow. This way, it might trigger
62221 // a nextTick recursion warning, but that's not so bad.
62222 function emitReadable(stream) {
62223 var state = stream._readableState;
62224 state.needReadable = false;
62225 if (!state.emittedReadable) {
62226 debug('emitReadable', state.flowing);
62227 state.emittedReadable = true;
62228 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
62229 }
62230 }
62231
62232 function emitReadable_(stream) {
62233 debug('emit readable');
62234 stream.emit('readable');
62235 flow(stream);
62236 }
62237
62238 // at this point, the user has presumably seen the 'readable' event,
62239 // and called read() to consume some data. that may have triggered
62240 // in turn another _read(n) call, in which case reading = true if
62241 // it's in progress.
62242 // However, if we're not ended, or reading, and the length < hwm,
62243 // then go ahead and try to read some more preemptively.
62244 function maybeReadMore(stream, state) {
62245 if (!state.readingMore) {
62246 state.readingMore = true;
62247 processNextTick(maybeReadMore_, stream, state);
62248 }
62249 }
62250
62251 function maybeReadMore_(stream, state) {
62252 var len = state.length;
62253 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
62254 debug('maybeReadMore read 0');
62255 stream.read(0);
62256 if (len === state.length)
62257 // didn't get any data, stop spinning.
62258 break;else len = state.length;
62259 }
62260 state.readingMore = false;
62261 }
62262
62263 // abstract method. to be overridden in specific implementation classes.
62264 // call cb(er, data) where data is <= n in length.
62265 // for virtual (non-string, non-buffer) streams, "length" is somewhat
62266 // arbitrary, and perhaps not very meaningful.
62267 Readable.prototype._read = function (n) {
62268 this.emit('error', new Error('_read() is not implemented'));
62269 };
62270
62271 Readable.prototype.pipe = function (dest, pipeOpts) {
62272 var src = this;
62273 var state = this._readableState;
62274
62275 switch (state.pipesCount) {
62276 case 0:
62277 state.pipes = dest;
62278 break;
62279 case 1:
62280 state.pipes = [state.pipes, dest];
62281 break;
62282 default:
62283 state.pipes.push(dest);
62284 break;
62285 }
62286 state.pipesCount += 1;
62287 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
62288
62289 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
62290
62291 var endFn = doEnd ? onend : cleanup;
62292 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
62293
62294 dest.on('unpipe', onunpipe);
62295 function onunpipe(readable) {
62296 debug('onunpipe');
62297 if (readable === src) {
62298 cleanup();
62299 }
62300 }
62301
62302 function onend() {
62303 debug('onend');
62304 dest.end();
62305 }
62306
62307 // when the dest drains, it reduces the awaitDrain counter
62308 // on the source. This would be more elegant with a .once()
62309 // handler in flow(), but adding and removing repeatedly is
62310 // too slow.
62311 var ondrain = pipeOnDrain(src);
62312 dest.on('drain', ondrain);
62313
62314 var cleanedUp = false;
62315 function cleanup() {
62316 debug('cleanup');
62317 // cleanup event handlers once the pipe is broken
62318 dest.removeListener('close', onclose);
62319 dest.removeListener('finish', onfinish);
62320 dest.removeListener('drain', ondrain);
62321 dest.removeListener('error', onerror);
62322 dest.removeListener('unpipe', onunpipe);
62323 src.removeListener('end', onend);
62324 src.removeListener('end', cleanup);
62325 src.removeListener('data', ondata);
62326
62327 cleanedUp = true;
62328
62329 // if the reader is waiting for a drain event from this
62330 // specific writer, then it would cause it to never start
62331 // flowing again.
62332 // So, if this is awaiting a drain, then we just call it now.
62333 // If we don't know, then assume that we are waiting for one.
62334 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
62335 }
62336
62337 // If the user pushes more data while we're writing to dest then we'll end up
62338 // in ondata again. However, we only want to increase awaitDrain once because
62339 // dest will only emit one 'drain' event for the multiple writes.
62340 // => Introduce a guard on increasing awaitDrain.
62341 var increasedAwaitDrain = false;
62342 src.on('data', ondata);
62343 function ondata(chunk) {
62344 debug('ondata');
62345 increasedAwaitDrain = false;
62346 var ret = dest.write(chunk);
62347 if (false === ret && !increasedAwaitDrain) {
62348 // If the user unpiped during `dest.write()`, it is possible
62349 // to get stuck in a permanently paused state if that write
62350 // also returned false.
62351 // => Check whether `dest` is still a piping destination.
62352 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
62353 debug('false write response, pause', src._readableState.awaitDrain);
62354 src._readableState.awaitDrain++;
62355 increasedAwaitDrain = true;
62356 }
62357 src.pause();
62358 }
62359 }
62360
62361 // if the dest has an error, then stop piping into it.
62362 // however, don't suppress the throwing behavior for this.
62363 function onerror(er) {
62364 debug('onerror', er);
62365 unpipe();
62366 dest.removeListener('error', onerror);
62367 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
62368 }
62369
62370 // Make sure our error handler is attached before userland ones.
62371 prependListener(dest, 'error', onerror);
62372
62373 // Both close and finish should trigger unpipe, but only once.
62374 function onclose() {
62375 dest.removeListener('finish', onfinish);
62376 unpipe();
62377 }
62378 dest.once('close', onclose);
62379 function onfinish() {
62380 debug('onfinish');
62381 dest.removeListener('close', onclose);
62382 unpipe();
62383 }
62384 dest.once('finish', onfinish);
62385
62386 function unpipe() {
62387 debug('unpipe');
62388 src.unpipe(dest);
62389 }
62390
62391 // tell the dest that it's being piped to
62392 dest.emit('pipe', src);
62393
62394 // start the flow if it hasn't been started already.
62395 if (!state.flowing) {
62396 debug('pipe resume');
62397 src.resume();
62398 }
62399
62400 return dest;
62401 };
62402
62403 function pipeOnDrain(src) {
62404 return function () {
62405 var state = src._readableState;
62406 debug('pipeOnDrain', state.awaitDrain);
62407 if (state.awaitDrain) state.awaitDrain--;
62408 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
62409 state.flowing = true;
62410 flow(src);
62411 }
62412 };
62413 }
62414
62415 Readable.prototype.unpipe = function (dest) {
62416 var state = this._readableState;
62417
62418 // if we're not piping anywhere, then do nothing.
62419 if (state.pipesCount === 0) return this;
62420
62421 // just one destination. most common case.
62422 if (state.pipesCount === 1) {
62423 // passed in one, but it's not the right one.
62424 if (dest && dest !== state.pipes) return this;
62425
62426 if (!dest) dest = state.pipes;
62427
62428 // got a match.
62429 state.pipes = null;
62430 state.pipesCount = 0;
62431 state.flowing = false;
62432 if (dest) dest.emit('unpipe', this);
62433 return this;
62434 }
62435
62436 // slow case. multiple pipe destinations.
62437
62438 if (!dest) {
62439 // remove all.
62440 var dests = state.pipes;
62441 var len = state.pipesCount;
62442 state.pipes = null;
62443 state.pipesCount = 0;
62444 state.flowing = false;
62445
62446 for (var i = 0; i < len; i++) {
62447 dests[i].emit('unpipe', this);
62448 }return this;
62449 }
62450
62451 // try to find the right one.
62452 var index = indexOf(state.pipes, dest);
62453 if (index === -1) return this;
62454
62455 state.pipes.splice(index, 1);
62456 state.pipesCount -= 1;
62457 if (state.pipesCount === 1) state.pipes = state.pipes[0];
62458
62459 dest.emit('unpipe', this);
62460
62461 return this;
62462 };
62463
62464 // set up data events if they are asked for
62465 // Ensure readable listeners eventually get something
62466 Readable.prototype.on = function (ev, fn) {
62467 var res = Stream.prototype.on.call(this, ev, fn);
62468
62469 if (ev === 'data') {
62470 // Start flowing on next tick if stream isn't explicitly paused
62471 if (this._readableState.flowing !== false) this.resume();
62472 } else if (ev === 'readable') {
62473 var state = this._readableState;
62474 if (!state.endEmitted && !state.readableListening) {
62475 state.readableListening = state.needReadable = true;
62476 state.emittedReadable = false;
62477 if (!state.reading) {
62478 processNextTick(nReadingNextTick, this);
62479 } else if (state.length) {
62480 emitReadable(this, state);
62481 }
62482 }
62483 }
62484
62485 return res;
62486 };
62487 Readable.prototype.addListener = Readable.prototype.on;
62488
62489 function nReadingNextTick(self) {
62490 debug('readable nexttick read 0');
62491 self.read(0);
62492 }
62493
62494 // pause() and resume() are remnants of the legacy readable stream API
62495 // If the user uses them, then switch into old mode.
62496 Readable.prototype.resume = function () {
62497 var state = this._readableState;
62498 if (!state.flowing) {
62499 debug('resume');
62500 state.flowing = true;
62501 resume(this, state);
62502 }
62503 return this;
62504 };
62505
62506 function resume(stream, state) {
62507 if (!state.resumeScheduled) {
62508 state.resumeScheduled = true;
62509 processNextTick(resume_, stream, state);
62510 }
62511 }
62512
62513 function resume_(stream, state) {
62514 if (!state.reading) {
62515 debug('resume read 0');
62516 stream.read(0);
62517 }
62518
62519 state.resumeScheduled = false;
62520 state.awaitDrain = 0;
62521 stream.emit('resume');
62522 flow(stream);
62523 if (state.flowing && !state.reading) stream.read(0);
62524 }
62525
62526 Readable.prototype.pause = function () {
62527 debug('call pause flowing=%j', this._readableState.flowing);
62528 if (false !== this._readableState.flowing) {
62529 debug('pause');
62530 this._readableState.flowing = false;
62531 this.emit('pause');
62532 }
62533 return this;
62534 };
62535
62536 function flow(stream) {
62537 var state = stream._readableState;
62538 debug('flow', state.flowing);
62539 while (state.flowing && stream.read() !== null) {}
62540 }
62541
62542 // wrap an old-style stream as the async data source.
62543 // This is *not* part of the readable stream interface.
62544 // It is an ugly unfortunate mess of history.
62545 Readable.prototype.wrap = function (stream) {
62546 var state = this._readableState;
62547 var paused = false;
62548
62549 var self = this;
62550 stream.on('end', function () {
62551 debug('wrapped end');
62552 if (state.decoder && !state.ended) {
62553 var chunk = state.decoder.end();
62554 if (chunk && chunk.length) self.push(chunk);
62555 }
62556
62557 self.push(null);
62558 });
62559
62560 stream.on('data', function (chunk) {
62561 debug('wrapped data');
62562 if (state.decoder) chunk = state.decoder.write(chunk);
62563
62564 // don't skip over falsy values in objectMode
62565 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
62566
62567 var ret = self.push(chunk);
62568 if (!ret) {
62569 paused = true;
62570 stream.pause();
62571 }
62572 });
62573
62574 // proxy all the other methods.
62575 // important when wrapping filters and duplexes.
62576 for (var i in stream) {
62577 if (this[i] === undefined && typeof stream[i] === 'function') {
62578 this[i] = function (method) {
62579 return function () {
62580 return stream[method].apply(stream, arguments);
62581 };
62582 }(i);
62583 }
62584 }
62585
62586 // proxy certain important events.
62587 for (var n = 0; n < kProxyEvents.length; n++) {
62588 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
62589 }
62590
62591 // when we try to consume some more bytes, simply unpause the
62592 // underlying stream.
62593 self._read = function (n) {
62594 debug('wrapped _read', n);
62595 if (paused) {
62596 paused = false;
62597 stream.resume();
62598 }
62599 };
62600
62601 return self;
62602 };
62603
62604 // exposed for testing purposes only.
62605 Readable._fromList = fromList;
62606
62607 // Pluck off n bytes from an array of buffers.
62608 // Length is the combined lengths of all the buffers in the list.
62609 // This function is designed to be inlinable, so please take care when making
62610 // changes to the function body.
62611 function fromList(n, state) {
62612 // nothing buffered
62613 if (state.length === 0) return null;
62614
62615 var ret;
62616 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
62617 // read it all, truncate the list
62618 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);
62619 state.buffer.clear();
62620 } else {
62621 // read part of list
62622 ret = fromListPartial(n, state.buffer, state.decoder);
62623 }
62624
62625 return ret;
62626 }
62627
62628 // Extracts only enough buffered data to satisfy the amount requested.
62629 // This function is designed to be inlinable, so please take care when making
62630 // changes to the function body.
62631 function fromListPartial(n, list, hasStrings) {
62632 var ret;
62633 if (n < list.head.data.length) {
62634 // slice is the same for buffers and strings
62635 ret = list.head.data.slice(0, n);
62636 list.head.data = list.head.data.slice(n);
62637 } else if (n === list.head.data.length) {
62638 // first chunk is a perfect match
62639 ret = list.shift();
62640 } else {
62641 // result spans more than one buffer
62642 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
62643 }
62644 return ret;
62645 }
62646
62647 // Copies a specified amount of characters from the list of buffered data
62648 // chunks.
62649 // This function is designed to be inlinable, so please take care when making
62650 // changes to the function body.
62651 function copyFromBufferString(n, list) {
62652 var p = list.head;
62653 var c = 1;
62654 var ret = p.data;
62655 n -= ret.length;
62656 while (p = p.next) {
62657 var str = p.data;
62658 var nb = n > str.length ? str.length : n;
62659 if (nb === str.length) ret += str;else ret += str.slice(0, n);
62660 n -= nb;
62661 if (n === 0) {
62662 if (nb === str.length) {
62663 ++c;
62664 if (p.next) list.head = p.next;else list.head = list.tail = null;
62665 } else {
62666 list.head = p;
62667 p.data = str.slice(nb);
62668 }
62669 break;
62670 }
62671 ++c;
62672 }
62673 list.length -= c;
62674 return ret;
62675 }
62676
62677 // Copies a specified amount of bytes from the list of buffered data chunks.
62678 // This function is designed to be inlinable, so please take care when making
62679 // changes to the function body.
62680 function copyFromBuffer(n, list) {
62681 var ret = bufferShim.allocUnsafe(n);
62682 var p = list.head;
62683 var c = 1;
62684 p.data.copy(ret);
62685 n -= p.data.length;
62686 while (p = p.next) {
62687 var buf = p.data;
62688 var nb = n > buf.length ? buf.length : n;
62689 buf.copy(ret, ret.length - n, 0, nb);
62690 n -= nb;
62691 if (n === 0) {
62692 if (nb === buf.length) {
62693 ++c;
62694 if (p.next) list.head = p.next;else list.head = list.tail = null;
62695 } else {
62696 list.head = p;
62697 p.data = buf.slice(nb);
62698 }
62699 break;
62700 }
62701 ++c;
62702 }
62703 list.length -= c;
62704 return ret;
62705 }
62706
62707 function endReadable(stream) {
62708 var state = stream._readableState;
62709
62710 // If we get here before consuming all the bytes, then that is a
62711 // bug in node. Should never happen.
62712 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
62713
62714 if (!state.endEmitted) {
62715 state.ended = true;
62716 processNextTick(endReadableNT, state, stream);
62717 }
62718 }
62719
62720 function endReadableNT(state, stream) {
62721 // Check that we didn't get one last unshift.
62722 if (!state.endEmitted && state.length === 0) {
62723 state.endEmitted = true;
62724 stream.readable = false;
62725 stream.emit('end');
62726 }
62727 }
62728
62729 function forEach(xs, f) {
62730 for (var i = 0, l = xs.length; i < l; i++) {
62731 f(xs[i], i);
62732 }
62733 }
62734
62735 function indexOf(xs, x) {
62736 for (var i = 0, l = xs.length; i < l; i++) {
62737 if (xs[i] === x) return i;
62738 }
62739 return -1;
62740 }
62741 }).call(this,require('_process'))
62742 },{"./_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){
62743 // a transform stream is a readable/writable stream where you do
62744 // something with the data. Sometimes it's called a "filter",
62745 // but that's not a great name for it, since that implies a thing where
62746 // some bits pass through, and others are simply ignored. (That would
62747 // be a valid example of a transform, of course.)
62748 //
62749 // While the output is causally related to the input, it's not a
62750 // necessarily symmetric or synchronous transformation. For example,
62751 // a zlib stream might take multiple plain-text writes(), and then
62752 // emit a single compressed chunk some time in the future.
62753 //
62754 // Here's how this works:
62755 //
62756 // The Transform stream has all the aspects of the readable and writable
62757 // stream classes. When you write(chunk), that calls _write(chunk,cb)
62758 // internally, and returns false if there's a lot of pending writes
62759 // buffered up. When you call read(), that calls _read(n) until
62760 // there's enough pending readable data buffered up.
62761 //
62762 // In a transform stream, the written data is placed in a buffer. When
62763 // _read(n) is called, it transforms the queued up data, calling the
62764 // buffered _write cb's as it consumes chunks. If consuming a single
62765 // written chunk would result in multiple output chunks, then the first
62766 // outputted bit calls the readcb, and subsequent chunks just go into
62767 // the read buffer, and will cause it to emit 'readable' if necessary.
62768 //
62769 // This way, back-pressure is actually determined by the reading side,
62770 // since _read has to be called to start processing a new chunk. However,
62771 // a pathological inflate type of transform can cause excessive buffering
62772 // here. For example, imagine a stream where every byte of input is
62773 // interpreted as an integer from 0-255, and then results in that many
62774 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
62775 // 1kb of data being output. In this case, you could write a very small
62776 // amount of input, and end up with a very large amount of output. In
62777 // such a pathological inflating mechanism, there'd be no way to tell
62778 // the system to stop doing the transform. A single 4MB write could
62779 // cause the system to run out of memory.
62780 //
62781 // However, even in such a pathological case, only a single written chunk
62782 // would be consumed, and then the rest would wait (un-transformed) until
62783 // the results of the previous transformed chunk were consumed.
62784
62785 'use strict';
62786
62787 module.exports = Transform;
62788
62789 var Duplex = require('./_stream_duplex');
62790
62791 /*<replacement>*/
62792 var util = require('core-util-is');
62793 util.inherits = require('inherits');
62794 /*</replacement>*/
62795
62796 util.inherits(Transform, Duplex);
62797
62798 function TransformState(stream) {
62799 this.afterTransform = function (er, data) {
62800 return afterTransform(stream, er, data);
62801 };
62802
62803 this.needTransform = false;
62804 this.transforming = false;
62805 this.writecb = null;
62806 this.writechunk = null;
62807 this.writeencoding = null;
62808 }
62809
62810 function afterTransform(stream, er, data) {
62811 var ts = stream._transformState;
62812 ts.transforming = false;
62813
62814 var cb = ts.writecb;
62815
62816 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
62817
62818 ts.writechunk = null;
62819 ts.writecb = null;
62820
62821 if (data !== null && data !== undefined) stream.push(data);
62822
62823 cb(er);
62824
62825 var rs = stream._readableState;
62826 rs.reading = false;
62827 if (rs.needReadable || rs.length < rs.highWaterMark) {
62828 stream._read(rs.highWaterMark);
62829 }
62830 }
62831
62832 function Transform(options) {
62833 if (!(this instanceof Transform)) return new Transform(options);
62834
62835 Duplex.call(this, options);
62836
62837 this._transformState = new TransformState(this);
62838
62839 var stream = this;
62840
62841 // start out asking for a readable event once data is transformed.
62842 this._readableState.needReadable = true;
62843
62844 // we have implemented the _read method, and done the other things
62845 // that Readable wants before the first _read call, so unset the
62846 // sync guard flag.
62847 this._readableState.sync = false;
62848
62849 if (options) {
62850 if (typeof options.transform === 'function') this._transform = options.transform;
62851
62852 if (typeof options.flush === 'function') this._flush = options.flush;
62853 }
62854
62855 // When the writable side finishes, then flush out anything remaining.
62856 this.once('prefinish', function () {
62857 if (typeof this._flush === 'function') this._flush(function (er, data) {
62858 done(stream, er, data);
62859 });else done(stream);
62860 });
62861 }
62862
62863 Transform.prototype.push = function (chunk, encoding) {
62864 this._transformState.needTransform = false;
62865 return Duplex.prototype.push.call(this, chunk, encoding);
62866 };
62867
62868 // This is the part where you do stuff!
62869 // override this function in implementation classes.
62870 // 'chunk' is an input chunk.
62871 //
62872 // Call `push(newChunk)` to pass along transformed output
62873 // to the readable side. You may call 'push' zero or more times.
62874 //
62875 // Call `cb(err)` when you are done with this chunk. If you pass
62876 // an error, then that'll put the hurt on the whole operation. If you
62877 // never call cb(), then you'll never get another chunk.
62878 Transform.prototype._transform = function (chunk, encoding, cb) {
62879 throw new Error('_transform() is not implemented');
62880 };
62881
62882 Transform.prototype._write = function (chunk, encoding, cb) {
62883 var ts = this._transformState;
62884 ts.writecb = cb;
62885 ts.writechunk = chunk;
62886 ts.writeencoding = encoding;
62887 if (!ts.transforming) {
62888 var rs = this._readableState;
62889 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
62890 }
62891 };
62892
62893 // Doesn't matter what the args are here.
62894 // _transform does all the work.
62895 // That we got here means that the readable side wants more data.
62896 Transform.prototype._read = function (n) {
62897 var ts = this._transformState;
62898
62899 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
62900 ts.transforming = true;
62901 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
62902 } else {
62903 // mark that we need a transform, so that any data that comes in
62904 // will get processed, now that we've asked for it.
62905 ts.needTransform = true;
62906 }
62907 };
62908
62909 function done(stream, er, data) {
62910 if (er) return stream.emit('error', er);
62911
62912 if (data !== null && data !== undefined) stream.push(data);
62913
62914 // if there's nothing in the write buffer, then that means
62915 // that nothing more will ever be provided
62916 var ws = stream._writableState;
62917 var ts = stream._transformState;
62918
62919 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
62920
62921 if (ts.transforming) throw new Error('Calling transform done when still transforming');
62922
62923 return stream.push(null);
62924 }
62925 },{"./_stream_duplex":121,"core-util-is":49,"inherits":95}],125:[function(require,module,exports){
62926 (function (process){
62927 // A bit simpler than readable streams.
62928 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
62929 // the drain event emission and buffering.
62930
62931 'use strict';
62932
62933 module.exports = Writable;
62934
62935 /*<replacement>*/
62936 var processNextTick = require('process-nextick-args');
62937 /*</replacement>*/
62938
62939 /*<replacement>*/
62940 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
62941 /*</replacement>*/
62942
62943 /*<replacement>*/
62944 var Duplex;
62945 /*</replacement>*/
62946
62947 Writable.WritableState = WritableState;
62948
62949 /*<replacement>*/
62950 var util = require('core-util-is');
62951 util.inherits = require('inherits');
62952 /*</replacement>*/
62953
62954 /*<replacement>*/
62955 var internalUtil = {
62956 deprecate: require('util-deprecate')
62957 };
62958 /*</replacement>*/
62959
62960 /*<replacement>*/
62961 var Stream = require('./internal/streams/stream');
62962 /*</replacement>*/
62963
62964 var Buffer = require('buffer').Buffer;
62965 /*<replacement>*/
62966 var bufferShim = require('buffer-shims');
62967 /*</replacement>*/
62968
62969 util.inherits(Writable, Stream);
62970
62971 function nop() {}
62972
62973 function WriteReq(chunk, encoding, cb) {
62974 this.chunk = chunk;
62975 this.encoding = encoding;
62976 this.callback = cb;
62977 this.next = null;
62978 }
62979
62980 function WritableState(options, stream) {
62981 Duplex = Duplex || require('./_stream_duplex');
62982
62983 options = options || {};
62984
62985 // object stream flag to indicate whether or not this stream
62986 // contains buffers or objects.
62987 this.objectMode = !!options.objectMode;
62988
62989 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
62990
62991 // the point at which write() starts returning false
62992 // Note: 0 is a valid value, means that we always return false if
62993 // the entire buffer is not flushed immediately on write()
62994 var hwm = options.highWaterMark;
62995 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
62996 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
62997
62998 // cast to ints.
62999 this.highWaterMark = ~~this.highWaterMark;
63000
63001 // drain event flag.
63002 this.needDrain = false;
63003 // at the start of calling end()
63004 this.ending = false;
63005 // when end() has been called, and returned
63006 this.ended = false;
63007 // when 'finish' is emitted
63008 this.finished = false;
63009
63010 // should we decode strings into buffers before passing to _write?
63011 // this is here so that some node-core streams can optimize string
63012 // handling at a lower level.
63013 var noDecode = options.decodeStrings === false;
63014 this.decodeStrings = !noDecode;
63015
63016 // Crypto is kind of old and crusty. Historically, its default string
63017 // encoding is 'binary' so we have to make this configurable.
63018 // Everything else in the universe uses 'utf8', though.
63019 this.defaultEncoding = options.defaultEncoding || 'utf8';
63020
63021 // not an actual buffer we keep track of, but a measurement
63022 // of how much we're waiting to get pushed to some underlying
63023 // socket or file.
63024 this.length = 0;
63025
63026 // a flag to see when we're in the middle of a write.
63027 this.writing = false;
63028
63029 // when true all writes will be buffered until .uncork() call
63030 this.corked = 0;
63031
63032 // a flag to be able to tell if the onwrite cb is called immediately,
63033 // or on a later tick. We set this to true at first, because any
63034 // actions that shouldn't happen until "later" should generally also
63035 // not happen before the first write call.
63036 this.sync = true;
63037
63038 // a flag to know if we're processing previously buffered items, which
63039 // may call the _write() callback in the same tick, so that we don't
63040 // end up in an overlapped onwrite situation.
63041 this.bufferProcessing = false;
63042
63043 // the callback that's passed to _write(chunk,cb)
63044 this.onwrite = function (er) {
63045 onwrite(stream, er);
63046 };
63047
63048 // the callback that the user supplies to write(chunk,encoding,cb)
63049 this.writecb = null;
63050
63051 // the amount that is being written when _write is called.
63052 this.writelen = 0;
63053
63054 this.bufferedRequest = null;
63055 this.lastBufferedRequest = null;
63056
63057 // number of pending user-supplied write callbacks
63058 // this must be 0 before 'finish' can be emitted
63059 this.pendingcb = 0;
63060
63061 // emit prefinish if the only thing we're waiting for is _write cbs
63062 // This is relevant for synchronous Transform streams
63063 this.prefinished = false;
63064
63065 // True if the error was already emitted and should not be thrown again
63066 this.errorEmitted = false;
63067
63068 // count buffered requests
63069 this.bufferedRequestCount = 0;
63070
63071 // allocate the first CorkedRequest, there is always
63072 // one allocated and free to use, and we maintain at most two
63073 this.corkedRequestsFree = new CorkedRequest(this);
63074 }
63075
63076 WritableState.prototype.getBuffer = function getBuffer() {
63077 var current = this.bufferedRequest;
63078 var out = [];
63079 while (current) {
63080 out.push(current);
63081 current = current.next;
63082 }
63083 return out;
63084 };
63085
63086 (function () {
63087 try {
63088 Object.defineProperty(WritableState.prototype, 'buffer', {
63089 get: internalUtil.deprecate(function () {
63090 return this.getBuffer();
63091 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
63092 });
63093 } catch (_) {}
63094 })();
63095
63096 // Test _writableState for inheritance to account for Duplex streams,
63097 // whose prototype chain only points to Readable.
63098 var realHasInstance;
63099 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
63100 realHasInstance = Function.prototype[Symbol.hasInstance];
63101 Object.defineProperty(Writable, Symbol.hasInstance, {
63102 value: function (object) {
63103 if (realHasInstance.call(this, object)) return true;
63104
63105 return object && object._writableState instanceof WritableState;
63106 }
63107 });
63108 } else {
63109 realHasInstance = function (object) {
63110 return object instanceof this;
63111 };
63112 }
63113
63114 function Writable(options) {
63115 Duplex = Duplex || require('./_stream_duplex');
63116
63117 // Writable ctor is applied to Duplexes, too.
63118 // `realHasInstance` is necessary because using plain `instanceof`
63119 // would return false, as no `_writableState` property is attached.
63120
63121 // Trying to use the custom `instanceof` for Writable here will also break the
63122 // Node.js LazyTransform implementation, which has a non-trivial getter for
63123 // `_writableState` that would lead to infinite recursion.
63124 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
63125 return new Writable(options);
63126 }
63127
63128 this._writableState = new WritableState(options, this);
63129
63130 // legacy.
63131 this.writable = true;
63132
63133 if (options) {
63134 if (typeof options.write === 'function') this._write = options.write;
63135
63136 if (typeof options.writev === 'function') this._writev = options.writev;
63137 }
63138
63139 Stream.call(this);
63140 }
63141
63142 // Otherwise people can pipe Writable streams, which is just wrong.
63143 Writable.prototype.pipe = function () {
63144 this.emit('error', new Error('Cannot pipe, not readable'));
63145 };
63146
63147 function writeAfterEnd(stream, cb) {
63148 var er = new Error('write after end');
63149 // TODO: defer error events consistently everywhere, not just the cb
63150 stream.emit('error', er);
63151 processNextTick(cb, er);
63152 }
63153
63154 // Checks that a user-supplied chunk is valid, especially for the particular
63155 // mode the stream is in. Currently this means that `null` is never accepted
63156 // and undefined/non-string values are only allowed in object mode.
63157 function validChunk(stream, state, chunk, cb) {
63158 var valid = true;
63159 var er = false;
63160
63161 if (chunk === null) {
63162 er = new TypeError('May not write null values to stream');
63163 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
63164 er = new TypeError('Invalid non-string/buffer chunk');
63165 }
63166 if (er) {
63167 stream.emit('error', er);
63168 processNextTick(cb, er);
63169 valid = false;
63170 }
63171 return valid;
63172 }
63173
63174 Writable.prototype.write = function (chunk, encoding, cb) {
63175 var state = this._writableState;
63176 var ret = false;
63177 var isBuf = Buffer.isBuffer(chunk);
63178
63179 if (typeof encoding === 'function') {
63180 cb = encoding;
63181 encoding = null;
63182 }
63183
63184 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
63185
63186 if (typeof cb !== 'function') cb = nop;
63187
63188 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
63189 state.pendingcb++;
63190 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
63191 }
63192
63193 return ret;
63194 };
63195
63196 Writable.prototype.cork = function () {
63197 var state = this._writableState;
63198
63199 state.corked++;
63200 };
63201
63202 Writable.prototype.uncork = function () {
63203 var state = this._writableState;
63204
63205 if (state.corked) {
63206 state.corked--;
63207
63208 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
63209 }
63210 };
63211
63212 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
63213 // node::ParseEncoding() requires lower case.
63214 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
63215 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);
63216 this._writableState.defaultEncoding = encoding;
63217 return this;
63218 };
63219
63220 function decodeChunk(state, chunk, encoding) {
63221 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
63222 chunk = bufferShim.from(chunk, encoding);
63223 }
63224 return chunk;
63225 }
63226
63227 // if we're already writing something, then just put this
63228 // in the queue, and wait our turn. Otherwise, call _write
63229 // If we return false, then we need a drain event, so set that flag.
63230 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
63231 if (!isBuf) {
63232 chunk = decodeChunk(state, chunk, encoding);
63233 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
63234 }
63235 var len = state.objectMode ? 1 : chunk.length;
63236
63237 state.length += len;
63238
63239 var ret = state.length < state.highWaterMark;
63240 // we must ensure that previous needDrain will not be reset to false.
63241 if (!ret) state.needDrain = true;
63242
63243 if (state.writing || state.corked) {
63244 var last = state.lastBufferedRequest;
63245 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
63246 if (last) {
63247 last.next = state.lastBufferedRequest;
63248 } else {
63249 state.bufferedRequest = state.lastBufferedRequest;
63250 }
63251 state.bufferedRequestCount += 1;
63252 } else {
63253 doWrite(stream, state, false, len, chunk, encoding, cb);
63254 }
63255
63256 return ret;
63257 }
63258
63259 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
63260 state.writelen = len;
63261 state.writecb = cb;
63262 state.writing = true;
63263 state.sync = true;
63264 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
63265 state.sync = false;
63266 }
63267
63268 function onwriteError(stream, state, sync, er, cb) {
63269 --state.pendingcb;
63270 if (sync) processNextTick(cb, er);else cb(er);
63271
63272 stream._writableState.errorEmitted = true;
63273 stream.emit('error', er);
63274 }
63275
63276 function onwriteStateUpdate(state) {
63277 state.writing = false;
63278 state.writecb = null;
63279 state.length -= state.writelen;
63280 state.writelen = 0;
63281 }
63282
63283 function onwrite(stream, er) {
63284 var state = stream._writableState;
63285 var sync = state.sync;
63286 var cb = state.writecb;
63287
63288 onwriteStateUpdate(state);
63289
63290 if (er) onwriteError(stream, state, sync, er, cb);else {
63291 // Check if we're actually ready to finish, but don't emit yet
63292 var finished = needFinish(state);
63293
63294 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
63295 clearBuffer(stream, state);
63296 }
63297
63298 if (sync) {
63299 /*<replacement>*/
63300 asyncWrite(afterWrite, stream, state, finished, cb);
63301 /*</replacement>*/
63302 } else {
63303 afterWrite(stream, state, finished, cb);
63304 }
63305 }
63306 }
63307
63308 function afterWrite(stream, state, finished, cb) {
63309 if (!finished) onwriteDrain(stream, state);
63310 state.pendingcb--;
63311 cb();
63312 finishMaybe(stream, state);
63313 }
63314
63315 // Must force callback to be called on nextTick, so that we don't
63316 // emit 'drain' before the write() consumer gets the 'false' return
63317 // value, and has a chance to attach a 'drain' listener.
63318 function onwriteDrain(stream, state) {
63319 if (state.length === 0 && state.needDrain) {
63320 state.needDrain = false;
63321 stream.emit('drain');
63322 }
63323 }
63324
63325 // if there's something in the buffer waiting, then process it
63326 function clearBuffer(stream, state) {
63327 state.bufferProcessing = true;
63328 var entry = state.bufferedRequest;
63329
63330 if (stream._writev && entry && entry.next) {
63331 // Fast case, write everything using _writev()
63332 var l = state.bufferedRequestCount;
63333 var buffer = new Array(l);
63334 var holder = state.corkedRequestsFree;
63335 holder.entry = entry;
63336
63337 var count = 0;
63338 while (entry) {
63339 buffer[count] = entry;
63340 entry = entry.next;
63341 count += 1;
63342 }
63343
63344 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
63345
63346 // doWrite is almost always async, defer these to save a bit of time
63347 // as the hot path ends with doWrite
63348 state.pendingcb++;
63349 state.lastBufferedRequest = null;
63350 if (holder.next) {
63351 state.corkedRequestsFree = holder.next;
63352 holder.next = null;
63353 } else {
63354 state.corkedRequestsFree = new CorkedRequest(state);
63355 }
63356 } else {
63357 // Slow case, write chunks one-by-one
63358 while (entry) {
63359 var chunk = entry.chunk;
63360 var encoding = entry.encoding;
63361 var cb = entry.callback;
63362 var len = state.objectMode ? 1 : chunk.length;
63363
63364 doWrite(stream, state, false, len, chunk, encoding, cb);
63365 entry = entry.next;
63366 // if we didn't call the onwrite immediately, then
63367 // it means that we need to wait until it does.
63368 // also, that means that the chunk and cb are currently
63369 // being processed, so move the buffer counter past them.
63370 if (state.writing) {
63371 break;
63372 }
63373 }
63374
63375 if (entry === null) state.lastBufferedRequest = null;
63376 }
63377
63378 state.bufferedRequestCount = 0;
63379 state.bufferedRequest = entry;
63380 state.bufferProcessing = false;
63381 }
63382
63383 Writable.prototype._write = function (chunk, encoding, cb) {
63384 cb(new Error('_write() is not implemented'));
63385 };
63386
63387 Writable.prototype._writev = null;
63388
63389 Writable.prototype.end = function (chunk, encoding, cb) {
63390 var state = this._writableState;
63391
63392 if (typeof chunk === 'function') {
63393 cb = chunk;
63394 chunk = null;
63395 encoding = null;
63396 } else if (typeof encoding === 'function') {
63397 cb = encoding;
63398 encoding = null;
63399 }
63400
63401 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
63402
63403 // .end() fully uncorks
63404 if (state.corked) {
63405 state.corked = 1;
63406 this.uncork();
63407 }
63408
63409 // ignore unnecessary end() calls.
63410 if (!state.ending && !state.finished) endWritable(this, state, cb);
63411 };
63412
63413 function needFinish(state) {
63414 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
63415 }
63416
63417 function prefinish(stream, state) {
63418 if (!state.prefinished) {
63419 state.prefinished = true;
63420 stream.emit('prefinish');
63421 }
63422 }
63423
63424 function finishMaybe(stream, state) {
63425 var need = needFinish(state);
63426 if (need) {
63427 if (state.pendingcb === 0) {
63428 prefinish(stream, state);
63429 state.finished = true;
63430 stream.emit('finish');
63431 } else {
63432 prefinish(stream, state);
63433 }
63434 }
63435 return need;
63436 }
63437
63438 function endWritable(stream, state, cb) {
63439 state.ending = true;
63440 finishMaybe(stream, state);
63441 if (cb) {
63442 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
63443 }
63444 state.ended = true;
63445 stream.writable = false;
63446 }
63447
63448 // It seems a linked list but it is not
63449 // there will be only 2 of these for each stream
63450 function CorkedRequest(state) {
63451 var _this = this;
63452
63453 this.next = null;
63454 this.entry = null;
63455 this.finish = function (err) {
63456 var entry = _this.entry;
63457 _this.entry = null;
63458 while (entry) {
63459 var cb = entry.callback;
63460 state.pendingcb--;
63461 cb(err);
63462 entry = entry.next;
63463 }
63464 if (state.corkedRequestsFree) {
63465 state.corkedRequestsFree.next = _this;
63466 } else {
63467 state.corkedRequestsFree = _this;
63468 }
63469 };
63470 }
63471 }).call(this,require('_process'))
63472 },{"./_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){
63473 'use strict';
63474
63475 var Buffer = require('buffer').Buffer;
63476 /*<replacement>*/
63477 var bufferShim = require('buffer-shims');
63478 /*</replacement>*/
63479
63480 module.exports = BufferList;
63481
63482 function BufferList() {
63483 this.head = null;
63484 this.tail = null;
63485 this.length = 0;
63486 }
63487
63488 BufferList.prototype.push = function (v) {
63489 var entry = { data: v, next: null };
63490 if (this.length > 0) this.tail.next = entry;else this.head = entry;
63491 this.tail = entry;
63492 ++this.length;
63493 };
63494
63495 BufferList.prototype.unshift = function (v) {
63496 var entry = { data: v, next: this.head };
63497 if (this.length === 0) this.tail = entry;
63498 this.head = entry;
63499 ++this.length;
63500 };
63501
63502 BufferList.prototype.shift = function () {
63503 if (this.length === 0) return;
63504 var ret = this.head.data;
63505 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
63506 --this.length;
63507 return ret;
63508 };
63509
63510 BufferList.prototype.clear = function () {
63511 this.head = this.tail = null;
63512 this.length = 0;
63513 };
63514
63515 BufferList.prototype.join = function (s) {
63516 if (this.length === 0) return '';
63517 var p = this.head;
63518 var ret = '' + p.data;
63519 while (p = p.next) {
63520 ret += s + p.data;
63521 }return ret;
63522 };
63523
63524 BufferList.prototype.concat = function (n) {
63525 if (this.length === 0) return bufferShim.alloc(0);
63526 if (this.length === 1) return this.head.data;
63527 var ret = bufferShim.allocUnsafe(n >>> 0);
63528 var p = this.head;
63529 var i = 0;
63530 while (p) {
63531 p.data.copy(ret, i);
63532 i += p.data.length;
63533 p = p.next;
63534 }
63535 return ret;
63536 };
63537 },{"buffer":47,"buffer-shims":45}],127:[function(require,module,exports){
63538 module.exports = require('events').EventEmitter;
63539
63540 },{"events":83}],128:[function(require,module,exports){
63541 'use strict';
63542
63543 var Buffer = require('safe-buffer').Buffer;
63544
63545 var isEncoding = Buffer.isEncoding || function (encoding) {
63546 encoding = '' + encoding;
63547 switch (encoding && encoding.toLowerCase()) {
63548 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':
63549 return true;
63550 default:
63551 return false;
63552 }
63553 };
63554
63555 function _normalizeEncoding(enc) {
63556 if (!enc) return 'utf8';
63557 var retried;
63558 while (true) {
63559 switch (enc) {
63560 case 'utf8':
63561 case 'utf-8':
63562 return 'utf8';
63563 case 'ucs2':
63564 case 'ucs-2':
63565 case 'utf16le':
63566 case 'utf-16le':
63567 return 'utf16le';
63568 case 'latin1':
63569 case 'binary':
63570 return 'latin1';
63571 case 'base64':
63572 case 'ascii':
63573 case 'hex':
63574 return enc;
63575 default:
63576 if (retried) return; // undefined
63577 enc = ('' + enc).toLowerCase();
63578 retried = true;
63579 }
63580 }
63581 };
63582
63583 // Do not cache `Buffer.isEncoding` when checking encoding names as some
63584 // modules monkey-patch it to support additional encodings
63585 function normalizeEncoding(enc) {
63586 var nenc = _normalizeEncoding(enc);
63587 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
63588 return nenc || enc;
63589 }
63590
63591 // StringDecoder provides an interface for efficiently splitting a series of
63592 // buffers into a series of JS strings without breaking apart multi-byte
63593 // characters.
63594 exports.StringDecoder = StringDecoder;
63595 function StringDecoder(encoding) {
63596 this.encoding = normalizeEncoding(encoding);
63597 var nb;
63598 switch (this.encoding) {
63599 case 'utf16le':
63600 this.text = utf16Text;
63601 this.end = utf16End;
63602 nb = 4;
63603 break;
63604 case 'utf8':
63605 this.fillLast = utf8FillLast;
63606 nb = 4;
63607 break;
63608 case 'base64':
63609 this.text = base64Text;
63610 this.end = base64End;
63611 nb = 3;
63612 break;
63613 default:
63614 this.write = simpleWrite;
63615 this.end = simpleEnd;
63616 return;
63617 }
63618 this.lastNeed = 0;
63619 this.lastTotal = 0;
63620 this.lastChar = Buffer.allocUnsafe(nb);
63621 }
63622
63623 StringDecoder.prototype.write = function (buf) {
63624 if (buf.length === 0) return '';
63625 var r;
63626 var i;
63627 if (this.lastNeed) {
63628 r = this.fillLast(buf);
63629 if (r === undefined) return '';
63630 i = this.lastNeed;
63631 this.lastNeed = 0;
63632 } else {
63633 i = 0;
63634 }
63635 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
63636 return r || '';
63637 };
63638
63639 StringDecoder.prototype.end = utf8End;
63640
63641 // Returns only complete characters in a Buffer
63642 StringDecoder.prototype.text = utf8Text;
63643
63644 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
63645 StringDecoder.prototype.fillLast = function (buf) {
63646 if (this.lastNeed <= buf.length) {
63647 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
63648 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63649 }
63650 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
63651 this.lastNeed -= buf.length;
63652 };
63653
63654 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
63655 // continuation byte.
63656 function utf8CheckByte(byte) {
63657 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;
63658 return -1;
63659 }
63660
63661 // Checks at most 3 bytes at the end of a Buffer in order to detect an
63662 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
63663 // needed to complete the UTF-8 character (if applicable) are returned.
63664 function utf8CheckIncomplete(self, buf, i) {
63665 var j = buf.length - 1;
63666 if (j < i) return 0;
63667 var nb = utf8CheckByte(buf[j]);
63668 if (nb >= 0) {
63669 if (nb > 0) self.lastNeed = nb - 1;
63670 return nb;
63671 }
63672 if (--j < i) return 0;
63673 nb = utf8CheckByte(buf[j]);
63674 if (nb >= 0) {
63675 if (nb > 0) self.lastNeed = nb - 2;
63676 return nb;
63677 }
63678 if (--j < i) return 0;
63679 nb = utf8CheckByte(buf[j]);
63680 if (nb >= 0) {
63681 if (nb > 0) {
63682 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
63683 }
63684 return nb;
63685 }
63686 return 0;
63687 }
63688
63689 // Validates as many continuation bytes for a multi-byte UTF-8 character as
63690 // needed or are available. If we see a non-continuation byte where we expect
63691 // one, we "replace" the validated continuation bytes we've seen so far with
63692 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
63693 // behavior. The continuation byte check is included three times in the case
63694 // where all of the continuation bytes for a character exist in the same buffer.
63695 // It is also done this way as a slight performance increase instead of using a
63696 // loop.
63697 function utf8CheckExtraBytes(self, buf, p) {
63698 if ((buf[0] & 0xC0) !== 0x80) {
63699 self.lastNeed = 0;
63700 return '\ufffd'.repeat(p);
63701 }
63702 if (self.lastNeed > 1 && buf.length > 1) {
63703 if ((buf[1] & 0xC0) !== 0x80) {
63704 self.lastNeed = 1;
63705 return '\ufffd'.repeat(p + 1);
63706 }
63707 if (self.lastNeed > 2 && buf.length > 2) {
63708 if ((buf[2] & 0xC0) !== 0x80) {
63709 self.lastNeed = 2;
63710 return '\ufffd'.repeat(p + 2);
63711 }
63712 }
63713 }
63714 }
63715
63716 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
63717 function utf8FillLast(buf) {
63718 var p = this.lastTotal - this.lastNeed;
63719 var r = utf8CheckExtraBytes(this, buf, p);
63720 if (r !== undefined) return r;
63721 if (this.lastNeed <= buf.length) {
63722 buf.copy(this.lastChar, p, 0, this.lastNeed);
63723 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
63724 }
63725 buf.copy(this.lastChar, p, 0, buf.length);
63726 this.lastNeed -= buf.length;
63727 }
63728
63729 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
63730 // partial character, the character's bytes are buffered until the required
63731 // number of bytes are available.
63732 function utf8Text(buf, i) {
63733 var total = utf8CheckIncomplete(this, buf, i);
63734 if (!this.lastNeed) return buf.toString('utf8', i);
63735 this.lastTotal = total;
63736 var end = buf.length - (total - this.lastNeed);
63737 buf.copy(this.lastChar, 0, end);
63738 return buf.toString('utf8', i, end);
63739 }
63740
63741 // For UTF-8, a replacement character for each buffered byte of a (partial)
63742 // character needs to be added to the output.
63743 function utf8End(buf) {
63744 var r = buf && buf.length ? this.write(buf) : '';
63745 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
63746 return r;
63747 }
63748
63749 // UTF-16LE typically needs two bytes per character, but even if we have an even
63750 // number of bytes available, we need to check if we end on a leading/high
63751 // surrogate. In that case, we need to wait for the next two bytes in order to
63752 // decode the last character properly.
63753 function utf16Text(buf, i) {
63754 if ((buf.length - i) % 2 === 0) {
63755 var r = buf.toString('utf16le', i);
63756 if (r) {
63757 var c = r.charCodeAt(r.length - 1);
63758 if (c >= 0xD800 && c <= 0xDBFF) {
63759 this.lastNeed = 2;
63760 this.lastTotal = 4;
63761 this.lastChar[0] = buf[buf.length - 2];
63762 this.lastChar[1] = buf[buf.length - 1];
63763 return r.slice(0, -1);
63764 }
63765 }
63766 return r;
63767 }
63768 this.lastNeed = 1;
63769 this.lastTotal = 2;
63770 this.lastChar[0] = buf[buf.length - 1];
63771 return buf.toString('utf16le', i, buf.length - 1);
63772 }
63773
63774 // For UTF-16LE we do not explicitly append special replacement characters if we
63775 // end on a partial character, we simply let v8 handle that.
63776 function utf16End(buf) {
63777 var r = buf && buf.length ? this.write(buf) : '';
63778 if (this.lastNeed) {
63779 var end = this.lastTotal - this.lastNeed;
63780 return r + this.lastChar.toString('utf16le', 0, end);
63781 }
63782 return r;
63783 }
63784
63785 function base64Text(buf, i) {
63786 var n = (buf.length - i) % 3;
63787 if (n === 0) return buf.toString('base64', i);
63788 this.lastNeed = 3 - n;
63789 this.lastTotal = 3;
63790 if (n === 1) {
63791 this.lastChar[0] = buf[buf.length - 1];
63792 } else {
63793 this.lastChar[0] = buf[buf.length - 2];
63794 this.lastChar[1] = buf[buf.length - 1];
63795 }
63796 return buf.toString('base64', i, buf.length - n);
63797 }
63798
63799 function base64End(buf) {
63800 var r = buf && buf.length ? this.write(buf) : '';
63801 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
63802 return r;
63803 }
63804
63805 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
63806 function simpleWrite(buf) {
63807 return buf.toString(this.encoding);
63808 }
63809
63810 function simpleEnd(buf) {
63811 return buf && buf.length ? this.write(buf) : '';
63812 }
63813 },{"safe-buffer":134}],129:[function(require,module,exports){
63814 module.exports = require('./readable').PassThrough
63815
63816 },{"./readable":130}],130:[function(require,module,exports){
63817 exports = module.exports = require('./lib/_stream_readable.js');
63818 exports.Stream = exports;
63819 exports.Readable = exports;
63820 exports.Writable = require('./lib/_stream_writable.js');
63821 exports.Duplex = require('./lib/_stream_duplex.js');
63822 exports.Transform = require('./lib/_stream_transform.js');
63823 exports.PassThrough = require('./lib/_stream_passthrough.js');
63824
63825 },{"./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){
63826 module.exports = require('./readable').Transform
63827
63828 },{"./readable":130}],132:[function(require,module,exports){
63829 module.exports = require('./lib/_stream_writable.js');
63830
63831 },{"./lib/_stream_writable.js":125}],133:[function(require,module,exports){
63832 (function (Buffer){
63833 'use strict'
63834 var inherits = require('inherits')
63835 var HashBase = require('hash-base')
63836
63837 function RIPEMD160 () {
63838 HashBase.call(this, 64)
63839
63840 // state
63841 this._a = 0x67452301
63842 this._b = 0xefcdab89
63843 this._c = 0x98badcfe
63844 this._d = 0x10325476
63845 this._e = 0xc3d2e1f0
63846 }
63847
63848 inherits(RIPEMD160, HashBase)
63849
63850 RIPEMD160.prototype._update = function () {
63851 var m = new Array(16)
63852 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
63853
63854 var al = this._a
63855 var bl = this._b
63856 var cl = this._c
63857 var dl = this._d
63858 var el = this._e
63859
63860 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
63861 // K = 0x00000000
63862 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
63863 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
63864 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
63865 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
63866 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
63867 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
63868 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
63869 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
63870 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
63871 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
63872 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
63873 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
63874 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
63875 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
63876 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
63877 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
63878 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
63879
63880 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
63881 // K = 0x5a827999
63882 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
63883 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
63884 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
63885 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
63886 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
63887 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
63888 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
63889 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
63890 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
63891 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
63892 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
63893 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
63894 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
63895 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
63896 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
63897 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
63898 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
63899
63900 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
63901 // K = 0x6ed9eba1
63902 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
63903 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
63904 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
63905 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
63906 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
63907 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
63908 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
63909 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
63910 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
63911 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
63912 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
63913 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
63914 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
63915 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
63916 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
63917 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
63918 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
63919
63920 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
63921 // K = 0x8f1bbcdc
63922 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
63923 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
63924 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
63925 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
63926 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
63927 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
63928 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
63929 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
63930 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63931 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
63932 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
63933 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
63934 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
63935 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
63936 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
63937 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
63938 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
63939
63940 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
63941 // K = 0xa953fd4e
63942 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
63943 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
63944 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
63945 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
63946 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
63947 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
63948 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
63949 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
63950 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
63951 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
63952 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
63953 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
63954 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
63955 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
63956 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
63957 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
63958 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
63959
63960 var ar = this._a
63961 var br = this._b
63962 var cr = this._c
63963 var dr = this._d
63964 var er = this._e
63965
63966 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
63967 // K' = 0x50a28be6
63968 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
63969 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
63970 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
63971 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
63972 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
63973 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
63974 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
63975 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
63976 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
63977 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
63978 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
63979 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
63980 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
63981 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
63982 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
63983 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
63984 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
63985
63986 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
63987 // K' = 0x5c4dd124
63988 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
63989 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
63990 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
63991 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
63992 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
63993 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
63994 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
63995 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
63996 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
63997 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
63998 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
63999 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
64000 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
64001 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
64002 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
64003 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
64004 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
64005
64006 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
64007 // K' = 0x6d703ef3
64008 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
64009 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
64010 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
64011 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
64012 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
64013 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
64014 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
64015 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
64016 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
64017 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
64018 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
64019 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
64020 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
64021 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
64022 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
64023 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
64024 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
64025
64026 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
64027 // K' = 0x7a6d76e9
64028 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
64029 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
64030 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
64031 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
64032 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
64033 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
64034 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
64035 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
64036 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
64037 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
64038 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
64039 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
64040 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
64041 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
64042 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
64043 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
64044 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
64045
64046 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
64047 // K' = 0x00000000
64048 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
64049 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
64050 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
64051 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
64052 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
64053 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
64054 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
64055 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
64056 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
64057 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
64058 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
64059 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
64060 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
64061 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
64062 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
64063 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
64064 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
64065
64066 // change state
64067 var t = (this._b + cl + dr) | 0
64068 this._b = (this._c + dl + er) | 0
64069 this._c = (this._d + el + ar) | 0
64070 this._d = (this._e + al + br) | 0
64071 this._e = (this._a + bl + cr) | 0
64072 this._a = t
64073 }
64074
64075 RIPEMD160.prototype._digest = function () {
64076 // create padding and handle blocks
64077 this._block[this._blockOffset++] = 0x80
64078 if (this._blockOffset > 56) {
64079 this._block.fill(0, this._blockOffset, 64)
64080 this._update()
64081 this._blockOffset = 0
64082 }
64083
64084 this._block.fill(0, this._blockOffset, 56)
64085 this._block.writeUInt32LE(this._length[0], 56)
64086 this._block.writeUInt32LE(this._length[1], 60)
64087 this._update()
64088
64089 // produce result
64090 var buffer = new Buffer(20)
64091 buffer.writeInt32LE(this._a, 0)
64092 buffer.writeInt32LE(this._b, 4)
64093 buffer.writeInt32LE(this._c, 8)
64094 buffer.writeInt32LE(this._d, 12)
64095 buffer.writeInt32LE(this._e, 16)
64096 return buffer
64097 }
64098
64099 function rotl (x, n) {
64100 return (x << n) | (x >>> (32 - n))
64101 }
64102
64103 function fn1 (a, b, c, d, e, m, k, s) {
64104 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
64105 }
64106
64107 function fn2 (a, b, c, d, e, m, k, s) {
64108 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
64109 }
64110
64111 function fn3 (a, b, c, d, e, m, k, s) {
64112 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
64113 }
64114
64115 function fn4 (a, b, c, d, e, m, k, s) {
64116 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
64117 }
64118
64119 function fn5 (a, b, c, d, e, m, k, s) {
64120 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
64121 }
64122
64123 module.exports = RIPEMD160
64124
64125 }).call(this,require("buffer").Buffer)
64126 },{"buffer":47,"hash-base":85,"inherits":95}],134:[function(require,module,exports){
64127 module.exports = require('buffer')
64128
64129 },{"buffer":47}],135:[function(require,module,exports){
64130 (function (Buffer){
64131 // prototype class for hash functions
64132 function Hash (blockSize, finalSize) {
64133 this._block = new Buffer(blockSize)
64134 this._finalSize = finalSize
64135 this._blockSize = blockSize
64136 this._len = 0
64137 this._s = 0
64138 }
64139
64140 Hash.prototype.update = function (data, enc) {
64141 if (typeof data === 'string') {
64142 enc = enc || 'utf8'
64143 data = new Buffer(data, enc)
64144 }
64145
64146 var l = this._len += data.length
64147 var s = this._s || 0
64148 var f = 0
64149 var buffer = this._block
64150
64151 while (s < l) {
64152 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
64153 var ch = (t - f)
64154
64155 for (var i = 0; i < ch; i++) {
64156 buffer[(s % this._blockSize) + i] = data[i + f]
64157 }
64158
64159 s += ch
64160 f += ch
64161
64162 if ((s % this._blockSize) === 0) {
64163 this._update(buffer)
64164 }
64165 }
64166 this._s = s
64167
64168 return this
64169 }
64170
64171 Hash.prototype.digest = function (enc) {
64172 // Suppose the length of the message M, in bits, is l
64173 var l = this._len * 8
64174
64175 // Append the bit 1 to the end of the message
64176 this._block[this._len % this._blockSize] = 0x80
64177
64178 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
64179 this._block.fill(0, this._len % this._blockSize + 1)
64180
64181 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
64182 this._update(this._block)
64183 this._block.fill(0)
64184 }
64185
64186 // to this append the block which is equal to the number l written in binary
64187 // TODO: handle case where l is > Math.pow(2, 29)
64188 this._block.writeInt32BE(l, this._blockSize - 4)
64189
64190 var hash = this._update(this._block) || this._hash()
64191
64192 return enc ? hash.toString(enc) : hash
64193 }
64194
64195 Hash.prototype._update = function () {
64196 throw new Error('_update must be implemented by subclass')
64197 }
64198
64199 module.exports = Hash
64200
64201 }).call(this,require("buffer").Buffer)
64202 },{"buffer":47}],136:[function(require,module,exports){
64203 var exports = module.exports = function SHA (algorithm) {
64204 algorithm = algorithm.toLowerCase()
64205
64206 var Algorithm = exports[algorithm]
64207 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
64208
64209 return new Algorithm()
64210 }
64211
64212 exports.sha = require('./sha')
64213 exports.sha1 = require('./sha1')
64214 exports.sha224 = require('./sha224')
64215 exports.sha256 = require('./sha256')
64216 exports.sha384 = require('./sha384')
64217 exports.sha512 = require('./sha512')
64218
64219 },{"./sha":137,"./sha1":138,"./sha224":139,"./sha256":140,"./sha384":141,"./sha512":142}],137:[function(require,module,exports){
64220 (function (Buffer){
64221 /*
64222 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
64223 * in FIPS PUB 180-1
64224 * This source code is derived from sha1.js of the same repository.
64225 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
64226 * operation was added.
64227 */
64228
64229 var inherits = require('inherits')
64230 var Hash = require('./hash')
64231
64232 var K = [
64233 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64234 ]
64235
64236 var W = new Array(80)
64237
64238 function Sha () {
64239 this.init()
64240 this._w = W
64241
64242 Hash.call(this, 64, 56)
64243 }
64244
64245 inherits(Sha, Hash)
64246
64247 Sha.prototype.init = function () {
64248 this._a = 0x67452301
64249 this._b = 0xefcdab89
64250 this._c = 0x98badcfe
64251 this._d = 0x10325476
64252 this._e = 0xc3d2e1f0
64253
64254 return this
64255 }
64256
64257 function rotl5 (num) {
64258 return (num << 5) | (num >>> 27)
64259 }
64260
64261 function rotl30 (num) {
64262 return (num << 30) | (num >>> 2)
64263 }
64264
64265 function ft (s, b, c, d) {
64266 if (s === 0) return (b & c) | ((~b) & d)
64267 if (s === 2) return (b & c) | (b & d) | (c & d)
64268 return b ^ c ^ d
64269 }
64270
64271 Sha.prototype._update = function (M) {
64272 var W = this._w
64273
64274 var a = this._a | 0
64275 var b = this._b | 0
64276 var c = this._c | 0
64277 var d = this._d | 0
64278 var e = this._e | 0
64279
64280 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64281 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
64282
64283 for (var j = 0; j < 80; ++j) {
64284 var s = ~~(j / 20)
64285 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64286
64287 e = d
64288 d = c
64289 c = rotl30(b)
64290 b = a
64291 a = t
64292 }
64293
64294 this._a = (a + this._a) | 0
64295 this._b = (b + this._b) | 0
64296 this._c = (c + this._c) | 0
64297 this._d = (d + this._d) | 0
64298 this._e = (e + this._e) | 0
64299 }
64300
64301 Sha.prototype._hash = function () {
64302 var H = new Buffer(20)
64303
64304 H.writeInt32BE(this._a | 0, 0)
64305 H.writeInt32BE(this._b | 0, 4)
64306 H.writeInt32BE(this._c | 0, 8)
64307 H.writeInt32BE(this._d | 0, 12)
64308 H.writeInt32BE(this._e | 0, 16)
64309
64310 return H
64311 }
64312
64313 module.exports = Sha
64314
64315 }).call(this,require("buffer").Buffer)
64316 },{"./hash":135,"buffer":47,"inherits":95}],138:[function(require,module,exports){
64317 (function (Buffer){
64318 /*
64319 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
64320 * in FIPS PUB 180-1
64321 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
64322 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64323 * Distributed under the BSD License
64324 * See http://pajhome.org.uk/crypt/md5 for details.
64325 */
64326
64327 var inherits = require('inherits')
64328 var Hash = require('./hash')
64329
64330 var K = [
64331 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
64332 ]
64333
64334 var W = new Array(80)
64335
64336 function Sha1 () {
64337 this.init()
64338 this._w = W
64339
64340 Hash.call(this, 64, 56)
64341 }
64342
64343 inherits(Sha1, Hash)
64344
64345 Sha1.prototype.init = function () {
64346 this._a = 0x67452301
64347 this._b = 0xefcdab89
64348 this._c = 0x98badcfe
64349 this._d = 0x10325476
64350 this._e = 0xc3d2e1f0
64351
64352 return this
64353 }
64354
64355 function rotl1 (num) {
64356 return (num << 1) | (num >>> 31)
64357 }
64358
64359 function rotl5 (num) {
64360 return (num << 5) | (num >>> 27)
64361 }
64362
64363 function rotl30 (num) {
64364 return (num << 30) | (num >>> 2)
64365 }
64366
64367 function ft (s, b, c, d) {
64368 if (s === 0) return (b & c) | ((~b) & d)
64369 if (s === 2) return (b & c) | (b & d) | (c & d)
64370 return b ^ c ^ d
64371 }
64372
64373 Sha1.prototype._update = function (M) {
64374 var W = this._w
64375
64376 var a = this._a | 0
64377 var b = this._b | 0
64378 var c = this._c | 0
64379 var d = this._d | 0
64380 var e = this._e | 0
64381
64382 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64383 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
64384
64385 for (var j = 0; j < 80; ++j) {
64386 var s = ~~(j / 20)
64387 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
64388
64389 e = d
64390 d = c
64391 c = rotl30(b)
64392 b = a
64393 a = t
64394 }
64395
64396 this._a = (a + this._a) | 0
64397 this._b = (b + this._b) | 0
64398 this._c = (c + this._c) | 0
64399 this._d = (d + this._d) | 0
64400 this._e = (e + this._e) | 0
64401 }
64402
64403 Sha1.prototype._hash = function () {
64404 var H = new Buffer(20)
64405
64406 H.writeInt32BE(this._a | 0, 0)
64407 H.writeInt32BE(this._b | 0, 4)
64408 H.writeInt32BE(this._c | 0, 8)
64409 H.writeInt32BE(this._d | 0, 12)
64410 H.writeInt32BE(this._e | 0, 16)
64411
64412 return H
64413 }
64414
64415 module.exports = Sha1
64416
64417 }).call(this,require("buffer").Buffer)
64418 },{"./hash":135,"buffer":47,"inherits":95}],139:[function(require,module,exports){
64419 (function (Buffer){
64420 /**
64421 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64422 * in FIPS 180-2
64423 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64424 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64425 *
64426 */
64427
64428 var inherits = require('inherits')
64429 var Sha256 = require('./sha256')
64430 var Hash = require('./hash')
64431
64432 var W = new Array(64)
64433
64434 function Sha224 () {
64435 this.init()
64436
64437 this._w = W // new Array(64)
64438
64439 Hash.call(this, 64, 56)
64440 }
64441
64442 inherits(Sha224, Sha256)
64443
64444 Sha224.prototype.init = function () {
64445 this._a = 0xc1059ed8
64446 this._b = 0x367cd507
64447 this._c = 0x3070dd17
64448 this._d = 0xf70e5939
64449 this._e = 0xffc00b31
64450 this._f = 0x68581511
64451 this._g = 0x64f98fa7
64452 this._h = 0xbefa4fa4
64453
64454 return this
64455 }
64456
64457 Sha224.prototype._hash = function () {
64458 var H = new Buffer(28)
64459
64460 H.writeInt32BE(this._a, 0)
64461 H.writeInt32BE(this._b, 4)
64462 H.writeInt32BE(this._c, 8)
64463 H.writeInt32BE(this._d, 12)
64464 H.writeInt32BE(this._e, 16)
64465 H.writeInt32BE(this._f, 20)
64466 H.writeInt32BE(this._g, 24)
64467
64468 return H
64469 }
64470
64471 module.exports = Sha224
64472
64473 }).call(this,require("buffer").Buffer)
64474 },{"./hash":135,"./sha256":140,"buffer":47,"inherits":95}],140:[function(require,module,exports){
64475 (function (Buffer){
64476 /**
64477 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
64478 * in FIPS 180-2
64479 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
64480 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
64481 *
64482 */
64483
64484 var inherits = require('inherits')
64485 var Hash = require('./hash')
64486
64487 var K = [
64488 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
64489 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
64490 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
64491 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
64492 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
64493 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
64494 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
64495 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
64496 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
64497 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
64498 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
64499 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
64500 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
64501 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
64502 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
64503 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
64504 ]
64505
64506 var W = new Array(64)
64507
64508 function Sha256 () {
64509 this.init()
64510
64511 this._w = W // new Array(64)
64512
64513 Hash.call(this, 64, 56)
64514 }
64515
64516 inherits(Sha256, Hash)
64517
64518 Sha256.prototype.init = function () {
64519 this._a = 0x6a09e667
64520 this._b = 0xbb67ae85
64521 this._c = 0x3c6ef372
64522 this._d = 0xa54ff53a
64523 this._e = 0x510e527f
64524 this._f = 0x9b05688c
64525 this._g = 0x1f83d9ab
64526 this._h = 0x5be0cd19
64527
64528 return this
64529 }
64530
64531 function ch (x, y, z) {
64532 return z ^ (x & (y ^ z))
64533 }
64534
64535 function maj (x, y, z) {
64536 return (x & y) | (z & (x | y))
64537 }
64538
64539 function sigma0 (x) {
64540 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
64541 }
64542
64543 function sigma1 (x) {
64544 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
64545 }
64546
64547 function gamma0 (x) {
64548 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
64549 }
64550
64551 function gamma1 (x) {
64552 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
64553 }
64554
64555 Sha256.prototype._update = function (M) {
64556 var W = this._w
64557
64558 var a = this._a | 0
64559 var b = this._b | 0
64560 var c = this._c | 0
64561 var d = this._d | 0
64562 var e = this._e | 0
64563 var f = this._f | 0
64564 var g = this._g | 0
64565 var h = this._h | 0
64566
64567 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
64568 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
64569
64570 for (var j = 0; j < 64; ++j) {
64571 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
64572 var T2 = (sigma0(a) + maj(a, b, c)) | 0
64573
64574 h = g
64575 g = f
64576 f = e
64577 e = (d + T1) | 0
64578 d = c
64579 c = b
64580 b = a
64581 a = (T1 + T2) | 0
64582 }
64583
64584 this._a = (a + this._a) | 0
64585 this._b = (b + this._b) | 0
64586 this._c = (c + this._c) | 0
64587 this._d = (d + this._d) | 0
64588 this._e = (e + this._e) | 0
64589 this._f = (f + this._f) | 0
64590 this._g = (g + this._g) | 0
64591 this._h = (h + this._h) | 0
64592 }
64593
64594 Sha256.prototype._hash = function () {
64595 var H = new Buffer(32)
64596
64597 H.writeInt32BE(this._a, 0)
64598 H.writeInt32BE(this._b, 4)
64599 H.writeInt32BE(this._c, 8)
64600 H.writeInt32BE(this._d, 12)
64601 H.writeInt32BE(this._e, 16)
64602 H.writeInt32BE(this._f, 20)
64603 H.writeInt32BE(this._g, 24)
64604 H.writeInt32BE(this._h, 28)
64605
64606 return H
64607 }
64608
64609 module.exports = Sha256
64610
64611 }).call(this,require("buffer").Buffer)
64612 },{"./hash":135,"buffer":47,"inherits":95}],141:[function(require,module,exports){
64613 (function (Buffer){
64614 var inherits = require('inherits')
64615 var SHA512 = require('./sha512')
64616 var Hash = require('./hash')
64617
64618 var W = new Array(160)
64619
64620 function Sha384 () {
64621 this.init()
64622 this._w = W
64623
64624 Hash.call(this, 128, 112)
64625 }
64626
64627 inherits(Sha384, SHA512)
64628
64629 Sha384.prototype.init = function () {
64630 this._ah = 0xcbbb9d5d
64631 this._bh = 0x629a292a
64632 this._ch = 0x9159015a
64633 this._dh = 0x152fecd8
64634 this._eh = 0x67332667
64635 this._fh = 0x8eb44a87
64636 this._gh = 0xdb0c2e0d
64637 this._hh = 0x47b5481d
64638
64639 this._al = 0xc1059ed8
64640 this._bl = 0x367cd507
64641 this._cl = 0x3070dd17
64642 this._dl = 0xf70e5939
64643 this._el = 0xffc00b31
64644 this._fl = 0x68581511
64645 this._gl = 0x64f98fa7
64646 this._hl = 0xbefa4fa4
64647
64648 return this
64649 }
64650
64651 Sha384.prototype._hash = function () {
64652 var H = new Buffer(48)
64653
64654 function writeInt64BE (h, l, offset) {
64655 H.writeInt32BE(h, offset)
64656 H.writeInt32BE(l, offset + 4)
64657 }
64658
64659 writeInt64BE(this._ah, this._al, 0)
64660 writeInt64BE(this._bh, this._bl, 8)
64661 writeInt64BE(this._ch, this._cl, 16)
64662 writeInt64BE(this._dh, this._dl, 24)
64663 writeInt64BE(this._eh, this._el, 32)
64664 writeInt64BE(this._fh, this._fl, 40)
64665
64666 return H
64667 }
64668
64669 module.exports = Sha384
64670
64671 }).call(this,require("buffer").Buffer)
64672 },{"./hash":135,"./sha512":142,"buffer":47,"inherits":95}],142:[function(require,module,exports){
64673 (function (Buffer){
64674 var inherits = require('inherits')
64675 var Hash = require('./hash')
64676
64677 var K = [
64678 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
64679 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
64680 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
64681 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
64682 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
64683 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
64684 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
64685 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
64686 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
64687 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
64688 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
64689 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
64690 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
64691 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
64692 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
64693 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
64694 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
64695 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
64696 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
64697 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
64698 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
64699 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
64700 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
64701 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
64702 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
64703 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
64704 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
64705 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
64706 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
64707 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
64708 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
64709 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
64710 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
64711 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
64712 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
64713 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
64714 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
64715 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
64716 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
64717 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
64718 ]
64719
64720 var W = new Array(160)
64721
64722 function Sha512 () {
64723 this.init()
64724 this._w = W
64725
64726 Hash.call(this, 128, 112)
64727 }
64728
64729 inherits(Sha512, Hash)
64730
64731 Sha512.prototype.init = function () {
64732 this._ah = 0x6a09e667
64733 this._bh = 0xbb67ae85
64734 this._ch = 0x3c6ef372
64735 this._dh = 0xa54ff53a
64736 this._eh = 0x510e527f
64737 this._fh = 0x9b05688c
64738 this._gh = 0x1f83d9ab
64739 this._hh = 0x5be0cd19
64740
64741 this._al = 0xf3bcc908
64742 this._bl = 0x84caa73b
64743 this._cl = 0xfe94f82b
64744 this._dl = 0x5f1d36f1
64745 this._el = 0xade682d1
64746 this._fl = 0x2b3e6c1f
64747 this._gl = 0xfb41bd6b
64748 this._hl = 0x137e2179
64749
64750 return this
64751 }
64752
64753 function Ch (x, y, z) {
64754 return z ^ (x & (y ^ z))
64755 }
64756
64757 function maj (x, y, z) {
64758 return (x & y) | (z & (x | y))
64759 }
64760
64761 function sigma0 (x, xl) {
64762 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
64763 }
64764
64765 function sigma1 (x, xl) {
64766 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
64767 }
64768
64769 function Gamma0 (x, xl) {
64770 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
64771 }
64772
64773 function Gamma0l (x, xl) {
64774 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
64775 }
64776
64777 function Gamma1 (x, xl) {
64778 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
64779 }
64780
64781 function Gamma1l (x, xl) {
64782 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
64783 }
64784
64785 function getCarry (a, b) {
64786 return (a >>> 0) < (b >>> 0) ? 1 : 0
64787 }
64788
64789 Sha512.prototype._update = function (M) {
64790 var W = this._w
64791
64792 var ah = this._ah | 0
64793 var bh = this._bh | 0
64794 var ch = this._ch | 0
64795 var dh = this._dh | 0
64796 var eh = this._eh | 0
64797 var fh = this._fh | 0
64798 var gh = this._gh | 0
64799 var hh = this._hh | 0
64800
64801 var al = this._al | 0
64802 var bl = this._bl | 0
64803 var cl = this._cl | 0
64804 var dl = this._dl | 0
64805 var el = this._el | 0
64806 var fl = this._fl | 0
64807 var gl = this._gl | 0
64808 var hl = this._hl | 0
64809
64810 for (var i = 0; i < 32; i += 2) {
64811 W[i] = M.readInt32BE(i * 4)
64812 W[i + 1] = M.readInt32BE(i * 4 + 4)
64813 }
64814 for (; i < 160; i += 2) {
64815 var xh = W[i - 15 * 2]
64816 var xl = W[i - 15 * 2 + 1]
64817 var gamma0 = Gamma0(xh, xl)
64818 var gamma0l = Gamma0l(xl, xh)
64819
64820 xh = W[i - 2 * 2]
64821 xl = W[i - 2 * 2 + 1]
64822 var gamma1 = Gamma1(xh, xl)
64823 var gamma1l = Gamma1l(xl, xh)
64824
64825 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
64826 var Wi7h = W[i - 7 * 2]
64827 var Wi7l = W[i - 7 * 2 + 1]
64828
64829 var Wi16h = W[i - 16 * 2]
64830 var Wi16l = W[i - 16 * 2 + 1]
64831
64832 var Wil = (gamma0l + Wi7l) | 0
64833 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
64834 Wil = (Wil + gamma1l) | 0
64835 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
64836 Wil = (Wil + Wi16l) | 0
64837 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
64838
64839 W[i] = Wih
64840 W[i + 1] = Wil
64841 }
64842
64843 for (var j = 0; j < 160; j += 2) {
64844 Wih = W[j]
64845 Wil = W[j + 1]
64846
64847 var majh = maj(ah, bh, ch)
64848 var majl = maj(al, bl, cl)
64849
64850 var sigma0h = sigma0(ah, al)
64851 var sigma0l = sigma0(al, ah)
64852 var sigma1h = sigma1(eh, el)
64853 var sigma1l = sigma1(el, eh)
64854
64855 // t1 = h + sigma1 + ch + K[j] + W[j]
64856 var Kih = K[j]
64857 var Kil = K[j + 1]
64858
64859 var chh = Ch(eh, fh, gh)
64860 var chl = Ch(el, fl, gl)
64861
64862 var t1l = (hl + sigma1l) | 0
64863 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
64864 t1l = (t1l + chl) | 0
64865 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
64866 t1l = (t1l + Kil) | 0
64867 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
64868 t1l = (t1l + Wil) | 0
64869 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
64870
64871 // t2 = sigma0 + maj
64872 var t2l = (sigma0l + majl) | 0
64873 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
64874
64875 hh = gh
64876 hl = gl
64877 gh = fh
64878 gl = fl
64879 fh = eh
64880 fl = el
64881 el = (dl + t1l) | 0
64882 eh = (dh + t1h + getCarry(el, dl)) | 0
64883 dh = ch
64884 dl = cl
64885 ch = bh
64886 cl = bl
64887 bh = ah
64888 bl = al
64889 al = (t1l + t2l) | 0
64890 ah = (t1h + t2h + getCarry(al, t1l)) | 0
64891 }
64892
64893 this._al = (this._al + al) | 0
64894 this._bl = (this._bl + bl) | 0
64895 this._cl = (this._cl + cl) | 0
64896 this._dl = (this._dl + dl) | 0
64897 this._el = (this._el + el) | 0
64898 this._fl = (this._fl + fl) | 0
64899 this._gl = (this._gl + gl) | 0
64900 this._hl = (this._hl + hl) | 0
64901
64902 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
64903 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
64904 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
64905 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
64906 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
64907 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
64908 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
64909 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
64910 }
64911
64912 Sha512.prototype._hash = function () {
64913 var H = new Buffer(64)
64914
64915 function writeInt64BE (h, l, offset) {
64916 H.writeInt32BE(h, offset)
64917 H.writeInt32BE(l, offset + 4)
64918 }
64919
64920 writeInt64BE(this._ah, this._al, 0)
64921 writeInt64BE(this._bh, this._bl, 8)
64922 writeInt64BE(this._ch, this._cl, 16)
64923 writeInt64BE(this._dh, this._dl, 24)
64924 writeInt64BE(this._eh, this._el, 32)
64925 writeInt64BE(this._fh, this._fl, 40)
64926 writeInt64BE(this._gh, this._gl, 48)
64927 writeInt64BE(this._hh, this._hl, 56)
64928
64929 return H
64930 }
64931
64932 module.exports = Sha512
64933
64934 }).call(this,require("buffer").Buffer)
64935 },{"./hash":135,"buffer":47,"inherits":95}],143:[function(require,module,exports){
64936 // Copyright Joyent, Inc. and other Node contributors.
64937 //
64938 // Permission is hereby granted, free of charge, to any person obtaining a
64939 // copy of this software and associated documentation files (the
64940 // "Software"), to deal in the Software without restriction, including
64941 // without limitation the rights to use, copy, modify, merge, publish,
64942 // distribute, sublicense, and/or sell copies of the Software, and to permit
64943 // persons to whom the Software is furnished to do so, subject to the
64944 // following conditions:
64945 //
64946 // The above copyright notice and this permission notice shall be included
64947 // in all copies or substantial portions of the Software.
64948 //
64949 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
64950 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
64951 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
64952 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
64953 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
64954 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
64955 // USE OR OTHER DEALINGS IN THE SOFTWARE.
64956
64957 module.exports = Stream;
64958
64959 var EE = require('events').EventEmitter;
64960 var inherits = require('inherits');
64961
64962 inherits(Stream, EE);
64963 Stream.Readable = require('readable-stream/readable.js');
64964 Stream.Writable = require('readable-stream/writable.js');
64965 Stream.Duplex = require('readable-stream/duplex.js');
64966 Stream.Transform = require('readable-stream/transform.js');
64967 Stream.PassThrough = require('readable-stream/passthrough.js');
64968
64969 // Backwards-compat with node 0.4.x
64970 Stream.Stream = Stream;
64971
64972
64973
64974 // old-style streams. Note that the pipe method (the only relevant
64975 // part of this class) is overridden in the Readable class.
64976
64977 function Stream() {
64978 EE.call(this);
64979 }
64980
64981 Stream.prototype.pipe = function(dest, options) {
64982 var source = this;
64983
64984 function ondata(chunk) {
64985 if (dest.writable) {
64986 if (false === dest.write(chunk) && source.pause) {
64987 source.pause();
64988 }
64989 }
64990 }
64991
64992 source.on('data', ondata);
64993
64994 function ondrain() {
64995 if (source.readable && source.resume) {
64996 source.resume();
64997 }
64998 }
64999
65000 dest.on('drain', ondrain);
65001
65002 // If the 'end' option is not supplied, dest.end() will be called when
65003 // source gets the 'end' or 'close' events. Only dest.end() once.
65004 if (!dest._isStdio && (!options || options.end !== false)) {
65005 source.on('end', onend);
65006 source.on('close', onclose);
65007 }
65008
65009 var didOnEnd = false;
65010 function onend() {
65011 if (didOnEnd) return;
65012 didOnEnd = true;
65013
65014 dest.end();
65015 }
65016
65017
65018 function onclose() {
65019 if (didOnEnd) return;
65020 didOnEnd = true;
65021
65022 if (typeof dest.destroy === 'function') dest.destroy();
65023 }
65024
65025 // don't leave dangling pipes when there are errors.
65026 function onerror(er) {
65027 cleanup();
65028 if (EE.listenerCount(this, 'error') === 0) {
65029 throw er; // Unhandled stream error in pipe.
65030 }
65031 }
65032
65033 source.on('error', onerror);
65034 dest.on('error', onerror);
65035
65036 // remove all the event listeners that were added.
65037 function cleanup() {
65038 source.removeListener('data', ondata);
65039 dest.removeListener('drain', ondrain);
65040
65041 source.removeListener('end', onend);
65042 source.removeListener('close', onclose);
65043
65044 source.removeListener('error', onerror);
65045 dest.removeListener('error', onerror);
65046
65047 source.removeListener('end', cleanup);
65048 source.removeListener('close', cleanup);
65049
65050 dest.removeListener('close', cleanup);
65051 }
65052
65053 source.on('end', cleanup);
65054 source.on('close', cleanup);
65055
65056 dest.on('close', cleanup);
65057
65058 dest.emit('pipe', source);
65059
65060 // Allow for unix-like usage: A.pipe(B).pipe(C)
65061 return dest;
65062 };
65063
65064 },{"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){
65065 // Copyright Joyent, Inc. and other Node contributors.
65066 //
65067 // Permission is hereby granted, free of charge, to any person obtaining a
65068 // copy of this software and associated documentation files (the
65069 // "Software"), to deal in the Software without restriction, including
65070 // without limitation the rights to use, copy, modify, merge, publish,
65071 // distribute, sublicense, and/or sell copies of the Software, and to permit
65072 // persons to whom the Software is furnished to do so, subject to the
65073 // following conditions:
65074 //
65075 // The above copyright notice and this permission notice shall be included
65076 // in all copies or substantial portions of the Software.
65077 //
65078 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
65079 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
65080 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
65081 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
65082 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
65083 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
65084 // USE OR OTHER DEALINGS IN THE SOFTWARE.
65085
65086 var Buffer = require('buffer').Buffer;
65087
65088 var isBufferEncoding = Buffer.isEncoding
65089 || function(encoding) {
65090 switch (encoding && encoding.toLowerCase()) {
65091 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;
65092 default: return false;
65093 }
65094 }
65095
65096
65097 function assertEncoding(encoding) {
65098 if (encoding && !isBufferEncoding(encoding)) {
65099 throw new Error('Unknown encoding: ' + encoding);
65100 }
65101 }
65102
65103 // StringDecoder provides an interface for efficiently splitting a series of
65104 // buffers into a series of JS strings without breaking apart multi-byte
65105 // characters. CESU-8 is handled as part of the UTF-8 encoding.
65106 //
65107 // @TODO Handling all encodings inside a single object makes it very difficult
65108 // to reason about this code, so it should be split up in the future.
65109 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
65110 // points as used by CESU-8.
65111 var StringDecoder = exports.StringDecoder = function(encoding) {
65112 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
65113 assertEncoding(encoding);
65114 switch (this.encoding) {
65115 case 'utf8':
65116 // CESU-8 represents each of Surrogate Pair by 3-bytes
65117 this.surrogateSize = 3;
65118 break;
65119 case 'ucs2':
65120 case 'utf16le':
65121 // UTF-16 represents each of Surrogate Pair by 2-bytes
65122 this.surrogateSize = 2;
65123 this.detectIncompleteChar = utf16DetectIncompleteChar;
65124 break;
65125 case 'base64':
65126 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
65127 this.surrogateSize = 3;
65128 this.detectIncompleteChar = base64DetectIncompleteChar;
65129 break;
65130 default:
65131 this.write = passThroughWrite;
65132 return;
65133 }
65134
65135 // Enough space to store all bytes of a single character. UTF-8 needs 4
65136 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
65137 this.charBuffer = new Buffer(6);
65138 // Number of bytes received for the current incomplete multi-byte character.
65139 this.charReceived = 0;
65140 // Number of bytes expected for the current incomplete multi-byte character.
65141 this.charLength = 0;
65142 };
65143
65144
65145 // write decodes the given buffer and returns it as JS string that is
65146 // guaranteed to not contain any partial multi-byte characters. Any partial
65147 // character found at the end of the buffer is buffered up, and will be
65148 // returned when calling write again with the remaining bytes.
65149 //
65150 // Note: Converting a Buffer containing an orphan surrogate to a String
65151 // currently works, but converting a String to a Buffer (via `new Buffer`, or
65152 // Buffer#write) will replace incomplete surrogates with the unicode
65153 // replacement character. See https://codereview.chromium.org/121173009/ .
65154 StringDecoder.prototype.write = function(buffer) {
65155 var charStr = '';
65156 // if our last write ended with an incomplete multibyte character
65157 while (this.charLength) {
65158 // determine how many remaining bytes this buffer has to offer for this char
65159 var available = (buffer.length >= this.charLength - this.charReceived) ?
65160 this.charLength - this.charReceived :
65161 buffer.length;
65162
65163 // add the new bytes to the char buffer
65164 buffer.copy(this.charBuffer, this.charReceived, 0, available);
65165 this.charReceived += available;
65166
65167 if (this.charReceived < this.charLength) {
65168 // still not enough chars in this buffer? wait for more ...
65169 return '';
65170 }
65171
65172 // remove bytes belonging to the current character from the buffer
65173 buffer = buffer.slice(available, buffer.length);
65174
65175 // get the character that was split
65176 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
65177
65178 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65179 var charCode = charStr.charCodeAt(charStr.length - 1);
65180 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65181 this.charLength += this.surrogateSize;
65182 charStr = '';
65183 continue;
65184 }
65185 this.charReceived = this.charLength = 0;
65186
65187 // if there are no more bytes in this buffer, just emit our char
65188 if (buffer.length === 0) {
65189 return charStr;
65190 }
65191 break;
65192 }
65193
65194 // determine and set charLength / charReceived
65195 this.detectIncompleteChar(buffer);
65196
65197 var end = buffer.length;
65198 if (this.charLength) {
65199 // buffer the incomplete character bytes we got
65200 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
65201 end -= this.charReceived;
65202 }
65203
65204 charStr += buffer.toString(this.encoding, 0, end);
65205
65206 var end = charStr.length - 1;
65207 var charCode = charStr.charCodeAt(end);
65208 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
65209 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
65210 var size = this.surrogateSize;
65211 this.charLength += size;
65212 this.charReceived += size;
65213 this.charBuffer.copy(this.charBuffer, size, 0, size);
65214 buffer.copy(this.charBuffer, 0, 0, size);
65215 return charStr.substring(0, end);
65216 }
65217
65218 // or just emit the charStr
65219 return charStr;
65220 };
65221
65222 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
65223 // the end of the given buffer. If so, it sets this.charLength to the byte
65224 // length that character, and sets this.charReceived to the number of bytes
65225 // that are available for this character.
65226 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
65227 // determine how many bytes we have to check at the end of this buffer
65228 var i = (buffer.length >= 3) ? 3 : buffer.length;
65229
65230 // Figure out if one of the last i bytes of our buffer announces an
65231 // incomplete char.
65232 for (; i > 0; i--) {
65233 var c = buffer[buffer.length - i];
65234
65235 // See http://en.wikipedia.org/wiki/UTF-8#Description
65236
65237 // 110XXXXX
65238 if (i == 1 && c >> 5 == 0x06) {
65239 this.charLength = 2;
65240 break;
65241 }
65242
65243 // 1110XXXX
65244 if (i <= 2 && c >> 4 == 0x0E) {
65245 this.charLength = 3;
65246 break;
65247 }
65248
65249 // 11110XXX
65250 if (i <= 3 && c >> 3 == 0x1E) {
65251 this.charLength = 4;
65252 break;
65253 }
65254 }
65255 this.charReceived = i;
65256 };
65257
65258 StringDecoder.prototype.end = function(buffer) {
65259 var res = '';
65260 if (buffer && buffer.length)
65261 res = this.write(buffer);
65262
65263 if (this.charReceived) {
65264 var cr = this.charReceived;
65265 var buf = this.charBuffer;
65266 var enc = this.encoding;
65267 res += buf.slice(0, cr).toString(enc);
65268 }
65269
65270 return res;
65271 };
65272
65273 function passThroughWrite(buffer) {
65274 return buffer.toString(this.encoding);
65275 }
65276
65277 function utf16DetectIncompleteChar(buffer) {
65278 this.charReceived = buffer.length % 2;
65279 this.charLength = this.charReceived ? 2 : 0;
65280 }
65281
65282 function base64DetectIncompleteChar(buffer) {
65283 this.charReceived = buffer.length % 3;
65284 this.charLength = this.charReceived ? 3 : 0;
65285 }
65286
65287 },{"buffer":47}],145:[function(require,module,exports){
65288 (function (global){
65289
65290 /**
65291 * Module exports.
65292 */
65293
65294 module.exports = deprecate;
65295
65296 /**
65297 * Mark that a method should not be used.
65298 * Returns a modified function which warns once by default.
65299 *
65300 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
65301 *
65302 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
65303 * will throw an Error when invoked.
65304 *
65305 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
65306 * will invoke `console.trace()` instead of `console.error()`.
65307 *
65308 * @param {Function} fn - the function to deprecate
65309 * @param {String} msg - the string to print to the console when `fn` is invoked
65310 * @returns {Function} a new "deprecated" version of `fn`
65311 * @api public
65312 */
65313
65314 function deprecate (fn, msg) {
65315 if (config('noDeprecation')) {
65316 return fn;
65317 }
65318
65319 var warned = false;
65320 function deprecated() {
65321 if (!warned) {
65322 if (config('throwDeprecation')) {
65323 throw new Error(msg);
65324 } else if (config('traceDeprecation')) {
65325 console.trace(msg);
65326 } else {
65327 console.warn(msg);
65328 }
65329 warned = true;
65330 }
65331 return fn.apply(this, arguments);
65332 }
65333
65334 return deprecated;
65335 }
65336
65337 /**
65338 * Checks `localStorage` for boolean values for the given `name`.
65339 *
65340 * @param {String} name
65341 * @returns {Boolean}
65342 * @api private
65343 */
65344
65345 function config (name) {
65346 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
65347 try {
65348 if (!global.localStorage) return false;
65349 } catch (_) {
65350 return false;
65351 }
65352 var val = global.localStorage[name];
65353 if (null == val) return false;
65354 return String(val).toLowerCase() === 'true';
65355 }
65356
65357 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65358 },{}],146:[function(require,module,exports){
65359 arguments[4][95][0].apply(exports,arguments)
65360 },{"dup":95}],147:[function(require,module,exports){
65361 module.exports = function isBuffer(arg) {
65362 return arg && typeof arg === 'object'
65363 && typeof arg.copy === 'function'
65364 && typeof arg.fill === 'function'
65365 && typeof arg.readUInt8 === 'function';
65366 }
65367 },{}],148:[function(require,module,exports){
65368 (function (process,global){
65369 // Copyright Joyent, Inc. and other Node contributors.
65370 //
65371 // Permission is hereby granted, free of charge, to any person obtaining a
65372 // copy of this software and associated documentation files (the
65373 // "Software"), to deal in the Software without restriction, including
65374 // without limitation the rights to use, copy, modify, merge, publish,
65375 // distribute, sublicense, and/or sell copies of the Software, and to permit
65376 // persons to whom the Software is furnished to do so, subject to the
65377 // following conditions:
65378 //
65379 // The above copyright notice and this permission notice shall be included
65380 // in all copies or substantial portions of the Software.
65381 //
65382 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
65383 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
65384 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
65385 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
65386 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
65387 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
65388 // USE OR OTHER DEALINGS IN THE SOFTWARE.
65389
65390 var formatRegExp = /%[sdj%]/g;
65391 exports.format = function(f) {
65392 if (!isString(f)) {
65393 var objects = [];
65394 for (var i = 0; i < arguments.length; i++) {
65395 objects.push(inspect(arguments[i]));
65396 }
65397 return objects.join(' ');
65398 }
65399
65400 var i = 1;
65401 var args = arguments;
65402 var len = args.length;
65403 var str = String(f).replace(formatRegExp, function(x) {
65404 if (x === '%%') return '%';
65405 if (i >= len) return x;
65406 switch (x) {
65407 case '%s': return String(args[i++]);
65408 case '%d': return Number(args[i++]);
65409 case '%j':
65410 try {
65411 return JSON.stringify(args[i++]);
65412 } catch (_) {
65413 return '[Circular]';
65414 }
65415 default:
65416 return x;
65417 }
65418 });
65419 for (var x = args[i]; i < len; x = args[++i]) {
65420 if (isNull(x) || !isObject(x)) {
65421 str += ' ' + x;
65422 } else {
65423 str += ' ' + inspect(x);
65424 }
65425 }
65426 return str;
65427 };
65428
65429
65430 // Mark that a method should not be used.
65431 // Returns a modified function which warns once by default.
65432 // If --no-deprecation is set, then it is a no-op.
65433 exports.deprecate = function(fn, msg) {
65434 // Allow for deprecating things in the process of starting up.
65435 if (isUndefined(global.process)) {
65436 return function() {
65437 return exports.deprecate(fn, msg).apply(this, arguments);
65438 };
65439 }
65440
65441 if (process.noDeprecation === true) {
65442 return fn;
65443 }
65444
65445 var warned = false;
65446 function deprecated() {
65447 if (!warned) {
65448 if (process.throwDeprecation) {
65449 throw new Error(msg);
65450 } else if (process.traceDeprecation) {
65451 console.trace(msg);
65452 } else {
65453 console.error(msg);
65454 }
65455 warned = true;
65456 }
65457 return fn.apply(this, arguments);
65458 }
65459
65460 return deprecated;
65461 };
65462
65463
65464 var debugs = {};
65465 var debugEnviron;
65466 exports.debuglog = function(set) {
65467 if (isUndefined(debugEnviron))
65468 debugEnviron = process.env.NODE_DEBUG || '';
65469 set = set.toUpperCase();
65470 if (!debugs[set]) {
65471 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
65472 var pid = process.pid;
65473 debugs[set] = function() {
65474 var msg = exports.format.apply(exports, arguments);
65475 console.error('%s %d: %s', set, pid, msg);
65476 };
65477 } else {
65478 debugs[set] = function() {};
65479 }
65480 }
65481 return debugs[set];
65482 };
65483
65484
65485 /**
65486 * Echos the value of a value. Trys to print the value out
65487 * in the best way possible given the different types.
65488 *
65489 * @param {Object} obj The object to print out.
65490 * @param {Object} opts Optional options object that alters the output.
65491 */
65492 /* legacy: obj, showHidden, depth, colors*/
65493 function inspect(obj, opts) {
65494 // default options
65495 var ctx = {
65496 seen: [],
65497 stylize: stylizeNoColor
65498 };
65499 // legacy...
65500 if (arguments.length >= 3) ctx.depth = arguments[2];
65501 if (arguments.length >= 4) ctx.colors = arguments[3];
65502 if (isBoolean(opts)) {
65503 // legacy...
65504 ctx.showHidden = opts;
65505 } else if (opts) {
65506 // got an "options" object
65507 exports._extend(ctx, opts);
65508 }
65509 // set default options
65510 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
65511 if (isUndefined(ctx.depth)) ctx.depth = 2;
65512 if (isUndefined(ctx.colors)) ctx.colors = false;
65513 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
65514 if (ctx.colors) ctx.stylize = stylizeWithColor;
65515 return formatValue(ctx, obj, ctx.depth);
65516 }
65517 exports.inspect = inspect;
65518
65519
65520 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
65521 inspect.colors = {
65522 'bold' : [1, 22],
65523 'italic' : [3, 23],
65524 'underline' : [4, 24],
65525 'inverse' : [7, 27],
65526 'white' : [37, 39],
65527 'grey' : [90, 39],
65528 'black' : [30, 39],
65529 'blue' : [34, 39],
65530 'cyan' : [36, 39],
65531 'green' : [32, 39],
65532 'magenta' : [35, 39],
65533 'red' : [31, 39],
65534 'yellow' : [33, 39]
65535 };
65536
65537 // Don't use 'blue' not visible on cmd.exe
65538 inspect.styles = {
65539 'special': 'cyan',
65540 'number': 'yellow',
65541 'boolean': 'yellow',
65542 'undefined': 'grey',
65543 'null': 'bold',
65544 'string': 'green',
65545 'date': 'magenta',
65546 // "name": intentionally not styling
65547 'regexp': 'red'
65548 };
65549
65550
65551 function stylizeWithColor(str, styleType) {
65552 var style = inspect.styles[styleType];
65553
65554 if (style) {
65555 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
65556 '\u001b[' + inspect.colors[style][1] + 'm';
65557 } else {
65558 return str;
65559 }
65560 }
65561
65562
65563 function stylizeNoColor(str, styleType) {
65564 return str;
65565 }
65566
65567
65568 function arrayToHash(array) {
65569 var hash = {};
65570
65571 array.forEach(function(val, idx) {
65572 hash[val] = true;
65573 });
65574
65575 return hash;
65576 }
65577
65578
65579 function formatValue(ctx, value, recurseTimes) {
65580 // Provide a hook for user-specified inspect functions.
65581 // Check that value is an object with an inspect function on it
65582 if (ctx.customInspect &&
65583 value &&
65584 isFunction(value.inspect) &&
65585 // Filter out the util module, it's inspect function is special
65586 value.inspect !== exports.inspect &&
65587 // Also filter out any prototype objects using the circular check.
65588 !(value.constructor && value.constructor.prototype === value)) {
65589 var ret = value.inspect(recurseTimes, ctx);
65590 if (!isString(ret)) {
65591 ret = formatValue(ctx, ret, recurseTimes);
65592 }
65593 return ret;
65594 }
65595
65596 // Primitive types cannot have properties
65597 var primitive = formatPrimitive(ctx, value);
65598 if (primitive) {
65599 return primitive;
65600 }
65601
65602 // Look up the keys of the object.
65603 var keys = Object.keys(value);
65604 var visibleKeys = arrayToHash(keys);
65605
65606 if (ctx.showHidden) {
65607 keys = Object.getOwnPropertyNames(value);
65608 }
65609
65610 // IE doesn't make error fields non-enumerable
65611 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
65612 if (isError(value)
65613 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
65614 return formatError(value);
65615 }
65616
65617 // Some type of object without properties can be shortcutted.
65618 if (keys.length === 0) {
65619 if (isFunction(value)) {
65620 var name = value.name ? ': ' + value.name : '';
65621 return ctx.stylize('[Function' + name + ']', 'special');
65622 }
65623 if (isRegExp(value)) {
65624 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65625 }
65626 if (isDate(value)) {
65627 return ctx.stylize(Date.prototype.toString.call(value), 'date');
65628 }
65629 if (isError(value)) {
65630 return formatError(value);
65631 }
65632 }
65633
65634 var base = '', array = false, braces = ['{', '}'];
65635
65636 // Make Array say that they are Array
65637 if (isArray(value)) {
65638 array = true;
65639 braces = ['[', ']'];
65640 }
65641
65642 // Make functions say that they are functions
65643 if (isFunction(value)) {
65644 var n = value.name ? ': ' + value.name : '';
65645 base = ' [Function' + n + ']';
65646 }
65647
65648 // Make RegExps say that they are RegExps
65649 if (isRegExp(value)) {
65650 base = ' ' + RegExp.prototype.toString.call(value);
65651 }
65652
65653 // Make dates with properties first say the date
65654 if (isDate(value)) {
65655 base = ' ' + Date.prototype.toUTCString.call(value);
65656 }
65657
65658 // Make error with message first say the error
65659 if (isError(value)) {
65660 base = ' ' + formatError(value);
65661 }
65662
65663 if (keys.length === 0 && (!array || value.length == 0)) {
65664 return braces[0] + base + braces[1];
65665 }
65666
65667 if (recurseTimes < 0) {
65668 if (isRegExp(value)) {
65669 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
65670 } else {
65671 return ctx.stylize('[Object]', 'special');
65672 }
65673 }
65674
65675 ctx.seen.push(value);
65676
65677 var output;
65678 if (array) {
65679 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
65680 } else {
65681 output = keys.map(function(key) {
65682 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
65683 });
65684 }
65685
65686 ctx.seen.pop();
65687
65688 return reduceToSingleString(output, base, braces);
65689 }
65690
65691
65692 function formatPrimitive(ctx, value) {
65693 if (isUndefined(value))
65694 return ctx.stylize('undefined', 'undefined');
65695 if (isString(value)) {
65696 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
65697 .replace(/'/g, "\\'")
65698 .replace(/\\"/g, '"') + '\'';
65699 return ctx.stylize(simple, 'string');
65700 }
65701 if (isNumber(value))
65702 return ctx.stylize('' + value, 'number');
65703 if (isBoolean(value))
65704 return ctx.stylize('' + value, 'boolean');
65705 // For some reason typeof null is "object", so special case here.
65706 if (isNull(value))
65707 return ctx.stylize('null', 'null');
65708 }
65709
65710
65711 function formatError(value) {
65712 return '[' + Error.prototype.toString.call(value) + ']';
65713 }
65714
65715
65716 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
65717 var output = [];
65718 for (var i = 0, l = value.length; i < l; ++i) {
65719 if (hasOwnProperty(value, String(i))) {
65720 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65721 String(i), true));
65722 } else {
65723 output.push('');
65724 }
65725 }
65726 keys.forEach(function(key) {
65727 if (!key.match(/^\d+$/)) {
65728 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
65729 key, true));
65730 }
65731 });
65732 return output;
65733 }
65734
65735
65736 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
65737 var name, str, desc;
65738 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
65739 if (desc.get) {
65740 if (desc.set) {
65741 str = ctx.stylize('[Getter/Setter]', 'special');
65742 } else {
65743 str = ctx.stylize('[Getter]', 'special');
65744 }
65745 } else {
65746 if (desc.set) {
65747 str = ctx.stylize('[Setter]', 'special');
65748 }
65749 }
65750 if (!hasOwnProperty(visibleKeys, key)) {
65751 name = '[' + key + ']';
65752 }
65753 if (!str) {
65754 if (ctx.seen.indexOf(desc.value) < 0) {
65755 if (isNull(recurseTimes)) {
65756 str = formatValue(ctx, desc.value, null);
65757 } else {
65758 str = formatValue(ctx, desc.value, recurseTimes - 1);
65759 }
65760 if (str.indexOf('\n') > -1) {
65761 if (array) {
65762 str = str.split('\n').map(function(line) {
65763 return ' ' + line;
65764 }).join('\n').substr(2);
65765 } else {
65766 str = '\n' + str.split('\n').map(function(line) {
65767 return ' ' + line;
65768 }).join('\n');
65769 }
65770 }
65771 } else {
65772 str = ctx.stylize('[Circular]', 'special');
65773 }
65774 }
65775 if (isUndefined(name)) {
65776 if (array && key.match(/^\d+$/)) {
65777 return str;
65778 }
65779 name = JSON.stringify('' + key);
65780 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
65781 name = name.substr(1, name.length - 2);
65782 name = ctx.stylize(name, 'name');
65783 } else {
65784 name = name.replace(/'/g, "\\'")
65785 .replace(/\\"/g, '"')
65786 .replace(/(^"|"$)/g, "'");
65787 name = ctx.stylize(name, 'string');
65788 }
65789 }
65790
65791 return name + ': ' + str;
65792 }
65793
65794
65795 function reduceToSingleString(output, base, braces) {
65796 var numLinesEst = 0;
65797 var length = output.reduce(function(prev, cur) {
65798 numLinesEst++;
65799 if (cur.indexOf('\n') >= 0) numLinesEst++;
65800 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
65801 }, 0);
65802
65803 if (length > 60) {
65804 return braces[0] +
65805 (base === '' ? '' : base + '\n ') +
65806 ' ' +
65807 output.join(',\n ') +
65808 ' ' +
65809 braces[1];
65810 }
65811
65812 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
65813 }
65814
65815
65816 // NOTE: These type checking functions intentionally don't use `instanceof`
65817 // because it is fragile and can be easily faked with `Object.create()`.
65818 function isArray(ar) {
65819 return Array.isArray(ar);
65820 }
65821 exports.isArray = isArray;
65822
65823 function isBoolean(arg) {
65824 return typeof arg === 'boolean';
65825 }
65826 exports.isBoolean = isBoolean;
65827
65828 function isNull(arg) {
65829 return arg === null;
65830 }
65831 exports.isNull = isNull;
65832
65833 function isNullOrUndefined(arg) {
65834 return arg == null;
65835 }
65836 exports.isNullOrUndefined = isNullOrUndefined;
65837
65838 function isNumber(arg) {
65839 return typeof arg === 'number';
65840 }
65841 exports.isNumber = isNumber;
65842
65843 function isString(arg) {
65844 return typeof arg === 'string';
65845 }
65846 exports.isString = isString;
65847
65848 function isSymbol(arg) {
65849 return typeof arg === 'symbol';
65850 }
65851 exports.isSymbol = isSymbol;
65852
65853 function isUndefined(arg) {
65854 return arg === void 0;
65855 }
65856 exports.isUndefined = isUndefined;
65857
65858 function isRegExp(re) {
65859 return isObject(re) && objectToString(re) === '[object RegExp]';
65860 }
65861 exports.isRegExp = isRegExp;
65862
65863 function isObject(arg) {
65864 return typeof arg === 'object' && arg !== null;
65865 }
65866 exports.isObject = isObject;
65867
65868 function isDate(d) {
65869 return isObject(d) && objectToString(d) === '[object Date]';
65870 }
65871 exports.isDate = isDate;
65872
65873 function isError(e) {
65874 return isObject(e) &&
65875 (objectToString(e) === '[object Error]' || e instanceof Error);
65876 }
65877 exports.isError = isError;
65878
65879 function isFunction(arg) {
65880 return typeof arg === 'function';
65881 }
65882 exports.isFunction = isFunction;
65883
65884 function isPrimitive(arg) {
65885 return arg === null ||
65886 typeof arg === 'boolean' ||
65887 typeof arg === 'number' ||
65888 typeof arg === 'string' ||
65889 typeof arg === 'symbol' || // ES6 symbol
65890 typeof arg === 'undefined';
65891 }
65892 exports.isPrimitive = isPrimitive;
65893
65894 exports.isBuffer = require('./support/isBuffer');
65895
65896 function objectToString(o) {
65897 return Object.prototype.toString.call(o);
65898 }
65899
65900
65901 function pad(n) {
65902 return n < 10 ? '0' + n.toString(10) : n.toString(10);
65903 }
65904
65905
65906 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
65907 'Oct', 'Nov', 'Dec'];
65908
65909 // 26 Feb 16:19:34
65910 function timestamp() {
65911 var d = new Date();
65912 var time = [pad(d.getHours()),
65913 pad(d.getMinutes()),
65914 pad(d.getSeconds())].join(':');
65915 return [d.getDate(), months[d.getMonth()], time].join(' ');
65916 }
65917
65918
65919 // log is just a thin wrapper to console.log that prepends a timestamp
65920 exports.log = function() {
65921 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
65922 };
65923
65924
65925 /**
65926 * Inherit the prototype methods from one constructor into another.
65927 *
65928 * The Function.prototype.inherits from lang.js rewritten as a standalone
65929 * function (not on Function.prototype). NOTE: If this file is to be loaded
65930 * during bootstrapping this function needs to be rewritten using some native
65931 * functions as prototype setup using normal JavaScript does not work as
65932 * expected during bootstrapping (see mirror.js in r114903).
65933 *
65934 * @param {function} ctor Constructor function which needs to inherit the
65935 * prototype.
65936 * @param {function} superCtor Constructor function to inherit prototype from.
65937 */
65938 exports.inherits = require('inherits');
65939
65940 exports._extend = function(origin, add) {
65941 // Don't do anything if add isn't an object
65942 if (!add || !isObject(add)) return origin;
65943
65944 var keys = Object.keys(add);
65945 var i = keys.length;
65946 while (i--) {
65947 origin[keys[i]] = add[keys[i]];
65948 }
65949 return origin;
65950 };
65951
65952 function hasOwnProperty(obj, prop) {
65953 return Object.prototype.hasOwnProperty.call(obj, prop);
65954 }
65955
65956 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
65957 },{"./support/isBuffer":147,"_process":112,"inherits":146}],149:[function(require,module,exports){
65958 var indexOf = require('indexof');
65959
65960 var Object_keys = function (obj) {
65961 if (Object.keys) return Object.keys(obj)
65962 else {
65963 var res = [];
65964 for (var key in obj) res.push(key)
65965 return res;
65966 }
65967 };
65968
65969 var forEach = function (xs, fn) {
65970 if (xs.forEach) return xs.forEach(fn)
65971 else for (var i = 0; i < xs.length; i++) {
65972 fn(xs[i], i, xs);
65973 }
65974 };
65975
65976 var defineProp = (function() {
65977 try {
65978 Object.defineProperty({}, '_', {});
65979 return function(obj, name, value) {
65980 Object.defineProperty(obj, name, {
65981 writable: true,
65982 enumerable: false,
65983 configurable: true,
65984 value: value
65985 })
65986 };
65987 } catch(e) {
65988 return function(obj, name, value) {
65989 obj[name] = value;
65990 };
65991 }
65992 }());
65993
65994 var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function',
65995 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError',
65996 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError',
65997 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape',
65998 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];
65999
66000 function Context() {}
66001 Context.prototype = {};
66002
66003 var Script = exports.Script = function NodeScript (code) {
66004 if (!(this instanceof Script)) return new Script(code);
66005 this.code = code;
66006 };
66007
66008 Script.prototype.runInContext = function (context) {
66009 if (!(context instanceof Context)) {
66010 throw new TypeError("needs a 'context' argument.");
66011 }
66012
66013 var iframe = document.createElement('iframe');
66014 if (!iframe.style) iframe.style = {};
66015 iframe.style.display = 'none';
66016
66017 document.body.appendChild(iframe);
66018
66019 var win = iframe.contentWindow;
66020 var wEval = win.eval, wExecScript = win.execScript;
66021
66022 if (!wEval && wExecScript) {
66023 // win.eval() magically appears when this is called in IE:
66024 wExecScript.call(win, 'null');
66025 wEval = win.eval;
66026 }
66027
66028 forEach(Object_keys(context), function (key) {
66029 win[key] = context[key];
66030 });
66031 forEach(globals, function (key) {
66032 if (context[key]) {
66033 win[key] = context[key];
66034 }
66035 });
66036
66037 var winKeys = Object_keys(win);
66038
66039 var res = wEval.call(win, this.code);
66040
66041 forEach(Object_keys(win), function (key) {
66042 // Avoid copying circular objects like `top` and `window` by only
66043 // updating existing context properties or new properties in the `win`
66044 // that was only introduced after the eval.
66045 if (key in context || indexOf(winKeys, key) === -1) {
66046 context[key] = win[key];
66047 }
66048 });
66049
66050 forEach(globals, function (key) {
66051 if (!(key in context)) {
66052 defineProp(context, key, win[key]);
66053 }
66054 });
66055
66056 document.body.removeChild(iframe);
66057
66058 return res;
66059 };
66060
66061 Script.prototype.runInThisContext = function () {
66062 return eval(this.code); // maybe...
66063 };
66064
66065 Script.prototype.runInNewContext = function (context) {
66066 var ctx = Script.createContext(context);
66067 var res = this.runInContext(ctx);
66068
66069 forEach(Object_keys(ctx), function (key) {
66070 context[key] = ctx[key];
66071 });
66072
66073 return res;
66074 };
66075
66076 forEach(Object_keys(Script.prototype), function (name) {
66077 exports[name] = Script[name] = function (code) {
66078 var s = Script(code);
66079 return s[name].apply(s, [].slice.call(arguments, 1));
66080 };
66081 });
66082
66083 exports.createScript = function (code) {
66084 return exports.Script(code);
66085 };
66086
66087 exports.createContext = Script.createContext = function (context) {
66088 var copy = new Context();
66089 if(typeof context === 'object') {
66090 forEach(Object_keys(context), function (key) {
66091 copy[key] = context[key];
66092 });
66093 }
66094 return copy;
66095 };
66096
66097 },{"indexof":94}],150:[function(require,module,exports){
66098 var aes = require('browserify-aes')
66099 var assert = require('assert')
66100 var Buffer = require('safe-buffer').Buffer
66101 var bs58check = require('bs58check')
66102 var createHash = require('create-hash')
66103 var scrypt = require('scryptsy')
66104 var xor = require('buffer-xor/inplace')
66105
66106 var ecurve = require('ecurve')
66107 var curve = ecurve.getCurveByName('secp256k1')
66108
66109 var BigInteger = require('bigi')
66110
66111 // constants
66112 var SCRYPT_PARAMS = {
66113 N: 16384, // specified by BIP38
66114 r: 8,
66115 p: 8
66116 }
66117 var NULL = Buffer.alloc(0)
66118
66119 function hash160 (buffer) {
66120 return createHash('rmd160').update(
66121 createHash('sha256').update(buffer).digest()
66122 ).digest()
66123 }
66124
66125 function hash256 (buffer) {
66126 return createHash('sha256').update(
66127 createHash('sha256').update(buffer).digest()
66128 ).digest()
66129 }
66130
66131 function getAddress (d, compressed) {
66132 var Q = curve.G.multiply(d).getEncoded(compressed)
66133 var hash = hash160(Q)
66134 var payload = Buffer.allocUnsafe(21)
66135 payload.writeUInt8(0x00, 0) // XXX TODO FIXME bitcoin only??? damn you BIP38
66136 hash.copy(payload, 1)
66137
66138 return bs58check.encode(payload)
66139 }
66140
66141 function encryptRaw (buffer, compressed, passphrase, progressCallback, scryptParams) {
66142 if (buffer.length !== 32) throw new Error('Invalid private key length')
66143 scryptParams = scryptParams || SCRYPT_PARAMS
66144
66145 var d = BigInteger.fromBuffer(buffer)
66146 var address = getAddress(d, compressed)
66147 var secret = Buffer.from(passphrase, 'utf8')
66148 var salt = hash256(address).slice(0, 4)
66149
66150 var N = scryptParams.N
66151 var r = scryptParams.r
66152 var p = scryptParams.p
66153
66154 var scryptBuf = scrypt(secret, salt, N, r, p, 64, progressCallback)
66155 var derivedHalf1 = scryptBuf.slice(0, 32)
66156 var derivedHalf2 = scryptBuf.slice(32, 64)
66157
66158 var xorBuf = xor(derivedHalf1, buffer)
66159 var cipher = aes.createCipheriv('aes-256-ecb', derivedHalf2, NULL)
66160 cipher.setAutoPadding(false)
66161 cipher.end(xorBuf)
66162
66163 var cipherText = cipher.read()
66164
66165 // 0x01 | 0x42 | flagByte | salt (4) | cipherText (32)
66166 var result = Buffer.allocUnsafe(7 + 32)
66167 result.writeUInt8(0x01, 0)
66168 result.writeUInt8(0x42, 1)
66169 result.writeUInt8(compressed ? 0xe0 : 0xc0, 2)
66170 salt.copy(result, 3)
66171 cipherText.copy(result, 7)
66172
66173 return result
66174 }
66175
66176 function encrypt (buffer, compressed, passphrase, progressCallback, scryptParams) {
66177 return bs58check.encode(encryptRaw(buffer, compressed, passphrase, progressCallback, scryptParams))
66178 }
66179
66180 // some of the techniques borrowed from: https://github.com/pointbiz/bitaddress.org
66181 function decryptRaw (buffer, passphrase, progressCallback, scryptParams) {
66182 // 39 bytes: 2 bytes prefix, 37 bytes payload
66183 if (buffer.length !== 39) throw new Error('Invalid BIP38 data length')
66184 if (buffer.readUInt8(0) !== 0x01) throw new Error('Invalid BIP38 prefix')
66185 scryptParams = scryptParams || SCRYPT_PARAMS
66186
66187 // check if BIP38 EC multiply
66188 var type = buffer.readUInt8(1)
66189 if (type === 0x43) return decryptECMult(buffer, passphrase, progressCallback, scryptParams)
66190 if (type !== 0x42) throw new Error('Invalid BIP38 type')
66191
66192 passphrase = Buffer.from(passphrase, 'utf8')
66193
66194 var flagByte = buffer.readUInt8(2)
66195 var compressed = flagByte === 0xe0
66196 if (!compressed && flagByte !== 0xc0) throw new Error('Invalid BIP38 compression flag')
66197
66198 var N = scryptParams.N
66199 var r = scryptParams.r
66200 var p = scryptParams.p
66201
66202 var salt = buffer.slice(3, 7)
66203 var scryptBuf = scrypt(passphrase, salt, N, r, p, 64, progressCallback)
66204 var derivedHalf1 = scryptBuf.slice(0, 32)
66205 var derivedHalf2 = scryptBuf.slice(32, 64)
66206
66207 var privKeyBuf = buffer.slice(7, 7 + 32)
66208 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, NULL)
66209 decipher.setAutoPadding(false)
66210 decipher.end(privKeyBuf)
66211
66212 var plainText = decipher.read()
66213 var privateKey = xor(derivedHalf1, plainText)
66214
66215 // verify salt matches address
66216 var d = BigInteger.fromBuffer(privateKey)
66217 var address = getAddress(d, compressed)
66218 var checksum = hash256(address).slice(0, 4)
66219 assert.deepEqual(salt, checksum)
66220
66221 return {
66222 privateKey: privateKey,
66223 compressed: compressed
66224 }
66225 }
66226
66227 function decrypt (string, passphrase, progressCallback, scryptParams) {
66228 return decryptRaw(bs58check.decode(string), passphrase, progressCallback, scryptParams)
66229 }
66230
66231 function decryptECMult (buffer, passphrase, progressCallback, scryptParams) {
66232 passphrase = Buffer.from(passphrase, 'utf8')
66233 buffer = buffer.slice(1) // FIXME: we can avoid this
66234 scryptParams = scryptParams || SCRYPT_PARAMS
66235
66236 var flag = buffer.readUInt8(1)
66237 var compressed = (flag & 0x20) !== 0
66238 var hasLotSeq = (flag & 0x04) !== 0
66239
66240 assert.equal((flag & 0x24), flag, 'Invalid private key.')
66241
66242 var addressHash = buffer.slice(2, 6)
66243 var ownerEntropy = buffer.slice(6, 14)
66244 var ownerSalt
66245
66246 // 4 bytes ownerSalt if 4 bytes lot/sequence
66247 if (hasLotSeq) {
66248 ownerSalt = ownerEntropy.slice(0, 4)
66249
66250 // else, 8 bytes ownerSalt
66251 } else {
66252 ownerSalt = ownerEntropy
66253 }
66254
66255 var encryptedPart1 = buffer.slice(14, 22) // First 8 bytes
66256 var encryptedPart2 = buffer.slice(22, 38) // 16 bytes
66257
66258 var N = scryptParams.N
66259 var r = scryptParams.r
66260 var p = scryptParams.p
66261 var preFactor = scrypt(passphrase, ownerSalt, N, r, p, 32, progressCallback)
66262
66263 var passFactor
66264 if (hasLotSeq) {
66265 var hashTarget = Buffer.concat([preFactor, ownerEntropy])
66266 passFactor = hash256(hashTarget)
66267 } else {
66268 passFactor = preFactor
66269 }
66270
66271 var passInt = BigInteger.fromBuffer(passFactor)
66272 var passPoint = curve.G.multiply(passInt).getEncoded(true)
66273
66274 var seedBPass = scrypt(passPoint, Buffer.concat([addressHash, ownerEntropy]), 1024, 1, 1, 64)
66275 var derivedHalf1 = seedBPass.slice(0, 32)
66276 var derivedHalf2 = seedBPass.slice(32, 64)
66277
66278 var decipher = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66279 decipher.setAutoPadding(false)
66280 decipher.end(encryptedPart2)
66281
66282 var decryptedPart2 = decipher.read()
66283 var tmp = xor(decryptedPart2, derivedHalf1.slice(16, 32))
66284 var seedBPart2 = tmp.slice(8, 16)
66285
66286 var decipher2 = aes.createDecipheriv('aes-256-ecb', derivedHalf2, Buffer.alloc(0))
66287 decipher2.setAutoPadding(false)
66288 decipher2.write(encryptedPart1) // first 8 bytes
66289 decipher2.end(tmp.slice(0, 8)) // last 8 bytes
66290
66291 var seedBPart1 = xor(decipher2.read(), derivedHalf1.slice(0, 16))
66292 var seedB = Buffer.concat([seedBPart1, seedBPart2], 24)
66293 var factorB = BigInteger.fromBuffer(hash256(seedB))
66294
66295 // d = passFactor * factorB (mod n)
66296 var d = passInt.multiply(factorB).mod(curve.n)
66297
66298 return {
66299 privateKey: d.toBuffer(32),
66300 compressed: compressed
66301 }
66302 }
66303
66304 function verify (string) {
66305 var decoded = bs58check.decodeUnsafe(string)
66306 if (!decoded) return false
66307
66308 if (decoded.length !== 39) return false
66309 if (decoded.readUInt8(0) !== 0x01) return false
66310
66311 var type = decoded.readUInt8(1)
66312 var flag = decoded.readUInt8(2)
66313
66314 // encrypted WIF
66315 if (type === 0x42) {
66316 if (flag !== 0xc0 && flag !== 0xe0) return false
66317
66318 // EC mult
66319 } else if (type === 0x43) {
66320 if ((flag & ~0x24)) return false
66321 } else {
66322 return false
66323 }
66324
66325 return true
66326 }
66327
66328 module.exports = {
66329 decrypt: decrypt,
66330 decryptECMult: decryptECMult,
66331 decryptRaw: decryptRaw,
66332 encrypt: encrypt,
66333 encryptRaw: encryptRaw,
66334 verify: verify
66335 }
66336
66337 },{"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){
66338 // base-x encoding
66339 // Forked from https://github.com/cryptocoinjs/bs58
66340 // Originally written by Mike Hearn for BitcoinJ
66341 // Copyright (c) 2011 Google Inc
66342 // Ported to JavaScript by Stefan Thomas
66343 // Merged Buffer refactorings from base58-native by Stephen Pair
66344 // Copyright (c) 2013 BitPay Inc
66345
66346 var Buffer = require('safe-buffer').Buffer
66347
66348 module.exports = function base (ALPHABET) {
66349 var ALPHABET_MAP = {}
66350 var BASE = ALPHABET.length
66351 var LEADER = ALPHABET.charAt(0)
66352
66353 // pre-compute lookup table
66354 for (var z = 0; z < ALPHABET.length; z++) {
66355 var x = ALPHABET.charAt(z)
66356
66357 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
66358 ALPHABET_MAP[x] = z
66359 }
66360
66361 function encode (source) {
66362 if (source.length === 0) return ''
66363
66364 var digits = [0]
66365 for (var i = 0; i < source.length; ++i) {
66366 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
66367 carry += digits[j] << 8
66368 digits[j] = carry % BASE
66369 carry = (carry / BASE) | 0
66370 }
66371
66372 while (carry > 0) {
66373 digits.push(carry % BASE)
66374 carry = (carry / BASE) | 0
66375 }
66376 }
66377
66378 var string = ''
66379
66380 // deal with leading zeros
66381 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
66382 // convert digits to a string
66383 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
66384
66385 return string
66386 }
66387
66388 function decodeUnsafe (string) {
66389 if (typeof string !== 'string') throw new TypeError('Expected String')
66390 if (string.length === 0) return Buffer.allocUnsafe(0)
66391
66392 var bytes = [0]
66393 for (var i = 0; i < string.length; i++) {
66394 var value = ALPHABET_MAP[string[i]]
66395 if (value === undefined) return
66396
66397 for (var j = 0, carry = value; j < bytes.length; ++j) {
66398 carry += bytes[j] * BASE
66399 bytes[j] = carry & 0xff
66400 carry >>= 8
66401 }
66402
66403 while (carry > 0) {
66404 bytes.push(carry & 0xff)
66405 carry >>= 8
66406 }
66407 }
66408
66409 // deal with leading zeros
66410 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
66411 bytes.push(0)
66412 }
66413
66414 return Buffer.from(bytes.reverse())
66415 }
66416
66417 function decode (string) {
66418 var buffer = decodeUnsafe(string)
66419 if (buffer) return buffer
66420
66421 throw new Error('Non-base' + BASE + ' character')
66422 }
66423
66424 return {
66425 encode: encode,
66426 decodeUnsafe: decodeUnsafe,
66427 decode: decode
66428 }
66429 }
66430
66431 },{"safe-buffer":193}],152:[function(require,module,exports){
66432 // (public) Constructor
66433 function BigInteger(a, b, c) {
66434 if (!(this instanceof BigInteger))
66435 return new BigInteger(a, b, c)
66436
66437 if (a != null) {
66438 if ("number" == typeof a) this.fromNumber(a, b, c)
66439 else if (b == null && "string" != typeof a) this.fromString(a, 256)
66440 else this.fromString(a, b)
66441 }
66442 }
66443
66444 var proto = BigInteger.prototype
66445
66446 // duck-typed isBigInteger
66447 proto.__bigi = require('../package.json').version
66448 BigInteger.isBigInteger = function (obj, check_ver) {
66449 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
66450 }
66451
66452 // Bits per digit
66453 var dbits
66454
66455 // am: Compute w_j += (x*this_i), propagate carries,
66456 // c is initial carry, returns final carry.
66457 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
66458 // We need to select the fastest one that works in this environment.
66459
66460 // am1: use a single mult and divide to get the high bits,
66461 // max digit bits should be 26 because
66462 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
66463 function am1(i, x, w, j, c, n) {
66464 while (--n >= 0) {
66465 var v = x * this[i++] + w[j] + c
66466 c = Math.floor(v / 0x4000000)
66467 w[j++] = v & 0x3ffffff
66468 }
66469 return c
66470 }
66471 // am2 avoids a big mult-and-extract completely.
66472 // Max digit bits should be <= 30 because we do bitwise ops
66473 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
66474 function am2(i, x, w, j, c, n) {
66475 var xl = x & 0x7fff,
66476 xh = x >> 15
66477 while (--n >= 0) {
66478 var l = this[i] & 0x7fff
66479 var h = this[i++] >> 15
66480 var m = xh * l + h * xl
66481 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
66482 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
66483 w[j++] = l & 0x3fffffff
66484 }
66485 return c
66486 }
66487 // Alternately, set max digit bits to 28 since some
66488 // browsers slow down when dealing with 32-bit numbers.
66489 function am3(i, x, w, j, c, n) {
66490 var xl = x & 0x3fff,
66491 xh = x >> 14
66492 while (--n >= 0) {
66493 var l = this[i] & 0x3fff
66494 var h = this[i++] >> 14
66495 var m = xh * l + h * xl
66496 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
66497 c = (l >> 28) + (m >> 14) + xh * h
66498 w[j++] = l & 0xfffffff
66499 }
66500 return c
66501 }
66502
66503 // wtf?
66504 BigInteger.prototype.am = am1
66505 dbits = 26
66506
66507 BigInteger.prototype.DB = dbits
66508 BigInteger.prototype.DM = ((1 << dbits) - 1)
66509 var DV = BigInteger.prototype.DV = (1 << dbits)
66510
66511 var BI_FP = 52
66512 BigInteger.prototype.FV = Math.pow(2, BI_FP)
66513 BigInteger.prototype.F1 = BI_FP - dbits
66514 BigInteger.prototype.F2 = 2 * dbits - BI_FP
66515
66516 // Digit conversions
66517 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
66518 var BI_RC = new Array()
66519 var rr, vv
66520 rr = "0".charCodeAt(0)
66521 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
66522 rr = "a".charCodeAt(0)
66523 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66524 rr = "A".charCodeAt(0)
66525 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
66526
66527 function int2char(n) {
66528 return BI_RM.charAt(n)
66529 }
66530
66531 function intAt(s, i) {
66532 var c = BI_RC[s.charCodeAt(i)]
66533 return (c == null) ? -1 : c
66534 }
66535
66536 // (protected) copy this to r
66537 function bnpCopyTo(r) {
66538 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
66539 r.t = this.t
66540 r.s = this.s
66541 }
66542
66543 // (protected) set from integer value x, -DV <= x < DV
66544 function bnpFromInt(x) {
66545 this.t = 1
66546 this.s = (x < 0) ? -1 : 0
66547 if (x > 0) this[0] = x
66548 else if (x < -1) this[0] = x + DV
66549 else this.t = 0
66550 }
66551
66552 // return bigint initialized to value
66553 function nbv(i) {
66554 var r = new BigInteger()
66555 r.fromInt(i)
66556 return r
66557 }
66558
66559 // (protected) set from string and radix
66560 function bnpFromString(s, b) {
66561 var self = this
66562
66563 var k
66564 if (b == 16) k = 4
66565 else if (b == 8) k = 3
66566 else if (b == 256) k = 8; // byte array
66567 else if (b == 2) k = 1
66568 else if (b == 32) k = 5
66569 else if (b == 4) k = 2
66570 else {
66571 self.fromRadix(s, b)
66572 return
66573 }
66574 self.t = 0
66575 self.s = 0
66576 var i = s.length,
66577 mi = false,
66578 sh = 0
66579 while (--i >= 0) {
66580 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
66581 if (x < 0) {
66582 if (s.charAt(i) == "-") mi = true
66583 continue
66584 }
66585 mi = false
66586 if (sh == 0)
66587 self[self.t++] = x
66588 else if (sh + k > self.DB) {
66589 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
66590 self[self.t++] = (x >> (self.DB - sh))
66591 } else
66592 self[self.t - 1] |= x << sh
66593 sh += k
66594 if (sh >= self.DB) sh -= self.DB
66595 }
66596 if (k == 8 && (s[0] & 0x80) != 0) {
66597 self.s = -1
66598 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
66599 }
66600 self.clamp()
66601 if (mi) BigInteger.ZERO.subTo(self, self)
66602 }
66603
66604 // (protected) clamp off excess high words
66605 function bnpClamp() {
66606 var c = this.s & this.DM
66607 while (this.t > 0 && this[this.t - 1] == c)--this.t
66608 }
66609
66610 // (public) return string representation in given radix
66611 function bnToString(b) {
66612 var self = this
66613 if (self.s < 0) return "-" + self.negate()
66614 .toString(b)
66615 var k
66616 if (b == 16) k = 4
66617 else if (b == 8) k = 3
66618 else if (b == 2) k = 1
66619 else if (b == 32) k = 5
66620 else if (b == 4) k = 2
66621 else return self.toRadix(b)
66622 var km = (1 << k) - 1,
66623 d, m = false,
66624 r = "",
66625 i = self.t
66626 var p = self.DB - (i * self.DB) % k
66627 if (i-- > 0) {
66628 if (p < self.DB && (d = self[i] >> p) > 0) {
66629 m = true
66630 r = int2char(d)
66631 }
66632 while (i >= 0) {
66633 if (p < k) {
66634 d = (self[i] & ((1 << p) - 1)) << (k - p)
66635 d |= self[--i] >> (p += self.DB - k)
66636 } else {
66637 d = (self[i] >> (p -= k)) & km
66638 if (p <= 0) {
66639 p += self.DB
66640 --i
66641 }
66642 }
66643 if (d > 0) m = true
66644 if (m) r += int2char(d)
66645 }
66646 }
66647 return m ? r : "0"
66648 }
66649
66650 // (public) -this
66651 function bnNegate() {
66652 var r = new BigInteger()
66653 BigInteger.ZERO.subTo(this, r)
66654 return r
66655 }
66656
66657 // (public) |this|
66658 function bnAbs() {
66659 return (this.s < 0) ? this.negate() : this
66660 }
66661
66662 // (public) return + if this > a, - if this < a, 0 if equal
66663 function bnCompareTo(a) {
66664 var r = this.s - a.s
66665 if (r != 0) return r
66666 var i = this.t
66667 r = i - a.t
66668 if (r != 0) return (this.s < 0) ? -r : r
66669 while (--i >= 0)
66670 if ((r = this[i] - a[i]) != 0) return r
66671 return 0
66672 }
66673
66674 // returns bit length of the integer x
66675 function nbits(x) {
66676 var r = 1,
66677 t
66678 if ((t = x >>> 16) != 0) {
66679 x = t
66680 r += 16
66681 }
66682 if ((t = x >> 8) != 0) {
66683 x = t
66684 r += 8
66685 }
66686 if ((t = x >> 4) != 0) {
66687 x = t
66688 r += 4
66689 }
66690 if ((t = x >> 2) != 0) {
66691 x = t
66692 r += 2
66693 }
66694 if ((t = x >> 1) != 0) {
66695 x = t
66696 r += 1
66697 }
66698 return r
66699 }
66700
66701 // (public) return the number of bits in "this"
66702 function bnBitLength() {
66703 if (this.t <= 0) return 0
66704 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
66705 }
66706
66707 // (public) return the number of bytes in "this"
66708 function bnByteLength() {
66709 return this.bitLength() >> 3
66710 }
66711
66712 // (protected) r = this << n*DB
66713 function bnpDLShiftTo(n, r) {
66714 var i
66715 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
66716 for (i = n - 1; i >= 0; --i) r[i] = 0
66717 r.t = this.t + n
66718 r.s = this.s
66719 }
66720
66721 // (protected) r = this >> n*DB
66722 function bnpDRShiftTo(n, r) {
66723 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
66724 r.t = Math.max(this.t - n, 0)
66725 r.s = this.s
66726 }
66727
66728 // (protected) r = this << n
66729 function bnpLShiftTo(n, r) {
66730 var self = this
66731 var bs = n % self.DB
66732 var cbs = self.DB - bs
66733 var bm = (1 << cbs) - 1
66734 var ds = Math.floor(n / self.DB),
66735 c = (self.s << bs) & self.DM,
66736 i
66737 for (i = self.t - 1; i >= 0; --i) {
66738 r[i + ds + 1] = (self[i] >> cbs) | c
66739 c = (self[i] & bm) << bs
66740 }
66741 for (i = ds - 1; i >= 0; --i) r[i] = 0
66742 r[ds] = c
66743 r.t = self.t + ds + 1
66744 r.s = self.s
66745 r.clamp()
66746 }
66747
66748 // (protected) r = this >> n
66749 function bnpRShiftTo(n, r) {
66750 var self = this
66751 r.s = self.s
66752 var ds = Math.floor(n / self.DB)
66753 if (ds >= self.t) {
66754 r.t = 0
66755 return
66756 }
66757 var bs = n % self.DB
66758 var cbs = self.DB - bs
66759 var bm = (1 << bs) - 1
66760 r[0] = self[ds] >> bs
66761 for (var i = ds + 1; i < self.t; ++i) {
66762 r[i - ds - 1] |= (self[i] & bm) << cbs
66763 r[i - ds] = self[i] >> bs
66764 }
66765 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
66766 r.t = self.t - ds
66767 r.clamp()
66768 }
66769
66770 // (protected) r = this - a
66771 function bnpSubTo(a, r) {
66772 var self = this
66773 var i = 0,
66774 c = 0,
66775 m = Math.min(a.t, self.t)
66776 while (i < m) {
66777 c += self[i] - a[i]
66778 r[i++] = c & self.DM
66779 c >>= self.DB
66780 }
66781 if (a.t < self.t) {
66782 c -= a.s
66783 while (i < self.t) {
66784 c += self[i]
66785 r[i++] = c & self.DM
66786 c >>= self.DB
66787 }
66788 c += self.s
66789 } else {
66790 c += self.s
66791 while (i < a.t) {
66792 c -= a[i]
66793 r[i++] = c & self.DM
66794 c >>= self.DB
66795 }
66796 c -= a.s
66797 }
66798 r.s = (c < 0) ? -1 : 0
66799 if (c < -1) r[i++] = self.DV + c
66800 else if (c > 0) r[i++] = c
66801 r.t = i
66802 r.clamp()
66803 }
66804
66805 // (protected) r = this * a, r != this,a (HAC 14.12)
66806 // "this" should be the larger one if appropriate.
66807 function bnpMultiplyTo(a, r) {
66808 var x = this.abs(),
66809 y = a.abs()
66810 var i = x.t
66811 r.t = i + y.t
66812 while (--i >= 0) r[i] = 0
66813 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
66814 r.s = 0
66815 r.clamp()
66816 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
66817 }
66818
66819 // (protected) r = this^2, r != this (HAC 14.16)
66820 function bnpSquareTo(r) {
66821 var x = this.abs()
66822 var i = r.t = 2 * x.t
66823 while (--i >= 0) r[i] = 0
66824 for (i = 0; i < x.t - 1; ++i) {
66825 var c = x.am(i, x[i], r, 2 * i, 0, 1)
66826 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
66827 r[i + x.t] -= x.DV
66828 r[i + x.t + 1] = 1
66829 }
66830 }
66831 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
66832 r.s = 0
66833 r.clamp()
66834 }
66835
66836 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
66837 // r != q, this != m. q or r may be null.
66838 function bnpDivRemTo(m, q, r) {
66839 var self = this
66840 var pm = m.abs()
66841 if (pm.t <= 0) return
66842 var pt = self.abs()
66843 if (pt.t < pm.t) {
66844 if (q != null) q.fromInt(0)
66845 if (r != null) self.copyTo(r)
66846 return
66847 }
66848 if (r == null) r = new BigInteger()
66849 var y = new BigInteger(),
66850 ts = self.s,
66851 ms = m.s
66852 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
66853 if (nsh > 0) {
66854 pm.lShiftTo(nsh, y)
66855 pt.lShiftTo(nsh, r)
66856 } else {
66857 pm.copyTo(y)
66858 pt.copyTo(r)
66859 }
66860 var ys = y.t
66861 var y0 = y[ys - 1]
66862 if (y0 == 0) return
66863 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
66864 var d1 = self.FV / yt,
66865 d2 = (1 << self.F1) / yt,
66866 e = 1 << self.F2
66867 var i = r.t,
66868 j = i - ys,
66869 t = (q == null) ? new BigInteger() : q
66870 y.dlShiftTo(j, t)
66871 if (r.compareTo(t) >= 0) {
66872 r[r.t++] = 1
66873 r.subTo(t, r)
66874 }
66875 BigInteger.ONE.dlShiftTo(ys, t)
66876 t.subTo(y, y); // "negative" y so we can replace sub with am later
66877 while (y.t < ys) y[y.t++] = 0
66878 while (--j >= 0) {
66879 // Estimate quotient digit
66880 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
66881 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
66882 y.dlShiftTo(j, t)
66883 r.subTo(t, r)
66884 while (r[i] < --qd) r.subTo(t, r)
66885 }
66886 }
66887 if (q != null) {
66888 r.drShiftTo(ys, q)
66889 if (ts != ms) BigInteger.ZERO.subTo(q, q)
66890 }
66891 r.t = ys
66892 r.clamp()
66893 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
66894 if (ts < 0) BigInteger.ZERO.subTo(r, r)
66895 }
66896
66897 // (public) this mod a
66898 function bnMod(a) {
66899 var r = new BigInteger()
66900 this.abs()
66901 .divRemTo(a, null, r)
66902 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
66903 return r
66904 }
66905
66906 // Modular reduction using "classic" algorithm
66907 function Classic(m) {
66908 this.m = m
66909 }
66910
66911 function cConvert(x) {
66912 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
66913 else return x
66914 }
66915
66916 function cRevert(x) {
66917 return x
66918 }
66919
66920 function cReduce(x) {
66921 x.divRemTo(this.m, null, x)
66922 }
66923
66924 function cMulTo(x, y, r) {
66925 x.multiplyTo(y, r)
66926 this.reduce(r)
66927 }
66928
66929 function cSqrTo(x, r) {
66930 x.squareTo(r)
66931 this.reduce(r)
66932 }
66933
66934 Classic.prototype.convert = cConvert
66935 Classic.prototype.revert = cRevert
66936 Classic.prototype.reduce = cReduce
66937 Classic.prototype.mulTo = cMulTo
66938 Classic.prototype.sqrTo = cSqrTo
66939
66940 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
66941 // justification:
66942 // xy == 1 (mod m)
66943 // xy = 1+km
66944 // xy(2-xy) = (1+km)(1-km)
66945 // x[y(2-xy)] = 1-k^2m^2
66946 // x[y(2-xy)] == 1 (mod m^2)
66947 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
66948 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
66949 // JS multiply "overflows" differently from C/C++, so care is needed here.
66950 function bnpInvDigit() {
66951 if (this.t < 1) return 0
66952 var x = this[0]
66953 if ((x & 1) == 0) return 0
66954 var y = x & 3; // y == 1/x mod 2^2
66955 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
66956 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
66957 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
66958 // last step - calculate inverse mod DV directly
66959 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
66960 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
66961 // we really want the negative inverse, and -DV < y < DV
66962 return (y > 0) ? this.DV - y : -y
66963 }
66964
66965 // Montgomery reduction
66966 function Montgomery(m) {
66967 this.m = m
66968 this.mp = m.invDigit()
66969 this.mpl = this.mp & 0x7fff
66970 this.mph = this.mp >> 15
66971 this.um = (1 << (m.DB - 15)) - 1
66972 this.mt2 = 2 * m.t
66973 }
66974
66975 // xR mod m
66976 function montConvert(x) {
66977 var r = new BigInteger()
66978 x.abs()
66979 .dlShiftTo(this.m.t, r)
66980 r.divRemTo(this.m, null, r)
66981 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
66982 return r
66983 }
66984
66985 // x/R mod m
66986 function montRevert(x) {
66987 var r = new BigInteger()
66988 x.copyTo(r)
66989 this.reduce(r)
66990 return r
66991 }
66992
66993 // x = x/R mod m (HAC 14.32)
66994 function montReduce(x) {
66995 while (x.t <= this.mt2) // pad x so am has enough room later
66996 x[x.t++] = 0
66997 for (var i = 0; i < this.m.t; ++i) {
66998 // faster way of calculating u0 = x[i]*mp mod DV
66999 var j = x[i] & 0x7fff
67000 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
67001 // use am to combine the multiply-shift-add into one call
67002 j = i + this.m.t
67003 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
67004 // propagate carry
67005 while (x[j] >= x.DV) {
67006 x[j] -= x.DV
67007 x[++j]++
67008 }
67009 }
67010 x.clamp()
67011 x.drShiftTo(this.m.t, x)
67012 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
67013 }
67014
67015 // r = "x^2/R mod m"; x != r
67016 function montSqrTo(x, r) {
67017 x.squareTo(r)
67018 this.reduce(r)
67019 }
67020
67021 // r = "xy/R mod m"; x,y != r
67022 function montMulTo(x, y, r) {
67023 x.multiplyTo(y, r)
67024 this.reduce(r)
67025 }
67026
67027 Montgomery.prototype.convert = montConvert
67028 Montgomery.prototype.revert = montRevert
67029 Montgomery.prototype.reduce = montReduce
67030 Montgomery.prototype.mulTo = montMulTo
67031 Montgomery.prototype.sqrTo = montSqrTo
67032
67033 // (protected) true iff this is even
67034 function bnpIsEven() {
67035 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
67036 }
67037
67038 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
67039 function bnpExp(e, z) {
67040 if (e > 0xffffffff || e < 1) return BigInteger.ONE
67041 var r = new BigInteger(),
67042 r2 = new BigInteger(),
67043 g = z.convert(this),
67044 i = nbits(e) - 1
67045 g.copyTo(r)
67046 while (--i >= 0) {
67047 z.sqrTo(r, r2)
67048 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
67049 else {
67050 var t = r
67051 r = r2
67052 r2 = t
67053 }
67054 }
67055 return z.revert(r)
67056 }
67057
67058 // (public) this^e % m, 0 <= e < 2^32
67059 function bnModPowInt(e, m) {
67060 var z
67061 if (e < 256 || m.isEven()) z = new Classic(m)
67062 else z = new Montgomery(m)
67063 return this.exp(e, z)
67064 }
67065
67066 // protected
67067 proto.copyTo = bnpCopyTo
67068 proto.fromInt = bnpFromInt
67069 proto.fromString = bnpFromString
67070 proto.clamp = bnpClamp
67071 proto.dlShiftTo = bnpDLShiftTo
67072 proto.drShiftTo = bnpDRShiftTo
67073 proto.lShiftTo = bnpLShiftTo
67074 proto.rShiftTo = bnpRShiftTo
67075 proto.subTo = bnpSubTo
67076 proto.multiplyTo = bnpMultiplyTo
67077 proto.squareTo = bnpSquareTo
67078 proto.divRemTo = bnpDivRemTo
67079 proto.invDigit = bnpInvDigit
67080 proto.isEven = bnpIsEven
67081 proto.exp = bnpExp
67082
67083 // public
67084 proto.toString = bnToString
67085 proto.negate = bnNegate
67086 proto.abs = bnAbs
67087 proto.compareTo = bnCompareTo
67088 proto.bitLength = bnBitLength
67089 proto.byteLength = bnByteLength
67090 proto.mod = bnMod
67091 proto.modPowInt = bnModPowInt
67092
67093 // (public)
67094 function bnClone() {
67095 var r = new BigInteger()
67096 this.copyTo(r)
67097 return r
67098 }
67099
67100 // (public) return value as integer
67101 function bnIntValue() {
67102 if (this.s < 0) {
67103 if (this.t == 1) return this[0] - this.DV
67104 else if (this.t == 0) return -1
67105 } else if (this.t == 1) return this[0]
67106 else if (this.t == 0) return 0
67107 // assumes 16 < DB < 32
67108 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
67109 }
67110
67111 // (public) return value as byte
67112 function bnByteValue() {
67113 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
67114 }
67115
67116 // (public) return value as short (assumes DB>=16)
67117 function bnShortValue() {
67118 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
67119 }
67120
67121 // (protected) return x s.t. r^x < DV
67122 function bnpChunkSize(r) {
67123 return Math.floor(Math.LN2 * this.DB / Math.log(r))
67124 }
67125
67126 // (public) 0 if this == 0, 1 if this > 0
67127 function bnSigNum() {
67128 if (this.s < 0) return -1
67129 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
67130 else return 1
67131 }
67132
67133 // (protected) convert to radix string
67134 function bnpToRadix(b) {
67135 if (b == null) b = 10
67136 if (this.signum() == 0 || b < 2 || b > 36) return "0"
67137 var cs = this.chunkSize(b)
67138 var a = Math.pow(b, cs)
67139 var d = nbv(a),
67140 y = new BigInteger(),
67141 z = new BigInteger(),
67142 r = ""
67143 this.divRemTo(d, y, z)
67144 while (y.signum() > 0) {
67145 r = (a + z.intValue())
67146 .toString(b)
67147 .substr(1) + r
67148 y.divRemTo(d, y, z)
67149 }
67150 return z.intValue()
67151 .toString(b) + r
67152 }
67153
67154 // (protected) convert from radix string
67155 function bnpFromRadix(s, b) {
67156 var self = this
67157 self.fromInt(0)
67158 if (b == null) b = 10
67159 var cs = self.chunkSize(b)
67160 var d = Math.pow(b, cs),
67161 mi = false,
67162 j = 0,
67163 w = 0
67164 for (var i = 0; i < s.length; ++i) {
67165 var x = intAt(s, i)
67166 if (x < 0) {
67167 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
67168 continue
67169 }
67170 w = b * w + x
67171 if (++j >= cs) {
67172 self.dMultiply(d)
67173 self.dAddOffset(w, 0)
67174 j = 0
67175 w = 0
67176 }
67177 }
67178 if (j > 0) {
67179 self.dMultiply(Math.pow(b, j))
67180 self.dAddOffset(w, 0)
67181 }
67182 if (mi) BigInteger.ZERO.subTo(self, self)
67183 }
67184
67185 // (protected) alternate constructor
67186 function bnpFromNumber(a, b, c) {
67187 var self = this
67188 if ("number" == typeof b) {
67189 // new BigInteger(int,int,RNG)
67190 if (a < 2) self.fromInt(1)
67191 else {
67192 self.fromNumber(a, c)
67193 if (!self.testBit(a - 1)) // force MSB set
67194 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
67195 if (self.isEven()) self.dAddOffset(1, 0); // force odd
67196 while (!self.isProbablePrime(b)) {
67197 self.dAddOffset(2, 0)
67198 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
67199 }
67200 }
67201 } else {
67202 // new BigInteger(int,RNG)
67203 var x = new Array(),
67204 t = a & 7
67205 x.length = (a >> 3) + 1
67206 b.nextBytes(x)
67207 if (t > 0) x[0] &= ((1 << t) - 1)
67208 else x[0] = 0
67209 self.fromString(x, 256)
67210 }
67211 }
67212
67213 // (public) convert to bigendian byte array
67214 function bnToByteArray() {
67215 var self = this
67216 var i = self.t,
67217 r = new Array()
67218 r[0] = self.s
67219 var p = self.DB - (i * self.DB) % 8,
67220 d, k = 0
67221 if (i-- > 0) {
67222 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
67223 r[k++] = d | (self.s << (self.DB - p))
67224 while (i >= 0) {
67225 if (p < 8) {
67226 d = (self[i] & ((1 << p) - 1)) << (8 - p)
67227 d |= self[--i] >> (p += self.DB - 8)
67228 } else {
67229 d = (self[i] >> (p -= 8)) & 0xff
67230 if (p <= 0) {
67231 p += self.DB
67232 --i
67233 }
67234 }
67235 if ((d & 0x80) != 0) d |= -256
67236 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
67237 if (k > 0 || d != self.s) r[k++] = d
67238 }
67239 }
67240 return r
67241 }
67242
67243 function bnEquals(a) {
67244 return (this.compareTo(a) == 0)
67245 }
67246
67247 function bnMin(a) {
67248 return (this.compareTo(a) < 0) ? this : a
67249 }
67250
67251 function bnMax(a) {
67252 return (this.compareTo(a) > 0) ? this : a
67253 }
67254
67255 // (protected) r = this op a (bitwise)
67256 function bnpBitwiseTo(a, op, r) {
67257 var self = this
67258 var i, f, m = Math.min(a.t, self.t)
67259 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
67260 if (a.t < self.t) {
67261 f = a.s & self.DM
67262 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
67263 r.t = self.t
67264 } else {
67265 f = self.s & self.DM
67266 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
67267 r.t = a.t
67268 }
67269 r.s = op(self.s, a.s)
67270 r.clamp()
67271 }
67272
67273 // (public) this & a
67274 function op_and(x, y) {
67275 return x & y
67276 }
67277
67278 function bnAnd(a) {
67279 var r = new BigInteger()
67280 this.bitwiseTo(a, op_and, r)
67281 return r
67282 }
67283
67284 // (public) this | a
67285 function op_or(x, y) {
67286 return x | y
67287 }
67288
67289 function bnOr(a) {
67290 var r = new BigInteger()
67291 this.bitwiseTo(a, op_or, r)
67292 return r
67293 }
67294
67295 // (public) this ^ a
67296 function op_xor(x, y) {
67297 return x ^ y
67298 }
67299
67300 function bnXor(a) {
67301 var r = new BigInteger()
67302 this.bitwiseTo(a, op_xor, r)
67303 return r
67304 }
67305
67306 // (public) this & ~a
67307 function op_andnot(x, y) {
67308 return x & ~y
67309 }
67310
67311 function bnAndNot(a) {
67312 var r = new BigInteger()
67313 this.bitwiseTo(a, op_andnot, r)
67314 return r
67315 }
67316
67317 // (public) ~this
67318 function bnNot() {
67319 var r = new BigInteger()
67320 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
67321 r.t = this.t
67322 r.s = ~this.s
67323 return r
67324 }
67325
67326 // (public) this << n
67327 function bnShiftLeft(n) {
67328 var r = new BigInteger()
67329 if (n < 0) this.rShiftTo(-n, r)
67330 else this.lShiftTo(n, r)
67331 return r
67332 }
67333
67334 // (public) this >> n
67335 function bnShiftRight(n) {
67336 var r = new BigInteger()
67337 if (n < 0) this.lShiftTo(-n, r)
67338 else this.rShiftTo(n, r)
67339 return r
67340 }
67341
67342 // return index of lowest 1-bit in x, x < 2^31
67343 function lbit(x) {
67344 if (x == 0) return -1
67345 var r = 0
67346 if ((x & 0xffff) == 0) {
67347 x >>= 16
67348 r += 16
67349 }
67350 if ((x & 0xff) == 0) {
67351 x >>= 8
67352 r += 8
67353 }
67354 if ((x & 0xf) == 0) {
67355 x >>= 4
67356 r += 4
67357 }
67358 if ((x & 3) == 0) {
67359 x >>= 2
67360 r += 2
67361 }
67362 if ((x & 1) == 0)++r
67363 return r
67364 }
67365
67366 // (public) returns index of lowest 1-bit (or -1 if none)
67367 function bnGetLowestSetBit() {
67368 for (var i = 0; i < this.t; ++i)
67369 if (this[i] != 0) return i * this.DB + lbit(this[i])
67370 if (this.s < 0) return this.t * this.DB
67371 return -1
67372 }
67373
67374 // return number of 1 bits in x
67375 function cbit(x) {
67376 var r = 0
67377 while (x != 0) {
67378 x &= x - 1
67379 ++r
67380 }
67381 return r
67382 }
67383
67384 // (public) return number of set bits
67385 function bnBitCount() {
67386 var r = 0,
67387 x = this.s & this.DM
67388 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
67389 return r
67390 }
67391
67392 // (public) true iff nth bit is set
67393 function bnTestBit(n) {
67394 var j = Math.floor(n / this.DB)
67395 if (j >= this.t) return (this.s != 0)
67396 return ((this[j] & (1 << (n % this.DB))) != 0)
67397 }
67398
67399 // (protected) this op (1<<n)
67400 function bnpChangeBit(n, op) {
67401 var r = BigInteger.ONE.shiftLeft(n)
67402 this.bitwiseTo(r, op, r)
67403 return r
67404 }
67405
67406 // (public) this | (1<<n)
67407 function bnSetBit(n) {
67408 return this.changeBit(n, op_or)
67409 }
67410
67411 // (public) this & ~(1<<n)
67412 function bnClearBit(n) {
67413 return this.changeBit(n, op_andnot)
67414 }
67415
67416 // (public) this ^ (1<<n)
67417 function bnFlipBit(n) {
67418 return this.changeBit(n, op_xor)
67419 }
67420
67421 // (protected) r = this + a
67422 function bnpAddTo(a, r) {
67423 var self = this
67424
67425 var i = 0,
67426 c = 0,
67427 m = Math.min(a.t, self.t)
67428 while (i < m) {
67429 c += self[i] + a[i]
67430 r[i++] = c & self.DM
67431 c >>= self.DB
67432 }
67433 if (a.t < self.t) {
67434 c += a.s
67435 while (i < self.t) {
67436 c += self[i]
67437 r[i++] = c & self.DM
67438 c >>= self.DB
67439 }
67440 c += self.s
67441 } else {
67442 c += self.s
67443 while (i < a.t) {
67444 c += a[i]
67445 r[i++] = c & self.DM
67446 c >>= self.DB
67447 }
67448 c += a.s
67449 }
67450 r.s = (c < 0) ? -1 : 0
67451 if (c > 0) r[i++] = c
67452 else if (c < -1) r[i++] = self.DV + c
67453 r.t = i
67454 r.clamp()
67455 }
67456
67457 // (public) this + a
67458 function bnAdd(a) {
67459 var r = new BigInteger()
67460 this.addTo(a, r)
67461 return r
67462 }
67463
67464 // (public) this - a
67465 function bnSubtract(a) {
67466 var r = new BigInteger()
67467 this.subTo(a, r)
67468 return r
67469 }
67470
67471 // (public) this * a
67472 function bnMultiply(a) {
67473 var r = new BigInteger()
67474 this.multiplyTo(a, r)
67475 return r
67476 }
67477
67478 // (public) this^2
67479 function bnSquare() {
67480 var r = new BigInteger()
67481 this.squareTo(r)
67482 return r
67483 }
67484
67485 // (public) this / a
67486 function bnDivide(a) {
67487 var r = new BigInteger()
67488 this.divRemTo(a, r, null)
67489 return r
67490 }
67491
67492 // (public) this % a
67493 function bnRemainder(a) {
67494 var r = new BigInteger()
67495 this.divRemTo(a, null, r)
67496 return r
67497 }
67498
67499 // (public) [this/a,this%a]
67500 function bnDivideAndRemainder(a) {
67501 var q = new BigInteger(),
67502 r = new BigInteger()
67503 this.divRemTo(a, q, r)
67504 return new Array(q, r)
67505 }
67506
67507 // (protected) this *= n, this >= 0, 1 < n < DV
67508 function bnpDMultiply(n) {
67509 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
67510 ++this.t
67511 this.clamp()
67512 }
67513
67514 // (protected) this += n << w words, this >= 0
67515 function bnpDAddOffset(n, w) {
67516 if (n == 0) return
67517 while (this.t <= w) this[this.t++] = 0
67518 this[w] += n
67519 while (this[w] >= this.DV) {
67520 this[w] -= this.DV
67521 if (++w >= this.t) this[this.t++] = 0
67522 ++this[w]
67523 }
67524 }
67525
67526 // A "null" reducer
67527 function NullExp() {}
67528
67529 function nNop(x) {
67530 return x
67531 }
67532
67533 function nMulTo(x, y, r) {
67534 x.multiplyTo(y, r)
67535 }
67536
67537 function nSqrTo(x, r) {
67538 x.squareTo(r)
67539 }
67540
67541 NullExp.prototype.convert = nNop
67542 NullExp.prototype.revert = nNop
67543 NullExp.prototype.mulTo = nMulTo
67544 NullExp.prototype.sqrTo = nSqrTo
67545
67546 // (public) this^e
67547 function bnPow(e) {
67548 return this.exp(e, new NullExp())
67549 }
67550
67551 // (protected) r = lower n words of "this * a", a.t <= n
67552 // "this" should be the larger one if appropriate.
67553 function bnpMultiplyLowerTo(a, n, r) {
67554 var i = Math.min(this.t + a.t, n)
67555 r.s = 0; // assumes a,this >= 0
67556 r.t = i
67557 while (i > 0) r[--i] = 0
67558 var j
67559 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
67560 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
67561 r.clamp()
67562 }
67563
67564 // (protected) r = "this * a" without lower n words, n > 0
67565 // "this" should be the larger one if appropriate.
67566 function bnpMultiplyUpperTo(a, n, r) {
67567 --n
67568 var i = r.t = this.t + a.t - n
67569 r.s = 0; // assumes a,this >= 0
67570 while (--i >= 0) r[i] = 0
67571 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
67572 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
67573 r.clamp()
67574 r.drShiftTo(1, r)
67575 }
67576
67577 // Barrett modular reduction
67578 function Barrett(m) {
67579 // setup Barrett
67580 this.r2 = new BigInteger()
67581 this.q3 = new BigInteger()
67582 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
67583 this.mu = this.r2.divide(m)
67584 this.m = m
67585 }
67586
67587 function barrettConvert(x) {
67588 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
67589 else if (x.compareTo(this.m) < 0) return x
67590 else {
67591 var r = new BigInteger()
67592 x.copyTo(r)
67593 this.reduce(r)
67594 return r
67595 }
67596 }
67597
67598 function barrettRevert(x) {
67599 return x
67600 }
67601
67602 // x = x mod m (HAC 14.42)
67603 function barrettReduce(x) {
67604 var self = this
67605 x.drShiftTo(self.m.t - 1, self.r2)
67606 if (x.t > self.m.t + 1) {
67607 x.t = self.m.t + 1
67608 x.clamp()
67609 }
67610 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
67611 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
67612 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
67613 x.subTo(self.r2, x)
67614 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
67615 }
67616
67617 // r = x^2 mod m; x != r
67618 function barrettSqrTo(x, r) {
67619 x.squareTo(r)
67620 this.reduce(r)
67621 }
67622
67623 // r = x*y mod m; x,y != r
67624 function barrettMulTo(x, y, r) {
67625 x.multiplyTo(y, r)
67626 this.reduce(r)
67627 }
67628
67629 Barrett.prototype.convert = barrettConvert
67630 Barrett.prototype.revert = barrettRevert
67631 Barrett.prototype.reduce = barrettReduce
67632 Barrett.prototype.mulTo = barrettMulTo
67633 Barrett.prototype.sqrTo = barrettSqrTo
67634
67635 // (public) this^e % m (HAC 14.85)
67636 function bnModPow(e, m) {
67637 var i = e.bitLength(),
67638 k, r = nbv(1),
67639 z
67640 if (i <= 0) return r
67641 else if (i < 18) k = 1
67642 else if (i < 48) k = 3
67643 else if (i < 144) k = 4
67644 else if (i < 768) k = 5
67645 else k = 6
67646 if (i < 8)
67647 z = new Classic(m)
67648 else if (m.isEven())
67649 z = new Barrett(m)
67650 else
67651 z = new Montgomery(m)
67652
67653 // precomputation
67654 var g = new Array(),
67655 n = 3,
67656 k1 = k - 1,
67657 km = (1 << k) - 1
67658 g[1] = z.convert(this)
67659 if (k > 1) {
67660 var g2 = new BigInteger()
67661 z.sqrTo(g[1], g2)
67662 while (n <= km) {
67663 g[n] = new BigInteger()
67664 z.mulTo(g2, g[n - 2], g[n])
67665 n += 2
67666 }
67667 }
67668
67669 var j = e.t - 1,
67670 w, is1 = true,
67671 r2 = new BigInteger(),
67672 t
67673 i = nbits(e[j]) - 1
67674 while (j >= 0) {
67675 if (i >= k1) w = (e[j] >> (i - k1)) & km
67676 else {
67677 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
67678 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
67679 }
67680
67681 n = k
67682 while ((w & 1) == 0) {
67683 w >>= 1
67684 --n
67685 }
67686 if ((i -= n) < 0) {
67687 i += this.DB
67688 --j
67689 }
67690 if (is1) { // ret == 1, don't bother squaring or multiplying it
67691 g[w].copyTo(r)
67692 is1 = false
67693 } else {
67694 while (n > 1) {
67695 z.sqrTo(r, r2)
67696 z.sqrTo(r2, r)
67697 n -= 2
67698 }
67699 if (n > 0) z.sqrTo(r, r2)
67700 else {
67701 t = r
67702 r = r2
67703 r2 = t
67704 }
67705 z.mulTo(r2, g[w], r)
67706 }
67707
67708 while (j >= 0 && (e[j] & (1 << i)) == 0) {
67709 z.sqrTo(r, r2)
67710 t = r
67711 r = r2
67712 r2 = t
67713 if (--i < 0) {
67714 i = this.DB - 1
67715 --j
67716 }
67717 }
67718 }
67719 return z.revert(r)
67720 }
67721
67722 // (public) gcd(this,a) (HAC 14.54)
67723 function bnGCD(a) {
67724 var x = (this.s < 0) ? this.negate() : this.clone()
67725 var y = (a.s < 0) ? a.negate() : a.clone()
67726 if (x.compareTo(y) < 0) {
67727 var t = x
67728 x = y
67729 y = t
67730 }
67731 var i = x.getLowestSetBit(),
67732 g = y.getLowestSetBit()
67733 if (g < 0) return x
67734 if (i < g) g = i
67735 if (g > 0) {
67736 x.rShiftTo(g, x)
67737 y.rShiftTo(g, y)
67738 }
67739 while (x.signum() > 0) {
67740 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
67741 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
67742 if (x.compareTo(y) >= 0) {
67743 x.subTo(y, x)
67744 x.rShiftTo(1, x)
67745 } else {
67746 y.subTo(x, y)
67747 y.rShiftTo(1, y)
67748 }
67749 }
67750 if (g > 0) y.lShiftTo(g, y)
67751 return y
67752 }
67753
67754 // (protected) this % n, n < 2^26
67755 function bnpModInt(n) {
67756 if (n <= 0) return 0
67757 var d = this.DV % n,
67758 r = (this.s < 0) ? n - 1 : 0
67759 if (this.t > 0)
67760 if (d == 0) r = this[0] % n
67761 else
67762 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
67763 return r
67764 }
67765
67766 // (public) 1/this % m (HAC 14.61)
67767 function bnModInverse(m) {
67768 var ac = m.isEven()
67769 if (this.signum() === 0) throw new Error('division by zero')
67770 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
67771 var u = m.clone(),
67772 v = this.clone()
67773 var a = nbv(1),
67774 b = nbv(0),
67775 c = nbv(0),
67776 d = nbv(1)
67777 while (u.signum() != 0) {
67778 while (u.isEven()) {
67779 u.rShiftTo(1, u)
67780 if (ac) {
67781 if (!a.isEven() || !b.isEven()) {
67782 a.addTo(this, a)
67783 b.subTo(m, b)
67784 }
67785 a.rShiftTo(1, a)
67786 } else if (!b.isEven()) b.subTo(m, b)
67787 b.rShiftTo(1, b)
67788 }
67789 while (v.isEven()) {
67790 v.rShiftTo(1, v)
67791 if (ac) {
67792 if (!c.isEven() || !d.isEven()) {
67793 c.addTo(this, c)
67794 d.subTo(m, d)
67795 }
67796 c.rShiftTo(1, c)
67797 } else if (!d.isEven()) d.subTo(m, d)
67798 d.rShiftTo(1, d)
67799 }
67800 if (u.compareTo(v) >= 0) {
67801 u.subTo(v, u)
67802 if (ac) a.subTo(c, a)
67803 b.subTo(d, b)
67804 } else {
67805 v.subTo(u, v)
67806 if (ac) c.subTo(a, c)
67807 d.subTo(b, d)
67808 }
67809 }
67810 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
67811 while (d.compareTo(m) >= 0) d.subTo(m, d)
67812 while (d.signum() < 0) d.addTo(m, d)
67813 return d
67814 }
67815
67816 var lowprimes = [
67817 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
67818 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
67819 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
67820 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
67821 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
67822 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
67823 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
67824 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
67825 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
67826 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
67827 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
67828 ]
67829
67830 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
67831
67832 // (public) test primality with certainty >= 1-.5^t
67833 function bnIsProbablePrime(t) {
67834 var i, x = this.abs()
67835 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
67836 for (i = 0; i < lowprimes.length; ++i)
67837 if (x[0] == lowprimes[i]) return true
67838 return false
67839 }
67840 if (x.isEven()) return false
67841 i = 1
67842 while (i < lowprimes.length) {
67843 var m = lowprimes[i],
67844 j = i + 1
67845 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
67846 m = x.modInt(m)
67847 while (i < j) if (m % lowprimes[i++] == 0) return false
67848 }
67849 return x.millerRabin(t)
67850 }
67851
67852 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
67853 function bnpMillerRabin(t) {
67854 var n1 = this.subtract(BigInteger.ONE)
67855 var k = n1.getLowestSetBit()
67856 if (k <= 0) return false
67857 var r = n1.shiftRight(k)
67858 t = (t + 1) >> 1
67859 if (t > lowprimes.length) t = lowprimes.length
67860 var a = new BigInteger(null)
67861 var j, bases = []
67862 for (var i = 0; i < t; ++i) {
67863 for (;;) {
67864 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
67865 if (bases.indexOf(j) == -1) break
67866 }
67867 bases.push(j)
67868 a.fromInt(j)
67869 var y = a.modPow(r, this)
67870 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
67871 var j = 1
67872 while (j++ < k && y.compareTo(n1) != 0) {
67873 y = y.modPowInt(2, this)
67874 if (y.compareTo(BigInteger.ONE) == 0) return false
67875 }
67876 if (y.compareTo(n1) != 0) return false
67877 }
67878 }
67879 return true
67880 }
67881
67882 // protected
67883 proto.chunkSize = bnpChunkSize
67884 proto.toRadix = bnpToRadix
67885 proto.fromRadix = bnpFromRadix
67886 proto.fromNumber = bnpFromNumber
67887 proto.bitwiseTo = bnpBitwiseTo
67888 proto.changeBit = bnpChangeBit
67889 proto.addTo = bnpAddTo
67890 proto.dMultiply = bnpDMultiply
67891 proto.dAddOffset = bnpDAddOffset
67892 proto.multiplyLowerTo = bnpMultiplyLowerTo
67893 proto.multiplyUpperTo = bnpMultiplyUpperTo
67894 proto.modInt = bnpModInt
67895 proto.millerRabin = bnpMillerRabin
67896
67897 // public
67898 proto.clone = bnClone
67899 proto.intValue = bnIntValue
67900 proto.byteValue = bnByteValue
67901 proto.shortValue = bnShortValue
67902 proto.signum = bnSigNum
67903 proto.toByteArray = bnToByteArray
67904 proto.equals = bnEquals
67905 proto.min = bnMin
67906 proto.max = bnMax
67907 proto.and = bnAnd
67908 proto.or = bnOr
67909 proto.xor = bnXor
67910 proto.andNot = bnAndNot
67911 proto.not = bnNot
67912 proto.shiftLeft = bnShiftLeft
67913 proto.shiftRight = bnShiftRight
67914 proto.getLowestSetBit = bnGetLowestSetBit
67915 proto.bitCount = bnBitCount
67916 proto.testBit = bnTestBit
67917 proto.setBit = bnSetBit
67918 proto.clearBit = bnClearBit
67919 proto.flipBit = bnFlipBit
67920 proto.add = bnAdd
67921 proto.subtract = bnSubtract
67922 proto.multiply = bnMultiply
67923 proto.divide = bnDivide
67924 proto.remainder = bnRemainder
67925 proto.divideAndRemainder = bnDivideAndRemainder
67926 proto.modPow = bnModPow
67927 proto.modInverse = bnModInverse
67928 proto.pow = bnPow
67929 proto.gcd = bnGCD
67930 proto.isProbablePrime = bnIsProbablePrime
67931
67932 // JSBN-specific extension
67933 proto.square = bnSquare
67934
67935 // constants
67936 BigInteger.ZERO = nbv(0)
67937 BigInteger.ONE = nbv(1)
67938 BigInteger.valueOf = nbv
67939
67940 module.exports = BigInteger
67941
67942 },{"../package.json":155}],153:[function(require,module,exports){
67943 (function (Buffer){
67944 // FIXME: Kind of a weird way to throw exceptions, consider removing
67945 var assert = require('assert')
67946 var BigInteger = require('./bigi')
67947
67948 /**
67949 * Turns a byte array into a big integer.
67950 *
67951 * This function will interpret a byte array as a big integer in big
67952 * endian notation.
67953 */
67954 BigInteger.fromByteArrayUnsigned = function(byteArray) {
67955 // BigInteger expects a DER integer conformant byte array
67956 if (byteArray[0] & 0x80) {
67957 return new BigInteger([0].concat(byteArray))
67958 }
67959
67960 return new BigInteger(byteArray)
67961 }
67962
67963 /**
67964 * Returns a byte array representation of the big integer.
67965 *
67966 * This returns the absolute of the contained value in big endian
67967 * form. A value of zero results in an empty array.
67968 */
67969 BigInteger.prototype.toByteArrayUnsigned = function() {
67970 var byteArray = this.toByteArray()
67971 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
67972 }
67973
67974 BigInteger.fromDERInteger = function(byteArray) {
67975 return new BigInteger(byteArray)
67976 }
67977
67978 /*
67979 * Converts BigInteger to a DER integer representation.
67980 *
67981 * The format for this value uses the most significant bit as a sign
67982 * bit. If the most significant bit is already set and the integer is
67983 * positive, a 0x00 is prepended.
67984 *
67985 * Examples:
67986 *
67987 * 0 => 0x00
67988 * 1 => 0x01
67989 * -1 => 0xff
67990 * 127 => 0x7f
67991 * -127 => 0x81
67992 * 128 => 0x0080
67993 * -128 => 0x80
67994 * 255 => 0x00ff
67995 * -255 => 0xff01
67996 * 16300 => 0x3fac
67997 * -16300 => 0xc054
67998 * 62300 => 0x00f35c
67999 * -62300 => 0xff0ca4
68000 */
68001 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
68002
68003 BigInteger.fromBuffer = function(buffer) {
68004 // BigInteger expects a DER integer conformant byte array
68005 if (buffer[0] & 0x80) {
68006 var byteArray = Array.prototype.slice.call(buffer)
68007
68008 return new BigInteger([0].concat(byteArray))
68009 }
68010
68011 return new BigInteger(buffer)
68012 }
68013
68014 BigInteger.fromHex = function(hex) {
68015 if (hex === '') return BigInteger.ZERO
68016
68017 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
68018 assert.equal(hex.length % 2, 0, 'Incomplete hex')
68019 return new BigInteger(hex, 16)
68020 }
68021
68022 BigInteger.prototype.toBuffer = function(size) {
68023 var byteArray = this.toByteArrayUnsigned()
68024 var zeros = []
68025
68026 var padding = size - byteArray.length
68027 while (zeros.length < padding) zeros.push(0)
68028
68029 return new Buffer(zeros.concat(byteArray))
68030 }
68031
68032 BigInteger.prototype.toHex = function(size) {
68033 return this.toBuffer(size).toString('hex')
68034 }
68035
68036 }).call(this,require("buffer").Buffer)
68037 },{"./bigi":152,"assert":15,"buffer":47}],154:[function(require,module,exports){
68038 var BigInteger = require('./bigi')
68039
68040 //addons
68041 require('./convert')
68042
68043 module.exports = BigInteger
68044 },{"./bigi":152,"./convert":153}],155:[function(require,module,exports){
68045 module.exports={
68046 "_args": [
68047 [
68048 "bigi@^1.2.0",
68049 "/home/ian/git/bitcoin/bitcoinjs-bip38"
68050 ]
68051 ],
68052 "_from": "bigi@>=1.2.0 <2.0.0",
68053 "_id": "bigi@1.4.2",
68054 "_inCache": true,
68055 "_installable": true,
68056 "_location": "/bigi",
68057 "_nodeVersion": "6.1.0",
68058 "_npmOperationalInternal": {
68059 "host": "packages-12-west.internal.npmjs.com",
68060 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
68061 },
68062 "_npmUser": {
68063 "email": "jprichardson@gmail.com",
68064 "name": "jprichardson"
68065 },
68066 "_npmVersion": "3.8.6",
68067 "_phantomChildren": {},
68068 "_requested": {
68069 "name": "bigi",
68070 "raw": "bigi@^1.2.0",
68071 "rawSpec": "^1.2.0",
68072 "scope": null,
68073 "spec": ">=1.2.0 <2.0.0",
68074 "type": "range"
68075 },
68076 "_requiredBy": [
68077 "/",
68078 "/ecurve"
68079 ],
68080 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
68081 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
68082 "_shrinkwrap": null,
68083 "_spec": "bigi@^1.2.0",
68084 "_where": "/home/ian/git/bitcoin/bitcoinjs-bip38",
68085 "bugs": {
68086 "url": "https://github.com/cryptocoinjs/bigi/issues"
68087 },
68088 "dependencies": {},
68089 "description": "Big integers.",
68090 "devDependencies": {
68091 "coveralls": "^2.11.2",
68092 "istanbul": "^0.3.5",
68093 "jshint": "^2.5.1",
68094 "mocha": "^2.1.0",
68095 "mochify": "^2.1.0"
68096 },
68097 "directories": {},
68098 "dist": {
68099 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
68100 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
68101 },
68102 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
68103 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
68104 "keywords": [
68105 "cryptography",
68106 "math",
68107 "bitcoin",
68108 "arbitrary",
68109 "precision",
68110 "arithmetic",
68111 "big",
68112 "integer",
68113 "int",
68114 "number",
68115 "biginteger",
68116 "bigint",
68117 "bignumber",
68118 "decimal",
68119 "float"
68120 ],
68121 "main": "./lib/index.js",
68122 "maintainers": [
68123 {
68124 "email": "boydb@midnightdesign.ws",
68125 "name": "midnightlightning"
68126 },
68127 {
68128 "email": "sidazhang89@gmail.com",
68129 "name": "sidazhang"
68130 },
68131 {
68132 "email": "npm@shesek.info",
68133 "name": "nadav"
68134 },
68135 {
68136 "email": "jprichardson@gmail.com",
68137 "name": "jprichardson"
68138 }
68139 ],
68140 "name": "bigi",
68141 "optionalDependencies": {},
68142 "readme": "ERROR: No README data found!",
68143 "repository": {
68144 "type": "git",
68145 "url": "git+https://github.com/cryptocoinjs/bigi.git"
68146 },
68147 "scripts": {
68148 "browser-test": "mochify --wd -R spec",
68149 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
68150 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
68151 "jshint": "jshint --config jshint.json lib/*.js ; true",
68152 "test": "_mocha -- test/*.js",
68153 "unit": "mocha"
68154 },
68155 "testling": {
68156 "browsers": [
68157 "ie/9..latest",
68158 "firefox/latest",
68159 "chrome/latest",
68160 "safari/6.0..latest",
68161 "iphone/6.0..latest",
68162 "android-browser/4.2..latest"
68163 ],
68164 "files": "test/*.js",
68165 "harness": "mocha"
68166 },
68167 "version": "1.4.2"
68168 }
68169
68170 },{}],156:[function(require,module,exports){
68171 // based on the aes implimentation in triple sec
68172 // https://github.com/keybase/triplesec
68173 // which is in turn based on the one from crypto-js
68174 // https://code.google.com/p/crypto-js/
68175
68176 var Buffer = require('safe-buffer').Buffer
68177
68178 function asUInt32Array (buf) {
68179 if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)
68180
68181 var len = (buf.length / 4) | 0
68182 var out = new Array(len)
68183
68184 for (var i = 0; i < len; i++) {
68185 out[i] = buf.readUInt32BE(i * 4)
68186 }
68187
68188 return out
68189 }
68190
68191 function scrubVec (v) {
68192 for (var i = 0; i < v.length; v++) {
68193 v[i] = 0
68194 }
68195 }
68196
68197 function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) {
68198 var SUB_MIX0 = SUB_MIX[0]
68199 var SUB_MIX1 = SUB_MIX[1]
68200 var SUB_MIX2 = SUB_MIX[2]
68201 var SUB_MIX3 = SUB_MIX[3]
68202
68203 var s0 = M[0] ^ keySchedule[0]
68204 var s1 = M[1] ^ keySchedule[1]
68205 var s2 = M[2] ^ keySchedule[2]
68206 var s3 = M[3] ^ keySchedule[3]
68207 var t0, t1, t2, t3
68208 var ksRow = 4
68209
68210 for (var round = 1; round < nRounds; round++) {
68211 t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++]
68212 t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++]
68213 t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++]
68214 t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++]
68215 s0 = t0
68216 s1 = t1
68217 s2 = t2
68218 s3 = t3
68219 }
68220
68221 t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++]
68222 t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++]
68223 t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++]
68224 t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++]
68225 t0 = t0 >>> 0
68226 t1 = t1 >>> 0
68227 t2 = t2 >>> 0
68228 t3 = t3 >>> 0
68229
68230 return [t0, t1, t2, t3]
68231 }
68232
68233 // AES constants
68234 var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36]
68235 var G = (function () {
68236 // Compute double table
68237 var d = new Array(256)
68238 for (var j = 0; j < 256; j++) {
68239 if (j < 128) {
68240 d[j] = j << 1
68241 } else {
68242 d[j] = (j << 1) ^ 0x11b
68243 }
68244 }
68245
68246 var SBOX = []
68247 var INV_SBOX = []
68248 var SUB_MIX = [[], [], [], []]
68249 var INV_SUB_MIX = [[], [], [], []]
68250
68251 // Walk GF(2^8)
68252 var x = 0
68253 var xi = 0
68254 for (var i = 0; i < 256; ++i) {
68255 // Compute sbox
68256 var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4)
68257 sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63
68258 SBOX[x] = sx
68259 INV_SBOX[sx] = x
68260
68261 // Compute multiplication
68262 var x2 = d[x]
68263 var x4 = d[x2]
68264 var x8 = d[x4]
68265
68266 // Compute sub bytes, mix columns tables
68267 var t = (d[sx] * 0x101) ^ (sx * 0x1010100)
68268 SUB_MIX[0][x] = (t << 24) | (t >>> 8)
68269 SUB_MIX[1][x] = (t << 16) | (t >>> 16)
68270 SUB_MIX[2][x] = (t << 8) | (t >>> 24)
68271 SUB_MIX[3][x] = t
68272
68273 // Compute inv sub bytes, inv mix columns tables
68274 t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
68275 INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8)
68276 INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16)
68277 INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24)
68278 INV_SUB_MIX[3][sx] = t
68279
68280 if (x === 0) {
68281 x = xi = 1
68282 } else {
68283 x = x2 ^ d[d[d[x8 ^ x2]]]
68284 xi ^= d[d[xi]]
68285 }
68286 }
68287
68288 return {
68289 SBOX: SBOX,
68290 INV_SBOX: INV_SBOX,
68291 SUB_MIX: SUB_MIX,
68292 INV_SUB_MIX: INV_SUB_MIX
68293 }
68294 })()
68295
68296 function AES (key) {
68297 this._key = asUInt32Array(key)
68298 this._reset()
68299 }
68300
68301 AES.blockSize = 4 * 4
68302 AES.keySize = 256 / 8
68303 AES.prototype.blockSize = AES.blockSize
68304 AES.prototype.keySize = AES.keySize
68305 AES.prototype._reset = function () {
68306 var keyWords = this._key
68307 var keySize = keyWords.length
68308 var nRounds = keySize + 6
68309 var ksRows = (nRounds + 1) * 4
68310
68311 var keySchedule = []
68312 for (var k = 0; k < keySize; k++) {
68313 keySchedule[k] = keyWords[k]
68314 }
68315
68316 for (k = keySize; k < ksRows; k++) {
68317 var t = keySchedule[k - 1]
68318
68319 if (k % keySize === 0) {
68320 t = (t << 8) | (t >>> 24)
68321 t =
68322 (G.SBOX[t >>> 24] << 24) |
68323 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68324 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68325 (G.SBOX[t & 0xff])
68326
68327 t ^= RCON[(k / keySize) | 0] << 24
68328 } else if (keySize > 6 && k % keySize === 4) {
68329 t =
68330 (G.SBOX[t >>> 24] << 24) |
68331 (G.SBOX[(t >>> 16) & 0xff] << 16) |
68332 (G.SBOX[(t >>> 8) & 0xff] << 8) |
68333 (G.SBOX[t & 0xff])
68334 }
68335
68336 keySchedule[k] = keySchedule[k - keySize] ^ t
68337 }
68338
68339 var invKeySchedule = []
68340 for (var ik = 0; ik < ksRows; ik++) {
68341 var ksR = ksRows - ik
68342 var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)]
68343
68344 if (ik < 4 || ksR <= 4) {
68345 invKeySchedule[ik] = tt
68346 } else {
68347 invKeySchedule[ik] =
68348 G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^
68349 G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^
68350 G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^
68351 G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]]
68352 }
68353 }
68354
68355 this._nRounds = nRounds
68356 this._keySchedule = keySchedule
68357 this._invKeySchedule = invKeySchedule
68358 }
68359
68360 AES.prototype.encryptBlockRaw = function (M) {
68361 M = asUInt32Array(M)
68362 return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds)
68363 }
68364
68365 AES.prototype.encryptBlock = function (M) {
68366 var out = this.encryptBlockRaw(M)
68367 var buf = Buffer.allocUnsafe(16)
68368 buf.writeUInt32BE(out[0], 0)
68369 buf.writeUInt32BE(out[1], 4)
68370 buf.writeUInt32BE(out[2], 8)
68371 buf.writeUInt32BE(out[3], 12)
68372 return buf
68373 }
68374
68375 AES.prototype.decryptBlock = function (M) {
68376 M = asUInt32Array(M)
68377
68378 // swap
68379 var m1 = M[1]
68380 M[1] = M[3]
68381 M[3] = m1
68382
68383 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds)
68384 var buf = Buffer.allocUnsafe(16)
68385 buf.writeUInt32BE(out[0], 0)
68386 buf.writeUInt32BE(out[3], 4)
68387 buf.writeUInt32BE(out[2], 8)
68388 buf.writeUInt32BE(out[1], 12)
68389 return buf
68390 }
68391
68392 AES.prototype.scrub = function () {
68393 scrubVec(this._keySchedule)
68394 scrubVec(this._invKeySchedule)
68395 scrubVec(this._key)
68396 }
68397
68398 module.exports.AES = AES
68399
68400 },{"safe-buffer":193}],157:[function(require,module,exports){
68401 var aes = require('./aes')
68402 var Buffer = require('safe-buffer').Buffer
68403 var Transform = require('cipher-base')
68404 var inherits = require('inherits')
68405 var GHASH = require('./ghash')
68406 var xor = require('buffer-xor')
68407 var incr32 = require('./incr32')
68408
68409 function xorTest (a, b) {
68410 var out = 0
68411 if (a.length !== b.length) out++
68412
68413 var len = Math.min(a.length, b.length)
68414 for (var i = 0; i < len; ++i) {
68415 out += (a[i] ^ b[i])
68416 }
68417
68418 return out
68419 }
68420
68421 function calcIv (self, iv, ck) {
68422 if (iv.length === 12) {
68423 self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])])
68424 return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])])
68425 }
68426 var ghash = new GHASH(ck)
68427 var len = iv.length
68428 var toPad = len % 16
68429 ghash.update(iv)
68430 if (toPad) {
68431 toPad = 16 - toPad
68432 ghash.update(Buffer.alloc(toPad, 0))
68433 }
68434 ghash.update(Buffer.alloc(8, 0))
68435 var ivBits = len * 8
68436 var tail = Buffer.alloc(8)
68437 tail.writeUIntBE(ivBits, 0, 8)
68438 ghash.update(tail)
68439 self._finID = ghash.state
68440 var out = Buffer.from(self._finID)
68441 incr32(out)
68442 return out
68443 }
68444 function StreamCipher (mode, key, iv, decrypt) {
68445 Transform.call(this)
68446
68447 var h = Buffer.alloc(4, 0)
68448
68449 this._cipher = new aes.AES(key)
68450 var ck = this._cipher.encryptBlock(h)
68451 this._ghash = new GHASH(ck)
68452 iv = calcIv(this, iv, ck)
68453
68454 this._prev = Buffer.from(iv)
68455 this._cache = Buffer.allocUnsafe(0)
68456 this._secCache = Buffer.allocUnsafe(0)
68457 this._decrypt = decrypt
68458 this._alen = 0
68459 this._len = 0
68460 this._mode = mode
68461
68462 this._authTag = null
68463 this._called = false
68464 }
68465
68466 inherits(StreamCipher, Transform)
68467
68468 StreamCipher.prototype._update = function (chunk) {
68469 if (!this._called && this._alen) {
68470 var rump = 16 - (this._alen % 16)
68471 if (rump < 16) {
68472 rump = Buffer.alloc(rump, 0)
68473 this._ghash.update(rump)
68474 }
68475 }
68476
68477 this._called = true
68478 var out = this._mode.encrypt(this, chunk)
68479 if (this._decrypt) {
68480 this._ghash.update(chunk)
68481 } else {
68482 this._ghash.update(out)
68483 }
68484 this._len += chunk.length
68485 return out
68486 }
68487
68488 StreamCipher.prototype._final = function () {
68489 if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data')
68490
68491 var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID))
68492 if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data')
68493
68494 this._authTag = tag
68495 this._cipher.scrub()
68496 }
68497
68498 StreamCipher.prototype.getAuthTag = function getAuthTag () {
68499 if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state')
68500
68501 return this._authTag
68502 }
68503
68504 StreamCipher.prototype.setAuthTag = function setAuthTag (tag) {
68505 if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state')
68506
68507 this._authTag = tag
68508 }
68509
68510 StreamCipher.prototype.setAAD = function setAAD (buf) {
68511 if (this._called) throw new Error('Attempting to set AAD in unsupported state')
68512
68513 this._ghash.update(buf)
68514 this._alen += buf.length
68515 }
68516
68517 module.exports = StreamCipher
68518
68519 },{"./aes":156,"./ghash":161,"./incr32":162,"buffer-xor":176,"cipher-base":178,"inherits":189,"safe-buffer":193}],158:[function(require,module,exports){
68520 var ciphers = require('./encrypter')
68521 var deciphers = require('./decrypter')
68522 var modes = require('./modes/list.json')
68523
68524 function getCiphers () {
68525 return Object.keys(modes)
68526 }
68527
68528 exports.createCipher = exports.Cipher = ciphers.createCipher
68529 exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv
68530 exports.createDecipher = exports.Decipher = deciphers.createDecipher
68531 exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv
68532 exports.listCiphers = exports.getCiphers = getCiphers
68533
68534 },{"./decrypter":159,"./encrypter":160,"./modes/list.json":170}],159:[function(require,module,exports){
68535 var AuthCipher = require('./authCipher')
68536 var Buffer = require('safe-buffer').Buffer
68537 var MODES = require('./modes')
68538 var StreamCipher = require('./streamCipher')
68539 var Transform = require('cipher-base')
68540 var aes = require('./aes')
68541 var ebtk = require('evp_bytestokey')
68542 var inherits = require('inherits')
68543
68544 function Decipher (mode, key, iv) {
68545 Transform.call(this)
68546
68547 this._cache = new Splitter()
68548 this._last = void 0
68549 this._cipher = new aes.AES(key)
68550 this._prev = Buffer.from(iv)
68551 this._mode = mode
68552 this._autopadding = true
68553 }
68554
68555 inherits(Decipher, Transform)
68556
68557 Decipher.prototype._update = function (data) {
68558 this._cache.add(data)
68559 var chunk
68560 var thing
68561 var out = []
68562 while ((chunk = this._cache.get(this._autopadding))) {
68563 thing = this._mode.decrypt(this, chunk)
68564 out.push(thing)
68565 }
68566 return Buffer.concat(out)
68567 }
68568
68569 Decipher.prototype._final = function () {
68570 var chunk = this._cache.flush()
68571 if (this._autopadding) {
68572 return unpad(this._mode.decrypt(this, chunk))
68573 } else if (chunk) {
68574 throw new Error('data not multiple of block length')
68575 }
68576 }
68577
68578 Decipher.prototype.setAutoPadding = function (setTo) {
68579 this._autopadding = !!setTo
68580 return this
68581 }
68582
68583 function Splitter () {
68584 this.cache = Buffer.allocUnsafe(0)
68585 }
68586
68587 Splitter.prototype.add = function (data) {
68588 this.cache = Buffer.concat([this.cache, data])
68589 }
68590
68591 Splitter.prototype.get = function (autoPadding) {
68592 var out
68593 if (autoPadding) {
68594 if (this.cache.length > 16) {
68595 out = this.cache.slice(0, 16)
68596 this.cache = this.cache.slice(16)
68597 return out
68598 }
68599 } else {
68600 if (this.cache.length >= 16) {
68601 out = this.cache.slice(0, 16)
68602 this.cache = this.cache.slice(16)
68603 return out
68604 }
68605 }
68606
68607 return null
68608 }
68609
68610 Splitter.prototype.flush = function () {
68611 if (this.cache.length) return this.cache
68612 }
68613
68614 function unpad (last) {
68615 var padded = last[15]
68616 var i = -1
68617 while (++i < padded) {
68618 if (last[(i + (16 - padded))] !== padded) {
68619 throw new Error('unable to decrypt data')
68620 }
68621 }
68622 if (padded === 16) return
68623
68624 return last.slice(0, 16 - padded)
68625 }
68626
68627 function createDecipheriv (suite, password, iv) {
68628 var config = MODES[suite.toLowerCase()]
68629 if (!config) throw new TypeError('invalid suite type')
68630
68631 if (typeof iv === 'string') iv = Buffer.from(iv)
68632 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68633
68634 if (typeof password === 'string') password = Buffer.from(password)
68635 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68636
68637 if (config.type === 'stream') {
68638 return new StreamCipher(config.module, password, iv, true)
68639 } else if (config.type === 'auth') {
68640 return new AuthCipher(config.module, password, iv, true)
68641 }
68642
68643 return new Decipher(config.module, password, iv)
68644 }
68645
68646 function createDecipher (suite, password) {
68647 var config = MODES[suite.toLowerCase()]
68648 if (!config) throw new TypeError('invalid suite type')
68649
68650 var keys = ebtk(password, false, config.key, config.iv)
68651 return createDecipheriv(suite, keys.key, keys.iv)
68652 }
68653
68654 exports.createDecipher = createDecipher
68655 exports.createDecipheriv = createDecipheriv
68656
68657 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],160:[function(require,module,exports){
68658 var MODES = require('./modes')
68659 var AuthCipher = require('./authCipher')
68660 var Buffer = require('safe-buffer').Buffer
68661 var StreamCipher = require('./streamCipher')
68662 var Transform = require('cipher-base')
68663 var aes = require('./aes')
68664 var ebtk = require('evp_bytestokey')
68665 var inherits = require('inherits')
68666
68667 function Cipher (mode, key, iv) {
68668 Transform.call(this)
68669
68670 this._cache = new Splitter()
68671 this._cipher = new aes.AES(key)
68672 this._prev = Buffer.from(iv)
68673 this._mode = mode
68674 this._autopadding = true
68675 }
68676
68677 inherits(Cipher, Transform)
68678
68679 Cipher.prototype._update = function (data) {
68680 this._cache.add(data)
68681 var chunk
68682 var thing
68683 var out = []
68684
68685 while ((chunk = this._cache.get())) {
68686 thing = this._mode.encrypt(this, chunk)
68687 out.push(thing)
68688 }
68689
68690 return Buffer.concat(out)
68691 }
68692
68693 var PADDING = Buffer.alloc(16, 0x10)
68694
68695 Cipher.prototype._final = function () {
68696 var chunk = this._cache.flush()
68697 if (this._autopadding) {
68698 chunk = this._mode.encrypt(this, chunk)
68699 this._cipher.scrub()
68700 return chunk
68701 }
68702
68703 if (!chunk.equals(PADDING)) {
68704 this._cipher.scrub()
68705 throw new Error('data not multiple of block length')
68706 }
68707 }
68708
68709 Cipher.prototype.setAutoPadding = function (setTo) {
68710 this._autopadding = !!setTo
68711 return this
68712 }
68713
68714 function Splitter () {
68715 this.cache = Buffer.allocUnsafe(0)
68716 }
68717
68718 Splitter.prototype.add = function (data) {
68719 this.cache = Buffer.concat([this.cache, data])
68720 }
68721
68722 Splitter.prototype.get = function () {
68723 if (this.cache.length > 15) {
68724 var out = this.cache.slice(0, 16)
68725 this.cache = this.cache.slice(16)
68726 return out
68727 }
68728 return null
68729 }
68730
68731 Splitter.prototype.flush = function () {
68732 var len = 16 - this.cache.length
68733 var padBuff = Buffer.allocUnsafe(len)
68734
68735 var i = -1
68736 while (++i < len) {
68737 padBuff.writeUInt8(len, i)
68738 }
68739
68740 return Buffer.concat([this.cache, padBuff])
68741 }
68742
68743 function createCipheriv (suite, password, iv) {
68744 var config = MODES[suite.toLowerCase()]
68745 if (!config) throw new TypeError('invalid suite type')
68746
68747 if (typeof password === 'string') password = Buffer.from(password)
68748 if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length)
68749
68750 if (typeof iv === 'string') iv = Buffer.from(iv)
68751 if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length)
68752
68753 if (config.type === 'stream') {
68754 return new StreamCipher(config.module, password, iv)
68755 } else if (config.type === 'auth') {
68756 return new AuthCipher(config.module, password, iv)
68757 }
68758
68759 return new Cipher(config.module, password, iv)
68760 }
68761
68762 function createCipher (suite, password) {
68763 var config = MODES[suite.toLowerCase()]
68764 if (!config) throw new TypeError('invalid suite type')
68765
68766 var keys = ebtk(password, false, config.key, config.iv)
68767 return createCipheriv(suite, keys.key, keys.iv)
68768 }
68769
68770 exports.createCipheriv = createCipheriv
68771 exports.createCipher = createCipher
68772
68773 },{"./aes":156,"./authCipher":157,"./modes":169,"./streamCipher":172,"cipher-base":178,"evp_bytestokey":187,"inherits":189,"safe-buffer":193}],161:[function(require,module,exports){
68774 var Buffer = require('safe-buffer').Buffer
68775 var ZEROES = Buffer.alloc(16, 0)
68776
68777 function toArray (buf) {
68778 return [
68779 buf.readUInt32BE(0),
68780 buf.readUInt32BE(4),
68781 buf.readUInt32BE(8),
68782 buf.readUInt32BE(12)
68783 ]
68784 }
68785
68786 function fromArray (out) {
68787 var buf = Buffer.allocUnsafe(16)
68788 buf.writeUInt32BE(out[0] >>> 0, 0)
68789 buf.writeUInt32BE(out[1] >>> 0, 4)
68790 buf.writeUInt32BE(out[2] >>> 0, 8)
68791 buf.writeUInt32BE(out[3] >>> 0, 12)
68792 return buf
68793 }
68794
68795 function GHASH (key) {
68796 this.h = key
68797 this.state = Buffer.alloc(16, 0)
68798 this.cache = Buffer.allocUnsafe(0)
68799 }
68800
68801 // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html
68802 // by Juho Vähä-Herttua
68803 GHASH.prototype.ghash = function (block) {
68804 var i = -1
68805 while (++i < block.length) {
68806 this.state[i] ^= block[i]
68807 }
68808 this._multiply()
68809 }
68810
68811 GHASH.prototype._multiply = function () {
68812 var Vi = toArray(this.h)
68813 var Zi = [0, 0, 0, 0]
68814 var j, xi, lsbVi
68815 var i = -1
68816 while (++i < 128) {
68817 xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0
68818 if (xi) {
68819 // Z_i+1 = Z_i ^ V_i
68820 Zi[0] ^= Vi[0]
68821 Zi[1] ^= Vi[1]
68822 Zi[2] ^= Vi[2]
68823 Zi[3] ^= Vi[3]
68824 }
68825
68826 // Store the value of LSB(V_i)
68827 lsbVi = (Vi[3] & 1) !== 0
68828
68829 // V_i+1 = V_i >> 1
68830 for (j = 3; j > 0; j--) {
68831 Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31)
68832 }
68833 Vi[0] = Vi[0] >>> 1
68834
68835 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R
68836 if (lsbVi) {
68837 Vi[0] = Vi[0] ^ (0xe1 << 24)
68838 }
68839 }
68840 this.state = fromArray(Zi)
68841 }
68842
68843 GHASH.prototype.update = function (buf) {
68844 this.cache = Buffer.concat([this.cache, buf])
68845 var chunk
68846 while (this.cache.length >= 16) {
68847 chunk = this.cache.slice(0, 16)
68848 this.cache = this.cache.slice(16)
68849 this.ghash(chunk)
68850 }
68851 }
68852
68853 GHASH.prototype.final = function (abl, bl) {
68854 if (this.cache.length) {
68855 this.ghash(Buffer.concat([this.cache, ZEROES], 16))
68856 }
68857
68858 this.ghash(fromArray([0, abl, 0, bl]))
68859 return this.state
68860 }
68861
68862 module.exports = GHASH
68863
68864 },{"safe-buffer":193}],162:[function(require,module,exports){
68865 function incr32 (iv) {
68866 var len = iv.length
68867 var item
68868 while (len--) {
68869 item = iv.readUInt8(len)
68870 if (item === 255) {
68871 iv.writeUInt8(0, len)
68872 } else {
68873 item++
68874 iv.writeUInt8(item, len)
68875 break
68876 }
68877 }
68878 }
68879 module.exports = incr32
68880
68881 },{}],163:[function(require,module,exports){
68882 arguments[4][27][0].apply(exports,arguments)
68883 },{"buffer-xor":176,"dup":27}],164:[function(require,module,exports){
68884 var Buffer = require('safe-buffer').Buffer
68885 var xor = require('buffer-xor')
68886
68887 function encryptStart (self, data, decrypt) {
68888 var len = data.length
68889 var out = xor(data, self._cache)
68890 self._cache = self._cache.slice(len)
68891 self._prev = Buffer.concat([self._prev, decrypt ? data : out])
68892 return out
68893 }
68894
68895 exports.encrypt = function (self, data, decrypt) {
68896 var out = Buffer.allocUnsafe(0)
68897 var len
68898
68899 while (data.length) {
68900 if (self._cache.length === 0) {
68901 self._cache = self._cipher.encryptBlock(self._prev)
68902 self._prev = Buffer.allocUnsafe(0)
68903 }
68904
68905 if (self._cache.length <= data.length) {
68906 len = self._cache.length
68907 out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)])
68908 data = data.slice(len)
68909 } else {
68910 out = Buffer.concat([out, encryptStart(self, data, decrypt)])
68911 break
68912 }
68913 }
68914
68915 return out
68916 }
68917
68918 },{"buffer-xor":176,"safe-buffer":193}],165:[function(require,module,exports){
68919 var Buffer = require('safe-buffer').Buffer
68920
68921 function encryptByte (self, byteParam, decrypt) {
68922 var pad
68923 var i = -1
68924 var len = 8
68925 var out = 0
68926 var bit, value
68927 while (++i < len) {
68928 pad = self._cipher.encryptBlock(self._prev)
68929 bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0
68930 value = pad[0] ^ bit
68931 out += ((value & 0x80) >> (i % 8))
68932 self._prev = shiftIn(self._prev, decrypt ? bit : value)
68933 }
68934 return out
68935 }
68936
68937 function shiftIn (buffer, value) {
68938 var len = buffer.length
68939 var i = -1
68940 var out = Buffer.allocUnsafe(buffer.length)
68941 buffer = Buffer.concat([buffer, Buffer.from([value])])
68942
68943 while (++i < len) {
68944 out[i] = buffer[i] << 1 | buffer[i + 1] >> (7)
68945 }
68946
68947 return out
68948 }
68949
68950 exports.encrypt = function (self, chunk, decrypt) {
68951 var len = chunk.length
68952 var out = Buffer.allocUnsafe(len)
68953 var i = -1
68954
68955 while (++i < len) {
68956 out[i] = encryptByte(self, chunk[i], decrypt)
68957 }
68958
68959 return out
68960 }
68961
68962 },{"safe-buffer":193}],166:[function(require,module,exports){
68963 var Buffer = require('safe-buffer').Buffer
68964
68965 function encryptByte (self, byteParam, decrypt) {
68966 var pad = self._cipher.encryptBlock(self._prev)
68967 var out = pad[0] ^ byteParam
68968
68969 self._prev = Buffer.concat([
68970 self._prev.slice(1),
68971 Buffer.from([decrypt ? byteParam : out])
68972 ])
68973
68974 return out
68975 }
68976
68977 exports.encrypt = function (self, chunk, decrypt) {
68978 var len = chunk.length
68979 var out = Buffer.allocUnsafe(len)
68980 var i = -1
68981
68982 while (++i < len) {
68983 out[i] = encryptByte(self, chunk[i], decrypt)
68984 }
68985
68986 return out
68987 }
68988
68989 },{"safe-buffer":193}],167:[function(require,module,exports){
68990 var xor = require('buffer-xor')
68991 var Buffer = require('safe-buffer').Buffer
68992 var incr32 = require('../incr32')
68993
68994 function getBlock (self) {
68995 var out = self._cipher.encryptBlockRaw(self._prev)
68996 incr32(self._prev)
68997 return out
68998 }
68999
69000 var blockSize = 16
69001 exports.encrypt = function (self, chunk) {
69002 var chunkNum = Math.ceil(chunk.length / blockSize)
69003 var start = self._cache.length
69004 self._cache = Buffer.concat([
69005 self._cache,
69006 Buffer.allocUnsafe(chunkNum * blockSize)
69007 ])
69008 for (var i = 0; i < chunkNum; i++) {
69009 var out = getBlock(self)
69010 var offset = start + i * blockSize
69011 self._cache.writeUInt32BE(out[0], offset + 0)
69012 self._cache.writeUInt32BE(out[1], offset + 4)
69013 self._cache.writeUInt32BE(out[2], offset + 8)
69014 self._cache.writeUInt32BE(out[3], offset + 12)
69015 }
69016 var pad = self._cache.slice(0, chunk.length)
69017 self._cache = self._cache.slice(chunk.length)
69018 return xor(chunk, pad)
69019 }
69020
69021 },{"../incr32":162,"buffer-xor":176,"safe-buffer":193}],168:[function(require,module,exports){
69022 exports.encrypt = function (self, block) {
69023 return self._cipher.encryptBlock(block)
69024 }
69025
69026 exports.decrypt = function (self, block) {
69027 return self._cipher.decryptBlock(block)
69028 }
69029
69030 },{}],169:[function(require,module,exports){
69031 var modeModules = {
69032 ECB: require('./ecb'),
69033 CBC: require('./cbc'),
69034 CFB: require('./cfb'),
69035 CFB8: require('./cfb8'),
69036 CFB1: require('./cfb1'),
69037 OFB: require('./ofb'),
69038 CTR: require('./ctr'),
69039 GCM: require('./ctr')
69040 }
69041
69042 var modes = require('./list.json')
69043
69044 for (var key in modes) {
69045 modes[key].module = modeModules[modes[key].mode]
69046 }
69047
69048 module.exports = modes
69049
69050 },{"./cbc":163,"./cfb":164,"./cfb1":165,"./cfb8":166,"./ctr":167,"./ecb":168,"./list.json":170,"./ofb":171}],170:[function(require,module,exports){
69051 module.exports={
69052 "aes-128-ecb": {
69053 "cipher": "AES",
69054 "key": 128,
69055 "iv": 0,
69056 "mode": "ECB",
69057 "type": "block"
69058 },
69059 "aes-192-ecb": {
69060 "cipher": "AES",
69061 "key": 192,
69062 "iv": 0,
69063 "mode": "ECB",
69064 "type": "block"
69065 },
69066 "aes-256-ecb": {
69067 "cipher": "AES",
69068 "key": 256,
69069 "iv": 0,
69070 "mode": "ECB",
69071 "type": "block"
69072 },
69073 "aes-128-cbc": {
69074 "cipher": "AES",
69075 "key": 128,
69076 "iv": 16,
69077 "mode": "CBC",
69078 "type": "block"
69079 },
69080 "aes-192-cbc": {
69081 "cipher": "AES",
69082 "key": 192,
69083 "iv": 16,
69084 "mode": "CBC",
69085 "type": "block"
69086 },
69087 "aes-256-cbc": {
69088 "cipher": "AES",
69089 "key": 256,
69090 "iv": 16,
69091 "mode": "CBC",
69092 "type": "block"
69093 },
69094 "aes128": {
69095 "cipher": "AES",
69096 "key": 128,
69097 "iv": 16,
69098 "mode": "CBC",
69099 "type": "block"
69100 },
69101 "aes192": {
69102 "cipher": "AES",
69103 "key": 192,
69104 "iv": 16,
69105 "mode": "CBC",
69106 "type": "block"
69107 },
69108 "aes256": {
69109 "cipher": "AES",
69110 "key": 256,
69111 "iv": 16,
69112 "mode": "CBC",
69113 "type": "block"
69114 },
69115 "aes-128-cfb": {
69116 "cipher": "AES",
69117 "key": 128,
69118 "iv": 16,
69119 "mode": "CFB",
69120 "type": "stream"
69121 },
69122 "aes-192-cfb": {
69123 "cipher": "AES",
69124 "key": 192,
69125 "iv": 16,
69126 "mode": "CFB",
69127 "type": "stream"
69128 },
69129 "aes-256-cfb": {
69130 "cipher": "AES",
69131 "key": 256,
69132 "iv": 16,
69133 "mode": "CFB",
69134 "type": "stream"
69135 },
69136 "aes-128-cfb8": {
69137 "cipher": "AES",
69138 "key": 128,
69139 "iv": 16,
69140 "mode": "CFB8",
69141 "type": "stream"
69142 },
69143 "aes-192-cfb8": {
69144 "cipher": "AES",
69145 "key": 192,
69146 "iv": 16,
69147 "mode": "CFB8",
69148 "type": "stream"
69149 },
69150 "aes-256-cfb8": {
69151 "cipher": "AES",
69152 "key": 256,
69153 "iv": 16,
69154 "mode": "CFB8",
69155 "type": "stream"
69156 },
69157 "aes-128-cfb1": {
69158 "cipher": "AES",
69159 "key": 128,
69160 "iv": 16,
69161 "mode": "CFB1",
69162 "type": "stream"
69163 },
69164 "aes-192-cfb1": {
69165 "cipher": "AES",
69166 "key": 192,
69167 "iv": 16,
69168 "mode": "CFB1",
69169 "type": "stream"
69170 },
69171 "aes-256-cfb1": {
69172 "cipher": "AES",
69173 "key": 256,
69174 "iv": 16,
69175 "mode": "CFB1",
69176 "type": "stream"
69177 },
69178 "aes-128-ofb": {
69179 "cipher": "AES",
69180 "key": 128,
69181 "iv": 16,
69182 "mode": "OFB",
69183 "type": "stream"
69184 },
69185 "aes-192-ofb": {
69186 "cipher": "AES",
69187 "key": 192,
69188 "iv": 16,
69189 "mode": "OFB",
69190 "type": "stream"
69191 },
69192 "aes-256-ofb": {
69193 "cipher": "AES",
69194 "key": 256,
69195 "iv": 16,
69196 "mode": "OFB",
69197 "type": "stream"
69198 },
69199 "aes-128-ctr": {
69200 "cipher": "AES",
69201 "key": 128,
69202 "iv": 16,
69203 "mode": "CTR",
69204 "type": "stream"
69205 },
69206 "aes-192-ctr": {
69207 "cipher": "AES",
69208 "key": 192,
69209 "iv": 16,
69210 "mode": "CTR",
69211 "type": "stream"
69212 },
69213 "aes-256-ctr": {
69214 "cipher": "AES",
69215 "key": 256,
69216 "iv": 16,
69217 "mode": "CTR",
69218 "type": "stream"
69219 },
69220 "aes-128-gcm": {
69221 "cipher": "AES",
69222 "key": 128,
69223 "iv": 12,
69224 "mode": "GCM",
69225 "type": "auth"
69226 },
69227 "aes-192-gcm": {
69228 "cipher": "AES",
69229 "key": 192,
69230 "iv": 12,
69231 "mode": "GCM",
69232 "type": "auth"
69233 },
69234 "aes-256-gcm": {
69235 "cipher": "AES",
69236 "key": 256,
69237 "iv": 12,
69238 "mode": "GCM",
69239 "type": "auth"
69240 }
69241 }
69242
69243 },{}],171:[function(require,module,exports){
69244 arguments[4][33][0].apply(exports,arguments)
69245 },{"buffer":47,"buffer-xor":176,"dup":33}],172:[function(require,module,exports){
69246 var aes = require('./aes')
69247 var Buffer = require('safe-buffer').Buffer
69248 var Transform = require('cipher-base')
69249 var inherits = require('inherits')
69250
69251 function StreamCipher (mode, key, iv, decrypt) {
69252 Transform.call(this)
69253
69254 this._cipher = new aes.AES(key)
69255 this._prev = Buffer.from(iv)
69256 this._cache = Buffer.allocUnsafe(0)
69257 this._secCache = Buffer.allocUnsafe(0)
69258 this._decrypt = decrypt
69259 this._mode = mode
69260 }
69261
69262 inherits(StreamCipher, Transform)
69263
69264 StreamCipher.prototype._update = function (chunk) {
69265 return this._mode.encrypt(this, chunk, this._decrypt)
69266 }
69267
69268 StreamCipher.prototype._final = function () {
69269 this._cipher.scrub()
69270 }
69271
69272 module.exports = StreamCipher
69273
69274 },{"./aes":156,"cipher-base":178,"inherits":189,"safe-buffer":193}],173:[function(require,module,exports){
69275 var basex = require('base-x')
69276 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
69277
69278 module.exports = basex(ALPHABET)
69279
69280 },{"base-x":151}],174:[function(require,module,exports){
69281 'use strict'
69282
69283 var base58 = require('bs58')
69284 var Buffer = require('safe-buffer').Buffer
69285
69286 module.exports = function (checksumFn) {
69287 // Encode a buffer as a base58-check encoded string
69288 function encode (payload) {
69289 var checksum = checksumFn(payload)
69290
69291 return base58.encode(Buffer.concat([
69292 payload,
69293 checksum
69294 ], payload.length + 4))
69295 }
69296
69297 function decodeRaw (buffer) {
69298 var payload = buffer.slice(0, -4)
69299 var checksum = buffer.slice(-4)
69300 var newChecksum = checksumFn(payload)
69301
69302 if (checksum[0] ^ newChecksum[0] |
69303 checksum[1] ^ newChecksum[1] |
69304 checksum[2] ^ newChecksum[2] |
69305 checksum[3] ^ newChecksum[3]) return
69306
69307 return payload
69308 }
69309
69310 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
69311 function decodeUnsafe (string) {
69312 var buffer = base58.decodeUnsafe(string)
69313 if (!buffer) return
69314
69315 return decodeRaw(buffer)
69316 }
69317
69318 function decode (string) {
69319 var buffer = base58.decode(string)
69320 var payload = decodeRaw(buffer, checksumFn)
69321 if (!payload) throw new Error('Invalid checksum')
69322 return payload
69323 }
69324
69325 return {
69326 encode: encode,
69327 decode: decode,
69328 decodeUnsafe: decodeUnsafe
69329 }
69330 }
69331
69332 },{"bs58":173,"safe-buffer":193}],175:[function(require,module,exports){
69333 'use strict'
69334
69335 var createHash = require('create-hash')
69336 var bs58checkBase = require('./base')
69337
69338 // SHA256(SHA256(buffer))
69339 function sha256x2 (buffer) {
69340 var tmp = createHash('sha256').update(buffer).digest()
69341 return createHash('sha256').update(tmp).digest()
69342 }
69343
69344 module.exports = bs58checkBase(sha256x2)
69345
69346 },{"./base":174,"create-hash":179}],176:[function(require,module,exports){
69347 arguments[4][46][0].apply(exports,arguments)
69348 },{"buffer":47,"dup":46}],177:[function(require,module,exports){
69349 module.exports = function xorInplace (a, b) {
69350 var length = Math.min(a.length, b.length)
69351
69352 for (var i = 0; i < length; ++i) {
69353 a[i] = a[i] ^ b[i]
69354 }
69355
69356 return a.slice(0, length)
69357 }
69358
69359 },{}],178:[function(require,module,exports){
69360 var Buffer = require('safe-buffer').Buffer
69361 var Transform = require('stream').Transform
69362 var StringDecoder = require('string_decoder').StringDecoder
69363 var inherits = require('inherits')
69364
69365 function CipherBase (hashMode) {
69366 Transform.call(this)
69367 this.hashMode = typeof hashMode === 'string'
69368 if (this.hashMode) {
69369 this[hashMode] = this._finalOrDigest
69370 } else {
69371 this.final = this._finalOrDigest
69372 }
69373 if (this._final) {
69374 this.__final = this._final
69375 this._final = null
69376 }
69377 this._decoder = null
69378 this._encoding = null
69379 }
69380 inherits(CipherBase, Transform)
69381
69382 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
69383 if (typeof data === 'string') {
69384 data = Buffer.from(data, inputEnc)
69385 }
69386
69387 var outData = this._update(data)
69388 if (this.hashMode) return this
69389
69390 if (outputEnc) {
69391 outData = this._toString(outData, outputEnc)
69392 }
69393
69394 return outData
69395 }
69396
69397 CipherBase.prototype.setAutoPadding = function () {}
69398 CipherBase.prototype.getAuthTag = function () {
69399 throw new Error('trying to get auth tag in unsupported state')
69400 }
69401
69402 CipherBase.prototype.setAuthTag = function () {
69403 throw new Error('trying to set auth tag in unsupported state')
69404 }
69405
69406 CipherBase.prototype.setAAD = function () {
69407 throw new Error('trying to set aad in unsupported state')
69408 }
69409
69410 CipherBase.prototype._transform = function (data, _, next) {
69411 var err
69412 try {
69413 if (this.hashMode) {
69414 this._update(data)
69415 } else {
69416 this.push(this._update(data))
69417 }
69418 } catch (e) {
69419 err = e
69420 } finally {
69421 next(err)
69422 }
69423 }
69424 CipherBase.prototype._flush = function (done) {
69425 var err
69426 try {
69427 this.push(this.__final())
69428 } catch (e) {
69429 err = e
69430 }
69431
69432 done(err)
69433 }
69434 CipherBase.prototype._finalOrDigest = function (outputEnc) {
69435 var outData = this.__final() || Buffer.alloc(0)
69436 if (outputEnc) {
69437 outData = this._toString(outData, outputEnc, true)
69438 }
69439 return outData
69440 }
69441
69442 CipherBase.prototype._toString = function (value, enc, fin) {
69443 if (!this._decoder) {
69444 this._decoder = new StringDecoder(enc)
69445 this._encoding = enc
69446 }
69447
69448 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
69449
69450 var out = this._decoder.write(value)
69451 if (fin) {
69452 out += this._decoder.end()
69453 }
69454
69455 return out
69456 }
69457
69458 module.exports = CipherBase
69459
69460 },{"inherits":189,"safe-buffer":193,"stream":143,"string_decoder":144}],179:[function(require,module,exports){
69461 arguments[4][51][0].apply(exports,arguments)
69462 },{"./md5":181,"buffer":47,"cipher-base":178,"dup":51,"inherits":189,"ripemd160":192,"sha.js":196}],180:[function(require,module,exports){
69463 arguments[4][52][0].apply(exports,arguments)
69464 },{"buffer":47,"dup":52}],181:[function(require,module,exports){
69465 arguments[4][53][0].apply(exports,arguments)
69466 },{"./make-hash":180,"dup":53}],182:[function(require,module,exports){
69467 var assert = require('assert')
69468 var BigInteger = require('bigi')
69469
69470 var Point = require('./point')
69471
69472 function Curve (p, a, b, Gx, Gy, n, h) {
69473 this.p = p
69474 this.a = a
69475 this.b = b
69476 this.G = Point.fromAffine(this, Gx, Gy)
69477 this.n = n
69478 this.h = h
69479
69480 this.infinity = new Point(this, null, null, BigInteger.ZERO)
69481
69482 // result caching
69483 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
69484
69485 // determine size of p in bytes
69486 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
69487 }
69488
69489 Curve.prototype.pointFromX = function (isOdd, x) {
69490 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
69491 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
69492
69493 var y = beta
69494 if (beta.isEven() ^ !isOdd) {
69495 y = this.p.subtract(y) // -y % p
69496 }
69497
69498 return Point.fromAffine(this, x, y)
69499 }
69500
69501 Curve.prototype.isInfinity = function (Q) {
69502 if (Q === this.infinity) return true
69503
69504 return Q.z.signum() === 0 && Q.y.signum() !== 0
69505 }
69506
69507 Curve.prototype.isOnCurve = function (Q) {
69508 if (this.isInfinity(Q)) return true
69509
69510 var x = Q.affineX
69511 var y = Q.affineY
69512 var a = this.a
69513 var b = this.b
69514 var p = this.p
69515
69516 // Check that xQ and yQ are integers in the interval [0, p - 1]
69517 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
69518 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
69519
69520 // and check that y^2 = x^3 + ax + b (mod p)
69521 var lhs = y.square().mod(p)
69522 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
69523 return lhs.equals(rhs)
69524 }
69525
69526 /**
69527 * Validate an elliptic curve point.
69528 *
69529 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
69530 */
69531 Curve.prototype.validate = function (Q) {
69532 // Check Q != O
69533 assert(!this.isInfinity(Q), 'Point is at infinity')
69534 assert(this.isOnCurve(Q), 'Point is not on the curve')
69535
69536 // Check nQ = O (where Q is a scalar multiple of G)
69537 var nQ = Q.multiply(this.n)
69538 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
69539
69540 return true
69541 }
69542
69543 module.exports = Curve
69544
69545 },{"./point":186,"assert":15,"bigi":154}],183:[function(require,module,exports){
69546 module.exports={
69547 "secp128r1": {
69548 "p": "fffffffdffffffffffffffffffffffff",
69549 "a": "fffffffdfffffffffffffffffffffffc",
69550 "b": "e87579c11079f43dd824993c2cee5ed3",
69551 "n": "fffffffe0000000075a30d1b9038a115",
69552 "h": "01",
69553 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
69554 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
69555 },
69556 "secp160k1": {
69557 "p": "fffffffffffffffffffffffffffffffeffffac73",
69558 "a": "00",
69559 "b": "07",
69560 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
69561 "h": "01",
69562 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
69563 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
69564 },
69565 "secp160r1": {
69566 "p": "ffffffffffffffffffffffffffffffff7fffffff",
69567 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
69568 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
69569 "n": "0100000000000000000001f4c8f927aed3ca752257",
69570 "h": "01",
69571 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
69572 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
69573 },
69574 "secp192k1": {
69575 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
69576 "a": "00",
69577 "b": "03",
69578 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
69579 "h": "01",
69580 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
69581 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
69582 },
69583 "secp192r1": {
69584 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
69585 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
69586 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
69587 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
69588 "h": "01",
69589 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
69590 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
69591 },
69592 "secp256k1": {
69593 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
69594 "a": "00",
69595 "b": "07",
69596 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
69597 "h": "01",
69598 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
69599 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
69600 },
69601 "secp256r1": {
69602 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
69603 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
69604 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
69605 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
69606 "h": "01",
69607 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
69608 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
69609 }
69610 }
69611
69612 },{}],184:[function(require,module,exports){
69613 var Point = require('./point')
69614 var Curve = require('./curve')
69615
69616 var getCurveByName = require('./names')
69617
69618 module.exports = {
69619 Curve: Curve,
69620 Point: Point,
69621 getCurveByName: getCurveByName
69622 }
69623
69624 },{"./curve":182,"./names":185,"./point":186}],185:[function(require,module,exports){
69625 var BigInteger = require('bigi')
69626
69627 var curves = require('./curves.json')
69628 var Curve = require('./curve')
69629
69630 function getCurveByName (name) {
69631 var curve = curves[name]
69632 if (!curve) return null
69633
69634 var p = new BigInteger(curve.p, 16)
69635 var a = new BigInteger(curve.a, 16)
69636 var b = new BigInteger(curve.b, 16)
69637 var n = new BigInteger(curve.n, 16)
69638 var h = new BigInteger(curve.h, 16)
69639 var Gx = new BigInteger(curve.Gx, 16)
69640 var Gy = new BigInteger(curve.Gy, 16)
69641
69642 return new Curve(p, a, b, Gx, Gy, n, h)
69643 }
69644
69645 module.exports = getCurveByName
69646
69647 },{"./curve":182,"./curves.json":183,"bigi":154}],186:[function(require,module,exports){
69648 var assert = require('assert')
69649 var Buffer = require('safe-buffer').Buffer
69650 var BigInteger = require('bigi')
69651
69652 var THREE = BigInteger.valueOf(3)
69653
69654 function Point (curve, x, y, z) {
69655 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
69656
69657 this.curve = curve
69658 this.x = x
69659 this.y = y
69660 this.z = z
69661 this._zInv = null
69662
69663 this.compressed = true
69664 }
69665
69666 Object.defineProperty(Point.prototype, 'zInv', {
69667 get: function () {
69668 if (this._zInv === null) {
69669 this._zInv = this.z.modInverse(this.curve.p)
69670 }
69671
69672 return this._zInv
69673 }
69674 })
69675
69676 Object.defineProperty(Point.prototype, 'affineX', {
69677 get: function () {
69678 return this.x.multiply(this.zInv).mod(this.curve.p)
69679 }
69680 })
69681
69682 Object.defineProperty(Point.prototype, 'affineY', {
69683 get: function () {
69684 return this.y.multiply(this.zInv).mod(this.curve.p)
69685 }
69686 })
69687
69688 Point.fromAffine = function (curve, x, y) {
69689 return new Point(curve, x, y, BigInteger.ONE)
69690 }
69691
69692 Point.prototype.equals = function (other) {
69693 if (other === this) return true
69694 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
69695 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
69696
69697 // u = Y2 * Z1 - Y1 * Z2
69698 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
69699
69700 if (u.signum() !== 0) return false
69701
69702 // v = X2 * Z1 - X1 * Z2
69703 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
69704
69705 return v.signum() === 0
69706 }
69707
69708 Point.prototype.negate = function () {
69709 var y = this.curve.p.subtract(this.y)
69710
69711 return new Point(this.curve, this.x, y, this.z)
69712 }
69713
69714 Point.prototype.add = function (b) {
69715 if (this.curve.isInfinity(this)) return b
69716 if (this.curve.isInfinity(b)) return this
69717
69718 var x1 = this.x
69719 var y1 = this.y
69720 var x2 = b.x
69721 var y2 = b.y
69722
69723 // u = Y2 * Z1 - Y1 * Z2
69724 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
69725 // v = X2 * Z1 - X1 * Z2
69726 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
69727
69728 if (v.signum() === 0) {
69729 if (u.signum() === 0) {
69730 return this.twice() // this == b, so double
69731 }
69732
69733 return this.curve.infinity // this = -b, so infinity
69734 }
69735
69736 var v2 = v.square()
69737 var v3 = v2.multiply(v)
69738 var x1v2 = x1.multiply(v2)
69739 var zu2 = u.square().multiply(this.z)
69740
69741 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
69742 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
69743 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
69744 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)
69745 // z3 = v^3 * z1 * z2
69746 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
69747
69748 return new Point(this.curve, x3, y3, z3)
69749 }
69750
69751 Point.prototype.twice = function () {
69752 if (this.curve.isInfinity(this)) return this
69753 if (this.y.signum() === 0) return this.curve.infinity
69754
69755 var x1 = this.x
69756 var y1 = this.y
69757
69758 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
69759 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
69760 var a = this.curve.a
69761
69762 // w = 3 * x1^2 + a * z1^2
69763 var w = x1.square().multiply(THREE)
69764
69765 if (a.signum() !== 0) {
69766 w = w.add(this.z.square().multiply(a))
69767 }
69768
69769 w = w.mod(this.curve.p)
69770 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
69771 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
69772 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
69773 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
69774 // z3 = 8 * (y1 * z1)^3
69775 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
69776
69777 return new Point(this.curve, x3, y3, z3)
69778 }
69779
69780 // Simple NAF (Non-Adjacent Form) multiplication algorithm
69781 // TODO: modularize the multiplication algorithm
69782 Point.prototype.multiply = function (k) {
69783 if (this.curve.isInfinity(this)) return this
69784 if (k.signum() === 0) return this.curve.infinity
69785
69786 var e = k
69787 var h = e.multiply(THREE)
69788
69789 var neg = this.negate()
69790 var R = this
69791
69792 for (var i = h.bitLength() - 2; i > 0; --i) {
69793 var hBit = h.testBit(i)
69794 var eBit = e.testBit(i)
69795
69796 R = R.twice()
69797
69798 if (hBit !== eBit) {
69799 R = R.add(hBit ? this : neg)
69800 }
69801 }
69802
69803 return R
69804 }
69805
69806 // Compute this*j + x*k (simultaneous multiplication)
69807 Point.prototype.multiplyTwo = function (j, x, k) {
69808 var i = Math.max(j.bitLength(), k.bitLength()) - 1
69809 var R = this.curve.infinity
69810 var both = this.add(x)
69811
69812 while (i >= 0) {
69813 var jBit = j.testBit(i)
69814 var kBit = k.testBit(i)
69815
69816 R = R.twice()
69817
69818 if (jBit) {
69819 if (kBit) {
69820 R = R.add(both)
69821 } else {
69822 R = R.add(this)
69823 }
69824 } else if (kBit) {
69825 R = R.add(x)
69826 }
69827 --i
69828 }
69829
69830 return R
69831 }
69832
69833 Point.prototype.getEncoded = function (compressed) {
69834 if (compressed == null) compressed = this.compressed
69835 if (this.curve.isInfinity(this)) return Buffer.alloc(1, 0) // Infinity point encoded is simply '00'
69836
69837 var x = this.affineX
69838 var y = this.affineY
69839 var byteLength = this.curve.pLength
69840 var buffer
69841
69842 // 0x02/0x03 | X
69843 if (compressed) {
69844 buffer = Buffer.allocUnsafe(1 + byteLength)
69845 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
69846
69847 // 0x04 | X | Y
69848 } else {
69849 buffer = Buffer.allocUnsafe(1 + byteLength + byteLength)
69850 buffer.writeUInt8(0x04, 0)
69851
69852 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
69853 }
69854
69855 x.toBuffer(byteLength).copy(buffer, 1)
69856
69857 return buffer
69858 }
69859
69860 Point.decodeFrom = function (curve, buffer) {
69861 var type = buffer.readUInt8(0)
69862 var compressed = (type !== 4)
69863
69864 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
69865 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
69866
69867 var Q
69868 if (compressed) {
69869 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
69870 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
69871
69872 var isOdd = (type === 0x03)
69873 Q = curve.pointFromX(isOdd, x)
69874 } else {
69875 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
69876
69877 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
69878 Q = Point.fromAffine(curve, x, y)
69879 }
69880
69881 Q.compressed = compressed
69882 return Q
69883 }
69884
69885 Point.prototype.toString = function () {
69886 if (this.curve.isInfinity(this)) return '(INFINITY)'
69887
69888 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
69889 }
69890
69891 module.exports = Point
69892
69893 },{"assert":15,"bigi":154,"safe-buffer":193}],187:[function(require,module,exports){
69894 var Buffer = require('safe-buffer').Buffer
69895 var MD5 = require('md5.js')
69896
69897 /* eslint-disable camelcase */
69898 function EVP_BytesToKey (password, salt, keyBits, ivLen) {
69899 if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary')
69900 if (salt) {
69901 if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary')
69902 if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length')
69903 }
69904
69905 var keyLen = keyBits / 8
69906 var key = Buffer.alloc(keyLen)
69907 var iv = Buffer.alloc(ivLen || 0)
69908 var tmp = Buffer.alloc(0)
69909
69910 while (keyLen > 0 || ivLen > 0) {
69911 var hash = new MD5()
69912 hash.update(tmp)
69913 hash.update(password)
69914 if (salt) hash.update(salt)
69915 tmp = hash.digest()
69916
69917 var used = 0
69918
69919 if (keyLen > 0) {
69920 var keyStart = key.length - keyLen
69921 used = Math.min(keyLen, tmp.length)
69922 tmp.copy(key, keyStart, 0, used)
69923 keyLen -= used
69924 }
69925
69926 if (used < tmp.length && ivLen > 0) {
69927 var ivStart = iv.length - ivLen
69928 var length = Math.min(ivLen, tmp.length - used)
69929 tmp.copy(iv, ivStart, used, used + length)
69930 ivLen -= length
69931 }
69932 }
69933
69934 tmp.fill(0)
69935 return { key: key, iv: iv }
69936 }
69937
69938 module.exports = EVP_BytesToKey
69939
69940 },{"md5.js":190,"safe-buffer":193}],188:[function(require,module,exports){
69941 arguments[4][85][0].apply(exports,arguments)
69942 },{"buffer":47,"dup":85,"inherits":189,"stream":143}],189:[function(require,module,exports){
69943 arguments[4][95][0].apply(exports,arguments)
69944 },{"dup":95}],190:[function(require,module,exports){
69945 (function (Buffer){
69946 'use strict'
69947 var inherits = require('inherits')
69948 var HashBase = require('hash-base')
69949
69950 var ARRAY16 = new Array(16)
69951
69952 function MD5 () {
69953 HashBase.call(this, 64)
69954
69955 // state
69956 this._a = 0x67452301
69957 this._b = 0xefcdab89
69958 this._c = 0x98badcfe
69959 this._d = 0x10325476
69960 }
69961
69962 inherits(MD5, HashBase)
69963
69964 MD5.prototype._update = function () {
69965 var M = ARRAY16
69966 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4)
69967
69968 var a = this._a
69969 var b = this._b
69970 var c = this._c
69971 var d = this._d
69972
69973 a = fnF(a, b, c, d, M[0], 0xd76aa478, 7)
69974 d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12)
69975 c = fnF(c, d, a, b, M[2], 0x242070db, 17)
69976 b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22)
69977 a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7)
69978 d = fnF(d, a, b, c, M[5], 0x4787c62a, 12)
69979 c = fnF(c, d, a, b, M[6], 0xa8304613, 17)
69980 b = fnF(b, c, d, a, M[7], 0xfd469501, 22)
69981 a = fnF(a, b, c, d, M[8], 0x698098d8, 7)
69982 d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12)
69983 c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17)
69984 b = fnF(b, c, d, a, M[11], 0x895cd7be, 22)
69985 a = fnF(a, b, c, d, M[12], 0x6b901122, 7)
69986 d = fnF(d, a, b, c, M[13], 0xfd987193, 12)
69987 c = fnF(c, d, a, b, M[14], 0xa679438e, 17)
69988 b = fnF(b, c, d, a, M[15], 0x49b40821, 22)
69989
69990 a = fnG(a, b, c, d, M[1], 0xf61e2562, 5)
69991 d = fnG(d, a, b, c, M[6], 0xc040b340, 9)
69992 c = fnG(c, d, a, b, M[11], 0x265e5a51, 14)
69993 b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20)
69994 a = fnG(a, b, c, d, M[5], 0xd62f105d, 5)
69995 d = fnG(d, a, b, c, M[10], 0x02441453, 9)
69996 c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14)
69997 b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20)
69998 a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5)
69999 d = fnG(d, a, b, c, M[14], 0xc33707d6, 9)
70000 c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14)
70001 b = fnG(b, c, d, a, M[8], 0x455a14ed, 20)
70002 a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5)
70003 d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9)
70004 c = fnG(c, d, a, b, M[7], 0x676f02d9, 14)
70005 b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20)
70006
70007 a = fnH(a, b, c, d, M[5], 0xfffa3942, 4)
70008 d = fnH(d, a, b, c, M[8], 0x8771f681, 11)
70009 c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16)
70010 b = fnH(b, c, d, a, M[14], 0xfde5380c, 23)
70011 a = fnH(a, b, c, d, M[1], 0xa4beea44, 4)
70012 d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11)
70013 c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16)
70014 b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23)
70015 a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4)
70016 d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11)
70017 c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16)
70018 b = fnH(b, c, d, a, M[6], 0x04881d05, 23)
70019 a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4)
70020 d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11)
70021 c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16)
70022 b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23)
70023
70024 a = fnI(a, b, c, d, M[0], 0xf4292244, 6)
70025 d = fnI(d, a, b, c, M[7], 0x432aff97, 10)
70026 c = fnI(c, d, a, b, M[14], 0xab9423a7, 15)
70027 b = fnI(b, c, d, a, M[5], 0xfc93a039, 21)
70028 a = fnI(a, b, c, d, M[12], 0x655b59c3, 6)
70029 d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10)
70030 c = fnI(c, d, a, b, M[10], 0xffeff47d, 15)
70031 b = fnI(b, c, d, a, M[1], 0x85845dd1, 21)
70032 a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6)
70033 d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10)
70034 c = fnI(c, d, a, b, M[6], 0xa3014314, 15)
70035 b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21)
70036 a = fnI(a, b, c, d, M[4], 0xf7537e82, 6)
70037 d = fnI(d, a, b, c, M[11], 0xbd3af235, 10)
70038 c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15)
70039 b = fnI(b, c, d, a, M[9], 0xeb86d391, 21)
70040
70041 this._a = (this._a + a) | 0
70042 this._b = (this._b + b) | 0
70043 this._c = (this._c + c) | 0
70044 this._d = (this._d + d) | 0
70045 }
70046
70047 MD5.prototype._digest = function () {
70048 // create padding and handle blocks
70049 this._block[this._blockOffset++] = 0x80
70050 if (this._blockOffset > 56) {
70051 this._block.fill(0, this._blockOffset, 64)
70052 this._update()
70053 this._blockOffset = 0
70054 }
70055
70056 this._block.fill(0, this._blockOffset, 56)
70057 this._block.writeUInt32LE(this._length[0], 56)
70058 this._block.writeUInt32LE(this._length[1], 60)
70059 this._update()
70060
70061 // produce result
70062 var buffer = new Buffer(16)
70063 buffer.writeInt32LE(this._a, 0)
70064 buffer.writeInt32LE(this._b, 4)
70065 buffer.writeInt32LE(this._c, 8)
70066 buffer.writeInt32LE(this._d, 12)
70067 return buffer
70068 }
70069
70070 function rotl (x, n) {
70071 return (x << n) | (x >>> (32 - n))
70072 }
70073
70074 function fnF (a, b, c, d, m, k, s) {
70075 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0
70076 }
70077
70078 function fnG (a, b, c, d, m, k, s) {
70079 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0
70080 }
70081
70082 function fnH (a, b, c, d, m, k, s) {
70083 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0
70084 }
70085
70086 function fnI (a, b, c, d, m, k, s) {
70087 return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0
70088 }
70089
70090 module.exports = MD5
70091
70092 }).call(this,require("buffer").Buffer)
70093 },{"buffer":47,"hash-base":191,"inherits":189}],191:[function(require,module,exports){
70094 'use strict'
70095 var Buffer = require('safe-buffer').Buffer
70096 var Transform = require('stream').Transform
70097 var inherits = require('inherits')
70098
70099 function throwIfNotStringOrBuffer (val, prefix) {
70100 if (!Buffer.isBuffer(val) && typeof val !== 'string') {
70101 throw new TypeError(prefix + ' must be a string or a buffer')
70102 }
70103 }
70104
70105 function HashBase (blockSize) {
70106 Transform.call(this)
70107
70108 this._block = Buffer.allocUnsafe(blockSize)
70109 this._blockSize = blockSize
70110 this._blockOffset = 0
70111 this._length = [0, 0, 0, 0]
70112
70113 this._finalized = false
70114 }
70115
70116 inherits(HashBase, Transform)
70117
70118 HashBase.prototype._transform = function (chunk, encoding, callback) {
70119 var error = null
70120 try {
70121 this.update(chunk, encoding)
70122 } catch (err) {
70123 error = err
70124 }
70125
70126 callback(error)
70127 }
70128
70129 HashBase.prototype._flush = function (callback) {
70130 var error = null
70131 try {
70132 this.push(this.digest())
70133 } catch (err) {
70134 error = err
70135 }
70136
70137 callback(error)
70138 }
70139
70140 HashBase.prototype.update = function (data, encoding) {
70141 throwIfNotStringOrBuffer(data, 'Data')
70142 if (this._finalized) throw new Error('Digest already called')
70143 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
70144
70145 // consume data
70146 var block = this._block
70147 var offset = 0
70148 while (this._blockOffset + data.length - offset >= this._blockSize) {
70149 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
70150 this._update()
70151 this._blockOffset = 0
70152 }
70153 while (offset < data.length) block[this._blockOffset++] = data[offset++]
70154
70155 // update length
70156 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
70157 this._length[j] += carry
70158 carry = (this._length[j] / 0x0100000000) | 0
70159 if (carry > 0) this._length[j] -= 0x0100000000 * carry
70160 }
70161
70162 return this
70163 }
70164
70165 HashBase.prototype._update = function () {
70166 throw new Error('_update is not implemented')
70167 }
70168
70169 HashBase.prototype.digest = function (encoding) {
70170 if (this._finalized) throw new Error('Digest already called')
70171 this._finalized = true
70172
70173 var digest = this._digest()
70174 if (encoding !== undefined) digest = digest.toString(encoding)
70175
70176 // reset state
70177 this._block.fill(0)
70178 this._blockOffset = 0
70179 for (var i = 0; i < 4; ++i) this._length[i] = 0
70180
70181 return digest
70182 }
70183
70184 HashBase.prototype._digest = function () {
70185 throw new Error('_digest is not implemented')
70186 }
70187
70188 module.exports = HashBase
70189
70190 },{"inherits":189,"safe-buffer":193,"stream":143}],192:[function(require,module,exports){
70191 arguments[4][133][0].apply(exports,arguments)
70192 },{"buffer":47,"dup":133,"hash-base":188,"inherits":189}],193:[function(require,module,exports){
70193 /* eslint-disable node/no-deprecated-api */
70194 var buffer = require('buffer')
70195 var Buffer = buffer.Buffer
70196
70197 // alternative to using Object.keys for old browsers
70198 function copyProps (src, dst) {
70199 for (var key in src) {
70200 dst[key] = src[key]
70201 }
70202 }
70203 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
70204 module.exports = buffer
70205 } else {
70206 // Copy properties from require('buffer')
70207 copyProps(buffer, exports)
70208 exports.Buffer = SafeBuffer
70209 }
70210
70211 function SafeBuffer (arg, encodingOrOffset, length) {
70212 return Buffer(arg, encodingOrOffset, length)
70213 }
70214
70215 // Copy static methods from Buffer
70216 copyProps(Buffer, SafeBuffer)
70217
70218 SafeBuffer.from = function (arg, encodingOrOffset, length) {
70219 if (typeof arg === 'number') {
70220 throw new TypeError('Argument must not be a number')
70221 }
70222 return Buffer(arg, encodingOrOffset, length)
70223 }
70224
70225 SafeBuffer.alloc = function (size, fill, encoding) {
70226 if (typeof size !== 'number') {
70227 throw new TypeError('Argument must be a number')
70228 }
70229 var buf = Buffer(size)
70230 if (fill !== undefined) {
70231 if (typeof encoding === 'string') {
70232 buf.fill(fill, encoding)
70233 } else {
70234 buf.fill(fill)
70235 }
70236 } else {
70237 buf.fill(0)
70238 }
70239 return buf
70240 }
70241
70242 SafeBuffer.allocUnsafe = function (size) {
70243 if (typeof size !== 'number') {
70244 throw new TypeError('Argument must be a number')
70245 }
70246 return Buffer(size)
70247 }
70248
70249 SafeBuffer.allocUnsafeSlow = function (size) {
70250 if (typeof size !== 'number') {
70251 throw new TypeError('Argument must be a number')
70252 }
70253 return buffer.SlowBuffer(size)
70254 }
70255
70256 },{"buffer":47}],194:[function(require,module,exports){
70257 (function (Buffer){
70258 var crypto = require('crypto')
70259 /* eslint-disable camelcase */
70260
70261 var MAX_VALUE = 0x7fffffff
70262
70263 // N = Cpu cost, r = Memory cost, p = parallelization cost
70264 function scrypt (key, salt, N, r, p, dkLen, progressCallback) {
70265 if (N === 0 || (N & (N - 1)) !== 0) throw Error('N must be > 0 and a power of 2')
70266
70267 if (N > MAX_VALUE / 128 / r) throw Error('Parameter N is too large')
70268 if (r > MAX_VALUE / 128 / p) throw Error('Parameter r is too large')
70269
70270 var XY = new Buffer(256 * r)
70271 var V = new Buffer(128 * r * N)
70272
70273 // pseudo global
70274 var B32 = new Int32Array(16) // salsa20_8
70275 var x = new Int32Array(16) // salsa20_8
70276 var _X = new Buffer(64) // blockmix_salsa8
70277
70278 // pseudo global
70279 var B = crypto.pbkdf2Sync(key, salt, 1, p * 128 * r, 'sha256')
70280
70281 var tickCallback
70282 if (progressCallback) {
70283 var totalOps = p * N * 2
70284 var currentOp = 0
70285
70286 tickCallback = function () {
70287 ++currentOp
70288
70289 // send progress notifications once every 1,000 ops
70290 if (currentOp % 1000 === 0) {
70291 progressCallback({
70292 current: currentOp,
70293 total: totalOps,
70294 percent: (currentOp / totalOps) * 100.0
70295 })
70296 }
70297 }
70298 }
70299
70300 for (var i = 0; i < p; i++) {
70301 smix(B, i * 128 * r, r, N, V, XY)
70302 }
70303
70304 return crypto.pbkdf2Sync(key, B, 1, dkLen, 'sha256')
70305
70306 // all of these functions are actually moved to the top
70307 // due to function hoisting
70308
70309 function smix (B, Bi, r, N, V, XY) {
70310 var Xi = 0
70311 var Yi = 128 * r
70312 var i
70313
70314 B.copy(XY, Xi, Bi, Bi + Yi)
70315
70316 for (i = 0; i < N; i++) {
70317 XY.copy(V, i * Yi, Xi, Xi + Yi)
70318 blockmix_salsa8(XY, Xi, Yi, r)
70319
70320 if (tickCallback) tickCallback()
70321 }
70322
70323 for (i = 0; i < N; i++) {
70324 var offset = Xi + (2 * r - 1) * 64
70325 var j = XY.readUInt32LE(offset) & (N - 1)
70326 blockxor(V, j * Yi, XY, Xi, Yi)
70327 blockmix_salsa8(XY, Xi, Yi, r)
70328
70329 if (tickCallback) tickCallback()
70330 }
70331
70332 XY.copy(B, Bi, Xi, Xi + Yi)
70333 }
70334
70335 function blockmix_salsa8 (BY, Bi, Yi, r) {
70336 var i
70337
70338 arraycopy(BY, Bi + (2 * r - 1) * 64, _X, 0, 64)
70339
70340 for (i = 0; i < 2 * r; i++) {
70341 blockxor(BY, i * 64, _X, 0, 64)
70342 salsa20_8(_X)
70343 arraycopy(_X, 0, BY, Yi + (i * 64), 64)
70344 }
70345
70346 for (i = 0; i < r; i++) {
70347 arraycopy(BY, Yi + (i * 2) * 64, BY, Bi + (i * 64), 64)
70348 }
70349
70350 for (i = 0; i < r; i++) {
70351 arraycopy(BY, Yi + (i * 2 + 1) * 64, BY, Bi + (i + r) * 64, 64)
70352 }
70353 }
70354
70355 function R (a, b) {
70356 return (a << b) | (a >>> (32 - b))
70357 }
70358
70359 function salsa20_8 (B) {
70360 var i
70361
70362 for (i = 0; i < 16; i++) {
70363 B32[i] = (B[i * 4 + 0] & 0xff) << 0
70364 B32[i] |= (B[i * 4 + 1] & 0xff) << 8
70365 B32[i] |= (B[i * 4 + 2] & 0xff) << 16
70366 B32[i] |= (B[i * 4 + 3] & 0xff) << 24
70367 // B32[i] = B.readUInt32LE(i*4) <--- this is signficantly slower even in Node.js
70368 }
70369
70370 arraycopy(B32, 0, x, 0, 16)
70371
70372 for (i = 8; i > 0; i -= 2) {
70373 x[4] ^= R(x[0] + x[12], 7)
70374 x[8] ^= R(x[4] + x[0], 9)
70375 x[12] ^= R(x[8] + x[4], 13)
70376 x[0] ^= R(x[12] + x[8], 18)
70377 x[9] ^= R(x[5] + x[1], 7)
70378 x[13] ^= R(x[9] + x[5], 9)
70379 x[1] ^= R(x[13] + x[9], 13)
70380 x[5] ^= R(x[1] + x[13], 18)
70381 x[14] ^= R(x[10] + x[6], 7)
70382 x[2] ^= R(x[14] + x[10], 9)
70383 x[6] ^= R(x[2] + x[14], 13)
70384 x[10] ^= R(x[6] + x[2], 18)
70385 x[3] ^= R(x[15] + x[11], 7)
70386 x[7] ^= R(x[3] + x[15], 9)
70387 x[11] ^= R(x[7] + x[3], 13)
70388 x[15] ^= R(x[11] + x[7], 18)
70389 x[1] ^= R(x[0] + x[3], 7)
70390 x[2] ^= R(x[1] + x[0], 9)
70391 x[3] ^= R(x[2] + x[1], 13)
70392 x[0] ^= R(x[3] + x[2], 18)
70393 x[6] ^= R(x[5] + x[4], 7)
70394 x[7] ^= R(x[6] + x[5], 9)
70395 x[4] ^= R(x[7] + x[6], 13)
70396 x[5] ^= R(x[4] + x[7], 18)
70397 x[11] ^= R(x[10] + x[9], 7)
70398 x[8] ^= R(x[11] + x[10], 9)
70399 x[9] ^= R(x[8] + x[11], 13)
70400 x[10] ^= R(x[9] + x[8], 18)
70401 x[12] ^= R(x[15] + x[14], 7)
70402 x[13] ^= R(x[12] + x[15], 9)
70403 x[14] ^= R(x[13] + x[12], 13)
70404 x[15] ^= R(x[14] + x[13], 18)
70405 }
70406
70407 for (i = 0; i < 16; ++i) B32[i] = x[i] + B32[i]
70408
70409 for (i = 0; i < 16; i++) {
70410 var bi = i * 4
70411 B[bi + 0] = (B32[i] >> 0 & 0xff)
70412 B[bi + 1] = (B32[i] >> 8 & 0xff)
70413 B[bi + 2] = (B32[i] >> 16 & 0xff)
70414 B[bi + 3] = (B32[i] >> 24 & 0xff)
70415 // B.writeInt32LE(B32[i], i*4) //<--- this is signficantly slower even in Node.js
70416 }
70417 }
70418
70419 // naive approach... going back to loop unrolling may yield additional performance
70420 function blockxor (S, Si, D, Di, len) {
70421 for (var i = 0; i < len; i++) {
70422 D[Di + i] ^= S[Si + i]
70423 }
70424 }
70425 }
70426
70427 function arraycopy (src, srcPos, dest, destPos, length) {
70428 if (Buffer.isBuffer(src) && Buffer.isBuffer(dest)) {
70429 src.copy(dest, destPos, srcPos, srcPos + length)
70430 } else {
70431 while (length--) {
70432 dest[destPos++] = src[srcPos++]
70433 }
70434 }
70435 }
70436
70437 module.exports = scrypt
70438
70439 }).call(this,require("buffer").Buffer)
70440 },{"buffer":47,"crypto":56}],195:[function(require,module,exports){
70441 var Buffer = require('safe-buffer').Buffer
70442
70443 // prototype class for hash functions
70444 function Hash (blockSize, finalSize) {
70445 this._block = Buffer.alloc(blockSize)
70446 this._finalSize = finalSize
70447 this._blockSize = blockSize
70448 this._len = 0
70449 }
70450
70451 Hash.prototype.update = function (data, enc) {
70452 if (typeof data === 'string') {
70453 enc = enc || 'utf8'
70454 data = Buffer.from(data, enc)
70455 }
70456
70457 var block = this._block
70458 var blockSize = this._blockSize
70459 var length = data.length
70460 var accum = this._len
70461
70462 for (var offset = 0; offset < length;) {
70463 var assigned = accum % blockSize
70464 var remainder = Math.min(length - offset, blockSize - assigned)
70465
70466 for (var i = 0; i < remainder; i++) {
70467 block[assigned + i] = data[offset + i]
70468 }
70469
70470 accum += remainder
70471 offset += remainder
70472
70473 if ((accum % blockSize) === 0) {
70474 this._update(block)
70475 }
70476 }
70477
70478 this._len += length
70479 return this
70480 }
70481
70482 Hash.prototype.digest = function (enc) {
70483 var rem = this._len % this._blockSize
70484
70485 this._block[rem] = 0x80
70486
70487 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
70488 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
70489 this._block.fill(0, rem + 1)
70490
70491 if (rem >= this._finalSize) {
70492 this._update(this._block)
70493 this._block.fill(0)
70494 }
70495
70496 var bits = this._len * 8
70497
70498 // uint32
70499 if (bits <= 0xffffffff) {
70500 this._block.writeUInt32BE(bits, this._blockSize - 4)
70501
70502 // uint64
70503 } else {
70504 var lowBits = (bits & 0xffffffff) >>> 0
70505 var highBits = (bits - lowBits) / 0x100000000
70506
70507 this._block.writeUInt32BE(highBits, this._blockSize - 8)
70508 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
70509 }
70510
70511 this._update(this._block)
70512 var hash = this._hash()
70513
70514 return enc ? hash.toString(enc) : hash
70515 }
70516
70517 Hash.prototype._update = function () {
70518 throw new Error('_update must be implemented by subclass')
70519 }
70520
70521 module.exports = Hash
70522
70523 },{"safe-buffer":193}],196:[function(require,module,exports){
70524 arguments[4][136][0].apply(exports,arguments)
70525 },{"./sha":197,"./sha1":198,"./sha224":199,"./sha256":200,"./sha384":201,"./sha512":202,"dup":136}],197:[function(require,module,exports){
70526 /*
70527 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
70528 * in FIPS PUB 180-1
70529 * This source code is derived from sha1.js of the same repository.
70530 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
70531 * operation was added.
70532 */
70533
70534 var inherits = require('inherits')
70535 var Hash = require('./hash')
70536 var Buffer = require('safe-buffer').Buffer
70537
70538 var K = [
70539 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70540 ]
70541
70542 var W = new Array(80)
70543
70544 function Sha () {
70545 this.init()
70546 this._w = W
70547
70548 Hash.call(this, 64, 56)
70549 }
70550
70551 inherits(Sha, Hash)
70552
70553 Sha.prototype.init = function () {
70554 this._a = 0x67452301
70555 this._b = 0xefcdab89
70556 this._c = 0x98badcfe
70557 this._d = 0x10325476
70558 this._e = 0xc3d2e1f0
70559
70560 return this
70561 }
70562
70563 function rotl5 (num) {
70564 return (num << 5) | (num >>> 27)
70565 }
70566
70567 function rotl30 (num) {
70568 return (num << 30) | (num >>> 2)
70569 }
70570
70571 function ft (s, b, c, d) {
70572 if (s === 0) return (b & c) | ((~b) & d)
70573 if (s === 2) return (b & c) | (b & d) | (c & d)
70574 return b ^ c ^ d
70575 }
70576
70577 Sha.prototype._update = function (M) {
70578 var W = this._w
70579
70580 var a = this._a | 0
70581 var b = this._b | 0
70582 var c = this._c | 0
70583 var d = this._d | 0
70584 var e = this._e | 0
70585
70586 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70587 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
70588
70589 for (var j = 0; j < 80; ++j) {
70590 var s = ~~(j / 20)
70591 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70592
70593 e = d
70594 d = c
70595 c = rotl30(b)
70596 b = a
70597 a = t
70598 }
70599
70600 this._a = (a + this._a) | 0
70601 this._b = (b + this._b) | 0
70602 this._c = (c + this._c) | 0
70603 this._d = (d + this._d) | 0
70604 this._e = (e + this._e) | 0
70605 }
70606
70607 Sha.prototype._hash = function () {
70608 var H = Buffer.allocUnsafe(20)
70609
70610 H.writeInt32BE(this._a | 0, 0)
70611 H.writeInt32BE(this._b | 0, 4)
70612 H.writeInt32BE(this._c | 0, 8)
70613 H.writeInt32BE(this._d | 0, 12)
70614 H.writeInt32BE(this._e | 0, 16)
70615
70616 return H
70617 }
70618
70619 module.exports = Sha
70620
70621 },{"./hash":195,"inherits":189,"safe-buffer":193}],198:[function(require,module,exports){
70622 /*
70623 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
70624 * in FIPS PUB 180-1
70625 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
70626 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70627 * Distributed under the BSD License
70628 * See http://pajhome.org.uk/crypt/md5 for details.
70629 */
70630
70631 var inherits = require('inherits')
70632 var Hash = require('./hash')
70633 var Buffer = require('safe-buffer').Buffer
70634
70635 var K = [
70636 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
70637 ]
70638
70639 var W = new Array(80)
70640
70641 function Sha1 () {
70642 this.init()
70643 this._w = W
70644
70645 Hash.call(this, 64, 56)
70646 }
70647
70648 inherits(Sha1, Hash)
70649
70650 Sha1.prototype.init = function () {
70651 this._a = 0x67452301
70652 this._b = 0xefcdab89
70653 this._c = 0x98badcfe
70654 this._d = 0x10325476
70655 this._e = 0xc3d2e1f0
70656
70657 return this
70658 }
70659
70660 function rotl1 (num) {
70661 return (num << 1) | (num >>> 31)
70662 }
70663
70664 function rotl5 (num) {
70665 return (num << 5) | (num >>> 27)
70666 }
70667
70668 function rotl30 (num) {
70669 return (num << 30) | (num >>> 2)
70670 }
70671
70672 function ft (s, b, c, d) {
70673 if (s === 0) return (b & c) | ((~b) & d)
70674 if (s === 2) return (b & c) | (b & d) | (c & d)
70675 return b ^ c ^ d
70676 }
70677
70678 Sha1.prototype._update = function (M) {
70679 var W = this._w
70680
70681 var a = this._a | 0
70682 var b = this._b | 0
70683 var c = this._c | 0
70684 var d = this._d | 0
70685 var e = this._e | 0
70686
70687 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70688 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
70689
70690 for (var j = 0; j < 80; ++j) {
70691 var s = ~~(j / 20)
70692 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
70693
70694 e = d
70695 d = c
70696 c = rotl30(b)
70697 b = a
70698 a = t
70699 }
70700
70701 this._a = (a + this._a) | 0
70702 this._b = (b + this._b) | 0
70703 this._c = (c + this._c) | 0
70704 this._d = (d + this._d) | 0
70705 this._e = (e + this._e) | 0
70706 }
70707
70708 Sha1.prototype._hash = function () {
70709 var H = Buffer.allocUnsafe(20)
70710
70711 H.writeInt32BE(this._a | 0, 0)
70712 H.writeInt32BE(this._b | 0, 4)
70713 H.writeInt32BE(this._c | 0, 8)
70714 H.writeInt32BE(this._d | 0, 12)
70715 H.writeInt32BE(this._e | 0, 16)
70716
70717 return H
70718 }
70719
70720 module.exports = Sha1
70721
70722 },{"./hash":195,"inherits":189,"safe-buffer":193}],199:[function(require,module,exports){
70723 /**
70724 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70725 * in FIPS 180-2
70726 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70727 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70728 *
70729 */
70730
70731 var inherits = require('inherits')
70732 var Sha256 = require('./sha256')
70733 var Hash = require('./hash')
70734 var Buffer = require('safe-buffer').Buffer
70735
70736 var W = new Array(64)
70737
70738 function Sha224 () {
70739 this.init()
70740
70741 this._w = W // new Array(64)
70742
70743 Hash.call(this, 64, 56)
70744 }
70745
70746 inherits(Sha224, Sha256)
70747
70748 Sha224.prototype.init = function () {
70749 this._a = 0xc1059ed8
70750 this._b = 0x367cd507
70751 this._c = 0x3070dd17
70752 this._d = 0xf70e5939
70753 this._e = 0xffc00b31
70754 this._f = 0x68581511
70755 this._g = 0x64f98fa7
70756 this._h = 0xbefa4fa4
70757
70758 return this
70759 }
70760
70761 Sha224.prototype._hash = function () {
70762 var H = Buffer.allocUnsafe(28)
70763
70764 H.writeInt32BE(this._a, 0)
70765 H.writeInt32BE(this._b, 4)
70766 H.writeInt32BE(this._c, 8)
70767 H.writeInt32BE(this._d, 12)
70768 H.writeInt32BE(this._e, 16)
70769 H.writeInt32BE(this._f, 20)
70770 H.writeInt32BE(this._g, 24)
70771
70772 return H
70773 }
70774
70775 module.exports = Sha224
70776
70777 },{"./hash":195,"./sha256":200,"inherits":189,"safe-buffer":193}],200:[function(require,module,exports){
70778 /**
70779 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
70780 * in FIPS 180-2
70781 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
70782 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
70783 *
70784 */
70785
70786 var inherits = require('inherits')
70787 var Hash = require('./hash')
70788 var Buffer = require('safe-buffer').Buffer
70789
70790 var K = [
70791 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
70792 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
70793 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
70794 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
70795 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
70796 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
70797 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
70798 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
70799 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
70800 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
70801 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
70802 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
70803 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
70804 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
70805 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
70806 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
70807 ]
70808
70809 var W = new Array(64)
70810
70811 function Sha256 () {
70812 this.init()
70813
70814 this._w = W // new Array(64)
70815
70816 Hash.call(this, 64, 56)
70817 }
70818
70819 inherits(Sha256, Hash)
70820
70821 Sha256.prototype.init = function () {
70822 this._a = 0x6a09e667
70823 this._b = 0xbb67ae85
70824 this._c = 0x3c6ef372
70825 this._d = 0xa54ff53a
70826 this._e = 0x510e527f
70827 this._f = 0x9b05688c
70828 this._g = 0x1f83d9ab
70829 this._h = 0x5be0cd19
70830
70831 return this
70832 }
70833
70834 function ch (x, y, z) {
70835 return z ^ (x & (y ^ z))
70836 }
70837
70838 function maj (x, y, z) {
70839 return (x & y) | (z & (x | y))
70840 }
70841
70842 function sigma0 (x) {
70843 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
70844 }
70845
70846 function sigma1 (x) {
70847 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
70848 }
70849
70850 function gamma0 (x) {
70851 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
70852 }
70853
70854 function gamma1 (x) {
70855 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
70856 }
70857
70858 Sha256.prototype._update = function (M) {
70859 var W = this._w
70860
70861 var a = this._a | 0
70862 var b = this._b | 0
70863 var c = this._c | 0
70864 var d = this._d | 0
70865 var e = this._e | 0
70866 var f = this._f | 0
70867 var g = this._g | 0
70868 var h = this._h | 0
70869
70870 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
70871 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
70872
70873 for (var j = 0; j < 64; ++j) {
70874 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
70875 var T2 = (sigma0(a) + maj(a, b, c)) | 0
70876
70877 h = g
70878 g = f
70879 f = e
70880 e = (d + T1) | 0
70881 d = c
70882 c = b
70883 b = a
70884 a = (T1 + T2) | 0
70885 }
70886
70887 this._a = (a + this._a) | 0
70888 this._b = (b + this._b) | 0
70889 this._c = (c + this._c) | 0
70890 this._d = (d + this._d) | 0
70891 this._e = (e + this._e) | 0
70892 this._f = (f + this._f) | 0
70893 this._g = (g + this._g) | 0
70894 this._h = (h + this._h) | 0
70895 }
70896
70897 Sha256.prototype._hash = function () {
70898 var H = Buffer.allocUnsafe(32)
70899
70900 H.writeInt32BE(this._a, 0)
70901 H.writeInt32BE(this._b, 4)
70902 H.writeInt32BE(this._c, 8)
70903 H.writeInt32BE(this._d, 12)
70904 H.writeInt32BE(this._e, 16)
70905 H.writeInt32BE(this._f, 20)
70906 H.writeInt32BE(this._g, 24)
70907 H.writeInt32BE(this._h, 28)
70908
70909 return H
70910 }
70911
70912 module.exports = Sha256
70913
70914 },{"./hash":195,"inherits":189,"safe-buffer":193}],201:[function(require,module,exports){
70915 var inherits = require('inherits')
70916 var SHA512 = require('./sha512')
70917 var Hash = require('./hash')
70918 var Buffer = require('safe-buffer').Buffer
70919
70920 var W = new Array(160)
70921
70922 function Sha384 () {
70923 this.init()
70924 this._w = W
70925
70926 Hash.call(this, 128, 112)
70927 }
70928
70929 inherits(Sha384, SHA512)
70930
70931 Sha384.prototype.init = function () {
70932 this._ah = 0xcbbb9d5d
70933 this._bh = 0x629a292a
70934 this._ch = 0x9159015a
70935 this._dh = 0x152fecd8
70936 this._eh = 0x67332667
70937 this._fh = 0x8eb44a87
70938 this._gh = 0xdb0c2e0d
70939 this._hh = 0x47b5481d
70940
70941 this._al = 0xc1059ed8
70942 this._bl = 0x367cd507
70943 this._cl = 0x3070dd17
70944 this._dl = 0xf70e5939
70945 this._el = 0xffc00b31
70946 this._fl = 0x68581511
70947 this._gl = 0x64f98fa7
70948 this._hl = 0xbefa4fa4
70949
70950 return this
70951 }
70952
70953 Sha384.prototype._hash = function () {
70954 var H = Buffer.allocUnsafe(48)
70955
70956 function writeInt64BE (h, l, offset) {
70957 H.writeInt32BE(h, offset)
70958 H.writeInt32BE(l, offset + 4)
70959 }
70960
70961 writeInt64BE(this._ah, this._al, 0)
70962 writeInt64BE(this._bh, this._bl, 8)
70963 writeInt64BE(this._ch, this._cl, 16)
70964 writeInt64BE(this._dh, this._dl, 24)
70965 writeInt64BE(this._eh, this._el, 32)
70966 writeInt64BE(this._fh, this._fl, 40)
70967
70968 return H
70969 }
70970
70971 module.exports = Sha384
70972
70973 },{"./hash":195,"./sha512":202,"inherits":189,"safe-buffer":193}],202:[function(require,module,exports){
70974 var inherits = require('inherits')
70975 var Hash = require('./hash')
70976 var Buffer = require('safe-buffer').Buffer
70977
70978 var K = [
70979 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
70980 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
70981 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
70982 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
70983 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
70984 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
70985 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
70986 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
70987 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
70988 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
70989 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
70990 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
70991 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
70992 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
70993 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
70994 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
70995 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
70996 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
70997 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
70998 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
70999 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
71000 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
71001 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
71002 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
71003 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
71004 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
71005 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
71006 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
71007 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
71008 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
71009 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
71010 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
71011 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
71012 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
71013 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
71014 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
71015 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
71016 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
71017 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
71018 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
71019 ]
71020
71021 var W = new Array(160)
71022
71023 function Sha512 () {
71024 this.init()
71025 this._w = W
71026
71027 Hash.call(this, 128, 112)
71028 }
71029
71030 inherits(Sha512, Hash)
71031
71032 Sha512.prototype.init = function () {
71033 this._ah = 0x6a09e667
71034 this._bh = 0xbb67ae85
71035 this._ch = 0x3c6ef372
71036 this._dh = 0xa54ff53a
71037 this._eh = 0x510e527f
71038 this._fh = 0x9b05688c
71039 this._gh = 0x1f83d9ab
71040 this._hh = 0x5be0cd19
71041
71042 this._al = 0xf3bcc908
71043 this._bl = 0x84caa73b
71044 this._cl = 0xfe94f82b
71045 this._dl = 0x5f1d36f1
71046 this._el = 0xade682d1
71047 this._fl = 0x2b3e6c1f
71048 this._gl = 0xfb41bd6b
71049 this._hl = 0x137e2179
71050
71051 return this
71052 }
71053
71054 function Ch (x, y, z) {
71055 return z ^ (x & (y ^ z))
71056 }
71057
71058 function maj (x, y, z) {
71059 return (x & y) | (z & (x | y))
71060 }
71061
71062 function sigma0 (x, xl) {
71063 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
71064 }
71065
71066 function sigma1 (x, xl) {
71067 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
71068 }
71069
71070 function Gamma0 (x, xl) {
71071 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
71072 }
71073
71074 function Gamma0l (x, xl) {
71075 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
71076 }
71077
71078 function Gamma1 (x, xl) {
71079 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
71080 }
71081
71082 function Gamma1l (x, xl) {
71083 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
71084 }
71085
71086 function getCarry (a, b) {
71087 return (a >>> 0) < (b >>> 0) ? 1 : 0
71088 }
71089
71090 Sha512.prototype._update = function (M) {
71091 var W = this._w
71092
71093 var ah = this._ah | 0
71094 var bh = this._bh | 0
71095 var ch = this._ch | 0
71096 var dh = this._dh | 0
71097 var eh = this._eh | 0
71098 var fh = this._fh | 0
71099 var gh = this._gh | 0
71100 var hh = this._hh | 0
71101
71102 var al = this._al | 0
71103 var bl = this._bl | 0
71104 var cl = this._cl | 0
71105 var dl = this._dl | 0
71106 var el = this._el | 0
71107 var fl = this._fl | 0
71108 var gl = this._gl | 0
71109 var hl = this._hl | 0
71110
71111 for (var i = 0; i < 32; i += 2) {
71112 W[i] = M.readInt32BE(i * 4)
71113 W[i + 1] = M.readInt32BE(i * 4 + 4)
71114 }
71115 for (; i < 160; i += 2) {
71116 var xh = W[i - 15 * 2]
71117 var xl = W[i - 15 * 2 + 1]
71118 var gamma0 = Gamma0(xh, xl)
71119 var gamma0l = Gamma0l(xl, xh)
71120
71121 xh = W[i - 2 * 2]
71122 xl = W[i - 2 * 2 + 1]
71123 var gamma1 = Gamma1(xh, xl)
71124 var gamma1l = Gamma1l(xl, xh)
71125
71126 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
71127 var Wi7h = W[i - 7 * 2]
71128 var Wi7l = W[i - 7 * 2 + 1]
71129
71130 var Wi16h = W[i - 16 * 2]
71131 var Wi16l = W[i - 16 * 2 + 1]
71132
71133 var Wil = (gamma0l + Wi7l) | 0
71134 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
71135 Wil = (Wil + gamma1l) | 0
71136 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
71137 Wil = (Wil + Wi16l) | 0
71138 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
71139
71140 W[i] = Wih
71141 W[i + 1] = Wil
71142 }
71143
71144 for (var j = 0; j < 160; j += 2) {
71145 Wih = W[j]
71146 Wil = W[j + 1]
71147
71148 var majh = maj(ah, bh, ch)
71149 var majl = maj(al, bl, cl)
71150
71151 var sigma0h = sigma0(ah, al)
71152 var sigma0l = sigma0(al, ah)
71153 var sigma1h = sigma1(eh, el)
71154 var sigma1l = sigma1(el, eh)
71155
71156 // t1 = h + sigma1 + ch + K[j] + W[j]
71157 var Kih = K[j]
71158 var Kil = K[j + 1]
71159
71160 var chh = Ch(eh, fh, gh)
71161 var chl = Ch(el, fl, gl)
71162
71163 var t1l = (hl + sigma1l) | 0
71164 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
71165 t1l = (t1l + chl) | 0
71166 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
71167 t1l = (t1l + Kil) | 0
71168 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
71169 t1l = (t1l + Wil) | 0
71170 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
71171
71172 // t2 = sigma0 + maj
71173 var t2l = (sigma0l + majl) | 0
71174 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
71175
71176 hh = gh
71177 hl = gl
71178 gh = fh
71179 gl = fl
71180 fh = eh
71181 fl = el
71182 el = (dl + t1l) | 0
71183 eh = (dh + t1h + getCarry(el, dl)) | 0
71184 dh = ch
71185 dl = cl
71186 ch = bh
71187 cl = bl
71188 bh = ah
71189 bl = al
71190 al = (t1l + t2l) | 0
71191 ah = (t1h + t2h + getCarry(al, t1l)) | 0
71192 }
71193
71194 this._al = (this._al + al) | 0
71195 this._bl = (this._bl + bl) | 0
71196 this._cl = (this._cl + cl) | 0
71197 this._dl = (this._dl + dl) | 0
71198 this._el = (this._el + el) | 0
71199 this._fl = (this._fl + fl) | 0
71200 this._gl = (this._gl + gl) | 0
71201 this._hl = (this._hl + hl) | 0
71202
71203 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
71204 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
71205 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
71206 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
71207 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
71208 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
71209 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
71210 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
71211 }
71212
71213 Sha512.prototype._hash = function () {
71214 var H = Buffer.allocUnsafe(64)
71215
71216 function writeInt64BE (h, l, offset) {
71217 H.writeInt32BE(h, offset)
71218 H.writeInt32BE(l, offset + 4)
71219 }
71220
71221 writeInt64BE(this._ah, this._al, 0)
71222 writeInt64BE(this._bh, this._bl, 8)
71223 writeInt64BE(this._ch, this._cl, 16)
71224 writeInt64BE(this._dh, this._dl, 24)
71225 writeInt64BE(this._eh, this._el, 32)
71226 writeInt64BE(this._fh, this._fl, 40)
71227 writeInt64BE(this._gh, this._gl, 48)
71228 writeInt64BE(this._hh, this._hl, 56)
71229
71230 return H
71231 }
71232
71233 module.exports = Sha512
71234
71235 },{"./hash":195,"inherits":189,"safe-buffer":193}]},{},[150])(150)
71236 });</script>
71237 <script>(function() {
71238
71239 // p2wpkh
71240
71241 bitcoinjs.bitcoin.networks.bitcoin.p2wpkh = {
71242 baseNetwork: "bitcoin",
71243 messagePrefix: '\x18Bitcoin Signed Message:\n',
71244 bech32: 'bc',
71245 bip32: {
71246 public: 0x04b24746,
71247 private: 0x04b2430c
71248 },
71249 pubKeyHash: 0x00,
71250 scriptHash: 0x05,
71251 wif: 0x80
71252 };
71253
71254 bitcoinjs.bitcoin.networks.testnet.p2wpkh = {
71255 baseNetwork: "testnet",
71256 messagePrefix: '\x18Bitcoin Signed Message:\n',
71257 bech32: 'tb',
71258 bip32: {
71259 public: 0x045f1cf6,
71260 private: 0x045f18bc
71261 },
71262 pubKeyHash: 0x6f,
71263 scriptHash: 0xc4,
71264 wif: 0xef
71265 };
71266
71267 // p2wpkh in p2sh
71268
71269 bitcoinjs.bitcoin.networks.bitcoin.p2wpkhInP2sh = {
71270 baseNetwork: "bitcoin",
71271 messagePrefix: '\x18Bitcoin Signed Message:\n',
71272 bech32: 'bc',
71273 bip32: {
71274 public: 0x049d7cb2,
71275 private: 0x049d7878
71276 },
71277 pubKeyHash: 0x00,
71278 scriptHash: 0x05,
71279 wif: 0x80
71280 };
71281
71282 bitcoinjs.bitcoin.networks.testnet.p2wpkhInP2sh = {
71283 baseNetwork: "testnet",
71284 messagePrefix: '\x18Bitcoin Signed Message:\n',
71285 bech32: 'tb',
71286 bip32: {
71287 public: 0x044a5262,
71288 private: 0x044a4e28
71289 },
71290 pubKeyHash: 0x6f,
71291 scriptHash: 0xc4,
71292 wif: 0xef
71293 };
71294
71295 bitcoinjs.bitcoin.networks.litecoin.p2wpkhInP2sh = {
71296 baseNetwork: "litecoin",
71297 messagePrefix: '\x19Litecoin Signed Message:\n',
71298 bech32: 'ltc',
71299 bip32: {
71300 public: 0x01b26ef6,
71301 private: 0x01b26792
71302 },
71303 pubKeyHash: 0x30,
71304 scriptHash: 0x32,
71305 wif: 0xb0
71306 };
71307
71308 bitcoinjs.bitcoin.networks.fujicoin.p2wpkh = {
71309 baseNetwork: "fujicoin",
71310 messagePrefix: '\x19FujiCoin Signed Message:\n',
71311 bech32: 'fc',
71312 bip32: {
71313 public: 0x04b24746,
71314 private: 0x04b2430c
71315 },
71316 pubKeyHash: 0x24,
71317 scriptHash: 0x10,
71318 wif: 0xa4
71319 };
71320
71321 bitcoinjs.bitcoin.networks.fujicoin.p2wpkhInP2sh = {
71322 baseNetwork: "fujicoin",
71323 messagePrefix: '\x19FujiCoin Signed Message:\n',
71324 bech32: 'fc',
71325 bip32: {
71326 public: 0x049d7cb2,
71327 private: 0x049d7878
71328 },
71329 pubKeyHash: 0x24,
71330 scriptHash: 0x10,
71331 wif: 0xa4
71332 };
71333
71334 bitcoinjs.bitcoin.networks.vertcoin.p2wpkh = {
71335 baseNetwork: "vertcoin",
71336 messagePrefix: '\x18Vertcoin Signed Message:\n',
71337 bech32: 'vtc',
71338 bip32: {
71339 public: 0x0488b21e,
71340 private: 0x0488ade4
71341 },
71342 pubKeyHash: 71,
71343 scriptHash: 5,
71344 wif: 0x80
71345 };
71346
71347 bitcoinjs.bitcoin.networks.vertcoin.p2wpkhInP2sh = {
71348 baseNetwork: "vertcoin",
71349 messagePrefix: '\x18Vertcoin Signed Message:\n',
71350 bip32: {
71351 public: 0x0488b21e,
71352 private: 0x0488ade4
71353 },
71354 pubKeyHash: 71,
71355 scriptHash: 5,
71356 wif: 0x80
71357 };
71358
71359 })();
71360 </script>
71361 <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){
71362 (function (global){
71363 'use strict';
71364
71365 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
71366 // original notice:
71367
71368 /*!
71369 * The buffer module from node.js, for the browser.
71370 *
71371 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
71372 * @license MIT
71373 */
71374 function compare(a, b) {
71375 if (a === b) {
71376 return 0;
71377 }
71378
71379 var x = a.length;
71380 var y = b.length;
71381
71382 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
71383 if (a[i] !== b[i]) {
71384 x = a[i];
71385 y = b[i];
71386 break;
71387 }
71388 }
71389
71390 if (x < y) {
71391 return -1;
71392 }
71393 if (y < x) {
71394 return 1;
71395 }
71396 return 0;
71397 }
71398 function isBuffer(b) {
71399 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
71400 return global.Buffer.isBuffer(b);
71401 }
71402 return !!(b != null && b._isBuffer);
71403 }
71404
71405 // based on node assert, original notice:
71406
71407 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
71408 //
71409 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
71410 //
71411 // Originally from narwhal.js (http://narwhaljs.org)
71412 // Copyright (c) 2009 Thomas Robinson <280north.com>
71413 //
71414 // Permission is hereby granted, free of charge, to any person obtaining a copy
71415 // of this software and associated documentation files (the 'Software'), to
71416 // deal in the Software without restriction, including without limitation the
71417 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
71418 // sell copies of the Software, and to permit persons to whom the Software is
71419 // furnished to do so, subject to the following conditions:
71420 //
71421 // The above copyright notice and this permission notice shall be included in
71422 // all copies or substantial portions of the Software.
71423 //
71424 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
71425 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
71426 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
71427 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
71428 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
71429 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
71430
71431 var util = require('util/');
71432 var hasOwn = Object.prototype.hasOwnProperty;
71433 var pSlice = Array.prototype.slice;
71434 var functionsHaveNames = (function () {
71435 return function foo() {}.name === 'foo';
71436 }());
71437 function pToString (obj) {
71438 return Object.prototype.toString.call(obj);
71439 }
71440 function isView(arrbuf) {
71441 if (isBuffer(arrbuf)) {
71442 return false;
71443 }
71444 if (typeof global.ArrayBuffer !== 'function') {
71445 return false;
71446 }
71447 if (typeof ArrayBuffer.isView === 'function') {
71448 return ArrayBuffer.isView(arrbuf);
71449 }
71450 if (!arrbuf) {
71451 return false;
71452 }
71453 if (arrbuf instanceof DataView) {
71454 return true;
71455 }
71456 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
71457 return true;
71458 }
71459 return false;
71460 }
71461 // 1. The assert module provides functions that throw
71462 // AssertionError's when particular conditions are not met. The
71463 // assert module must conform to the following interface.
71464
71465 var assert = module.exports = ok;
71466
71467 // 2. The AssertionError is defined in assert.
71468 // new assert.AssertionError({ message: message,
71469 // actual: actual,
71470 // expected: expected })
71471
71472 var regex = /\s*function\s+([^\(\s]*)\s*/;
71473 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
71474 function getName(func) {
71475 if (!util.isFunction(func)) {
71476 return;
71477 }
71478 if (functionsHaveNames) {
71479 return func.name;
71480 }
71481 var str = func.toString();
71482 var match = str.match(regex);
71483 return match && match[1];
71484 }
71485 assert.AssertionError = function AssertionError(options) {
71486 this.name = 'AssertionError';
71487 this.actual = options.actual;
71488 this.expected = options.expected;
71489 this.operator = options.operator;
71490 if (options.message) {
71491 this.message = options.message;
71492 this.generatedMessage = false;
71493 } else {
71494 this.message = getMessage(this);
71495 this.generatedMessage = true;
71496 }
71497 var stackStartFunction = options.stackStartFunction || fail;
71498 if (Error.captureStackTrace) {
71499 Error.captureStackTrace(this, stackStartFunction);
71500 } else {
71501 // non v8 browsers so we can have a stacktrace
71502 var err = new Error();
71503 if (err.stack) {
71504 var out = err.stack;
71505
71506 // try to strip useless frames
71507 var fn_name = getName(stackStartFunction);
71508 var idx = out.indexOf('\n' + fn_name);
71509 if (idx >= 0) {
71510 // once we have located the function frame
71511 // we need to strip out everything before it (and its line)
71512 var next_line = out.indexOf('\n', idx + 1);
71513 out = out.substring(next_line + 1);
71514 }
71515
71516 this.stack = out;
71517 }
71518 }
71519 };
71520
71521 // assert.AssertionError instanceof Error
71522 util.inherits(assert.AssertionError, Error);
71523
71524 function truncate(s, n) {
71525 if (typeof s === 'string') {
71526 return s.length < n ? s : s.slice(0, n);
71527 } else {
71528 return s;
71529 }
71530 }
71531 function inspect(something) {
71532 if (functionsHaveNames || !util.isFunction(something)) {
71533 return util.inspect(something);
71534 }
71535 var rawname = getName(something);
71536 var name = rawname ? ': ' + rawname : '';
71537 return '[Function' + name + ']';
71538 }
71539 function getMessage(self) {
71540 return truncate(inspect(self.actual), 128) + ' ' +
71541 self.operator + ' ' +
71542 truncate(inspect(self.expected), 128);
71543 }
71544
71545 // At present only the three keys mentioned above are used and
71546 // understood by the spec. Implementations or sub modules can pass
71547 // other keys to the AssertionError's constructor - they will be
71548 // ignored.
71549
71550 // 3. All of the following functions must throw an AssertionError
71551 // when a corresponding condition is not met, with a message that
71552 // may be undefined if not provided. All assertion methods provide
71553 // both the actual and expected values to the assertion error for
71554 // display purposes.
71555
71556 function fail(actual, expected, message, operator, stackStartFunction) {
71557 throw new assert.AssertionError({
71558 message: message,
71559 actual: actual,
71560 expected: expected,
71561 operator: operator,
71562 stackStartFunction: stackStartFunction
71563 });
71564 }
71565
71566 // EXTENSION! allows for well behaved errors defined elsewhere.
71567 assert.fail = fail;
71568
71569 // 4. Pure assertion tests whether a value is truthy, as determined
71570 // by !!guard.
71571 // assert.ok(guard, message_opt);
71572 // This statement is equivalent to assert.equal(true, !!guard,
71573 // message_opt);. To test strictly for the value true, use
71574 // assert.strictEqual(true, guard, message_opt);.
71575
71576 function ok(value, message) {
71577 if (!value) fail(value, true, message, '==', assert.ok);
71578 }
71579 assert.ok = ok;
71580
71581 // 5. The equality assertion tests shallow, coercive equality with
71582 // ==.
71583 // assert.equal(actual, expected, message_opt);
71584
71585 assert.equal = function equal(actual, expected, message) {
71586 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
71587 };
71588
71589 // 6. The non-equality assertion tests for whether two objects are not equal
71590 // with != assert.notEqual(actual, expected, message_opt);
71591
71592 assert.notEqual = function notEqual(actual, expected, message) {
71593 if (actual == expected) {
71594 fail(actual, expected, message, '!=', assert.notEqual);
71595 }
71596 };
71597
71598 // 7. The equivalence assertion tests a deep equality relation.
71599 // assert.deepEqual(actual, expected, message_opt);
71600
71601 assert.deepEqual = function deepEqual(actual, expected, message) {
71602 if (!_deepEqual(actual, expected, false)) {
71603 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
71604 }
71605 };
71606
71607 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
71608 if (!_deepEqual(actual, expected, true)) {
71609 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
71610 }
71611 };
71612
71613 function _deepEqual(actual, expected, strict, memos) {
71614 // 7.1. All identical values are equivalent, as determined by ===.
71615 if (actual === expected) {
71616 return true;
71617 } else if (isBuffer(actual) && isBuffer(expected)) {
71618 return compare(actual, expected) === 0;
71619
71620 // 7.2. If the expected value is a Date object, the actual value is
71621 // equivalent if it is also a Date object that refers to the same time.
71622 } else if (util.isDate(actual) && util.isDate(expected)) {
71623 return actual.getTime() === expected.getTime();
71624
71625 // 7.3 If the expected value is a RegExp object, the actual value is
71626 // equivalent if it is also a RegExp object with the same source and
71627 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
71628 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
71629 return actual.source === expected.source &&
71630 actual.global === expected.global &&
71631 actual.multiline === expected.multiline &&
71632 actual.lastIndex === expected.lastIndex &&
71633 actual.ignoreCase === expected.ignoreCase;
71634
71635 // 7.4. Other pairs that do not both pass typeof value == 'object',
71636 // equivalence is determined by ==.
71637 } else if ((actual === null || typeof actual !== 'object') &&
71638 (expected === null || typeof expected !== 'object')) {
71639 return strict ? actual === expected : actual == expected;
71640
71641 // If both values are instances of typed arrays, wrap their underlying
71642 // ArrayBuffers in a Buffer each to increase performance
71643 // This optimization requires the arrays to have the same type as checked by
71644 // Object.prototype.toString (aka pToString). Never perform binary
71645 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
71646 // bit patterns are not identical.
71647 } else if (isView(actual) && isView(expected) &&
71648 pToString(actual) === pToString(expected) &&
71649 !(actual instanceof Float32Array ||
71650 actual instanceof Float64Array)) {
71651 return compare(new Uint8Array(actual.buffer),
71652 new Uint8Array(expected.buffer)) === 0;
71653
71654 // 7.5 For all other Object pairs, including Array objects, equivalence is
71655 // determined by having the same number of owned properties (as verified
71656 // with Object.prototype.hasOwnProperty.call), the same set of keys
71657 // (although not necessarily the same order), equivalent values for every
71658 // corresponding key, and an identical 'prototype' property. Note: this
71659 // accounts for both named and indexed properties on Arrays.
71660 } else if (isBuffer(actual) !== isBuffer(expected)) {
71661 return false;
71662 } else {
71663 memos = memos || {actual: [], expected: []};
71664
71665 var actualIndex = memos.actual.indexOf(actual);
71666 if (actualIndex !== -1) {
71667 if (actualIndex === memos.expected.indexOf(expected)) {
71668 return true;
71669 }
71670 }
71671
71672 memos.actual.push(actual);
71673 memos.expected.push(expected);
71674
71675 return objEquiv(actual, expected, strict, memos);
71676 }
71677 }
71678
71679 function isArguments(object) {
71680 return Object.prototype.toString.call(object) == '[object Arguments]';
71681 }
71682
71683 function objEquiv(a, b, strict, actualVisitedObjects) {
71684 if (a === null || a === undefined || b === null || b === undefined)
71685 return false;
71686 // if one is a primitive, the other must be same
71687 if (util.isPrimitive(a) || util.isPrimitive(b))
71688 return a === b;
71689 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
71690 return false;
71691 var aIsArgs = isArguments(a);
71692 var bIsArgs = isArguments(b);
71693 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
71694 return false;
71695 if (aIsArgs) {
71696 a = pSlice.call(a);
71697 b = pSlice.call(b);
71698 return _deepEqual(a, b, strict);
71699 }
71700 var ka = objectKeys(a);
71701 var kb = objectKeys(b);
71702 var key, i;
71703 // having the same number of owned properties (keys incorporates
71704 // hasOwnProperty)
71705 if (ka.length !== kb.length)
71706 return false;
71707 //the same set of keys (although not necessarily the same order),
71708 ka.sort();
71709 kb.sort();
71710 //~~~cheap key test
71711 for (i = ka.length - 1; i >= 0; i--) {
71712 if (ka[i] !== kb[i])
71713 return false;
71714 }
71715 //equivalent values for every corresponding key, and
71716 //~~~possibly expensive deep test
71717 for (i = ka.length - 1; i >= 0; i--) {
71718 key = ka[i];
71719 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
71720 return false;
71721 }
71722 return true;
71723 }
71724
71725 // 8. The non-equivalence assertion tests for any deep inequality.
71726 // assert.notDeepEqual(actual, expected, message_opt);
71727
71728 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
71729 if (_deepEqual(actual, expected, false)) {
71730 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
71731 }
71732 };
71733
71734 assert.notDeepStrictEqual = notDeepStrictEqual;
71735 function notDeepStrictEqual(actual, expected, message) {
71736 if (_deepEqual(actual, expected, true)) {
71737 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
71738 }
71739 }
71740
71741
71742 // 9. The strict equality assertion tests strict equality, as determined by ===.
71743 // assert.strictEqual(actual, expected, message_opt);
71744
71745 assert.strictEqual = function strictEqual(actual, expected, message) {
71746 if (actual !== expected) {
71747 fail(actual, expected, message, '===', assert.strictEqual);
71748 }
71749 };
71750
71751 // 10. The strict non-equality assertion tests for strict inequality, as
71752 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
71753
71754 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
71755 if (actual === expected) {
71756 fail(actual, expected, message, '!==', assert.notStrictEqual);
71757 }
71758 };
71759
71760 function expectedException(actual, expected) {
71761 if (!actual || !expected) {
71762 return false;
71763 }
71764
71765 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
71766 return expected.test(actual);
71767 }
71768
71769 try {
71770 if (actual instanceof expected) {
71771 return true;
71772 }
71773 } catch (e) {
71774 // Ignore. The instanceof check doesn't work for arrow functions.
71775 }
71776
71777 if (Error.isPrototypeOf(expected)) {
71778 return false;
71779 }
71780
71781 return expected.call({}, actual) === true;
71782 }
71783
71784 function _tryBlock(block) {
71785 var error;
71786 try {
71787 block();
71788 } catch (e) {
71789 error = e;
71790 }
71791 return error;
71792 }
71793
71794 function _throws(shouldThrow, block, expected, message) {
71795 var actual;
71796
71797 if (typeof block !== 'function') {
71798 throw new TypeError('"block" argument must be a function');
71799 }
71800
71801 if (typeof expected === 'string') {
71802 message = expected;
71803 expected = null;
71804 }
71805
71806 actual = _tryBlock(block);
71807
71808 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
71809 (message ? ' ' + message : '.');
71810
71811 if (shouldThrow && !actual) {
71812 fail(actual, expected, 'Missing expected exception' + message);
71813 }
71814
71815 var userProvidedMessage = typeof message === 'string';
71816 var isUnwantedException = !shouldThrow && util.isError(actual);
71817 var isUnexpectedException = !shouldThrow && actual && !expected;
71818
71819 if ((isUnwantedException &&
71820 userProvidedMessage &&
71821 expectedException(actual, expected)) ||
71822 isUnexpectedException) {
71823 fail(actual, expected, 'Got unwanted exception' + message);
71824 }
71825
71826 if ((shouldThrow && actual && expected &&
71827 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
71828 throw actual;
71829 }
71830 }
71831
71832 // 11. Expected to throw an error:
71833 // assert.throws(block, Error_opt, message_opt);
71834
71835 assert.throws = function(block, /*optional*/error, /*optional*/message) {
71836 _throws(true, block, error, message);
71837 };
71838
71839 // EXTENSION! This is annoying to write outside this module.
71840 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
71841 _throws(false, block, error, message);
71842 };
71843
71844 assert.ifError = function(err) { if (err) throw err; };
71845
71846 var objectKeys = Object.keys || function (obj) {
71847 var keys = [];
71848 for (var key in obj) {
71849 if (hasOwn.call(obj, key)) keys.push(key);
71850 }
71851 return keys;
71852 };
71853
71854 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
71855 },{"util/":30}],2:[function(require,module,exports){
71856 'use strict'
71857
71858 exports.byteLength = byteLength
71859 exports.toByteArray = toByteArray
71860 exports.fromByteArray = fromByteArray
71861
71862 var lookup = []
71863 var revLookup = []
71864 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
71865
71866 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
71867 for (var i = 0, len = code.length; i < len; ++i) {
71868 lookup[i] = code[i]
71869 revLookup[code.charCodeAt(i)] = i
71870 }
71871
71872 revLookup['-'.charCodeAt(0)] = 62
71873 revLookup['_'.charCodeAt(0)] = 63
71874
71875 function placeHoldersCount (b64) {
71876 var len = b64.length
71877 if (len % 4 > 0) {
71878 throw new Error('Invalid string. Length must be a multiple of 4')
71879 }
71880
71881 // the number of equal signs (place holders)
71882 // if there are two placeholders, than the two characters before it
71883 // represent one byte
71884 // if there is only one, then the three characters before it represent 2 bytes
71885 // this is just a cheap hack to not do indexOf twice
71886 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
71887 }
71888
71889 function byteLength (b64) {
71890 // base64 is 4/3 + up to two characters of the original data
71891 return b64.length * 3 / 4 - placeHoldersCount(b64)
71892 }
71893
71894 function toByteArray (b64) {
71895 var i, j, l, tmp, placeHolders, arr
71896 var len = b64.length
71897 placeHolders = placeHoldersCount(b64)
71898
71899 arr = new Arr(len * 3 / 4 - placeHolders)
71900
71901 // if there are placeholders, only get up to the last complete 4 chars
71902 l = placeHolders > 0 ? len - 4 : len
71903
71904 var L = 0
71905
71906 for (i = 0, j = 0; i < l; i += 4, j += 3) {
71907 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
71908 arr[L++] = (tmp >> 16) & 0xFF
71909 arr[L++] = (tmp >> 8) & 0xFF
71910 arr[L++] = tmp & 0xFF
71911 }
71912
71913 if (placeHolders === 2) {
71914 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
71915 arr[L++] = tmp & 0xFF
71916 } else if (placeHolders === 1) {
71917 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
71918 arr[L++] = (tmp >> 8) & 0xFF
71919 arr[L++] = tmp & 0xFF
71920 }
71921
71922 return arr
71923 }
71924
71925 function tripletToBase64 (num) {
71926 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
71927 }
71928
71929 function encodeChunk (uint8, start, end) {
71930 var tmp
71931 var output = []
71932 for (var i = start; i < end; i += 3) {
71933 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
71934 output.push(tripletToBase64(tmp))
71935 }
71936 return output.join('')
71937 }
71938
71939 function fromByteArray (uint8) {
71940 var tmp
71941 var len = uint8.length
71942 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
71943 var output = ''
71944 var parts = []
71945 var maxChunkLength = 16383 // must be multiple of 3
71946
71947 // go through the array every three bytes, we'll deal with trailing stuff later
71948 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
71949 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
71950 }
71951
71952 // pad the end with zeros, but make sure to not forget the extra bytes
71953 if (extraBytes === 1) {
71954 tmp = uint8[len - 1]
71955 output += lookup[tmp >> 2]
71956 output += lookup[(tmp << 4) & 0x3F]
71957 output += '=='
71958 } else if (extraBytes === 2) {
71959 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
71960 output += lookup[tmp >> 10]
71961 output += lookup[(tmp >> 4) & 0x3F]
71962 output += lookup[(tmp << 2) & 0x3F]
71963 output += '='
71964 }
71965
71966 parts.push(output)
71967
71968 return parts.join('')
71969 }
71970
71971 },{}],3:[function(require,module,exports){
71972
71973 },{}],4:[function(require,module,exports){
71974 (function (global){
71975 'use strict';
71976
71977 var buffer = require('buffer');
71978 var Buffer = buffer.Buffer;
71979 var SlowBuffer = buffer.SlowBuffer;
71980 var MAX_LEN = buffer.kMaxLength || 2147483647;
71981 exports.alloc = function alloc(size, fill, encoding) {
71982 if (typeof Buffer.alloc === 'function') {
71983 return Buffer.alloc(size, fill, encoding);
71984 }
71985 if (typeof encoding === 'number') {
71986 throw new TypeError('encoding must not be number');
71987 }
71988 if (typeof size !== 'number') {
71989 throw new TypeError('size must be a number');
71990 }
71991 if (size > MAX_LEN) {
71992 throw new RangeError('size is too large');
71993 }
71994 var enc = encoding;
71995 var _fill = fill;
71996 if (_fill === undefined) {
71997 enc = undefined;
71998 _fill = 0;
71999 }
72000 var buf = new Buffer(size);
72001 if (typeof _fill === 'string') {
72002 var fillBuf = new Buffer(_fill, enc);
72003 var flen = fillBuf.length;
72004 var i = -1;
72005 while (++i < size) {
72006 buf[i] = fillBuf[i % flen];
72007 }
72008 } else {
72009 buf.fill(_fill);
72010 }
72011 return buf;
72012 }
72013 exports.allocUnsafe = function allocUnsafe(size) {
72014 if (typeof Buffer.allocUnsafe === 'function') {
72015 return Buffer.allocUnsafe(size);
72016 }
72017 if (typeof size !== 'number') {
72018 throw new TypeError('size must be a number');
72019 }
72020 if (size > MAX_LEN) {
72021 throw new RangeError('size is too large');
72022 }
72023 return new Buffer(size);
72024 }
72025 exports.from = function from(value, encodingOrOffset, length) {
72026 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
72027 return Buffer.from(value, encodingOrOffset, length);
72028 }
72029 if (typeof value === 'number') {
72030 throw new TypeError('"value" argument must not be a number');
72031 }
72032 if (typeof value === 'string') {
72033 return new Buffer(value, encodingOrOffset);
72034 }
72035 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
72036 var offset = encodingOrOffset;
72037 if (arguments.length === 1) {
72038 return new Buffer(value);
72039 }
72040 if (typeof offset === 'undefined') {
72041 offset = 0;
72042 }
72043 var len = length;
72044 if (typeof len === 'undefined') {
72045 len = value.byteLength - offset;
72046 }
72047 if (offset >= value.byteLength) {
72048 throw new RangeError('\'offset\' is out of bounds');
72049 }
72050 if (len > value.byteLength - offset) {
72051 throw new RangeError('\'length\' is out of bounds');
72052 }
72053 return new Buffer(value.slice(offset, offset + len));
72054 }
72055 if (Buffer.isBuffer(value)) {
72056 var out = new Buffer(value.length);
72057 value.copy(out, 0, 0, value.length);
72058 return out;
72059 }
72060 if (value) {
72061 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
72062 return new Buffer(value);
72063 }
72064 if (value.type === 'Buffer' && Array.isArray(value.data)) {
72065 return new Buffer(value.data);
72066 }
72067 }
72068
72069 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
72070 }
72071 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
72072 if (typeof Buffer.allocUnsafeSlow === 'function') {
72073 return Buffer.allocUnsafeSlow(size);
72074 }
72075 if (typeof size !== 'number') {
72076 throw new TypeError('size must be a number');
72077 }
72078 if (size >= MAX_LEN) {
72079 throw new RangeError('size is too large');
72080 }
72081 return new SlowBuffer(size);
72082 }
72083
72084 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
72085 },{"buffer":5}],5:[function(require,module,exports){
72086 /*!
72087 * The buffer module from node.js, for the browser.
72088 *
72089 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
72090 * @license MIT
72091 */
72092 /* eslint-disable no-proto */
72093
72094 'use strict'
72095
72096 var base64 = require('base64-js')
72097 var ieee754 = require('ieee754')
72098
72099 exports.Buffer = Buffer
72100 exports.SlowBuffer = SlowBuffer
72101 exports.INSPECT_MAX_BYTES = 50
72102
72103 var K_MAX_LENGTH = 0x7fffffff
72104 exports.kMaxLength = K_MAX_LENGTH
72105
72106 /**
72107 * If `Buffer.TYPED_ARRAY_SUPPORT`:
72108 * === true Use Uint8Array implementation (fastest)
72109 * === false Print warning and recommend using `buffer` v4.x which has an Object
72110 * implementation (most compatible, even IE6)
72111 *
72112 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
72113 * Opera 11.6+, iOS 4.2+.
72114 *
72115 * We report that the browser does not support typed arrays if the are not subclassable
72116 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
72117 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
72118 * for __proto__ and has a buggy typed array implementation.
72119 */
72120 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
72121
72122 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
72123 typeof console.error === 'function') {
72124 console.error(
72125 'This browser lacks typed array (Uint8Array) support which is required by ' +
72126 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
72127 )
72128 }
72129
72130 function typedArraySupport () {
72131 // Can typed array instances can be augmented?
72132 try {
72133 var arr = new Uint8Array(1)
72134 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
72135 return arr.foo() === 42
72136 } catch (e) {
72137 return false
72138 }
72139 }
72140
72141 function createBuffer (length) {
72142 if (length > K_MAX_LENGTH) {
72143 throw new RangeError('Invalid typed array length')
72144 }
72145 // Return an augmented `Uint8Array` instance
72146 var buf = new Uint8Array(length)
72147 buf.__proto__ = Buffer.prototype
72148 return buf
72149 }
72150
72151 /**
72152 * The Buffer constructor returns instances of `Uint8Array` that have their
72153 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
72154 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
72155 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
72156 * returns a single octet.
72157 *
72158 * The `Uint8Array` prototype remains unmodified.
72159 */
72160
72161 function Buffer (arg, encodingOrOffset, length) {
72162 // Common case.
72163 if (typeof arg === 'number') {
72164 if (typeof encodingOrOffset === 'string') {
72165 throw new Error(
72166 'If encoding is specified then the first argument must be a string'
72167 )
72168 }
72169 return allocUnsafe(arg)
72170 }
72171 return from(arg, encodingOrOffset, length)
72172 }
72173
72174 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
72175 if (typeof Symbol !== 'undefined' && Symbol.species &&
72176 Buffer[Symbol.species] === Buffer) {
72177 Object.defineProperty(Buffer, Symbol.species, {
72178 value: null,
72179 configurable: true,
72180 enumerable: false,
72181 writable: false
72182 })
72183 }
72184
72185 Buffer.poolSize = 8192 // not used by this implementation
72186
72187 function from (value, encodingOrOffset, length) {
72188 if (typeof value === 'number') {
72189 throw new TypeError('"value" argument must not be a number')
72190 }
72191
72192 if (value instanceof ArrayBuffer) {
72193 return fromArrayBuffer(value, encodingOrOffset, length)
72194 }
72195
72196 if (typeof value === 'string') {
72197 return fromString(value, encodingOrOffset)
72198 }
72199
72200 return fromObject(value)
72201 }
72202
72203 /**
72204 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
72205 * if value is a number.
72206 * Buffer.from(str[, encoding])
72207 * Buffer.from(array)
72208 * Buffer.from(buffer)
72209 * Buffer.from(arrayBuffer[, byteOffset[, length]])
72210 **/
72211 Buffer.from = function (value, encodingOrOffset, length) {
72212 return from(value, encodingOrOffset, length)
72213 }
72214
72215 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
72216 // https://github.com/feross/buffer/pull/148
72217 Buffer.prototype.__proto__ = Uint8Array.prototype
72218 Buffer.__proto__ = Uint8Array
72219
72220 function assertSize (size) {
72221 if (typeof size !== 'number') {
72222 throw new TypeError('"size" argument must be a number')
72223 } else if (size < 0) {
72224 throw new RangeError('"size" argument must not be negative')
72225 }
72226 }
72227
72228 function alloc (size, fill, encoding) {
72229 assertSize(size)
72230 if (size <= 0) {
72231 return createBuffer(size)
72232 }
72233 if (fill !== undefined) {
72234 // Only pay attention to encoding if it's a string. This
72235 // prevents accidentally sending in a number that would
72236 // be interpretted as a start offset.
72237 return typeof encoding === 'string'
72238 ? createBuffer(size).fill(fill, encoding)
72239 : createBuffer(size).fill(fill)
72240 }
72241 return createBuffer(size)
72242 }
72243
72244 /**
72245 * Creates a new filled Buffer instance.
72246 * alloc(size[, fill[, encoding]])
72247 **/
72248 Buffer.alloc = function (size, fill, encoding) {
72249 return alloc(size, fill, encoding)
72250 }
72251
72252 function allocUnsafe (size) {
72253 assertSize(size)
72254 return createBuffer(size < 0 ? 0 : checked(size) | 0)
72255 }
72256
72257 /**
72258 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
72259 * */
72260 Buffer.allocUnsafe = function (size) {
72261 return allocUnsafe(size)
72262 }
72263 /**
72264 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
72265 */
72266 Buffer.allocUnsafeSlow = function (size) {
72267 return allocUnsafe(size)
72268 }
72269
72270 function fromString (string, encoding) {
72271 if (typeof encoding !== 'string' || encoding === '') {
72272 encoding = 'utf8'
72273 }
72274
72275 if (!Buffer.isEncoding(encoding)) {
72276 throw new TypeError('"encoding" must be a valid string encoding')
72277 }
72278
72279 var length = byteLength(string, encoding) | 0
72280 var buf = createBuffer(length)
72281
72282 var actual = buf.write(string, encoding)
72283
72284 if (actual !== length) {
72285 // Writing a hex string, for example, that contains invalid characters will
72286 // cause everything after the first invalid character to be ignored. (e.g.
72287 // 'abxxcd' will be treated as 'ab')
72288 buf = buf.slice(0, actual)
72289 }
72290
72291 return buf
72292 }
72293
72294 function fromArrayLike (array) {
72295 var length = array.length < 0 ? 0 : checked(array.length) | 0
72296 var buf = createBuffer(length)
72297 for (var i = 0; i < length; i += 1) {
72298 buf[i] = array[i] & 255
72299 }
72300 return buf
72301 }
72302
72303 function fromArrayBuffer (array, byteOffset, length) {
72304 if (byteOffset < 0 || array.byteLength < byteOffset) {
72305 throw new RangeError('\'offset\' is out of bounds')
72306 }
72307
72308 if (array.byteLength < byteOffset + (length || 0)) {
72309 throw new RangeError('\'length\' is out of bounds')
72310 }
72311
72312 var buf
72313 if (byteOffset === undefined && length === undefined) {
72314 buf = new Uint8Array(array)
72315 } else if (length === undefined) {
72316 buf = new Uint8Array(array, byteOffset)
72317 } else {
72318 buf = new Uint8Array(array, byteOffset, length)
72319 }
72320
72321 // Return an augmented `Uint8Array` instance
72322 buf.__proto__ = Buffer.prototype
72323 return buf
72324 }
72325
72326 function fromObject (obj) {
72327 if (Buffer.isBuffer(obj)) {
72328 var len = checked(obj.length) | 0
72329 var buf = createBuffer(len)
72330
72331 if (buf.length === 0) {
72332 return buf
72333 }
72334
72335 obj.copy(buf, 0, 0, len)
72336 return buf
72337 }
72338
72339 if (obj) {
72340 if (ArrayBuffer.isView(obj) || 'length' in obj) {
72341 if (typeof obj.length !== 'number' || isnan(obj.length)) {
72342 return createBuffer(0)
72343 }
72344 return fromArrayLike(obj)
72345 }
72346
72347 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
72348 return fromArrayLike(obj.data)
72349 }
72350 }
72351
72352 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
72353 }
72354
72355 function checked (length) {
72356 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
72357 // length is NaN (which is otherwise coerced to zero.)
72358 if (length >= K_MAX_LENGTH) {
72359 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
72360 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
72361 }
72362 return length | 0
72363 }
72364
72365 function SlowBuffer (length) {
72366 if (+length != length) { // eslint-disable-line eqeqeq
72367 length = 0
72368 }
72369 return Buffer.alloc(+length)
72370 }
72371
72372 Buffer.isBuffer = function isBuffer (b) {
72373 return b != null && b._isBuffer === true
72374 }
72375
72376 Buffer.compare = function compare (a, b) {
72377 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
72378 throw new TypeError('Arguments must be Buffers')
72379 }
72380
72381 if (a === b) return 0
72382
72383 var x = a.length
72384 var y = b.length
72385
72386 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
72387 if (a[i] !== b[i]) {
72388 x = a[i]
72389 y = b[i]
72390 break
72391 }
72392 }
72393
72394 if (x < y) return -1
72395 if (y < x) return 1
72396 return 0
72397 }
72398
72399 Buffer.isEncoding = function isEncoding (encoding) {
72400 switch (String(encoding).toLowerCase()) {
72401 case 'hex':
72402 case 'utf8':
72403 case 'utf-8':
72404 case 'ascii':
72405 case 'latin1':
72406 case 'binary':
72407 case 'base64':
72408 case 'ucs2':
72409 case 'ucs-2':
72410 case 'utf16le':
72411 case 'utf-16le':
72412 return true
72413 default:
72414 return false
72415 }
72416 }
72417
72418 Buffer.concat = function concat (list, length) {
72419 if (!Array.isArray(list)) {
72420 throw new TypeError('"list" argument must be an Array of Buffers')
72421 }
72422
72423 if (list.length === 0) {
72424 return Buffer.alloc(0)
72425 }
72426
72427 var i
72428 if (length === undefined) {
72429 length = 0
72430 for (i = 0; i < list.length; ++i) {
72431 length += list[i].length
72432 }
72433 }
72434
72435 var buffer = Buffer.allocUnsafe(length)
72436 var pos = 0
72437 for (i = 0; i < list.length; ++i) {
72438 var buf = list[i]
72439 if (!Buffer.isBuffer(buf)) {
72440 throw new TypeError('"list" argument must be an Array of Buffers')
72441 }
72442 buf.copy(buffer, pos)
72443 pos += buf.length
72444 }
72445 return buffer
72446 }
72447
72448 function byteLength (string, encoding) {
72449 if (Buffer.isBuffer(string)) {
72450 return string.length
72451 }
72452 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
72453 return string.byteLength
72454 }
72455 if (typeof string !== 'string') {
72456 string = '' + string
72457 }
72458
72459 var len = string.length
72460 if (len === 0) return 0
72461
72462 // Use a for loop to avoid recursion
72463 var loweredCase = false
72464 for (;;) {
72465 switch (encoding) {
72466 case 'ascii':
72467 case 'latin1':
72468 case 'binary':
72469 return len
72470 case 'utf8':
72471 case 'utf-8':
72472 case undefined:
72473 return utf8ToBytes(string).length
72474 case 'ucs2':
72475 case 'ucs-2':
72476 case 'utf16le':
72477 case 'utf-16le':
72478 return len * 2
72479 case 'hex':
72480 return len >>> 1
72481 case 'base64':
72482 return base64ToBytes(string).length
72483 default:
72484 if (loweredCase) return utf8ToBytes(string).length // assume utf8
72485 encoding = ('' + encoding).toLowerCase()
72486 loweredCase = true
72487 }
72488 }
72489 }
72490 Buffer.byteLength = byteLength
72491
72492 function slowToString (encoding, start, end) {
72493 var loweredCase = false
72494
72495 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
72496 // property of a typed array.
72497
72498 // This behaves neither like String nor Uint8Array in that we set start/end
72499 // to their upper/lower bounds if the value passed is out of range.
72500 // undefined is handled specially as per ECMA-262 6th Edition,
72501 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
72502 if (start === undefined || start < 0) {
72503 start = 0
72504 }
72505 // Return early if start > this.length. Done here to prevent potential uint32
72506 // coercion fail below.
72507 if (start > this.length) {
72508 return ''
72509 }
72510
72511 if (end === undefined || end > this.length) {
72512 end = this.length
72513 }
72514
72515 if (end <= 0) {
72516 return ''
72517 }
72518
72519 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
72520 end >>>= 0
72521 start >>>= 0
72522
72523 if (end <= start) {
72524 return ''
72525 }
72526
72527 if (!encoding) encoding = 'utf8'
72528
72529 while (true) {
72530 switch (encoding) {
72531 case 'hex':
72532 return hexSlice(this, start, end)
72533
72534 case 'utf8':
72535 case 'utf-8':
72536 return utf8Slice(this, start, end)
72537
72538 case 'ascii':
72539 return asciiSlice(this, start, end)
72540
72541 case 'latin1':
72542 case 'binary':
72543 return latin1Slice(this, start, end)
72544
72545 case 'base64':
72546 return base64Slice(this, start, end)
72547
72548 case 'ucs2':
72549 case 'ucs-2':
72550 case 'utf16le':
72551 case 'utf-16le':
72552 return utf16leSlice(this, start, end)
72553
72554 default:
72555 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72556 encoding = (encoding + '').toLowerCase()
72557 loweredCase = true
72558 }
72559 }
72560 }
72561
72562 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
72563 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
72564 // reliably in a browserify context because there could be multiple different
72565 // copies of the 'buffer' package in use. This method works even for Buffer
72566 // instances that were created from another copy of the `buffer` package.
72567 // See: https://github.com/feross/buffer/issues/154
72568 Buffer.prototype._isBuffer = true
72569
72570 function swap (b, n, m) {
72571 var i = b[n]
72572 b[n] = b[m]
72573 b[m] = i
72574 }
72575
72576 Buffer.prototype.swap16 = function swap16 () {
72577 var len = this.length
72578 if (len % 2 !== 0) {
72579 throw new RangeError('Buffer size must be a multiple of 16-bits')
72580 }
72581 for (var i = 0; i < len; i += 2) {
72582 swap(this, i, i + 1)
72583 }
72584 return this
72585 }
72586
72587 Buffer.prototype.swap32 = function swap32 () {
72588 var len = this.length
72589 if (len % 4 !== 0) {
72590 throw new RangeError('Buffer size must be a multiple of 32-bits')
72591 }
72592 for (var i = 0; i < len; i += 4) {
72593 swap(this, i, i + 3)
72594 swap(this, i + 1, i + 2)
72595 }
72596 return this
72597 }
72598
72599 Buffer.prototype.swap64 = function swap64 () {
72600 var len = this.length
72601 if (len % 8 !== 0) {
72602 throw new RangeError('Buffer size must be a multiple of 64-bits')
72603 }
72604 for (var i = 0; i < len; i += 8) {
72605 swap(this, i, i + 7)
72606 swap(this, i + 1, i + 6)
72607 swap(this, i + 2, i + 5)
72608 swap(this, i + 3, i + 4)
72609 }
72610 return this
72611 }
72612
72613 Buffer.prototype.toString = function toString () {
72614 var length = this.length
72615 if (length === 0) return ''
72616 if (arguments.length === 0) return utf8Slice(this, 0, length)
72617 return slowToString.apply(this, arguments)
72618 }
72619
72620 Buffer.prototype.equals = function equals (b) {
72621 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
72622 if (this === b) return true
72623 return Buffer.compare(this, b) === 0
72624 }
72625
72626 Buffer.prototype.inspect = function inspect () {
72627 var str = ''
72628 var max = exports.INSPECT_MAX_BYTES
72629 if (this.length > 0) {
72630 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
72631 if (this.length > max) str += ' ... '
72632 }
72633 return '<Buffer ' + str + '>'
72634 }
72635
72636 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
72637 if (!Buffer.isBuffer(target)) {
72638 throw new TypeError('Argument must be a Buffer')
72639 }
72640
72641 if (start === undefined) {
72642 start = 0
72643 }
72644 if (end === undefined) {
72645 end = target ? target.length : 0
72646 }
72647 if (thisStart === undefined) {
72648 thisStart = 0
72649 }
72650 if (thisEnd === undefined) {
72651 thisEnd = this.length
72652 }
72653
72654 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
72655 throw new RangeError('out of range index')
72656 }
72657
72658 if (thisStart >= thisEnd && start >= end) {
72659 return 0
72660 }
72661 if (thisStart >= thisEnd) {
72662 return -1
72663 }
72664 if (start >= end) {
72665 return 1
72666 }
72667
72668 start >>>= 0
72669 end >>>= 0
72670 thisStart >>>= 0
72671 thisEnd >>>= 0
72672
72673 if (this === target) return 0
72674
72675 var x = thisEnd - thisStart
72676 var y = end - start
72677 var len = Math.min(x, y)
72678
72679 var thisCopy = this.slice(thisStart, thisEnd)
72680 var targetCopy = target.slice(start, end)
72681
72682 for (var i = 0; i < len; ++i) {
72683 if (thisCopy[i] !== targetCopy[i]) {
72684 x = thisCopy[i]
72685 y = targetCopy[i]
72686 break
72687 }
72688 }
72689
72690 if (x < y) return -1
72691 if (y < x) return 1
72692 return 0
72693 }
72694
72695 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
72696 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
72697 //
72698 // Arguments:
72699 // - buffer - a Buffer to search
72700 // - val - a string, Buffer, or number
72701 // - byteOffset - an index into `buffer`; will be clamped to an int32
72702 // - encoding - an optional encoding, relevant is val is a string
72703 // - dir - true for indexOf, false for lastIndexOf
72704 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
72705 // Empty buffer means no match
72706 if (buffer.length === 0) return -1
72707
72708 // Normalize byteOffset
72709 if (typeof byteOffset === 'string') {
72710 encoding = byteOffset
72711 byteOffset = 0
72712 } else if (byteOffset > 0x7fffffff) {
72713 byteOffset = 0x7fffffff
72714 } else if (byteOffset < -0x80000000) {
72715 byteOffset = -0x80000000
72716 }
72717 byteOffset = +byteOffset // Coerce to Number.
72718 if (isNaN(byteOffset)) {
72719 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
72720 byteOffset = dir ? 0 : (buffer.length - 1)
72721 }
72722
72723 // Normalize byteOffset: negative offsets start from the end of the buffer
72724 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
72725 if (byteOffset >= buffer.length) {
72726 if (dir) return -1
72727 else byteOffset = buffer.length - 1
72728 } else if (byteOffset < 0) {
72729 if (dir) byteOffset = 0
72730 else return -1
72731 }
72732
72733 // Normalize val
72734 if (typeof val === 'string') {
72735 val = Buffer.from(val, encoding)
72736 }
72737
72738 // Finally, search either indexOf (if dir is true) or lastIndexOf
72739 if (Buffer.isBuffer(val)) {
72740 // Special case: looking for empty string/buffer always fails
72741 if (val.length === 0) {
72742 return -1
72743 }
72744 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
72745 } else if (typeof val === 'number') {
72746 val = val & 0xFF // Search for a byte value [0-255]
72747 if (typeof Uint8Array.prototype.indexOf === 'function') {
72748 if (dir) {
72749 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
72750 } else {
72751 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
72752 }
72753 }
72754 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
72755 }
72756
72757 throw new TypeError('val must be string, number or Buffer')
72758 }
72759
72760 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
72761 var indexSize = 1
72762 var arrLength = arr.length
72763 var valLength = val.length
72764
72765 if (encoding !== undefined) {
72766 encoding = String(encoding).toLowerCase()
72767 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
72768 encoding === 'utf16le' || encoding === 'utf-16le') {
72769 if (arr.length < 2 || val.length < 2) {
72770 return -1
72771 }
72772 indexSize = 2
72773 arrLength /= 2
72774 valLength /= 2
72775 byteOffset /= 2
72776 }
72777 }
72778
72779 function read (buf, i) {
72780 if (indexSize === 1) {
72781 return buf[i]
72782 } else {
72783 return buf.readUInt16BE(i * indexSize)
72784 }
72785 }
72786
72787 var i
72788 if (dir) {
72789 var foundIndex = -1
72790 for (i = byteOffset; i < arrLength; i++) {
72791 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
72792 if (foundIndex === -1) foundIndex = i
72793 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
72794 } else {
72795 if (foundIndex !== -1) i -= i - foundIndex
72796 foundIndex = -1
72797 }
72798 }
72799 } else {
72800 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
72801 for (i = byteOffset; i >= 0; i--) {
72802 var found = true
72803 for (var j = 0; j < valLength; j++) {
72804 if (read(arr, i + j) !== read(val, j)) {
72805 found = false
72806 break
72807 }
72808 }
72809 if (found) return i
72810 }
72811 }
72812
72813 return -1
72814 }
72815
72816 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
72817 return this.indexOf(val, byteOffset, encoding) !== -1
72818 }
72819
72820 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
72821 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
72822 }
72823
72824 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
72825 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
72826 }
72827
72828 function hexWrite (buf, string, offset, length) {
72829 offset = Number(offset) || 0
72830 var remaining = buf.length - offset
72831 if (!length) {
72832 length = remaining
72833 } else {
72834 length = Number(length)
72835 if (length > remaining) {
72836 length = remaining
72837 }
72838 }
72839
72840 // must be an even number of digits
72841 var strLen = string.length
72842 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
72843
72844 if (length > strLen / 2) {
72845 length = strLen / 2
72846 }
72847 for (var i = 0; i < length; ++i) {
72848 var parsed = parseInt(string.substr(i * 2, 2), 16)
72849 if (isNaN(parsed)) return i
72850 buf[offset + i] = parsed
72851 }
72852 return i
72853 }
72854
72855 function utf8Write (buf, string, offset, length) {
72856 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
72857 }
72858
72859 function asciiWrite (buf, string, offset, length) {
72860 return blitBuffer(asciiToBytes(string), buf, offset, length)
72861 }
72862
72863 function latin1Write (buf, string, offset, length) {
72864 return asciiWrite(buf, string, offset, length)
72865 }
72866
72867 function base64Write (buf, string, offset, length) {
72868 return blitBuffer(base64ToBytes(string), buf, offset, length)
72869 }
72870
72871 function ucs2Write (buf, string, offset, length) {
72872 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
72873 }
72874
72875 Buffer.prototype.write = function write (string, offset, length, encoding) {
72876 // Buffer#write(string)
72877 if (offset === undefined) {
72878 encoding = 'utf8'
72879 length = this.length
72880 offset = 0
72881 // Buffer#write(string, encoding)
72882 } else if (length === undefined && typeof offset === 'string') {
72883 encoding = offset
72884 length = this.length
72885 offset = 0
72886 // Buffer#write(string, offset[, length][, encoding])
72887 } else if (isFinite(offset)) {
72888 offset = offset >>> 0
72889 if (isFinite(length)) {
72890 length = length >>> 0
72891 if (encoding === undefined) encoding = 'utf8'
72892 } else {
72893 encoding = length
72894 length = undefined
72895 }
72896 } else {
72897 throw new Error(
72898 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
72899 )
72900 }
72901
72902 var remaining = this.length - offset
72903 if (length === undefined || length > remaining) length = remaining
72904
72905 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
72906 throw new RangeError('Attempt to write outside buffer bounds')
72907 }
72908
72909 if (!encoding) encoding = 'utf8'
72910
72911 var loweredCase = false
72912 for (;;) {
72913 switch (encoding) {
72914 case 'hex':
72915 return hexWrite(this, string, offset, length)
72916
72917 case 'utf8':
72918 case 'utf-8':
72919 return utf8Write(this, string, offset, length)
72920
72921 case 'ascii':
72922 return asciiWrite(this, string, offset, length)
72923
72924 case 'latin1':
72925 case 'binary':
72926 return latin1Write(this, string, offset, length)
72927
72928 case 'base64':
72929 // Warning: maxLength not taken into account in base64Write
72930 return base64Write(this, string, offset, length)
72931
72932 case 'ucs2':
72933 case 'ucs-2':
72934 case 'utf16le':
72935 case 'utf-16le':
72936 return ucs2Write(this, string, offset, length)
72937
72938 default:
72939 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
72940 encoding = ('' + encoding).toLowerCase()
72941 loweredCase = true
72942 }
72943 }
72944 }
72945
72946 Buffer.prototype.toJSON = function toJSON () {
72947 return {
72948 type: 'Buffer',
72949 data: Array.prototype.slice.call(this._arr || this, 0)
72950 }
72951 }
72952
72953 function base64Slice (buf, start, end) {
72954 if (start === 0 && end === buf.length) {
72955 return base64.fromByteArray(buf)
72956 } else {
72957 return base64.fromByteArray(buf.slice(start, end))
72958 }
72959 }
72960
72961 function utf8Slice (buf, start, end) {
72962 end = Math.min(buf.length, end)
72963 var res = []
72964
72965 var i = start
72966 while (i < end) {
72967 var firstByte = buf[i]
72968 var codePoint = null
72969 var bytesPerSequence = (firstByte > 0xEF) ? 4
72970 : (firstByte > 0xDF) ? 3
72971 : (firstByte > 0xBF) ? 2
72972 : 1
72973
72974 if (i + bytesPerSequence <= end) {
72975 var secondByte, thirdByte, fourthByte, tempCodePoint
72976
72977 switch (bytesPerSequence) {
72978 case 1:
72979 if (firstByte < 0x80) {
72980 codePoint = firstByte
72981 }
72982 break
72983 case 2:
72984 secondByte = buf[i + 1]
72985 if ((secondByte & 0xC0) === 0x80) {
72986 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
72987 if (tempCodePoint > 0x7F) {
72988 codePoint = tempCodePoint
72989 }
72990 }
72991 break
72992 case 3:
72993 secondByte = buf[i + 1]
72994 thirdByte = buf[i + 2]
72995 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
72996 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
72997 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
72998 codePoint = tempCodePoint
72999 }
73000 }
73001 break
73002 case 4:
73003 secondByte = buf[i + 1]
73004 thirdByte = buf[i + 2]
73005 fourthByte = buf[i + 3]
73006 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
73007 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
73008 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
73009 codePoint = tempCodePoint
73010 }
73011 }
73012 }
73013 }
73014
73015 if (codePoint === null) {
73016 // we did not generate a valid codePoint so insert a
73017 // replacement char (U+FFFD) and advance only 1 byte
73018 codePoint = 0xFFFD
73019 bytesPerSequence = 1
73020 } else if (codePoint > 0xFFFF) {
73021 // encode to utf16 (surrogate pair dance)
73022 codePoint -= 0x10000
73023 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
73024 codePoint = 0xDC00 | codePoint & 0x3FF
73025 }
73026
73027 res.push(codePoint)
73028 i += bytesPerSequence
73029 }
73030
73031 return decodeCodePointsArray(res)
73032 }
73033
73034 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
73035 // the lowest limit is Chrome, with 0x10000 args.
73036 // We go 1 magnitude less, for safety
73037 var MAX_ARGUMENTS_LENGTH = 0x1000
73038
73039 function decodeCodePointsArray (codePoints) {
73040 var len = codePoints.length
73041 if (len <= MAX_ARGUMENTS_LENGTH) {
73042 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
73043 }
73044
73045 // Decode in chunks to avoid "call stack size exceeded".
73046 var res = ''
73047 var i = 0
73048 while (i < len) {
73049 res += String.fromCharCode.apply(
73050 String,
73051 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
73052 )
73053 }
73054 return res
73055 }
73056
73057 function asciiSlice (buf, start, end) {
73058 var ret = ''
73059 end = Math.min(buf.length, end)
73060
73061 for (var i = start; i < end; ++i) {
73062 ret += String.fromCharCode(buf[i] & 0x7F)
73063 }
73064 return ret
73065 }
73066
73067 function latin1Slice (buf, start, end) {
73068 var ret = ''
73069 end = Math.min(buf.length, end)
73070
73071 for (var i = start; i < end; ++i) {
73072 ret += String.fromCharCode(buf[i])
73073 }
73074 return ret
73075 }
73076
73077 function hexSlice (buf, start, end) {
73078 var len = buf.length
73079
73080 if (!start || start < 0) start = 0
73081 if (!end || end < 0 || end > len) end = len
73082
73083 var out = ''
73084 for (var i = start; i < end; ++i) {
73085 out += toHex(buf[i])
73086 }
73087 return out
73088 }
73089
73090 function utf16leSlice (buf, start, end) {
73091 var bytes = buf.slice(start, end)
73092 var res = ''
73093 for (var i = 0; i < bytes.length; i += 2) {
73094 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
73095 }
73096 return res
73097 }
73098
73099 Buffer.prototype.slice = function slice (start, end) {
73100 var len = this.length
73101 start = ~~start
73102 end = end === undefined ? len : ~~end
73103
73104 if (start < 0) {
73105 start += len
73106 if (start < 0) start = 0
73107 } else if (start > len) {
73108 start = len
73109 }
73110
73111 if (end < 0) {
73112 end += len
73113 if (end < 0) end = 0
73114 } else if (end > len) {
73115 end = len
73116 }
73117
73118 if (end < start) end = start
73119
73120 var newBuf = this.subarray(start, end)
73121 // Return an augmented `Uint8Array` instance
73122 newBuf.__proto__ = Buffer.prototype
73123 return newBuf
73124 }
73125
73126 /*
73127 * Need to make sure that buffer isn't trying to write out of bounds.
73128 */
73129 function checkOffset (offset, ext, length) {
73130 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
73131 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
73132 }
73133
73134 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
73135 offset = offset >>> 0
73136 byteLength = byteLength >>> 0
73137 if (!noAssert) checkOffset(offset, byteLength, this.length)
73138
73139 var val = this[offset]
73140 var mul = 1
73141 var i = 0
73142 while (++i < byteLength && (mul *= 0x100)) {
73143 val += this[offset + i] * mul
73144 }
73145
73146 return val
73147 }
73148
73149 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
73150 offset = offset >>> 0
73151 byteLength = byteLength >>> 0
73152 if (!noAssert) {
73153 checkOffset(offset, byteLength, this.length)
73154 }
73155
73156 var val = this[offset + --byteLength]
73157 var mul = 1
73158 while (byteLength > 0 && (mul *= 0x100)) {
73159 val += this[offset + --byteLength] * mul
73160 }
73161
73162 return val
73163 }
73164
73165 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
73166 offset = offset >>> 0
73167 if (!noAssert) checkOffset(offset, 1, this.length)
73168 return this[offset]
73169 }
73170
73171 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
73172 offset = offset >>> 0
73173 if (!noAssert) checkOffset(offset, 2, this.length)
73174 return this[offset] | (this[offset + 1] << 8)
73175 }
73176
73177 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
73178 offset = offset >>> 0
73179 if (!noAssert) checkOffset(offset, 2, this.length)
73180 return (this[offset] << 8) | this[offset + 1]
73181 }
73182
73183 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
73184 offset = offset >>> 0
73185 if (!noAssert) checkOffset(offset, 4, this.length)
73186
73187 return ((this[offset]) |
73188 (this[offset + 1] << 8) |
73189 (this[offset + 2] << 16)) +
73190 (this[offset + 3] * 0x1000000)
73191 }
73192
73193 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
73194 offset = offset >>> 0
73195 if (!noAssert) checkOffset(offset, 4, this.length)
73196
73197 return (this[offset] * 0x1000000) +
73198 ((this[offset + 1] << 16) |
73199 (this[offset + 2] << 8) |
73200 this[offset + 3])
73201 }
73202
73203 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
73204 offset = offset >>> 0
73205 byteLength = byteLength >>> 0
73206 if (!noAssert) checkOffset(offset, byteLength, this.length)
73207
73208 var val = this[offset]
73209 var mul = 1
73210 var i = 0
73211 while (++i < byteLength && (mul *= 0x100)) {
73212 val += this[offset + i] * mul
73213 }
73214 mul *= 0x80
73215
73216 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73217
73218 return val
73219 }
73220
73221 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
73222 offset = offset >>> 0
73223 byteLength = byteLength >>> 0
73224 if (!noAssert) checkOffset(offset, byteLength, this.length)
73225
73226 var i = byteLength
73227 var mul = 1
73228 var val = this[offset + --i]
73229 while (i > 0 && (mul *= 0x100)) {
73230 val += this[offset + --i] * mul
73231 }
73232 mul *= 0x80
73233
73234 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
73235
73236 return val
73237 }
73238
73239 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
73240 offset = offset >>> 0
73241 if (!noAssert) checkOffset(offset, 1, this.length)
73242 if (!(this[offset] & 0x80)) return (this[offset])
73243 return ((0xff - this[offset] + 1) * -1)
73244 }
73245
73246 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
73247 offset = offset >>> 0
73248 if (!noAssert) checkOffset(offset, 2, this.length)
73249 var val = this[offset] | (this[offset + 1] << 8)
73250 return (val & 0x8000) ? val | 0xFFFF0000 : val
73251 }
73252
73253 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
73254 offset = offset >>> 0
73255 if (!noAssert) checkOffset(offset, 2, this.length)
73256 var val = this[offset + 1] | (this[offset] << 8)
73257 return (val & 0x8000) ? val | 0xFFFF0000 : val
73258 }
73259
73260 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
73261 offset = offset >>> 0
73262 if (!noAssert) checkOffset(offset, 4, this.length)
73263
73264 return (this[offset]) |
73265 (this[offset + 1] << 8) |
73266 (this[offset + 2] << 16) |
73267 (this[offset + 3] << 24)
73268 }
73269
73270 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
73271 offset = offset >>> 0
73272 if (!noAssert) checkOffset(offset, 4, this.length)
73273
73274 return (this[offset] << 24) |
73275 (this[offset + 1] << 16) |
73276 (this[offset + 2] << 8) |
73277 (this[offset + 3])
73278 }
73279
73280 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
73281 offset = offset >>> 0
73282 if (!noAssert) checkOffset(offset, 4, this.length)
73283 return ieee754.read(this, offset, true, 23, 4)
73284 }
73285
73286 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
73287 offset = offset >>> 0
73288 if (!noAssert) checkOffset(offset, 4, this.length)
73289 return ieee754.read(this, offset, false, 23, 4)
73290 }
73291
73292 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
73293 offset = offset >>> 0
73294 if (!noAssert) checkOffset(offset, 8, this.length)
73295 return ieee754.read(this, offset, true, 52, 8)
73296 }
73297
73298 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
73299 offset = offset >>> 0
73300 if (!noAssert) checkOffset(offset, 8, this.length)
73301 return ieee754.read(this, offset, false, 52, 8)
73302 }
73303
73304 function checkInt (buf, value, offset, ext, max, min) {
73305 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
73306 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
73307 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73308 }
73309
73310 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
73311 value = +value
73312 offset = offset >>> 0
73313 byteLength = byteLength >>> 0
73314 if (!noAssert) {
73315 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73316 checkInt(this, value, offset, byteLength, maxBytes, 0)
73317 }
73318
73319 var mul = 1
73320 var i = 0
73321 this[offset] = value & 0xFF
73322 while (++i < byteLength && (mul *= 0x100)) {
73323 this[offset + i] = (value / mul) & 0xFF
73324 }
73325
73326 return offset + byteLength
73327 }
73328
73329 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
73330 value = +value
73331 offset = offset >>> 0
73332 byteLength = byteLength >>> 0
73333 if (!noAssert) {
73334 var maxBytes = Math.pow(2, 8 * byteLength) - 1
73335 checkInt(this, value, offset, byteLength, maxBytes, 0)
73336 }
73337
73338 var i = byteLength - 1
73339 var mul = 1
73340 this[offset + i] = value & 0xFF
73341 while (--i >= 0 && (mul *= 0x100)) {
73342 this[offset + i] = (value / mul) & 0xFF
73343 }
73344
73345 return offset + byteLength
73346 }
73347
73348 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
73349 value = +value
73350 offset = offset >>> 0
73351 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
73352 this[offset] = (value & 0xff)
73353 return offset + 1
73354 }
73355
73356 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
73357 value = +value
73358 offset = offset >>> 0
73359 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73360 this[offset] = (value & 0xff)
73361 this[offset + 1] = (value >>> 8)
73362 return offset + 2
73363 }
73364
73365 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
73366 value = +value
73367 offset = offset >>> 0
73368 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
73369 this[offset] = (value >>> 8)
73370 this[offset + 1] = (value & 0xff)
73371 return offset + 2
73372 }
73373
73374 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
73375 value = +value
73376 offset = offset >>> 0
73377 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73378 this[offset + 3] = (value >>> 24)
73379 this[offset + 2] = (value >>> 16)
73380 this[offset + 1] = (value >>> 8)
73381 this[offset] = (value & 0xff)
73382 return offset + 4
73383 }
73384
73385 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
73386 value = +value
73387 offset = offset >>> 0
73388 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
73389 this[offset] = (value >>> 24)
73390 this[offset + 1] = (value >>> 16)
73391 this[offset + 2] = (value >>> 8)
73392 this[offset + 3] = (value & 0xff)
73393 return offset + 4
73394 }
73395
73396 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
73397 value = +value
73398 offset = offset >>> 0
73399 if (!noAssert) {
73400 var limit = Math.pow(2, (8 * byteLength) - 1)
73401
73402 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73403 }
73404
73405 var i = 0
73406 var mul = 1
73407 var sub = 0
73408 this[offset] = value & 0xFF
73409 while (++i < byteLength && (mul *= 0x100)) {
73410 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
73411 sub = 1
73412 }
73413 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73414 }
73415
73416 return offset + byteLength
73417 }
73418
73419 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
73420 value = +value
73421 offset = offset >>> 0
73422 if (!noAssert) {
73423 var limit = Math.pow(2, (8 * byteLength) - 1)
73424
73425 checkInt(this, value, offset, byteLength, limit - 1, -limit)
73426 }
73427
73428 var i = byteLength - 1
73429 var mul = 1
73430 var sub = 0
73431 this[offset + i] = value & 0xFF
73432 while (--i >= 0 && (mul *= 0x100)) {
73433 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
73434 sub = 1
73435 }
73436 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
73437 }
73438
73439 return offset + byteLength
73440 }
73441
73442 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
73443 value = +value
73444 offset = offset >>> 0
73445 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
73446 if (value < 0) value = 0xff + value + 1
73447 this[offset] = (value & 0xff)
73448 return offset + 1
73449 }
73450
73451 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
73452 value = +value
73453 offset = offset >>> 0
73454 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73455 this[offset] = (value & 0xff)
73456 this[offset + 1] = (value >>> 8)
73457 return offset + 2
73458 }
73459
73460 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
73461 value = +value
73462 offset = offset >>> 0
73463 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
73464 this[offset] = (value >>> 8)
73465 this[offset + 1] = (value & 0xff)
73466 return offset + 2
73467 }
73468
73469 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
73470 value = +value
73471 offset = offset >>> 0
73472 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73473 this[offset] = (value & 0xff)
73474 this[offset + 1] = (value >>> 8)
73475 this[offset + 2] = (value >>> 16)
73476 this[offset + 3] = (value >>> 24)
73477 return offset + 4
73478 }
73479
73480 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
73481 value = +value
73482 offset = offset >>> 0
73483 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
73484 if (value < 0) value = 0xffffffff + value + 1
73485 this[offset] = (value >>> 24)
73486 this[offset + 1] = (value >>> 16)
73487 this[offset + 2] = (value >>> 8)
73488 this[offset + 3] = (value & 0xff)
73489 return offset + 4
73490 }
73491
73492 function checkIEEE754 (buf, value, offset, ext, max, min) {
73493 if (offset + ext > buf.length) throw new RangeError('Index out of range')
73494 if (offset < 0) throw new RangeError('Index out of range')
73495 }
73496
73497 function writeFloat (buf, value, offset, littleEndian, noAssert) {
73498 value = +value
73499 offset = offset >>> 0
73500 if (!noAssert) {
73501 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
73502 }
73503 ieee754.write(buf, value, offset, littleEndian, 23, 4)
73504 return offset + 4
73505 }
73506
73507 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
73508 return writeFloat(this, value, offset, true, noAssert)
73509 }
73510
73511 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
73512 return writeFloat(this, value, offset, false, noAssert)
73513 }
73514
73515 function writeDouble (buf, value, offset, littleEndian, noAssert) {
73516 value = +value
73517 offset = offset >>> 0
73518 if (!noAssert) {
73519 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
73520 }
73521 ieee754.write(buf, value, offset, littleEndian, 52, 8)
73522 return offset + 8
73523 }
73524
73525 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
73526 return writeDouble(this, value, offset, true, noAssert)
73527 }
73528
73529 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
73530 return writeDouble(this, value, offset, false, noAssert)
73531 }
73532
73533 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
73534 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
73535 if (!start) start = 0
73536 if (!end && end !== 0) end = this.length
73537 if (targetStart >= target.length) targetStart = target.length
73538 if (!targetStart) targetStart = 0
73539 if (end > 0 && end < start) end = start
73540
73541 // Copy 0 bytes; we're done
73542 if (end === start) return 0
73543 if (target.length === 0 || this.length === 0) return 0
73544
73545 // Fatal error conditions
73546 if (targetStart < 0) {
73547 throw new RangeError('targetStart out of bounds')
73548 }
73549 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
73550 if (end < 0) throw new RangeError('sourceEnd out of bounds')
73551
73552 // Are we oob?
73553 if (end > this.length) end = this.length
73554 if (target.length - targetStart < end - start) {
73555 end = target.length - targetStart + start
73556 }
73557
73558 var len = end - start
73559 var i
73560
73561 if (this === target && start < targetStart && targetStart < end) {
73562 // descending copy from end
73563 for (i = len - 1; i >= 0; --i) {
73564 target[i + targetStart] = this[i + start]
73565 }
73566 } else if (len < 1000) {
73567 // ascending copy from start
73568 for (i = 0; i < len; ++i) {
73569 target[i + targetStart] = this[i + start]
73570 }
73571 } else {
73572 Uint8Array.prototype.set.call(
73573 target,
73574 this.subarray(start, start + len),
73575 targetStart
73576 )
73577 }
73578
73579 return len
73580 }
73581
73582 // Usage:
73583 // buffer.fill(number[, offset[, end]])
73584 // buffer.fill(buffer[, offset[, end]])
73585 // buffer.fill(string[, offset[, end]][, encoding])
73586 Buffer.prototype.fill = function fill (val, start, end, encoding) {
73587 // Handle string cases:
73588 if (typeof val === 'string') {
73589 if (typeof start === 'string') {
73590 encoding = start
73591 start = 0
73592 end = this.length
73593 } else if (typeof end === 'string') {
73594 encoding = end
73595 end = this.length
73596 }
73597 if (val.length === 1) {
73598 var code = val.charCodeAt(0)
73599 if (code < 256) {
73600 val = code
73601 }
73602 }
73603 if (encoding !== undefined && typeof encoding !== 'string') {
73604 throw new TypeError('encoding must be a string')
73605 }
73606 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
73607 throw new TypeError('Unknown encoding: ' + encoding)
73608 }
73609 } else if (typeof val === 'number') {
73610 val = val & 255
73611 }
73612
73613 // Invalid ranges are not set to a default, so can range check early.
73614 if (start < 0 || this.length < start || this.length < end) {
73615 throw new RangeError('Out of range index')
73616 }
73617
73618 if (end <= start) {
73619 return this
73620 }
73621
73622 start = start >>> 0
73623 end = end === undefined ? this.length : end >>> 0
73624
73625 if (!val) val = 0
73626
73627 var i
73628 if (typeof val === 'number') {
73629 for (i = start; i < end; ++i) {
73630 this[i] = val
73631 }
73632 } else {
73633 var bytes = Buffer.isBuffer(val)
73634 ? val
73635 : new Buffer(val, encoding)
73636 var len = bytes.length
73637 for (i = 0; i < end - start; ++i) {
73638 this[i + start] = bytes[i % len]
73639 }
73640 }
73641
73642 return this
73643 }
73644
73645 // HELPER FUNCTIONS
73646 // ================
73647
73648 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
73649
73650 function base64clean (str) {
73651 // Node strips out invalid characters like \n and \t from the string, base64-js does not
73652 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
73653 // Node converts strings with length < 2 to ''
73654 if (str.length < 2) return ''
73655 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
73656 while (str.length % 4 !== 0) {
73657 str = str + '='
73658 }
73659 return str
73660 }
73661
73662 function stringtrim (str) {
73663 if (str.trim) return str.trim()
73664 return str.replace(/^\s+|\s+$/g, '')
73665 }
73666
73667 function toHex (n) {
73668 if (n < 16) return '0' + n.toString(16)
73669 return n.toString(16)
73670 }
73671
73672 function utf8ToBytes (string, units) {
73673 units = units || Infinity
73674 var codePoint
73675 var length = string.length
73676 var leadSurrogate = null
73677 var bytes = []
73678
73679 for (var i = 0; i < length; ++i) {
73680 codePoint = string.charCodeAt(i)
73681
73682 // is surrogate component
73683 if (codePoint > 0xD7FF && codePoint < 0xE000) {
73684 // last char was a lead
73685 if (!leadSurrogate) {
73686 // no lead yet
73687 if (codePoint > 0xDBFF) {
73688 // unexpected trail
73689 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73690 continue
73691 } else if (i + 1 === length) {
73692 // unpaired lead
73693 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73694 continue
73695 }
73696
73697 // valid lead
73698 leadSurrogate = codePoint
73699
73700 continue
73701 }
73702
73703 // 2 leads in a row
73704 if (codePoint < 0xDC00) {
73705 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73706 leadSurrogate = codePoint
73707 continue
73708 }
73709
73710 // valid surrogate pair
73711 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
73712 } else if (leadSurrogate) {
73713 // valid bmp char, but last char was a lead
73714 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
73715 }
73716
73717 leadSurrogate = null
73718
73719 // encode utf8
73720 if (codePoint < 0x80) {
73721 if ((units -= 1) < 0) break
73722 bytes.push(codePoint)
73723 } else if (codePoint < 0x800) {
73724 if ((units -= 2) < 0) break
73725 bytes.push(
73726 codePoint >> 0x6 | 0xC0,
73727 codePoint & 0x3F | 0x80
73728 )
73729 } else if (codePoint < 0x10000) {
73730 if ((units -= 3) < 0) break
73731 bytes.push(
73732 codePoint >> 0xC | 0xE0,
73733 codePoint >> 0x6 & 0x3F | 0x80,
73734 codePoint & 0x3F | 0x80
73735 )
73736 } else if (codePoint < 0x110000) {
73737 if ((units -= 4) < 0) break
73738 bytes.push(
73739 codePoint >> 0x12 | 0xF0,
73740 codePoint >> 0xC & 0x3F | 0x80,
73741 codePoint >> 0x6 & 0x3F | 0x80,
73742 codePoint & 0x3F | 0x80
73743 )
73744 } else {
73745 throw new Error('Invalid code point')
73746 }
73747 }
73748
73749 return bytes
73750 }
73751
73752 function asciiToBytes (str) {
73753 var byteArray = []
73754 for (var i = 0; i < str.length; ++i) {
73755 // Node's code seems to be doing this and not & 0x7F..
73756 byteArray.push(str.charCodeAt(i) & 0xFF)
73757 }
73758 return byteArray
73759 }
73760
73761 function utf16leToBytes (str, units) {
73762 var c, hi, lo
73763 var byteArray = []
73764 for (var i = 0; i < str.length; ++i) {
73765 if ((units -= 2) < 0) break
73766
73767 c = str.charCodeAt(i)
73768 hi = c >> 8
73769 lo = c % 256
73770 byteArray.push(lo)
73771 byteArray.push(hi)
73772 }
73773
73774 return byteArray
73775 }
73776
73777 function base64ToBytes (str) {
73778 return base64.toByteArray(base64clean(str))
73779 }
73780
73781 function blitBuffer (src, dst, offset, length) {
73782 for (var i = 0; i < length; ++i) {
73783 if ((i + offset >= dst.length) || (i >= src.length)) break
73784 dst[i + offset] = src[i]
73785 }
73786 return i
73787 }
73788
73789 function isnan (val) {
73790 return val !== val // eslint-disable-line no-self-compare
73791 }
73792
73793 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
73794 (function (Buffer){
73795 // Copyright Joyent, Inc. and other Node contributors.
73796 //
73797 // Permission is hereby granted, free of charge, to any person obtaining a
73798 // copy of this software and associated documentation files (the
73799 // "Software"), to deal in the Software without restriction, including
73800 // without limitation the rights to use, copy, modify, merge, publish,
73801 // distribute, sublicense, and/or sell copies of the Software, and to permit
73802 // persons to whom the Software is furnished to do so, subject to the
73803 // following conditions:
73804 //
73805 // The above copyright notice and this permission notice shall be included
73806 // in all copies or substantial portions of the Software.
73807 //
73808 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73809 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73810 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73811 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73812 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73813 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73814 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73815
73816 // NOTE: These type checking functions intentionally don't use `instanceof`
73817 // because it is fragile and can be easily faked with `Object.create()`.
73818
73819 function isArray(arg) {
73820 if (Array.isArray) {
73821 return Array.isArray(arg);
73822 }
73823 return objectToString(arg) === '[object Array]';
73824 }
73825 exports.isArray = isArray;
73826
73827 function isBoolean(arg) {
73828 return typeof arg === 'boolean';
73829 }
73830 exports.isBoolean = isBoolean;
73831
73832 function isNull(arg) {
73833 return arg === null;
73834 }
73835 exports.isNull = isNull;
73836
73837 function isNullOrUndefined(arg) {
73838 return arg == null;
73839 }
73840 exports.isNullOrUndefined = isNullOrUndefined;
73841
73842 function isNumber(arg) {
73843 return typeof arg === 'number';
73844 }
73845 exports.isNumber = isNumber;
73846
73847 function isString(arg) {
73848 return typeof arg === 'string';
73849 }
73850 exports.isString = isString;
73851
73852 function isSymbol(arg) {
73853 return typeof arg === 'symbol';
73854 }
73855 exports.isSymbol = isSymbol;
73856
73857 function isUndefined(arg) {
73858 return arg === void 0;
73859 }
73860 exports.isUndefined = isUndefined;
73861
73862 function isRegExp(re) {
73863 return objectToString(re) === '[object RegExp]';
73864 }
73865 exports.isRegExp = isRegExp;
73866
73867 function isObject(arg) {
73868 return typeof arg === 'object' && arg !== null;
73869 }
73870 exports.isObject = isObject;
73871
73872 function isDate(d) {
73873 return objectToString(d) === '[object Date]';
73874 }
73875 exports.isDate = isDate;
73876
73877 function isError(e) {
73878 return (objectToString(e) === '[object Error]' || e instanceof Error);
73879 }
73880 exports.isError = isError;
73881
73882 function isFunction(arg) {
73883 return typeof arg === 'function';
73884 }
73885 exports.isFunction = isFunction;
73886
73887 function isPrimitive(arg) {
73888 return arg === null ||
73889 typeof arg === 'boolean' ||
73890 typeof arg === 'number' ||
73891 typeof arg === 'string' ||
73892 typeof arg === 'symbol' || // ES6 symbol
73893 typeof arg === 'undefined';
73894 }
73895 exports.isPrimitive = isPrimitive;
73896
73897 exports.isBuffer = Buffer.isBuffer;
73898
73899 function objectToString(o) {
73900 return Object.prototype.toString.call(o);
73901 }
73902
73903 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
73904 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
73905 // Copyright Joyent, Inc. and other Node contributors.
73906 //
73907 // Permission is hereby granted, free of charge, to any person obtaining a
73908 // copy of this software and associated documentation files (the
73909 // "Software"), to deal in the Software without restriction, including
73910 // without limitation the rights to use, copy, modify, merge, publish,
73911 // distribute, sublicense, and/or sell copies of the Software, and to permit
73912 // persons to whom the Software is furnished to do so, subject to the
73913 // following conditions:
73914 //
73915 // The above copyright notice and this permission notice shall be included
73916 // in all copies or substantial portions of the Software.
73917 //
73918 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
73919 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
73920 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
73921 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
73922 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
73923 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
73924 // USE OR OTHER DEALINGS IN THE SOFTWARE.
73925
73926 function EventEmitter() {
73927 this._events = this._events || {};
73928 this._maxListeners = this._maxListeners || undefined;
73929 }
73930 module.exports = EventEmitter;
73931
73932 // Backwards-compat with node 0.10.x
73933 EventEmitter.EventEmitter = EventEmitter;
73934
73935 EventEmitter.prototype._events = undefined;
73936 EventEmitter.prototype._maxListeners = undefined;
73937
73938 // By default EventEmitters will print a warning if more than 10 listeners are
73939 // added to it. This is a useful default which helps finding memory leaks.
73940 EventEmitter.defaultMaxListeners = 10;
73941
73942 // Obviously not all Emitters should be limited to 10. This function allows
73943 // that to be increased. Set to zero for unlimited.
73944 EventEmitter.prototype.setMaxListeners = function(n) {
73945 if (!isNumber(n) || n < 0 || isNaN(n))
73946 throw TypeError('n must be a positive number');
73947 this._maxListeners = n;
73948 return this;
73949 };
73950
73951 EventEmitter.prototype.emit = function(type) {
73952 var er, handler, len, args, i, listeners;
73953
73954 if (!this._events)
73955 this._events = {};
73956
73957 // If there is no 'error' event listener then throw.
73958 if (type === 'error') {
73959 if (!this._events.error ||
73960 (isObject(this._events.error) && !this._events.error.length)) {
73961 er = arguments[1];
73962 if (er instanceof Error) {
73963 throw er; // Unhandled 'error' event
73964 } else {
73965 // At least give some kind of context to the user
73966 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
73967 err.context = er;
73968 throw err;
73969 }
73970 }
73971 }
73972
73973 handler = this._events[type];
73974
73975 if (isUndefined(handler))
73976 return false;
73977
73978 if (isFunction(handler)) {
73979 switch (arguments.length) {
73980 // fast cases
73981 case 1:
73982 handler.call(this);
73983 break;
73984 case 2:
73985 handler.call(this, arguments[1]);
73986 break;
73987 case 3:
73988 handler.call(this, arguments[1], arguments[2]);
73989 break;
73990 // slower
73991 default:
73992 args = Array.prototype.slice.call(arguments, 1);
73993 handler.apply(this, args);
73994 }
73995 } else if (isObject(handler)) {
73996 args = Array.prototype.slice.call(arguments, 1);
73997 listeners = handler.slice();
73998 len = listeners.length;
73999 for (i = 0; i < len; i++)
74000 listeners[i].apply(this, args);
74001 }
74002
74003 return true;
74004 };
74005
74006 EventEmitter.prototype.addListener = function(type, listener) {
74007 var m;
74008
74009 if (!isFunction(listener))
74010 throw TypeError('listener must be a function');
74011
74012 if (!this._events)
74013 this._events = {};
74014
74015 // To avoid recursion in the case that type === "newListener"! Before
74016 // adding it to the listeners, first emit "newListener".
74017 if (this._events.newListener)
74018 this.emit('newListener', type,
74019 isFunction(listener.listener) ?
74020 listener.listener : listener);
74021
74022 if (!this._events[type])
74023 // Optimize the case of one listener. Don't need the extra array object.
74024 this._events[type] = listener;
74025 else if (isObject(this._events[type]))
74026 // If we've already got an array, just append.
74027 this._events[type].push(listener);
74028 else
74029 // Adding the second element, need to change to array.
74030 this._events[type] = [this._events[type], listener];
74031
74032 // Check for listener leak
74033 if (isObject(this._events[type]) && !this._events[type].warned) {
74034 if (!isUndefined(this._maxListeners)) {
74035 m = this._maxListeners;
74036 } else {
74037 m = EventEmitter.defaultMaxListeners;
74038 }
74039
74040 if (m && m > 0 && this._events[type].length > m) {
74041 this._events[type].warned = true;
74042 console.error('(node) warning: possible EventEmitter memory ' +
74043 'leak detected. %d listeners added. ' +
74044 'Use emitter.setMaxListeners() to increase limit.',
74045 this._events[type].length);
74046 if (typeof console.trace === 'function') {
74047 // not supported in IE 10
74048 console.trace();
74049 }
74050 }
74051 }
74052
74053 return this;
74054 };
74055
74056 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
74057
74058 EventEmitter.prototype.once = function(type, listener) {
74059 if (!isFunction(listener))
74060 throw TypeError('listener must be a function');
74061
74062 var fired = false;
74063
74064 function g() {
74065 this.removeListener(type, g);
74066
74067 if (!fired) {
74068 fired = true;
74069 listener.apply(this, arguments);
74070 }
74071 }
74072
74073 g.listener = listener;
74074 this.on(type, g);
74075
74076 return this;
74077 };
74078
74079 // emits a 'removeListener' event iff the listener was removed
74080 EventEmitter.prototype.removeListener = function(type, listener) {
74081 var list, position, length, i;
74082
74083 if (!isFunction(listener))
74084 throw TypeError('listener must be a function');
74085
74086 if (!this._events || !this._events[type])
74087 return this;
74088
74089 list = this._events[type];
74090 length = list.length;
74091 position = -1;
74092
74093 if (list === listener ||
74094 (isFunction(list.listener) && list.listener === listener)) {
74095 delete this._events[type];
74096 if (this._events.removeListener)
74097 this.emit('removeListener', type, listener);
74098
74099 } else if (isObject(list)) {
74100 for (i = length; i-- > 0;) {
74101 if (list[i] === listener ||
74102 (list[i].listener && list[i].listener === listener)) {
74103 position = i;
74104 break;
74105 }
74106 }
74107
74108 if (position < 0)
74109 return this;
74110
74111 if (list.length === 1) {
74112 list.length = 0;
74113 delete this._events[type];
74114 } else {
74115 list.splice(position, 1);
74116 }
74117
74118 if (this._events.removeListener)
74119 this.emit('removeListener', type, listener);
74120 }
74121
74122 return this;
74123 };
74124
74125 EventEmitter.prototype.removeAllListeners = function(type) {
74126 var key, listeners;
74127
74128 if (!this._events)
74129 return this;
74130
74131 // not listening for removeListener, no need to emit
74132 if (!this._events.removeListener) {
74133 if (arguments.length === 0)
74134 this._events = {};
74135 else if (this._events[type])
74136 delete this._events[type];
74137 return this;
74138 }
74139
74140 // emit removeListener for all listeners on all events
74141 if (arguments.length === 0) {
74142 for (key in this._events) {
74143 if (key === 'removeListener') continue;
74144 this.removeAllListeners(key);
74145 }
74146 this.removeAllListeners('removeListener');
74147 this._events = {};
74148 return this;
74149 }
74150
74151 listeners = this._events[type];
74152
74153 if (isFunction(listeners)) {
74154 this.removeListener(type, listeners);
74155 } else if (listeners) {
74156 // LIFO order
74157 while (listeners.length)
74158 this.removeListener(type, listeners[listeners.length - 1]);
74159 }
74160 delete this._events[type];
74161
74162 return this;
74163 };
74164
74165 EventEmitter.prototype.listeners = function(type) {
74166 var ret;
74167 if (!this._events || !this._events[type])
74168 ret = [];
74169 else if (isFunction(this._events[type]))
74170 ret = [this._events[type]];
74171 else
74172 ret = this._events[type].slice();
74173 return ret;
74174 };
74175
74176 EventEmitter.prototype.listenerCount = function(type) {
74177 if (this._events) {
74178 var evlistener = this._events[type];
74179
74180 if (isFunction(evlistener))
74181 return 1;
74182 else if (evlistener)
74183 return evlistener.length;
74184 }
74185 return 0;
74186 };
74187
74188 EventEmitter.listenerCount = function(emitter, type) {
74189 return emitter.listenerCount(type);
74190 };
74191
74192 function isFunction(arg) {
74193 return typeof arg === 'function';
74194 }
74195
74196 function isNumber(arg) {
74197 return typeof arg === 'number';
74198 }
74199
74200 function isObject(arg) {
74201 return typeof arg === 'object' && arg !== null;
74202 }
74203
74204 function isUndefined(arg) {
74205 return arg === void 0;
74206 }
74207
74208 },{}],8:[function(require,module,exports){
74209 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
74210 var e, m
74211 var eLen = nBytes * 8 - mLen - 1
74212 var eMax = (1 << eLen) - 1
74213 var eBias = eMax >> 1
74214 var nBits = -7
74215 var i = isLE ? (nBytes - 1) : 0
74216 var d = isLE ? -1 : 1
74217 var s = buffer[offset + i]
74218
74219 i += d
74220
74221 e = s & ((1 << (-nBits)) - 1)
74222 s >>= (-nBits)
74223 nBits += eLen
74224 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74225
74226 m = e & ((1 << (-nBits)) - 1)
74227 e >>= (-nBits)
74228 nBits += mLen
74229 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
74230
74231 if (e === 0) {
74232 e = 1 - eBias
74233 } else if (e === eMax) {
74234 return m ? NaN : ((s ? -1 : 1) * Infinity)
74235 } else {
74236 m = m + Math.pow(2, mLen)
74237 e = e - eBias
74238 }
74239 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
74240 }
74241
74242 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
74243 var e, m, c
74244 var eLen = nBytes * 8 - mLen - 1
74245 var eMax = (1 << eLen) - 1
74246 var eBias = eMax >> 1
74247 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
74248 var i = isLE ? 0 : (nBytes - 1)
74249 var d = isLE ? 1 : -1
74250 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
74251
74252 value = Math.abs(value)
74253
74254 if (isNaN(value) || value === Infinity) {
74255 m = isNaN(value) ? 1 : 0
74256 e = eMax
74257 } else {
74258 e = Math.floor(Math.log(value) / Math.LN2)
74259 if (value * (c = Math.pow(2, -e)) < 1) {
74260 e--
74261 c *= 2
74262 }
74263 if (e + eBias >= 1) {
74264 value += rt / c
74265 } else {
74266 value += rt * Math.pow(2, 1 - eBias)
74267 }
74268 if (value * c >= 2) {
74269 e++
74270 c /= 2
74271 }
74272
74273 if (e + eBias >= eMax) {
74274 m = 0
74275 e = eMax
74276 } else if (e + eBias >= 1) {
74277 m = (value * c - 1) * Math.pow(2, mLen)
74278 e = e + eBias
74279 } else {
74280 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
74281 e = 0
74282 }
74283 }
74284
74285 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
74286
74287 e = (e << mLen) | m
74288 eLen += mLen
74289 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
74290
74291 buffer[offset + i - d] |= s * 128
74292 }
74293
74294 },{}],9:[function(require,module,exports){
74295 if (typeof Object.create === 'function') {
74296 // implementation from standard node.js 'util' module
74297 module.exports = function inherits(ctor, superCtor) {
74298 ctor.super_ = superCtor
74299 ctor.prototype = Object.create(superCtor.prototype, {
74300 constructor: {
74301 value: ctor,
74302 enumerable: false,
74303 writable: true,
74304 configurable: true
74305 }
74306 });
74307 };
74308 } else {
74309 // old school shim for old browsers
74310 module.exports = function inherits(ctor, superCtor) {
74311 ctor.super_ = superCtor
74312 var TempCtor = function () {}
74313 TempCtor.prototype = superCtor.prototype
74314 ctor.prototype = new TempCtor()
74315 ctor.prototype.constructor = ctor
74316 }
74317 }
74318
74319 },{}],10:[function(require,module,exports){
74320 /*!
74321 * Determine if an object is a Buffer
74322 *
74323 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
74324 * @license MIT
74325 */
74326
74327 // The _isBuffer check is for Safari 5-7 support, because it's missing
74328 // Object.prototype.constructor. Remove this eventually
74329 module.exports = function (obj) {
74330 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
74331 }
74332
74333 function isBuffer (obj) {
74334 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
74335 }
74336
74337 // For Node v0.10 support. Remove this eventually.
74338 function isSlowBuffer (obj) {
74339 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
74340 }
74341
74342 },{}],11:[function(require,module,exports){
74343 var toString = {}.toString;
74344
74345 module.exports = Array.isArray || function (arr) {
74346 return toString.call(arr) == '[object Array]';
74347 };
74348
74349 },{}],12:[function(require,module,exports){
74350 (function (process){
74351 'use strict';
74352
74353 if (!process.version ||
74354 process.version.indexOf('v0.') === 0 ||
74355 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
74356 module.exports = nextTick;
74357 } else {
74358 module.exports = process.nextTick;
74359 }
74360
74361 function nextTick(fn, arg1, arg2, arg3) {
74362 if (typeof fn !== 'function') {
74363 throw new TypeError('"callback" argument must be a function');
74364 }
74365 var len = arguments.length;
74366 var args, i;
74367 switch (len) {
74368 case 0:
74369 case 1:
74370 return process.nextTick(fn);
74371 case 2:
74372 return process.nextTick(function afterTickOne() {
74373 fn.call(null, arg1);
74374 });
74375 case 3:
74376 return process.nextTick(function afterTickTwo() {
74377 fn.call(null, arg1, arg2);
74378 });
74379 case 4:
74380 return process.nextTick(function afterTickThree() {
74381 fn.call(null, arg1, arg2, arg3);
74382 });
74383 default:
74384 args = new Array(len - 1);
74385 i = 0;
74386 while (i < args.length) {
74387 args[i++] = arguments[i];
74388 }
74389 return process.nextTick(function afterTick() {
74390 fn.apply(null, args);
74391 });
74392 }
74393 }
74394
74395 }).call(this,require('_process'))
74396 },{"_process":13}],13:[function(require,module,exports){
74397 // shim for using process in browser
74398 var process = module.exports = {};
74399
74400 // cached from whatever global is present so that test runners that stub it
74401 // don't break things. But we need to wrap it in a try catch in case it is
74402 // wrapped in strict mode code which doesn't define any globals. It's inside a
74403 // function because try/catches deoptimize in certain engines.
74404
74405 var cachedSetTimeout;
74406 var cachedClearTimeout;
74407
74408 function defaultSetTimout() {
74409 throw new Error('setTimeout has not been defined');
74410 }
74411 function defaultClearTimeout () {
74412 throw new Error('clearTimeout has not been defined');
74413 }
74414 (function () {
74415 try {
74416 if (typeof setTimeout === 'function') {
74417 cachedSetTimeout = setTimeout;
74418 } else {
74419 cachedSetTimeout = defaultSetTimout;
74420 }
74421 } catch (e) {
74422 cachedSetTimeout = defaultSetTimout;
74423 }
74424 try {
74425 if (typeof clearTimeout === 'function') {
74426 cachedClearTimeout = clearTimeout;
74427 } else {
74428 cachedClearTimeout = defaultClearTimeout;
74429 }
74430 } catch (e) {
74431 cachedClearTimeout = defaultClearTimeout;
74432 }
74433 } ())
74434 function runTimeout(fun) {
74435 if (cachedSetTimeout === setTimeout) {
74436 //normal enviroments in sane situations
74437 return setTimeout(fun, 0);
74438 }
74439 // if setTimeout wasn't available but was latter defined
74440 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
74441 cachedSetTimeout = setTimeout;
74442 return setTimeout(fun, 0);
74443 }
74444 try {
74445 // when when somebody has screwed with setTimeout but no I.E. maddness
74446 return cachedSetTimeout(fun, 0);
74447 } catch(e){
74448 try {
74449 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74450 return cachedSetTimeout.call(null, fun, 0);
74451 } catch(e){
74452 // 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
74453 return cachedSetTimeout.call(this, fun, 0);
74454 }
74455 }
74456
74457
74458 }
74459 function runClearTimeout(marker) {
74460 if (cachedClearTimeout === clearTimeout) {
74461 //normal enviroments in sane situations
74462 return clearTimeout(marker);
74463 }
74464 // if clearTimeout wasn't available but was latter defined
74465 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
74466 cachedClearTimeout = clearTimeout;
74467 return clearTimeout(marker);
74468 }
74469 try {
74470 // when when somebody has screwed with setTimeout but no I.E. maddness
74471 return cachedClearTimeout(marker);
74472 } catch (e){
74473 try {
74474 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
74475 return cachedClearTimeout.call(null, marker);
74476 } catch (e){
74477 // 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.
74478 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
74479 return cachedClearTimeout.call(this, marker);
74480 }
74481 }
74482
74483
74484
74485 }
74486 var queue = [];
74487 var draining = false;
74488 var currentQueue;
74489 var queueIndex = -1;
74490
74491 function cleanUpNextTick() {
74492 if (!draining || !currentQueue) {
74493 return;
74494 }
74495 draining = false;
74496 if (currentQueue.length) {
74497 queue = currentQueue.concat(queue);
74498 } else {
74499 queueIndex = -1;
74500 }
74501 if (queue.length) {
74502 drainQueue();
74503 }
74504 }
74505
74506 function drainQueue() {
74507 if (draining) {
74508 return;
74509 }
74510 var timeout = runTimeout(cleanUpNextTick);
74511 draining = true;
74512
74513 var len = queue.length;
74514 while(len) {
74515 currentQueue = queue;
74516 queue = [];
74517 while (++queueIndex < len) {
74518 if (currentQueue) {
74519 currentQueue[queueIndex].run();
74520 }
74521 }
74522 queueIndex = -1;
74523 len = queue.length;
74524 }
74525 currentQueue = null;
74526 draining = false;
74527 runClearTimeout(timeout);
74528 }
74529
74530 process.nextTick = function (fun) {
74531 var args = new Array(arguments.length - 1);
74532 if (arguments.length > 1) {
74533 for (var i = 1; i < arguments.length; i++) {
74534 args[i - 1] = arguments[i];
74535 }
74536 }
74537 queue.push(new Item(fun, args));
74538 if (queue.length === 1 && !draining) {
74539 runTimeout(drainQueue);
74540 }
74541 };
74542
74543 // v8 likes predictible objects
74544 function Item(fun, array) {
74545 this.fun = fun;
74546 this.array = array;
74547 }
74548 Item.prototype.run = function () {
74549 this.fun.apply(null, this.array);
74550 };
74551 process.title = 'browser';
74552 process.browser = true;
74553 process.env = {};
74554 process.argv = [];
74555 process.version = ''; // empty string to avoid regexp issues
74556 process.versions = {};
74557
74558 function noop() {}
74559
74560 process.on = noop;
74561 process.addListener = noop;
74562 process.once = noop;
74563 process.off = noop;
74564 process.removeListener = noop;
74565 process.removeAllListeners = noop;
74566 process.emit = noop;
74567
74568 process.binding = function (name) {
74569 throw new Error('process.binding is not supported');
74570 };
74571
74572 process.cwd = function () { return '/' };
74573 process.chdir = function (dir) {
74574 throw new Error('process.chdir is not supported');
74575 };
74576 process.umask = function() { return 0; };
74577
74578 },{}],14:[function(require,module,exports){
74579 module.exports = require("./lib/_stream_duplex.js")
74580
74581 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
74582 // a duplex stream is just a stream that is both readable and writable.
74583 // Since JS doesn't have multiple prototypal inheritance, this class
74584 // prototypally inherits from Readable, and then parasitically from
74585 // Writable.
74586
74587 'use strict';
74588
74589 /*<replacement>*/
74590
74591 var objectKeys = Object.keys || function (obj) {
74592 var keys = [];
74593 for (var key in obj) {
74594 keys.push(key);
74595 }return keys;
74596 };
74597 /*</replacement>*/
74598
74599 module.exports = Duplex;
74600
74601 /*<replacement>*/
74602 var processNextTick = require('process-nextick-args');
74603 /*</replacement>*/
74604
74605 /*<replacement>*/
74606 var util = require('core-util-is');
74607 util.inherits = require('inherits');
74608 /*</replacement>*/
74609
74610 var Readable = require('./_stream_readable');
74611 var Writable = require('./_stream_writable');
74612
74613 util.inherits(Duplex, Readable);
74614
74615 var keys = objectKeys(Writable.prototype);
74616 for (var v = 0; v < keys.length; v++) {
74617 var method = keys[v];
74618 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
74619 }
74620
74621 function Duplex(options) {
74622 if (!(this instanceof Duplex)) return new Duplex(options);
74623
74624 Readable.call(this, options);
74625 Writable.call(this, options);
74626
74627 if (options && options.readable === false) this.readable = false;
74628
74629 if (options && options.writable === false) this.writable = false;
74630
74631 this.allowHalfOpen = true;
74632 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
74633
74634 this.once('end', onend);
74635 }
74636
74637 // the no-half-open enforcer
74638 function onend() {
74639 // if we allow half-open state, or if the writable side ended,
74640 // then we're ok.
74641 if (this.allowHalfOpen || this._writableState.ended) return;
74642
74643 // no more data can be written.
74644 // But allow more writes to happen in this tick.
74645 processNextTick(onEndNT, this);
74646 }
74647
74648 function onEndNT(self) {
74649 self.end();
74650 }
74651
74652 function forEach(xs, f) {
74653 for (var i = 0, l = xs.length; i < l; i++) {
74654 f(xs[i], i);
74655 }
74656 }
74657 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
74658 // a passthrough stream.
74659 // basically just the most minimal sort of Transform stream.
74660 // Every written chunk gets output as-is.
74661
74662 'use strict';
74663
74664 module.exports = PassThrough;
74665
74666 var Transform = require('./_stream_transform');
74667
74668 /*<replacement>*/
74669 var util = require('core-util-is');
74670 util.inherits = require('inherits');
74671 /*</replacement>*/
74672
74673 util.inherits(PassThrough, Transform);
74674
74675 function PassThrough(options) {
74676 if (!(this instanceof PassThrough)) return new PassThrough(options);
74677
74678 Transform.call(this, options);
74679 }
74680
74681 PassThrough.prototype._transform = function (chunk, encoding, cb) {
74682 cb(null, chunk);
74683 };
74684 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
74685 (function (process){
74686 'use strict';
74687
74688 module.exports = Readable;
74689
74690 /*<replacement>*/
74691 var processNextTick = require('process-nextick-args');
74692 /*</replacement>*/
74693
74694 /*<replacement>*/
74695 var isArray = require('isarray');
74696 /*</replacement>*/
74697
74698 /*<replacement>*/
74699 var Duplex;
74700 /*</replacement>*/
74701
74702 Readable.ReadableState = ReadableState;
74703
74704 /*<replacement>*/
74705 var EE = require('events').EventEmitter;
74706
74707 var EElistenerCount = function (emitter, type) {
74708 return emitter.listeners(type).length;
74709 };
74710 /*</replacement>*/
74711
74712 /*<replacement>*/
74713 var Stream;
74714 (function () {
74715 try {
74716 Stream = require('st' + 'ream');
74717 } catch (_) {} finally {
74718 if (!Stream) Stream = require('events').EventEmitter;
74719 }
74720 })();
74721 /*</replacement>*/
74722
74723 var Buffer = require('buffer').Buffer;
74724 /*<replacement>*/
74725 var bufferShim = require('buffer-shims');
74726 /*</replacement>*/
74727
74728 /*<replacement>*/
74729 var util = require('core-util-is');
74730 util.inherits = require('inherits');
74731 /*</replacement>*/
74732
74733 /*<replacement>*/
74734 var debugUtil = require('util');
74735 var debug = void 0;
74736 if (debugUtil && debugUtil.debuglog) {
74737 debug = debugUtil.debuglog('stream');
74738 } else {
74739 debug = function () {};
74740 }
74741 /*</replacement>*/
74742
74743 var BufferList = require('./internal/streams/BufferList');
74744 var StringDecoder;
74745
74746 util.inherits(Readable, Stream);
74747
74748 function prependListener(emitter, event, fn) {
74749 // Sadly this is not cacheable as some libraries bundle their own
74750 // event emitter implementation with them.
74751 if (typeof emitter.prependListener === 'function') {
74752 return emitter.prependListener(event, fn);
74753 } else {
74754 // This is a hack to make sure that our error handler is attached before any
74755 // userland ones. NEVER DO THIS. This is here only because this code needs
74756 // to continue to work with older versions of Node.js that do not include
74757 // the prependListener() method. The goal is to eventually remove this hack.
74758 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]];
74759 }
74760 }
74761
74762 function ReadableState(options, stream) {
74763 Duplex = Duplex || require('./_stream_duplex');
74764
74765 options = options || {};
74766
74767 // object stream flag. Used to make read(n) ignore n and to
74768 // make all the buffer merging and length checks go away
74769 this.objectMode = !!options.objectMode;
74770
74771 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
74772
74773 // the point at which it stops calling _read() to fill the buffer
74774 // Note: 0 is a valid value, means "don't call _read preemptively ever"
74775 var hwm = options.highWaterMark;
74776 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
74777 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
74778
74779 // cast to ints.
74780 this.highWaterMark = ~ ~this.highWaterMark;
74781
74782 // A linked list is used to store data chunks instead of an array because the
74783 // linked list can remove elements from the beginning faster than
74784 // array.shift()
74785 this.buffer = new BufferList();
74786 this.length = 0;
74787 this.pipes = null;
74788 this.pipesCount = 0;
74789 this.flowing = null;
74790 this.ended = false;
74791 this.endEmitted = false;
74792 this.reading = false;
74793
74794 // a flag to be able to tell if the onwrite cb is called immediately,
74795 // or on a later tick. We set this to true at first, because any
74796 // actions that shouldn't happen until "later" should generally also
74797 // not happen before the first write call.
74798 this.sync = true;
74799
74800 // whenever we return null, then we set a flag to say
74801 // that we're awaiting a 'readable' event emission.
74802 this.needReadable = false;
74803 this.emittedReadable = false;
74804 this.readableListening = false;
74805 this.resumeScheduled = false;
74806
74807 // Crypto is kind of old and crusty. Historically, its default string
74808 // encoding is 'binary' so we have to make this configurable.
74809 // Everything else in the universe uses 'utf8', though.
74810 this.defaultEncoding = options.defaultEncoding || 'utf8';
74811
74812 // when piping, we only care about 'readable' events that happen
74813 // after read()ing all the bytes and not getting any pushback.
74814 this.ranOut = false;
74815
74816 // the number of writers that are awaiting a drain event in .pipe()s
74817 this.awaitDrain = 0;
74818
74819 // if true, a maybeReadMore has been scheduled
74820 this.readingMore = false;
74821
74822 this.decoder = null;
74823 this.encoding = null;
74824 if (options.encoding) {
74825 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74826 this.decoder = new StringDecoder(options.encoding);
74827 this.encoding = options.encoding;
74828 }
74829 }
74830
74831 function Readable(options) {
74832 Duplex = Duplex || require('./_stream_duplex');
74833
74834 if (!(this instanceof Readable)) return new Readable(options);
74835
74836 this._readableState = new ReadableState(options, this);
74837
74838 // legacy
74839 this.readable = true;
74840
74841 if (options && typeof options.read === 'function') this._read = options.read;
74842
74843 Stream.call(this);
74844 }
74845
74846 // Manually shove something into the read() buffer.
74847 // This returns true if the highWaterMark has not been hit yet,
74848 // similar to how Writable.write() returns true if you should
74849 // write() some more.
74850 Readable.prototype.push = function (chunk, encoding) {
74851 var state = this._readableState;
74852
74853 if (!state.objectMode && typeof chunk === 'string') {
74854 encoding = encoding || state.defaultEncoding;
74855 if (encoding !== state.encoding) {
74856 chunk = bufferShim.from(chunk, encoding);
74857 encoding = '';
74858 }
74859 }
74860
74861 return readableAddChunk(this, state, chunk, encoding, false);
74862 };
74863
74864 // Unshift should *always* be something directly out of read()
74865 Readable.prototype.unshift = function (chunk) {
74866 var state = this._readableState;
74867 return readableAddChunk(this, state, chunk, '', true);
74868 };
74869
74870 Readable.prototype.isPaused = function () {
74871 return this._readableState.flowing === false;
74872 };
74873
74874 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
74875 var er = chunkInvalid(state, chunk);
74876 if (er) {
74877 stream.emit('error', er);
74878 } else if (chunk === null) {
74879 state.reading = false;
74880 onEofChunk(stream, state);
74881 } else if (state.objectMode || chunk && chunk.length > 0) {
74882 if (state.ended && !addToFront) {
74883 var e = new Error('stream.push() after EOF');
74884 stream.emit('error', e);
74885 } else if (state.endEmitted && addToFront) {
74886 var _e = new Error('stream.unshift() after end event');
74887 stream.emit('error', _e);
74888 } else {
74889 var skipAdd;
74890 if (state.decoder && !addToFront && !encoding) {
74891 chunk = state.decoder.write(chunk);
74892 skipAdd = !state.objectMode && chunk.length === 0;
74893 }
74894
74895 if (!addToFront) state.reading = false;
74896
74897 // Don't add to the buffer if we've decoded to an empty string chunk and
74898 // we're not in object mode
74899 if (!skipAdd) {
74900 // if we want the data now, just emit it.
74901 if (state.flowing && state.length === 0 && !state.sync) {
74902 stream.emit('data', chunk);
74903 stream.read(0);
74904 } else {
74905 // update the buffer info.
74906 state.length += state.objectMode ? 1 : chunk.length;
74907 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
74908
74909 if (state.needReadable) emitReadable(stream);
74910 }
74911 }
74912
74913 maybeReadMore(stream, state);
74914 }
74915 } else if (!addToFront) {
74916 state.reading = false;
74917 }
74918
74919 return needMoreData(state);
74920 }
74921
74922 // if it's past the high water mark, we can push in some more.
74923 // Also, if we have no data yet, we can stand some
74924 // more bytes. This is to work around cases where hwm=0,
74925 // such as the repl. Also, if the push() triggered a
74926 // readable event, and the user called read(largeNumber) such that
74927 // needReadable was set, then we ought to push more, so that another
74928 // 'readable' event will be triggered.
74929 function needMoreData(state) {
74930 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
74931 }
74932
74933 // backwards compatibility.
74934 Readable.prototype.setEncoding = function (enc) {
74935 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
74936 this._readableState.decoder = new StringDecoder(enc);
74937 this._readableState.encoding = enc;
74938 return this;
74939 };
74940
74941 // Don't raise the hwm > 8MB
74942 var MAX_HWM = 0x800000;
74943 function computeNewHighWaterMark(n) {
74944 if (n >= MAX_HWM) {
74945 n = MAX_HWM;
74946 } else {
74947 // Get the next highest power of 2 to prevent increasing hwm excessively in
74948 // tiny amounts
74949 n--;
74950 n |= n >>> 1;
74951 n |= n >>> 2;
74952 n |= n >>> 4;
74953 n |= n >>> 8;
74954 n |= n >>> 16;
74955 n++;
74956 }
74957 return n;
74958 }
74959
74960 // This function is designed to be inlinable, so please take care when making
74961 // changes to the function body.
74962 function howMuchToRead(n, state) {
74963 if (n <= 0 || state.length === 0 && state.ended) return 0;
74964 if (state.objectMode) return 1;
74965 if (n !== n) {
74966 // Only flow one buffer at a time
74967 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
74968 }
74969 // If we're asking for more than the current hwm, then raise the hwm.
74970 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
74971 if (n <= state.length) return n;
74972 // Don't have enough
74973 if (!state.ended) {
74974 state.needReadable = true;
74975 return 0;
74976 }
74977 return state.length;
74978 }
74979
74980 // you can override either this method, or the async _read(n) below.
74981 Readable.prototype.read = function (n) {
74982 debug('read', n);
74983 n = parseInt(n, 10);
74984 var state = this._readableState;
74985 var nOrig = n;
74986
74987 if (n !== 0) state.emittedReadable = false;
74988
74989 // if we're doing read(0) to trigger a readable event, but we
74990 // already have a bunch of data in the buffer, then just trigger
74991 // the 'readable' event and move on.
74992 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
74993 debug('read: emitReadable', state.length, state.ended);
74994 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
74995 return null;
74996 }
74997
74998 n = howMuchToRead(n, state);
74999
75000 // if we've ended, and we're now clear, then finish it up.
75001 if (n === 0 && state.ended) {
75002 if (state.length === 0) endReadable(this);
75003 return null;
75004 }
75005
75006 // All the actual chunk generation logic needs to be
75007 // *below* the call to _read. The reason is that in certain
75008 // synthetic stream cases, such as passthrough streams, _read
75009 // may be a completely synchronous operation which may change
75010 // the state of the read buffer, providing enough data when
75011 // before there was *not* enough.
75012 //
75013 // So, the steps are:
75014 // 1. Figure out what the state of things will be after we do
75015 // a read from the buffer.
75016 //
75017 // 2. If that resulting state will trigger a _read, then call _read.
75018 // Note that this may be asynchronous, or synchronous. Yes, it is
75019 // deeply ugly to write APIs this way, but that still doesn't mean
75020 // that the Readable class should behave improperly, as streams are
75021 // designed to be sync/async agnostic.
75022 // Take note if the _read call is sync or async (ie, if the read call
75023 // has returned yet), so that we know whether or not it's safe to emit
75024 // 'readable' etc.
75025 //
75026 // 3. Actually pull the requested chunks out of the buffer and return.
75027
75028 // if we need a readable event, then we need to do some reading.
75029 var doRead = state.needReadable;
75030 debug('need readable', doRead);
75031
75032 // if we currently have less than the highWaterMark, then also read some
75033 if (state.length === 0 || state.length - n < state.highWaterMark) {
75034 doRead = true;
75035 debug('length less than watermark', doRead);
75036 }
75037
75038 // however, if we've ended, then there's no point, and if we're already
75039 // reading, then it's unnecessary.
75040 if (state.ended || state.reading) {
75041 doRead = false;
75042 debug('reading or ended', doRead);
75043 } else if (doRead) {
75044 debug('do read');
75045 state.reading = true;
75046 state.sync = true;
75047 // if the length is currently zero, then we *need* a readable event.
75048 if (state.length === 0) state.needReadable = true;
75049 // call internal read method
75050 this._read(state.highWaterMark);
75051 state.sync = false;
75052 // If _read pushed data synchronously, then `reading` will be false,
75053 // and we need to re-evaluate how much data we can return to the user.
75054 if (!state.reading) n = howMuchToRead(nOrig, state);
75055 }
75056
75057 var ret;
75058 if (n > 0) ret = fromList(n, state);else ret = null;
75059
75060 if (ret === null) {
75061 state.needReadable = true;
75062 n = 0;
75063 } else {
75064 state.length -= n;
75065 }
75066
75067 if (state.length === 0) {
75068 // If we have nothing in the buffer, then we want to know
75069 // as soon as we *do* get something into the buffer.
75070 if (!state.ended) state.needReadable = true;
75071
75072 // If we tried to read() past the EOF, then emit end on the next tick.
75073 if (nOrig !== n && state.ended) endReadable(this);
75074 }
75075
75076 if (ret !== null) this.emit('data', ret);
75077
75078 return ret;
75079 };
75080
75081 function chunkInvalid(state, chunk) {
75082 var er = null;
75083 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
75084 er = new TypeError('Invalid non-string/buffer chunk');
75085 }
75086 return er;
75087 }
75088
75089 function onEofChunk(stream, state) {
75090 if (state.ended) return;
75091 if (state.decoder) {
75092 var chunk = state.decoder.end();
75093 if (chunk && chunk.length) {
75094 state.buffer.push(chunk);
75095 state.length += state.objectMode ? 1 : chunk.length;
75096 }
75097 }
75098 state.ended = true;
75099
75100 // emit 'readable' now to make sure it gets picked up.
75101 emitReadable(stream);
75102 }
75103
75104 // Don't emit readable right away in sync mode, because this can trigger
75105 // another read() call => stack overflow. This way, it might trigger
75106 // a nextTick recursion warning, but that's not so bad.
75107 function emitReadable(stream) {
75108 var state = stream._readableState;
75109 state.needReadable = false;
75110 if (!state.emittedReadable) {
75111 debug('emitReadable', state.flowing);
75112 state.emittedReadable = true;
75113 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
75114 }
75115 }
75116
75117 function emitReadable_(stream) {
75118 debug('emit readable');
75119 stream.emit('readable');
75120 flow(stream);
75121 }
75122
75123 // at this point, the user has presumably seen the 'readable' event,
75124 // and called read() to consume some data. that may have triggered
75125 // in turn another _read(n) call, in which case reading = true if
75126 // it's in progress.
75127 // However, if we're not ended, or reading, and the length < hwm,
75128 // then go ahead and try to read some more preemptively.
75129 function maybeReadMore(stream, state) {
75130 if (!state.readingMore) {
75131 state.readingMore = true;
75132 processNextTick(maybeReadMore_, stream, state);
75133 }
75134 }
75135
75136 function maybeReadMore_(stream, state) {
75137 var len = state.length;
75138 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
75139 debug('maybeReadMore read 0');
75140 stream.read(0);
75141 if (len === state.length)
75142 // didn't get any data, stop spinning.
75143 break;else len = state.length;
75144 }
75145 state.readingMore = false;
75146 }
75147
75148 // abstract method. to be overridden in specific implementation classes.
75149 // call cb(er, data) where data is <= n in length.
75150 // for virtual (non-string, non-buffer) streams, "length" is somewhat
75151 // arbitrary, and perhaps not very meaningful.
75152 Readable.prototype._read = function (n) {
75153 this.emit('error', new Error('_read() is not implemented'));
75154 };
75155
75156 Readable.prototype.pipe = function (dest, pipeOpts) {
75157 var src = this;
75158 var state = this._readableState;
75159
75160 switch (state.pipesCount) {
75161 case 0:
75162 state.pipes = dest;
75163 break;
75164 case 1:
75165 state.pipes = [state.pipes, dest];
75166 break;
75167 default:
75168 state.pipes.push(dest);
75169 break;
75170 }
75171 state.pipesCount += 1;
75172 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
75173
75174 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
75175
75176 var endFn = doEnd ? onend : cleanup;
75177 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
75178
75179 dest.on('unpipe', onunpipe);
75180 function onunpipe(readable) {
75181 debug('onunpipe');
75182 if (readable === src) {
75183 cleanup();
75184 }
75185 }
75186
75187 function onend() {
75188 debug('onend');
75189 dest.end();
75190 }
75191
75192 // when the dest drains, it reduces the awaitDrain counter
75193 // on the source. This would be more elegant with a .once()
75194 // handler in flow(), but adding and removing repeatedly is
75195 // too slow.
75196 var ondrain = pipeOnDrain(src);
75197 dest.on('drain', ondrain);
75198
75199 var cleanedUp = false;
75200 function cleanup() {
75201 debug('cleanup');
75202 // cleanup event handlers once the pipe is broken
75203 dest.removeListener('close', onclose);
75204 dest.removeListener('finish', onfinish);
75205 dest.removeListener('drain', ondrain);
75206 dest.removeListener('error', onerror);
75207 dest.removeListener('unpipe', onunpipe);
75208 src.removeListener('end', onend);
75209 src.removeListener('end', cleanup);
75210 src.removeListener('data', ondata);
75211
75212 cleanedUp = true;
75213
75214 // if the reader is waiting for a drain event from this
75215 // specific writer, then it would cause it to never start
75216 // flowing again.
75217 // So, if this is awaiting a drain, then we just call it now.
75218 // If we don't know, then assume that we are waiting for one.
75219 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
75220 }
75221
75222 // If the user pushes more data while we're writing to dest then we'll end up
75223 // in ondata again. However, we only want to increase awaitDrain once because
75224 // dest will only emit one 'drain' event for the multiple writes.
75225 // => Introduce a guard on increasing awaitDrain.
75226 var increasedAwaitDrain = false;
75227 src.on('data', ondata);
75228 function ondata(chunk) {
75229 debug('ondata');
75230 increasedAwaitDrain = false;
75231 var ret = dest.write(chunk);
75232 if (false === ret && !increasedAwaitDrain) {
75233 // If the user unpiped during `dest.write()`, it is possible
75234 // to get stuck in a permanently paused state if that write
75235 // also returned false.
75236 // => Check whether `dest` is still a piping destination.
75237 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
75238 debug('false write response, pause', src._readableState.awaitDrain);
75239 src._readableState.awaitDrain++;
75240 increasedAwaitDrain = true;
75241 }
75242 src.pause();
75243 }
75244 }
75245
75246 // if the dest has an error, then stop piping into it.
75247 // however, don't suppress the throwing behavior for this.
75248 function onerror(er) {
75249 debug('onerror', er);
75250 unpipe();
75251 dest.removeListener('error', onerror);
75252 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
75253 }
75254
75255 // Make sure our error handler is attached before userland ones.
75256 prependListener(dest, 'error', onerror);
75257
75258 // Both close and finish should trigger unpipe, but only once.
75259 function onclose() {
75260 dest.removeListener('finish', onfinish);
75261 unpipe();
75262 }
75263 dest.once('close', onclose);
75264 function onfinish() {
75265 debug('onfinish');
75266 dest.removeListener('close', onclose);
75267 unpipe();
75268 }
75269 dest.once('finish', onfinish);
75270
75271 function unpipe() {
75272 debug('unpipe');
75273 src.unpipe(dest);
75274 }
75275
75276 // tell the dest that it's being piped to
75277 dest.emit('pipe', src);
75278
75279 // start the flow if it hasn't been started already.
75280 if (!state.flowing) {
75281 debug('pipe resume');
75282 src.resume();
75283 }
75284
75285 return dest;
75286 };
75287
75288 function pipeOnDrain(src) {
75289 return function () {
75290 var state = src._readableState;
75291 debug('pipeOnDrain', state.awaitDrain);
75292 if (state.awaitDrain) state.awaitDrain--;
75293 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
75294 state.flowing = true;
75295 flow(src);
75296 }
75297 };
75298 }
75299
75300 Readable.prototype.unpipe = function (dest) {
75301 var state = this._readableState;
75302
75303 // if we're not piping anywhere, then do nothing.
75304 if (state.pipesCount === 0) return this;
75305
75306 // just one destination. most common case.
75307 if (state.pipesCount === 1) {
75308 // passed in one, but it's not the right one.
75309 if (dest && dest !== state.pipes) return this;
75310
75311 if (!dest) dest = state.pipes;
75312
75313 // got a match.
75314 state.pipes = null;
75315 state.pipesCount = 0;
75316 state.flowing = false;
75317 if (dest) dest.emit('unpipe', this);
75318 return this;
75319 }
75320
75321 // slow case. multiple pipe destinations.
75322
75323 if (!dest) {
75324 // remove all.
75325 var dests = state.pipes;
75326 var len = state.pipesCount;
75327 state.pipes = null;
75328 state.pipesCount = 0;
75329 state.flowing = false;
75330
75331 for (var i = 0; i < len; i++) {
75332 dests[i].emit('unpipe', this);
75333 }return this;
75334 }
75335
75336 // try to find the right one.
75337 var index = indexOf(state.pipes, dest);
75338 if (index === -1) return this;
75339
75340 state.pipes.splice(index, 1);
75341 state.pipesCount -= 1;
75342 if (state.pipesCount === 1) state.pipes = state.pipes[0];
75343
75344 dest.emit('unpipe', this);
75345
75346 return this;
75347 };
75348
75349 // set up data events if they are asked for
75350 // Ensure readable listeners eventually get something
75351 Readable.prototype.on = function (ev, fn) {
75352 var res = Stream.prototype.on.call(this, ev, fn);
75353
75354 if (ev === 'data') {
75355 // Start flowing on next tick if stream isn't explicitly paused
75356 if (this._readableState.flowing !== false) this.resume();
75357 } else if (ev === 'readable') {
75358 var state = this._readableState;
75359 if (!state.endEmitted && !state.readableListening) {
75360 state.readableListening = state.needReadable = true;
75361 state.emittedReadable = false;
75362 if (!state.reading) {
75363 processNextTick(nReadingNextTick, this);
75364 } else if (state.length) {
75365 emitReadable(this, state);
75366 }
75367 }
75368 }
75369
75370 return res;
75371 };
75372 Readable.prototype.addListener = Readable.prototype.on;
75373
75374 function nReadingNextTick(self) {
75375 debug('readable nexttick read 0');
75376 self.read(0);
75377 }
75378
75379 // pause() and resume() are remnants of the legacy readable stream API
75380 // If the user uses them, then switch into old mode.
75381 Readable.prototype.resume = function () {
75382 var state = this._readableState;
75383 if (!state.flowing) {
75384 debug('resume');
75385 state.flowing = true;
75386 resume(this, state);
75387 }
75388 return this;
75389 };
75390
75391 function resume(stream, state) {
75392 if (!state.resumeScheduled) {
75393 state.resumeScheduled = true;
75394 processNextTick(resume_, stream, state);
75395 }
75396 }
75397
75398 function resume_(stream, state) {
75399 if (!state.reading) {
75400 debug('resume read 0');
75401 stream.read(0);
75402 }
75403
75404 state.resumeScheduled = false;
75405 state.awaitDrain = 0;
75406 stream.emit('resume');
75407 flow(stream);
75408 if (state.flowing && !state.reading) stream.read(0);
75409 }
75410
75411 Readable.prototype.pause = function () {
75412 debug('call pause flowing=%j', this._readableState.flowing);
75413 if (false !== this._readableState.flowing) {
75414 debug('pause');
75415 this._readableState.flowing = false;
75416 this.emit('pause');
75417 }
75418 return this;
75419 };
75420
75421 function flow(stream) {
75422 var state = stream._readableState;
75423 debug('flow', state.flowing);
75424 while (state.flowing && stream.read() !== null) {}
75425 }
75426
75427 // wrap an old-style stream as the async data source.
75428 // This is *not* part of the readable stream interface.
75429 // It is an ugly unfortunate mess of history.
75430 Readable.prototype.wrap = function (stream) {
75431 var state = this._readableState;
75432 var paused = false;
75433
75434 var self = this;
75435 stream.on('end', function () {
75436 debug('wrapped end');
75437 if (state.decoder && !state.ended) {
75438 var chunk = state.decoder.end();
75439 if (chunk && chunk.length) self.push(chunk);
75440 }
75441
75442 self.push(null);
75443 });
75444
75445 stream.on('data', function (chunk) {
75446 debug('wrapped data');
75447 if (state.decoder) chunk = state.decoder.write(chunk);
75448
75449 // don't skip over falsy values in objectMode
75450 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
75451
75452 var ret = self.push(chunk);
75453 if (!ret) {
75454 paused = true;
75455 stream.pause();
75456 }
75457 });
75458
75459 // proxy all the other methods.
75460 // important when wrapping filters and duplexes.
75461 for (var i in stream) {
75462 if (this[i] === undefined && typeof stream[i] === 'function') {
75463 this[i] = function (method) {
75464 return function () {
75465 return stream[method].apply(stream, arguments);
75466 };
75467 }(i);
75468 }
75469 }
75470
75471 // proxy certain important events.
75472 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
75473 forEach(events, function (ev) {
75474 stream.on(ev, self.emit.bind(self, ev));
75475 });
75476
75477 // when we try to consume some more bytes, simply unpause the
75478 // underlying stream.
75479 self._read = function (n) {
75480 debug('wrapped _read', n);
75481 if (paused) {
75482 paused = false;
75483 stream.resume();
75484 }
75485 };
75486
75487 return self;
75488 };
75489
75490 // exposed for testing purposes only.
75491 Readable._fromList = fromList;
75492
75493 // Pluck off n bytes from an array of buffers.
75494 // Length is the combined lengths of all the buffers in the list.
75495 // This function is designed to be inlinable, so please take care when making
75496 // changes to the function body.
75497 function fromList(n, state) {
75498 // nothing buffered
75499 if (state.length === 0) return null;
75500
75501 var ret;
75502 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
75503 // read it all, truncate the list
75504 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);
75505 state.buffer.clear();
75506 } else {
75507 // read part of list
75508 ret = fromListPartial(n, state.buffer, state.decoder);
75509 }
75510
75511 return ret;
75512 }
75513
75514 // Extracts only enough buffered data to satisfy the amount requested.
75515 // This function is designed to be inlinable, so please take care when making
75516 // changes to the function body.
75517 function fromListPartial(n, list, hasStrings) {
75518 var ret;
75519 if (n < list.head.data.length) {
75520 // slice is the same for buffers and strings
75521 ret = list.head.data.slice(0, n);
75522 list.head.data = list.head.data.slice(n);
75523 } else if (n === list.head.data.length) {
75524 // first chunk is a perfect match
75525 ret = list.shift();
75526 } else {
75527 // result spans more than one buffer
75528 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
75529 }
75530 return ret;
75531 }
75532
75533 // Copies a specified amount of characters from the list of buffered data
75534 // chunks.
75535 // This function is designed to be inlinable, so please take care when making
75536 // changes to the function body.
75537 function copyFromBufferString(n, list) {
75538 var p = list.head;
75539 var c = 1;
75540 var ret = p.data;
75541 n -= ret.length;
75542 while (p = p.next) {
75543 var str = p.data;
75544 var nb = n > str.length ? str.length : n;
75545 if (nb === str.length) ret += str;else ret += str.slice(0, n);
75546 n -= nb;
75547 if (n === 0) {
75548 if (nb === str.length) {
75549 ++c;
75550 if (p.next) list.head = p.next;else list.head = list.tail = null;
75551 } else {
75552 list.head = p;
75553 p.data = str.slice(nb);
75554 }
75555 break;
75556 }
75557 ++c;
75558 }
75559 list.length -= c;
75560 return ret;
75561 }
75562
75563 // Copies a specified amount of bytes from the list of buffered data chunks.
75564 // This function is designed to be inlinable, so please take care when making
75565 // changes to the function body.
75566 function copyFromBuffer(n, list) {
75567 var ret = bufferShim.allocUnsafe(n);
75568 var p = list.head;
75569 var c = 1;
75570 p.data.copy(ret);
75571 n -= p.data.length;
75572 while (p = p.next) {
75573 var buf = p.data;
75574 var nb = n > buf.length ? buf.length : n;
75575 buf.copy(ret, ret.length - n, 0, nb);
75576 n -= nb;
75577 if (n === 0) {
75578 if (nb === buf.length) {
75579 ++c;
75580 if (p.next) list.head = p.next;else list.head = list.tail = null;
75581 } else {
75582 list.head = p;
75583 p.data = buf.slice(nb);
75584 }
75585 break;
75586 }
75587 ++c;
75588 }
75589 list.length -= c;
75590 return ret;
75591 }
75592
75593 function endReadable(stream) {
75594 var state = stream._readableState;
75595
75596 // If we get here before consuming all the bytes, then that is a
75597 // bug in node. Should never happen.
75598 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
75599
75600 if (!state.endEmitted) {
75601 state.ended = true;
75602 processNextTick(endReadableNT, state, stream);
75603 }
75604 }
75605
75606 function endReadableNT(state, stream) {
75607 // Check that we didn't get one last unshift.
75608 if (!state.endEmitted && state.length === 0) {
75609 state.endEmitted = true;
75610 stream.readable = false;
75611 stream.emit('end');
75612 }
75613 }
75614
75615 function forEach(xs, f) {
75616 for (var i = 0, l = xs.length; i < l; i++) {
75617 f(xs[i], i);
75618 }
75619 }
75620
75621 function indexOf(xs, x) {
75622 for (var i = 0, l = xs.length; i < l; i++) {
75623 if (xs[i] === x) return i;
75624 }
75625 return -1;
75626 }
75627 }).call(this,require('_process'))
75628 },{"./_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){
75629 // a transform stream is a readable/writable stream where you do
75630 // something with the data. Sometimes it's called a "filter",
75631 // but that's not a great name for it, since that implies a thing where
75632 // some bits pass through, and others are simply ignored. (That would
75633 // be a valid example of a transform, of course.)
75634 //
75635 // While the output is causally related to the input, it's not a
75636 // necessarily symmetric or synchronous transformation. For example,
75637 // a zlib stream might take multiple plain-text writes(), and then
75638 // emit a single compressed chunk some time in the future.
75639 //
75640 // Here's how this works:
75641 //
75642 // The Transform stream has all the aspects of the readable and writable
75643 // stream classes. When you write(chunk), that calls _write(chunk,cb)
75644 // internally, and returns false if there's a lot of pending writes
75645 // buffered up. When you call read(), that calls _read(n) until
75646 // there's enough pending readable data buffered up.
75647 //
75648 // In a transform stream, the written data is placed in a buffer. When
75649 // _read(n) is called, it transforms the queued up data, calling the
75650 // buffered _write cb's as it consumes chunks. If consuming a single
75651 // written chunk would result in multiple output chunks, then the first
75652 // outputted bit calls the readcb, and subsequent chunks just go into
75653 // the read buffer, and will cause it to emit 'readable' if necessary.
75654 //
75655 // This way, back-pressure is actually determined by the reading side,
75656 // since _read has to be called to start processing a new chunk. However,
75657 // a pathological inflate type of transform can cause excessive buffering
75658 // here. For example, imagine a stream where every byte of input is
75659 // interpreted as an integer from 0-255, and then results in that many
75660 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
75661 // 1kb of data being output. In this case, you could write a very small
75662 // amount of input, and end up with a very large amount of output. In
75663 // such a pathological inflating mechanism, there'd be no way to tell
75664 // the system to stop doing the transform. A single 4MB write could
75665 // cause the system to run out of memory.
75666 //
75667 // However, even in such a pathological case, only a single written chunk
75668 // would be consumed, and then the rest would wait (un-transformed) until
75669 // the results of the previous transformed chunk were consumed.
75670
75671 'use strict';
75672
75673 module.exports = Transform;
75674
75675 var Duplex = require('./_stream_duplex');
75676
75677 /*<replacement>*/
75678 var util = require('core-util-is');
75679 util.inherits = require('inherits');
75680 /*</replacement>*/
75681
75682 util.inherits(Transform, Duplex);
75683
75684 function TransformState(stream) {
75685 this.afterTransform = function (er, data) {
75686 return afterTransform(stream, er, data);
75687 };
75688
75689 this.needTransform = false;
75690 this.transforming = false;
75691 this.writecb = null;
75692 this.writechunk = null;
75693 this.writeencoding = null;
75694 }
75695
75696 function afterTransform(stream, er, data) {
75697 var ts = stream._transformState;
75698 ts.transforming = false;
75699
75700 var cb = ts.writecb;
75701
75702 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
75703
75704 ts.writechunk = null;
75705 ts.writecb = null;
75706
75707 if (data !== null && data !== undefined) stream.push(data);
75708
75709 cb(er);
75710
75711 var rs = stream._readableState;
75712 rs.reading = false;
75713 if (rs.needReadable || rs.length < rs.highWaterMark) {
75714 stream._read(rs.highWaterMark);
75715 }
75716 }
75717
75718 function Transform(options) {
75719 if (!(this instanceof Transform)) return new Transform(options);
75720
75721 Duplex.call(this, options);
75722
75723 this._transformState = new TransformState(this);
75724
75725 var stream = this;
75726
75727 // start out asking for a readable event once data is transformed.
75728 this._readableState.needReadable = true;
75729
75730 // we have implemented the _read method, and done the other things
75731 // that Readable wants before the first _read call, so unset the
75732 // sync guard flag.
75733 this._readableState.sync = false;
75734
75735 if (options) {
75736 if (typeof options.transform === 'function') this._transform = options.transform;
75737
75738 if (typeof options.flush === 'function') this._flush = options.flush;
75739 }
75740
75741 // When the writable side finishes, then flush out anything remaining.
75742 this.once('prefinish', function () {
75743 if (typeof this._flush === 'function') this._flush(function (er, data) {
75744 done(stream, er, data);
75745 });else done(stream);
75746 });
75747 }
75748
75749 Transform.prototype.push = function (chunk, encoding) {
75750 this._transformState.needTransform = false;
75751 return Duplex.prototype.push.call(this, chunk, encoding);
75752 };
75753
75754 // This is the part where you do stuff!
75755 // override this function in implementation classes.
75756 // 'chunk' is an input chunk.
75757 //
75758 // Call `push(newChunk)` to pass along transformed output
75759 // to the readable side. You may call 'push' zero or more times.
75760 //
75761 // Call `cb(err)` when you are done with this chunk. If you pass
75762 // an error, then that'll put the hurt on the whole operation. If you
75763 // never call cb(), then you'll never get another chunk.
75764 Transform.prototype._transform = function (chunk, encoding, cb) {
75765 throw new Error('_transform() is not implemented');
75766 };
75767
75768 Transform.prototype._write = function (chunk, encoding, cb) {
75769 var ts = this._transformState;
75770 ts.writecb = cb;
75771 ts.writechunk = chunk;
75772 ts.writeencoding = encoding;
75773 if (!ts.transforming) {
75774 var rs = this._readableState;
75775 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
75776 }
75777 };
75778
75779 // Doesn't matter what the args are here.
75780 // _transform does all the work.
75781 // That we got here means that the readable side wants more data.
75782 Transform.prototype._read = function (n) {
75783 var ts = this._transformState;
75784
75785 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
75786 ts.transforming = true;
75787 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
75788 } else {
75789 // mark that we need a transform, so that any data that comes in
75790 // will get processed, now that we've asked for it.
75791 ts.needTransform = true;
75792 }
75793 };
75794
75795 function done(stream, er, data) {
75796 if (er) return stream.emit('error', er);
75797
75798 if (data !== null && data !== undefined) stream.push(data);
75799
75800 // if there's nothing in the write buffer, then that means
75801 // that nothing more will ever be provided
75802 var ws = stream._writableState;
75803 var ts = stream._transformState;
75804
75805 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
75806
75807 if (ts.transforming) throw new Error('Calling transform done when still transforming');
75808
75809 return stream.push(null);
75810 }
75811 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
75812 (function (process){
75813 // A bit simpler than readable streams.
75814 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
75815 // the drain event emission and buffering.
75816
75817 'use strict';
75818
75819 module.exports = Writable;
75820
75821 /*<replacement>*/
75822 var processNextTick = require('process-nextick-args');
75823 /*</replacement>*/
75824
75825 /*<replacement>*/
75826 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
75827 /*</replacement>*/
75828
75829 /*<replacement>*/
75830 var Duplex;
75831 /*</replacement>*/
75832
75833 Writable.WritableState = WritableState;
75834
75835 /*<replacement>*/
75836 var util = require('core-util-is');
75837 util.inherits = require('inherits');
75838 /*</replacement>*/
75839
75840 /*<replacement>*/
75841 var internalUtil = {
75842 deprecate: require('util-deprecate')
75843 };
75844 /*</replacement>*/
75845
75846 /*<replacement>*/
75847 var Stream;
75848 (function () {
75849 try {
75850 Stream = require('st' + 'ream');
75851 } catch (_) {} finally {
75852 if (!Stream) Stream = require('events').EventEmitter;
75853 }
75854 })();
75855 /*</replacement>*/
75856
75857 var Buffer = require('buffer').Buffer;
75858 /*<replacement>*/
75859 var bufferShim = require('buffer-shims');
75860 /*</replacement>*/
75861
75862 util.inherits(Writable, Stream);
75863
75864 function nop() {}
75865
75866 function WriteReq(chunk, encoding, cb) {
75867 this.chunk = chunk;
75868 this.encoding = encoding;
75869 this.callback = cb;
75870 this.next = null;
75871 }
75872
75873 function WritableState(options, stream) {
75874 Duplex = Duplex || require('./_stream_duplex');
75875
75876 options = options || {};
75877
75878 // object stream flag to indicate whether or not this stream
75879 // contains buffers or objects.
75880 this.objectMode = !!options.objectMode;
75881
75882 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
75883
75884 // the point at which write() starts returning false
75885 // Note: 0 is a valid value, means that we always return false if
75886 // the entire buffer is not flushed immediately on write()
75887 var hwm = options.highWaterMark;
75888 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
75889 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
75890
75891 // cast to ints.
75892 this.highWaterMark = ~ ~this.highWaterMark;
75893
75894 // drain event flag.
75895 this.needDrain = false;
75896 // at the start of calling end()
75897 this.ending = false;
75898 // when end() has been called, and returned
75899 this.ended = false;
75900 // when 'finish' is emitted
75901 this.finished = false;
75902
75903 // should we decode strings into buffers before passing to _write?
75904 // this is here so that some node-core streams can optimize string
75905 // handling at a lower level.
75906 var noDecode = options.decodeStrings === false;
75907 this.decodeStrings = !noDecode;
75908
75909 // Crypto is kind of old and crusty. Historically, its default string
75910 // encoding is 'binary' so we have to make this configurable.
75911 // Everything else in the universe uses 'utf8', though.
75912 this.defaultEncoding = options.defaultEncoding || 'utf8';
75913
75914 // not an actual buffer we keep track of, but a measurement
75915 // of how much we're waiting to get pushed to some underlying
75916 // socket or file.
75917 this.length = 0;
75918
75919 // a flag to see when we're in the middle of a write.
75920 this.writing = false;
75921
75922 // when true all writes will be buffered until .uncork() call
75923 this.corked = 0;
75924
75925 // a flag to be able to tell if the onwrite cb is called immediately,
75926 // or on a later tick. We set this to true at first, because any
75927 // actions that shouldn't happen until "later" should generally also
75928 // not happen before the first write call.
75929 this.sync = true;
75930
75931 // a flag to know if we're processing previously buffered items, which
75932 // may call the _write() callback in the same tick, so that we don't
75933 // end up in an overlapped onwrite situation.
75934 this.bufferProcessing = false;
75935
75936 // the callback that's passed to _write(chunk,cb)
75937 this.onwrite = function (er) {
75938 onwrite(stream, er);
75939 };
75940
75941 // the callback that the user supplies to write(chunk,encoding,cb)
75942 this.writecb = null;
75943
75944 // the amount that is being written when _write is called.
75945 this.writelen = 0;
75946
75947 this.bufferedRequest = null;
75948 this.lastBufferedRequest = null;
75949
75950 // number of pending user-supplied write callbacks
75951 // this must be 0 before 'finish' can be emitted
75952 this.pendingcb = 0;
75953
75954 // emit prefinish if the only thing we're waiting for is _write cbs
75955 // This is relevant for synchronous Transform streams
75956 this.prefinished = false;
75957
75958 // True if the error was already emitted and should not be thrown again
75959 this.errorEmitted = false;
75960
75961 // count buffered requests
75962 this.bufferedRequestCount = 0;
75963
75964 // allocate the first CorkedRequest, there is always
75965 // one allocated and free to use, and we maintain at most two
75966 this.corkedRequestsFree = new CorkedRequest(this);
75967 }
75968
75969 WritableState.prototype.getBuffer = function getBuffer() {
75970 var current = this.bufferedRequest;
75971 var out = [];
75972 while (current) {
75973 out.push(current);
75974 current = current.next;
75975 }
75976 return out;
75977 };
75978
75979 (function () {
75980 try {
75981 Object.defineProperty(WritableState.prototype, 'buffer', {
75982 get: internalUtil.deprecate(function () {
75983 return this.getBuffer();
75984 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
75985 });
75986 } catch (_) {}
75987 })();
75988
75989 // Test _writableState for inheritance to account for Duplex streams,
75990 // whose prototype chain only points to Readable.
75991 var realHasInstance;
75992 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
75993 realHasInstance = Function.prototype[Symbol.hasInstance];
75994 Object.defineProperty(Writable, Symbol.hasInstance, {
75995 value: function (object) {
75996 if (realHasInstance.call(this, object)) return true;
75997
75998 return object && object._writableState instanceof WritableState;
75999 }
76000 });
76001 } else {
76002 realHasInstance = function (object) {
76003 return object instanceof this;
76004 };
76005 }
76006
76007 function Writable(options) {
76008 Duplex = Duplex || require('./_stream_duplex');
76009
76010 // Writable ctor is applied to Duplexes, too.
76011 // `realHasInstance` is necessary because using plain `instanceof`
76012 // would return false, as no `_writableState` property is attached.
76013
76014 // Trying to use the custom `instanceof` for Writable here will also break the
76015 // Node.js LazyTransform implementation, which has a non-trivial getter for
76016 // `_writableState` that would lead to infinite recursion.
76017 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
76018 return new Writable(options);
76019 }
76020
76021 this._writableState = new WritableState(options, this);
76022
76023 // legacy.
76024 this.writable = true;
76025
76026 if (options) {
76027 if (typeof options.write === 'function') this._write = options.write;
76028
76029 if (typeof options.writev === 'function') this._writev = options.writev;
76030 }
76031
76032 Stream.call(this);
76033 }
76034
76035 // Otherwise people can pipe Writable streams, which is just wrong.
76036 Writable.prototype.pipe = function () {
76037 this.emit('error', new Error('Cannot pipe, not readable'));
76038 };
76039
76040 function writeAfterEnd(stream, cb) {
76041 var er = new Error('write after end');
76042 // TODO: defer error events consistently everywhere, not just the cb
76043 stream.emit('error', er);
76044 processNextTick(cb, er);
76045 }
76046
76047 // If we get something that is not a buffer, string, null, or undefined,
76048 // and we're not in objectMode, then that's an error.
76049 // Otherwise stream chunks are all considered to be of length=1, and the
76050 // watermarks determine how many objects to keep in the buffer, rather than
76051 // how many bytes or characters.
76052 function validChunk(stream, state, chunk, cb) {
76053 var valid = true;
76054 var er = false;
76055 // Always throw error if a null is written
76056 // if we are not in object mode then throw
76057 // if it is not a buffer, string, or undefined.
76058 if (chunk === null) {
76059 er = new TypeError('May not write null values to stream');
76060 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
76061 er = new TypeError('Invalid non-string/buffer chunk');
76062 }
76063 if (er) {
76064 stream.emit('error', er);
76065 processNextTick(cb, er);
76066 valid = false;
76067 }
76068 return valid;
76069 }
76070
76071 Writable.prototype.write = function (chunk, encoding, cb) {
76072 var state = this._writableState;
76073 var ret = false;
76074
76075 if (typeof encoding === 'function') {
76076 cb = encoding;
76077 encoding = null;
76078 }
76079
76080 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
76081
76082 if (typeof cb !== 'function') cb = nop;
76083
76084 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
76085 state.pendingcb++;
76086 ret = writeOrBuffer(this, state, chunk, encoding, cb);
76087 }
76088
76089 return ret;
76090 };
76091
76092 Writable.prototype.cork = function () {
76093 var state = this._writableState;
76094
76095 state.corked++;
76096 };
76097
76098 Writable.prototype.uncork = function () {
76099 var state = this._writableState;
76100
76101 if (state.corked) {
76102 state.corked--;
76103
76104 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
76105 }
76106 };
76107
76108 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
76109 // node::ParseEncoding() requires lower case.
76110 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
76111 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);
76112 this._writableState.defaultEncoding = encoding;
76113 return this;
76114 };
76115
76116 function decodeChunk(state, chunk, encoding) {
76117 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
76118 chunk = bufferShim.from(chunk, encoding);
76119 }
76120 return chunk;
76121 }
76122
76123 // if we're already writing something, then just put this
76124 // in the queue, and wait our turn. Otherwise, call _write
76125 // If we return false, then we need a drain event, so set that flag.
76126 function writeOrBuffer(stream, state, chunk, encoding, cb) {
76127 chunk = decodeChunk(state, chunk, encoding);
76128
76129 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
76130 var len = state.objectMode ? 1 : chunk.length;
76131
76132 state.length += len;
76133
76134 var ret = state.length < state.highWaterMark;
76135 // we must ensure that previous needDrain will not be reset to false.
76136 if (!ret) state.needDrain = true;
76137
76138 if (state.writing || state.corked) {
76139 var last = state.lastBufferedRequest;
76140 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
76141 if (last) {
76142 last.next = state.lastBufferedRequest;
76143 } else {
76144 state.bufferedRequest = state.lastBufferedRequest;
76145 }
76146 state.bufferedRequestCount += 1;
76147 } else {
76148 doWrite(stream, state, false, len, chunk, encoding, cb);
76149 }
76150
76151 return ret;
76152 }
76153
76154 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
76155 state.writelen = len;
76156 state.writecb = cb;
76157 state.writing = true;
76158 state.sync = true;
76159 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
76160 state.sync = false;
76161 }
76162
76163 function onwriteError(stream, state, sync, er, cb) {
76164 --state.pendingcb;
76165 if (sync) processNextTick(cb, er);else cb(er);
76166
76167 stream._writableState.errorEmitted = true;
76168 stream.emit('error', er);
76169 }
76170
76171 function onwriteStateUpdate(state) {
76172 state.writing = false;
76173 state.writecb = null;
76174 state.length -= state.writelen;
76175 state.writelen = 0;
76176 }
76177
76178 function onwrite(stream, er) {
76179 var state = stream._writableState;
76180 var sync = state.sync;
76181 var cb = state.writecb;
76182
76183 onwriteStateUpdate(state);
76184
76185 if (er) onwriteError(stream, state, sync, er, cb);else {
76186 // Check if we're actually ready to finish, but don't emit yet
76187 var finished = needFinish(state);
76188
76189 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
76190 clearBuffer(stream, state);
76191 }
76192
76193 if (sync) {
76194 /*<replacement>*/
76195 asyncWrite(afterWrite, stream, state, finished, cb);
76196 /*</replacement>*/
76197 } else {
76198 afterWrite(stream, state, finished, cb);
76199 }
76200 }
76201 }
76202
76203 function afterWrite(stream, state, finished, cb) {
76204 if (!finished) onwriteDrain(stream, state);
76205 state.pendingcb--;
76206 cb();
76207 finishMaybe(stream, state);
76208 }
76209
76210 // Must force callback to be called on nextTick, so that we don't
76211 // emit 'drain' before the write() consumer gets the 'false' return
76212 // value, and has a chance to attach a 'drain' listener.
76213 function onwriteDrain(stream, state) {
76214 if (state.length === 0 && state.needDrain) {
76215 state.needDrain = false;
76216 stream.emit('drain');
76217 }
76218 }
76219
76220 // if there's something in the buffer waiting, then process it
76221 function clearBuffer(stream, state) {
76222 state.bufferProcessing = true;
76223 var entry = state.bufferedRequest;
76224
76225 if (stream._writev && entry && entry.next) {
76226 // Fast case, write everything using _writev()
76227 var l = state.bufferedRequestCount;
76228 var buffer = new Array(l);
76229 var holder = state.corkedRequestsFree;
76230 holder.entry = entry;
76231
76232 var count = 0;
76233 while (entry) {
76234 buffer[count] = entry;
76235 entry = entry.next;
76236 count += 1;
76237 }
76238
76239 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
76240
76241 // doWrite is almost always async, defer these to save a bit of time
76242 // as the hot path ends with doWrite
76243 state.pendingcb++;
76244 state.lastBufferedRequest = null;
76245 if (holder.next) {
76246 state.corkedRequestsFree = holder.next;
76247 holder.next = null;
76248 } else {
76249 state.corkedRequestsFree = new CorkedRequest(state);
76250 }
76251 } else {
76252 // Slow case, write chunks one-by-one
76253 while (entry) {
76254 var chunk = entry.chunk;
76255 var encoding = entry.encoding;
76256 var cb = entry.callback;
76257 var len = state.objectMode ? 1 : chunk.length;
76258
76259 doWrite(stream, state, false, len, chunk, encoding, cb);
76260 entry = entry.next;
76261 // if we didn't call the onwrite immediately, then
76262 // it means that we need to wait until it does.
76263 // also, that means that the chunk and cb are currently
76264 // being processed, so move the buffer counter past them.
76265 if (state.writing) {
76266 break;
76267 }
76268 }
76269
76270 if (entry === null) state.lastBufferedRequest = null;
76271 }
76272
76273 state.bufferedRequestCount = 0;
76274 state.bufferedRequest = entry;
76275 state.bufferProcessing = false;
76276 }
76277
76278 Writable.prototype._write = function (chunk, encoding, cb) {
76279 cb(new Error('_write() is not implemented'));
76280 };
76281
76282 Writable.prototype._writev = null;
76283
76284 Writable.prototype.end = function (chunk, encoding, cb) {
76285 var state = this._writableState;
76286
76287 if (typeof chunk === 'function') {
76288 cb = chunk;
76289 chunk = null;
76290 encoding = null;
76291 } else if (typeof encoding === 'function') {
76292 cb = encoding;
76293 encoding = null;
76294 }
76295
76296 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
76297
76298 // .end() fully uncorks
76299 if (state.corked) {
76300 state.corked = 1;
76301 this.uncork();
76302 }
76303
76304 // ignore unnecessary end() calls.
76305 if (!state.ending && !state.finished) endWritable(this, state, cb);
76306 };
76307
76308 function needFinish(state) {
76309 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
76310 }
76311
76312 function prefinish(stream, state) {
76313 if (!state.prefinished) {
76314 state.prefinished = true;
76315 stream.emit('prefinish');
76316 }
76317 }
76318
76319 function finishMaybe(stream, state) {
76320 var need = needFinish(state);
76321 if (need) {
76322 if (state.pendingcb === 0) {
76323 prefinish(stream, state);
76324 state.finished = true;
76325 stream.emit('finish');
76326 } else {
76327 prefinish(stream, state);
76328 }
76329 }
76330 return need;
76331 }
76332
76333 function endWritable(stream, state, cb) {
76334 state.ending = true;
76335 finishMaybe(stream, state);
76336 if (cb) {
76337 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
76338 }
76339 state.ended = true;
76340 stream.writable = false;
76341 }
76342
76343 // It seems a linked list but it is not
76344 // there will be only 2 of these for each stream
76345 function CorkedRequest(state) {
76346 var _this = this;
76347
76348 this.next = null;
76349 this.entry = null;
76350
76351 this.finish = function (err) {
76352 var entry = _this.entry;
76353 _this.entry = null;
76354 while (entry) {
76355 var cb = entry.callback;
76356 state.pendingcb--;
76357 cb(err);
76358 entry = entry.next;
76359 }
76360 if (state.corkedRequestsFree) {
76361 state.corkedRequestsFree.next = _this;
76362 } else {
76363 state.corkedRequestsFree = _this;
76364 }
76365 };
76366 }
76367 }).call(this,require('_process'))
76368 },{"./_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){
76369 'use strict';
76370
76371 var Buffer = require('buffer').Buffer;
76372 /*<replacement>*/
76373 var bufferShim = require('buffer-shims');
76374 /*</replacement>*/
76375
76376 module.exports = BufferList;
76377
76378 function BufferList() {
76379 this.head = null;
76380 this.tail = null;
76381 this.length = 0;
76382 }
76383
76384 BufferList.prototype.push = function (v) {
76385 var entry = { data: v, next: null };
76386 if (this.length > 0) this.tail.next = entry;else this.head = entry;
76387 this.tail = entry;
76388 ++this.length;
76389 };
76390
76391 BufferList.prototype.unshift = function (v) {
76392 var entry = { data: v, next: this.head };
76393 if (this.length === 0) this.tail = entry;
76394 this.head = entry;
76395 ++this.length;
76396 };
76397
76398 BufferList.prototype.shift = function () {
76399 if (this.length === 0) return;
76400 var ret = this.head.data;
76401 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
76402 --this.length;
76403 return ret;
76404 };
76405
76406 BufferList.prototype.clear = function () {
76407 this.head = this.tail = null;
76408 this.length = 0;
76409 };
76410
76411 BufferList.prototype.join = function (s) {
76412 if (this.length === 0) return '';
76413 var p = this.head;
76414 var ret = '' + p.data;
76415 while (p = p.next) {
76416 ret += s + p.data;
76417 }return ret;
76418 };
76419
76420 BufferList.prototype.concat = function (n) {
76421 if (this.length === 0) return bufferShim.alloc(0);
76422 if (this.length === 1) return this.head.data;
76423 var ret = bufferShim.allocUnsafe(n >>> 0);
76424 var p = this.head;
76425 var i = 0;
76426 while (p) {
76427 p.data.copy(ret, i);
76428 i += p.data.length;
76429 p = p.next;
76430 }
76431 return ret;
76432 };
76433 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
76434 module.exports = require("./lib/_stream_passthrough.js")
76435
76436 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
76437 (function (process){
76438 var Stream = (function (){
76439 try {
76440 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
76441 } catch(_){}
76442 }());
76443 exports = module.exports = require('./lib/_stream_readable.js');
76444 exports.Stream = Stream || exports;
76445 exports.Readable = exports;
76446 exports.Writable = require('./lib/_stream_writable.js');
76447 exports.Duplex = require('./lib/_stream_duplex.js');
76448 exports.Transform = require('./lib/_stream_transform.js');
76449 exports.PassThrough = require('./lib/_stream_passthrough.js');
76450
76451 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
76452 module.exports = Stream;
76453 }
76454
76455 }).call(this,require('_process'))
76456 },{"./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){
76457 module.exports = require("./lib/_stream_transform.js")
76458
76459 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
76460 module.exports = require("./lib/_stream_writable.js")
76461
76462 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
76463 // Copyright Joyent, Inc. and other Node contributors.
76464 //
76465 // Permission is hereby granted, free of charge, to any person obtaining a
76466 // copy of this software and associated documentation files (the
76467 // "Software"), to deal in the Software without restriction, including
76468 // without limitation the rights to use, copy, modify, merge, publish,
76469 // distribute, sublicense, and/or sell copies of the Software, and to permit
76470 // persons to whom the Software is furnished to do so, subject to the
76471 // following conditions:
76472 //
76473 // The above copyright notice and this permission notice shall be included
76474 // in all copies or substantial portions of the Software.
76475 //
76476 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76477 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76478 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76479 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76480 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76481 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76482 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76483
76484 module.exports = Stream;
76485
76486 var EE = require('events').EventEmitter;
76487 var inherits = require('inherits');
76488
76489 inherits(Stream, EE);
76490 Stream.Readable = require('readable-stream/readable.js');
76491 Stream.Writable = require('readable-stream/writable.js');
76492 Stream.Duplex = require('readable-stream/duplex.js');
76493 Stream.Transform = require('readable-stream/transform.js');
76494 Stream.PassThrough = require('readable-stream/passthrough.js');
76495
76496 // Backwards-compat with node 0.4.x
76497 Stream.Stream = Stream;
76498
76499
76500
76501 // old-style streams. Note that the pipe method (the only relevant
76502 // part of this class) is overridden in the Readable class.
76503
76504 function Stream() {
76505 EE.call(this);
76506 }
76507
76508 Stream.prototype.pipe = function(dest, options) {
76509 var source = this;
76510
76511 function ondata(chunk) {
76512 if (dest.writable) {
76513 if (false === dest.write(chunk) && source.pause) {
76514 source.pause();
76515 }
76516 }
76517 }
76518
76519 source.on('data', ondata);
76520
76521 function ondrain() {
76522 if (source.readable && source.resume) {
76523 source.resume();
76524 }
76525 }
76526
76527 dest.on('drain', ondrain);
76528
76529 // If the 'end' option is not supplied, dest.end() will be called when
76530 // source gets the 'end' or 'close' events. Only dest.end() once.
76531 if (!dest._isStdio && (!options || options.end !== false)) {
76532 source.on('end', onend);
76533 source.on('close', onclose);
76534 }
76535
76536 var didOnEnd = false;
76537 function onend() {
76538 if (didOnEnd) return;
76539 didOnEnd = true;
76540
76541 dest.end();
76542 }
76543
76544
76545 function onclose() {
76546 if (didOnEnd) return;
76547 didOnEnd = true;
76548
76549 if (typeof dest.destroy === 'function') dest.destroy();
76550 }
76551
76552 // don't leave dangling pipes when there are errors.
76553 function onerror(er) {
76554 cleanup();
76555 if (EE.listenerCount(this, 'error') === 0) {
76556 throw er; // Unhandled stream error in pipe.
76557 }
76558 }
76559
76560 source.on('error', onerror);
76561 dest.on('error', onerror);
76562
76563 // remove all the event listeners that were added.
76564 function cleanup() {
76565 source.removeListener('data', ondata);
76566 dest.removeListener('drain', ondrain);
76567
76568 source.removeListener('end', onend);
76569 source.removeListener('close', onclose);
76570
76571 source.removeListener('error', onerror);
76572 dest.removeListener('error', onerror);
76573
76574 source.removeListener('end', cleanup);
76575 source.removeListener('close', cleanup);
76576
76577 dest.removeListener('close', cleanup);
76578 }
76579
76580 source.on('end', cleanup);
76581 source.on('close', cleanup);
76582
76583 dest.on('close', cleanup);
76584
76585 dest.emit('pipe', source);
76586
76587 // Allow for unix-like usage: A.pipe(B).pipe(C)
76588 return dest;
76589 };
76590
76591 },{"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){
76592 // Copyright Joyent, Inc. and other Node contributors.
76593 //
76594 // Permission is hereby granted, free of charge, to any person obtaining a
76595 // copy of this software and associated documentation files (the
76596 // "Software"), to deal in the Software without restriction, including
76597 // without limitation the rights to use, copy, modify, merge, publish,
76598 // distribute, sublicense, and/or sell copies of the Software, and to permit
76599 // persons to whom the Software is furnished to do so, subject to the
76600 // following conditions:
76601 //
76602 // The above copyright notice and this permission notice shall be included
76603 // in all copies or substantial portions of the Software.
76604 //
76605 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76606 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76607 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76608 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76609 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76610 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76611 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76612
76613 var Buffer = require('buffer').Buffer;
76614
76615 var isBufferEncoding = Buffer.isEncoding
76616 || function(encoding) {
76617 switch (encoding && encoding.toLowerCase()) {
76618 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;
76619 default: return false;
76620 }
76621 }
76622
76623
76624 function assertEncoding(encoding) {
76625 if (encoding && !isBufferEncoding(encoding)) {
76626 throw new Error('Unknown encoding: ' + encoding);
76627 }
76628 }
76629
76630 // StringDecoder provides an interface for efficiently splitting a series of
76631 // buffers into a series of JS strings without breaking apart multi-byte
76632 // characters. CESU-8 is handled as part of the UTF-8 encoding.
76633 //
76634 // @TODO Handling all encodings inside a single object makes it very difficult
76635 // to reason about this code, so it should be split up in the future.
76636 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
76637 // points as used by CESU-8.
76638 var StringDecoder = exports.StringDecoder = function(encoding) {
76639 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
76640 assertEncoding(encoding);
76641 switch (this.encoding) {
76642 case 'utf8':
76643 // CESU-8 represents each of Surrogate Pair by 3-bytes
76644 this.surrogateSize = 3;
76645 break;
76646 case 'ucs2':
76647 case 'utf16le':
76648 // UTF-16 represents each of Surrogate Pair by 2-bytes
76649 this.surrogateSize = 2;
76650 this.detectIncompleteChar = utf16DetectIncompleteChar;
76651 break;
76652 case 'base64':
76653 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
76654 this.surrogateSize = 3;
76655 this.detectIncompleteChar = base64DetectIncompleteChar;
76656 break;
76657 default:
76658 this.write = passThroughWrite;
76659 return;
76660 }
76661
76662 // Enough space to store all bytes of a single character. UTF-8 needs 4
76663 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
76664 this.charBuffer = new Buffer(6);
76665 // Number of bytes received for the current incomplete multi-byte character.
76666 this.charReceived = 0;
76667 // Number of bytes expected for the current incomplete multi-byte character.
76668 this.charLength = 0;
76669 };
76670
76671
76672 // write decodes the given buffer and returns it as JS string that is
76673 // guaranteed to not contain any partial multi-byte characters. Any partial
76674 // character found at the end of the buffer is buffered up, and will be
76675 // returned when calling write again with the remaining bytes.
76676 //
76677 // Note: Converting a Buffer containing an orphan surrogate to a String
76678 // currently works, but converting a String to a Buffer (via `new Buffer`, or
76679 // Buffer#write) will replace incomplete surrogates with the unicode
76680 // replacement character. See https://codereview.chromium.org/121173009/ .
76681 StringDecoder.prototype.write = function(buffer) {
76682 var charStr = '';
76683 // if our last write ended with an incomplete multibyte character
76684 while (this.charLength) {
76685 // determine how many remaining bytes this buffer has to offer for this char
76686 var available = (buffer.length >= this.charLength - this.charReceived) ?
76687 this.charLength - this.charReceived :
76688 buffer.length;
76689
76690 // add the new bytes to the char buffer
76691 buffer.copy(this.charBuffer, this.charReceived, 0, available);
76692 this.charReceived += available;
76693
76694 if (this.charReceived < this.charLength) {
76695 // still not enough chars in this buffer? wait for more ...
76696 return '';
76697 }
76698
76699 // remove bytes belonging to the current character from the buffer
76700 buffer = buffer.slice(available, buffer.length);
76701
76702 // get the character that was split
76703 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
76704
76705 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76706 var charCode = charStr.charCodeAt(charStr.length - 1);
76707 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76708 this.charLength += this.surrogateSize;
76709 charStr = '';
76710 continue;
76711 }
76712 this.charReceived = this.charLength = 0;
76713
76714 // if there are no more bytes in this buffer, just emit our char
76715 if (buffer.length === 0) {
76716 return charStr;
76717 }
76718 break;
76719 }
76720
76721 // determine and set charLength / charReceived
76722 this.detectIncompleteChar(buffer);
76723
76724 var end = buffer.length;
76725 if (this.charLength) {
76726 // buffer the incomplete character bytes we got
76727 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
76728 end -= this.charReceived;
76729 }
76730
76731 charStr += buffer.toString(this.encoding, 0, end);
76732
76733 var end = charStr.length - 1;
76734 var charCode = charStr.charCodeAt(end);
76735 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
76736 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
76737 var size = this.surrogateSize;
76738 this.charLength += size;
76739 this.charReceived += size;
76740 this.charBuffer.copy(this.charBuffer, size, 0, size);
76741 buffer.copy(this.charBuffer, 0, 0, size);
76742 return charStr.substring(0, end);
76743 }
76744
76745 // or just emit the charStr
76746 return charStr;
76747 };
76748
76749 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
76750 // the end of the given buffer. If so, it sets this.charLength to the byte
76751 // length that character, and sets this.charReceived to the number of bytes
76752 // that are available for this character.
76753 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
76754 // determine how many bytes we have to check at the end of this buffer
76755 var i = (buffer.length >= 3) ? 3 : buffer.length;
76756
76757 // Figure out if one of the last i bytes of our buffer announces an
76758 // incomplete char.
76759 for (; i > 0; i--) {
76760 var c = buffer[buffer.length - i];
76761
76762 // See http://en.wikipedia.org/wiki/UTF-8#Description
76763
76764 // 110XXXXX
76765 if (i == 1 && c >> 5 == 0x06) {
76766 this.charLength = 2;
76767 break;
76768 }
76769
76770 // 1110XXXX
76771 if (i <= 2 && c >> 4 == 0x0E) {
76772 this.charLength = 3;
76773 break;
76774 }
76775
76776 // 11110XXX
76777 if (i <= 3 && c >> 3 == 0x1E) {
76778 this.charLength = 4;
76779 break;
76780 }
76781 }
76782 this.charReceived = i;
76783 };
76784
76785 StringDecoder.prototype.end = function(buffer) {
76786 var res = '';
76787 if (buffer && buffer.length)
76788 res = this.write(buffer);
76789
76790 if (this.charReceived) {
76791 var cr = this.charReceived;
76792 var buf = this.charBuffer;
76793 var enc = this.encoding;
76794 res += buf.slice(0, cr).toString(enc);
76795 }
76796
76797 return res;
76798 };
76799
76800 function passThroughWrite(buffer) {
76801 return buffer.toString(this.encoding);
76802 }
76803
76804 function utf16DetectIncompleteChar(buffer) {
76805 this.charReceived = buffer.length % 2;
76806 this.charLength = this.charReceived ? 2 : 0;
76807 }
76808
76809 function base64DetectIncompleteChar(buffer) {
76810 this.charReceived = buffer.length % 3;
76811 this.charLength = this.charReceived ? 3 : 0;
76812 }
76813
76814 },{"buffer":5}],27:[function(require,module,exports){
76815 (function (global){
76816
76817 /**
76818 * Module exports.
76819 */
76820
76821 module.exports = deprecate;
76822
76823 /**
76824 * Mark that a method should not be used.
76825 * Returns a modified function which warns once by default.
76826 *
76827 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
76828 *
76829 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
76830 * will throw an Error when invoked.
76831 *
76832 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
76833 * will invoke `console.trace()` instead of `console.error()`.
76834 *
76835 * @param {Function} fn - the function to deprecate
76836 * @param {String} msg - the string to print to the console when `fn` is invoked
76837 * @returns {Function} a new "deprecated" version of `fn`
76838 * @api public
76839 */
76840
76841 function deprecate (fn, msg) {
76842 if (config('noDeprecation')) {
76843 return fn;
76844 }
76845
76846 var warned = false;
76847 function deprecated() {
76848 if (!warned) {
76849 if (config('throwDeprecation')) {
76850 throw new Error(msg);
76851 } else if (config('traceDeprecation')) {
76852 console.trace(msg);
76853 } else {
76854 console.warn(msg);
76855 }
76856 warned = true;
76857 }
76858 return fn.apply(this, arguments);
76859 }
76860
76861 return deprecated;
76862 }
76863
76864 /**
76865 * Checks `localStorage` for boolean values for the given `name`.
76866 *
76867 * @param {String} name
76868 * @returns {Boolean}
76869 * @api private
76870 */
76871
76872 function config (name) {
76873 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
76874 try {
76875 if (!global.localStorage) return false;
76876 } catch (_) {
76877 return false;
76878 }
76879 var val = global.localStorage[name];
76880 if (null == val) return false;
76881 return String(val).toLowerCase() === 'true';
76882 }
76883
76884 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
76885 },{}],28:[function(require,module,exports){
76886 arguments[4][9][0].apply(exports,arguments)
76887 },{"dup":9}],29:[function(require,module,exports){
76888 module.exports = function isBuffer(arg) {
76889 return arg && typeof arg === 'object'
76890 && typeof arg.copy === 'function'
76891 && typeof arg.fill === 'function'
76892 && typeof arg.readUInt8 === 'function';
76893 }
76894 },{}],30:[function(require,module,exports){
76895 (function (process,global){
76896 // Copyright Joyent, Inc. and other Node contributors.
76897 //
76898 // Permission is hereby granted, free of charge, to any person obtaining a
76899 // copy of this software and associated documentation files (the
76900 // "Software"), to deal in the Software without restriction, including
76901 // without limitation the rights to use, copy, modify, merge, publish,
76902 // distribute, sublicense, and/or sell copies of the Software, and to permit
76903 // persons to whom the Software is furnished to do so, subject to the
76904 // following conditions:
76905 //
76906 // The above copyright notice and this permission notice shall be included
76907 // in all copies or substantial portions of the Software.
76908 //
76909 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
76910 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
76911 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
76912 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
76913 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
76914 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
76915 // USE OR OTHER DEALINGS IN THE SOFTWARE.
76916
76917 var formatRegExp = /%[sdj%]/g;
76918 exports.format = function(f) {
76919 if (!isString(f)) {
76920 var objects = [];
76921 for (var i = 0; i < arguments.length; i++) {
76922 objects.push(inspect(arguments[i]));
76923 }
76924 return objects.join(' ');
76925 }
76926
76927 var i = 1;
76928 var args = arguments;
76929 var len = args.length;
76930 var str = String(f).replace(formatRegExp, function(x) {
76931 if (x === '%%') return '%';
76932 if (i >= len) return x;
76933 switch (x) {
76934 case '%s': return String(args[i++]);
76935 case '%d': return Number(args[i++]);
76936 case '%j':
76937 try {
76938 return JSON.stringify(args[i++]);
76939 } catch (_) {
76940 return '[Circular]';
76941 }
76942 default:
76943 return x;
76944 }
76945 });
76946 for (var x = args[i]; i < len; x = args[++i]) {
76947 if (isNull(x) || !isObject(x)) {
76948 str += ' ' + x;
76949 } else {
76950 str += ' ' + inspect(x);
76951 }
76952 }
76953 return str;
76954 };
76955
76956
76957 // Mark that a method should not be used.
76958 // Returns a modified function which warns once by default.
76959 // If --no-deprecation is set, then it is a no-op.
76960 exports.deprecate = function(fn, msg) {
76961 // Allow for deprecating things in the process of starting up.
76962 if (isUndefined(global.process)) {
76963 return function() {
76964 return exports.deprecate(fn, msg).apply(this, arguments);
76965 };
76966 }
76967
76968 if (process.noDeprecation === true) {
76969 return fn;
76970 }
76971
76972 var warned = false;
76973 function deprecated() {
76974 if (!warned) {
76975 if (process.throwDeprecation) {
76976 throw new Error(msg);
76977 } else if (process.traceDeprecation) {
76978 console.trace(msg);
76979 } else {
76980 console.error(msg);
76981 }
76982 warned = true;
76983 }
76984 return fn.apply(this, arguments);
76985 }
76986
76987 return deprecated;
76988 };
76989
76990
76991 var debugs = {};
76992 var debugEnviron;
76993 exports.debuglog = function(set) {
76994 if (isUndefined(debugEnviron))
76995 debugEnviron = process.env.NODE_DEBUG || '';
76996 set = set.toUpperCase();
76997 if (!debugs[set]) {
76998 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
76999 var pid = process.pid;
77000 debugs[set] = function() {
77001 var msg = exports.format.apply(exports, arguments);
77002 console.error('%s %d: %s', set, pid, msg);
77003 };
77004 } else {
77005 debugs[set] = function() {};
77006 }
77007 }
77008 return debugs[set];
77009 };
77010
77011
77012 /**
77013 * Echos the value of a value. Trys to print the value out
77014 * in the best way possible given the different types.
77015 *
77016 * @param {Object} obj The object to print out.
77017 * @param {Object} opts Optional options object that alters the output.
77018 */
77019 /* legacy: obj, showHidden, depth, colors*/
77020 function inspect(obj, opts) {
77021 // default options
77022 var ctx = {
77023 seen: [],
77024 stylize: stylizeNoColor
77025 };
77026 // legacy...
77027 if (arguments.length >= 3) ctx.depth = arguments[2];
77028 if (arguments.length >= 4) ctx.colors = arguments[3];
77029 if (isBoolean(opts)) {
77030 // legacy...
77031 ctx.showHidden = opts;
77032 } else if (opts) {
77033 // got an "options" object
77034 exports._extend(ctx, opts);
77035 }
77036 // set default options
77037 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
77038 if (isUndefined(ctx.depth)) ctx.depth = 2;
77039 if (isUndefined(ctx.colors)) ctx.colors = false;
77040 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
77041 if (ctx.colors) ctx.stylize = stylizeWithColor;
77042 return formatValue(ctx, obj, ctx.depth);
77043 }
77044 exports.inspect = inspect;
77045
77046
77047 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
77048 inspect.colors = {
77049 'bold' : [1, 22],
77050 'italic' : [3, 23],
77051 'underline' : [4, 24],
77052 'inverse' : [7, 27],
77053 'white' : [37, 39],
77054 'grey' : [90, 39],
77055 'black' : [30, 39],
77056 'blue' : [34, 39],
77057 'cyan' : [36, 39],
77058 'green' : [32, 39],
77059 'magenta' : [35, 39],
77060 'red' : [31, 39],
77061 'yellow' : [33, 39]
77062 };
77063
77064 // Don't use 'blue' not visible on cmd.exe
77065 inspect.styles = {
77066 'special': 'cyan',
77067 'number': 'yellow',
77068 'boolean': 'yellow',
77069 'undefined': 'grey',
77070 'null': 'bold',
77071 'string': 'green',
77072 'date': 'magenta',
77073 // "name": intentionally not styling
77074 'regexp': 'red'
77075 };
77076
77077
77078 function stylizeWithColor(str, styleType) {
77079 var style = inspect.styles[styleType];
77080
77081 if (style) {
77082 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
77083 '\u001b[' + inspect.colors[style][1] + 'm';
77084 } else {
77085 return str;
77086 }
77087 }
77088
77089
77090 function stylizeNoColor(str, styleType) {
77091 return str;
77092 }
77093
77094
77095 function arrayToHash(array) {
77096 var hash = {};
77097
77098 array.forEach(function(val, idx) {
77099 hash[val] = true;
77100 });
77101
77102 return hash;
77103 }
77104
77105
77106 function formatValue(ctx, value, recurseTimes) {
77107 // Provide a hook for user-specified inspect functions.
77108 // Check that value is an object with an inspect function on it
77109 if (ctx.customInspect &&
77110 value &&
77111 isFunction(value.inspect) &&
77112 // Filter out the util module, it's inspect function is special
77113 value.inspect !== exports.inspect &&
77114 // Also filter out any prototype objects using the circular check.
77115 !(value.constructor && value.constructor.prototype === value)) {
77116 var ret = value.inspect(recurseTimes, ctx);
77117 if (!isString(ret)) {
77118 ret = formatValue(ctx, ret, recurseTimes);
77119 }
77120 return ret;
77121 }
77122
77123 // Primitive types cannot have properties
77124 var primitive = formatPrimitive(ctx, value);
77125 if (primitive) {
77126 return primitive;
77127 }
77128
77129 // Look up the keys of the object.
77130 var keys = Object.keys(value);
77131 var visibleKeys = arrayToHash(keys);
77132
77133 if (ctx.showHidden) {
77134 keys = Object.getOwnPropertyNames(value);
77135 }
77136
77137 // IE doesn't make error fields non-enumerable
77138 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
77139 if (isError(value)
77140 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
77141 return formatError(value);
77142 }
77143
77144 // Some type of object without properties can be shortcutted.
77145 if (keys.length === 0) {
77146 if (isFunction(value)) {
77147 var name = value.name ? ': ' + value.name : '';
77148 return ctx.stylize('[Function' + name + ']', 'special');
77149 }
77150 if (isRegExp(value)) {
77151 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77152 }
77153 if (isDate(value)) {
77154 return ctx.stylize(Date.prototype.toString.call(value), 'date');
77155 }
77156 if (isError(value)) {
77157 return formatError(value);
77158 }
77159 }
77160
77161 var base = '', array = false, braces = ['{', '}'];
77162
77163 // Make Array say that they are Array
77164 if (isArray(value)) {
77165 array = true;
77166 braces = ['[', ']'];
77167 }
77168
77169 // Make functions say that they are functions
77170 if (isFunction(value)) {
77171 var n = value.name ? ': ' + value.name : '';
77172 base = ' [Function' + n + ']';
77173 }
77174
77175 // Make RegExps say that they are RegExps
77176 if (isRegExp(value)) {
77177 base = ' ' + RegExp.prototype.toString.call(value);
77178 }
77179
77180 // Make dates with properties first say the date
77181 if (isDate(value)) {
77182 base = ' ' + Date.prototype.toUTCString.call(value);
77183 }
77184
77185 // Make error with message first say the error
77186 if (isError(value)) {
77187 base = ' ' + formatError(value);
77188 }
77189
77190 if (keys.length === 0 && (!array || value.length == 0)) {
77191 return braces[0] + base + braces[1];
77192 }
77193
77194 if (recurseTimes < 0) {
77195 if (isRegExp(value)) {
77196 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
77197 } else {
77198 return ctx.stylize('[Object]', 'special');
77199 }
77200 }
77201
77202 ctx.seen.push(value);
77203
77204 var output;
77205 if (array) {
77206 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
77207 } else {
77208 output = keys.map(function(key) {
77209 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
77210 });
77211 }
77212
77213 ctx.seen.pop();
77214
77215 return reduceToSingleString(output, base, braces);
77216 }
77217
77218
77219 function formatPrimitive(ctx, value) {
77220 if (isUndefined(value))
77221 return ctx.stylize('undefined', 'undefined');
77222 if (isString(value)) {
77223 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
77224 .replace(/'/g, "\\'")
77225 .replace(/\\"/g, '"') + '\'';
77226 return ctx.stylize(simple, 'string');
77227 }
77228 if (isNumber(value))
77229 return ctx.stylize('' + value, 'number');
77230 if (isBoolean(value))
77231 return ctx.stylize('' + value, 'boolean');
77232 // For some reason typeof null is "object", so special case here.
77233 if (isNull(value))
77234 return ctx.stylize('null', 'null');
77235 }
77236
77237
77238 function formatError(value) {
77239 return '[' + Error.prototype.toString.call(value) + ']';
77240 }
77241
77242
77243 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
77244 var output = [];
77245 for (var i = 0, l = value.length; i < l; ++i) {
77246 if (hasOwnProperty(value, String(i))) {
77247 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77248 String(i), true));
77249 } else {
77250 output.push('');
77251 }
77252 }
77253 keys.forEach(function(key) {
77254 if (!key.match(/^\d+$/)) {
77255 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
77256 key, true));
77257 }
77258 });
77259 return output;
77260 }
77261
77262
77263 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
77264 var name, str, desc;
77265 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
77266 if (desc.get) {
77267 if (desc.set) {
77268 str = ctx.stylize('[Getter/Setter]', 'special');
77269 } else {
77270 str = ctx.stylize('[Getter]', 'special');
77271 }
77272 } else {
77273 if (desc.set) {
77274 str = ctx.stylize('[Setter]', 'special');
77275 }
77276 }
77277 if (!hasOwnProperty(visibleKeys, key)) {
77278 name = '[' + key + ']';
77279 }
77280 if (!str) {
77281 if (ctx.seen.indexOf(desc.value) < 0) {
77282 if (isNull(recurseTimes)) {
77283 str = formatValue(ctx, desc.value, null);
77284 } else {
77285 str = formatValue(ctx, desc.value, recurseTimes - 1);
77286 }
77287 if (str.indexOf('\n') > -1) {
77288 if (array) {
77289 str = str.split('\n').map(function(line) {
77290 return ' ' + line;
77291 }).join('\n').substr(2);
77292 } else {
77293 str = '\n' + str.split('\n').map(function(line) {
77294 return ' ' + line;
77295 }).join('\n');
77296 }
77297 }
77298 } else {
77299 str = ctx.stylize('[Circular]', 'special');
77300 }
77301 }
77302 if (isUndefined(name)) {
77303 if (array && key.match(/^\d+$/)) {
77304 return str;
77305 }
77306 name = JSON.stringify('' + key);
77307 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
77308 name = name.substr(1, name.length - 2);
77309 name = ctx.stylize(name, 'name');
77310 } else {
77311 name = name.replace(/'/g, "\\'")
77312 .replace(/\\"/g, '"')
77313 .replace(/(^"|"$)/g, "'");
77314 name = ctx.stylize(name, 'string');
77315 }
77316 }
77317
77318 return name + ': ' + str;
77319 }
77320
77321
77322 function reduceToSingleString(output, base, braces) {
77323 var numLinesEst = 0;
77324 var length = output.reduce(function(prev, cur) {
77325 numLinesEst++;
77326 if (cur.indexOf('\n') >= 0) numLinesEst++;
77327 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
77328 }, 0);
77329
77330 if (length > 60) {
77331 return braces[0] +
77332 (base === '' ? '' : base + '\n ') +
77333 ' ' +
77334 output.join(',\n ') +
77335 ' ' +
77336 braces[1];
77337 }
77338
77339 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
77340 }
77341
77342
77343 // NOTE: These type checking functions intentionally don't use `instanceof`
77344 // because it is fragile and can be easily faked with `Object.create()`.
77345 function isArray(ar) {
77346 return Array.isArray(ar);
77347 }
77348 exports.isArray = isArray;
77349
77350 function isBoolean(arg) {
77351 return typeof arg === 'boolean';
77352 }
77353 exports.isBoolean = isBoolean;
77354
77355 function isNull(arg) {
77356 return arg === null;
77357 }
77358 exports.isNull = isNull;
77359
77360 function isNullOrUndefined(arg) {
77361 return arg == null;
77362 }
77363 exports.isNullOrUndefined = isNullOrUndefined;
77364
77365 function isNumber(arg) {
77366 return typeof arg === 'number';
77367 }
77368 exports.isNumber = isNumber;
77369
77370 function isString(arg) {
77371 return typeof arg === 'string';
77372 }
77373 exports.isString = isString;
77374
77375 function isSymbol(arg) {
77376 return typeof arg === 'symbol';
77377 }
77378 exports.isSymbol = isSymbol;
77379
77380 function isUndefined(arg) {
77381 return arg === void 0;
77382 }
77383 exports.isUndefined = isUndefined;
77384
77385 function isRegExp(re) {
77386 return isObject(re) && objectToString(re) === '[object RegExp]';
77387 }
77388 exports.isRegExp = isRegExp;
77389
77390 function isObject(arg) {
77391 return typeof arg === 'object' && arg !== null;
77392 }
77393 exports.isObject = isObject;
77394
77395 function isDate(d) {
77396 return isObject(d) && objectToString(d) === '[object Date]';
77397 }
77398 exports.isDate = isDate;
77399
77400 function isError(e) {
77401 return isObject(e) &&
77402 (objectToString(e) === '[object Error]' || e instanceof Error);
77403 }
77404 exports.isError = isError;
77405
77406 function isFunction(arg) {
77407 return typeof arg === 'function';
77408 }
77409 exports.isFunction = isFunction;
77410
77411 function isPrimitive(arg) {
77412 return arg === null ||
77413 typeof arg === 'boolean' ||
77414 typeof arg === 'number' ||
77415 typeof arg === 'string' ||
77416 typeof arg === 'symbol' || // ES6 symbol
77417 typeof arg === 'undefined';
77418 }
77419 exports.isPrimitive = isPrimitive;
77420
77421 exports.isBuffer = require('./support/isBuffer');
77422
77423 function objectToString(o) {
77424 return Object.prototype.toString.call(o);
77425 }
77426
77427
77428 function pad(n) {
77429 return n < 10 ? '0' + n.toString(10) : n.toString(10);
77430 }
77431
77432
77433 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
77434 'Oct', 'Nov', 'Dec'];
77435
77436 // 26 Feb 16:19:34
77437 function timestamp() {
77438 var d = new Date();
77439 var time = [pad(d.getHours()),
77440 pad(d.getMinutes()),
77441 pad(d.getSeconds())].join(':');
77442 return [d.getDate(), months[d.getMonth()], time].join(' ');
77443 }
77444
77445
77446 // log is just a thin wrapper to console.log that prepends a timestamp
77447 exports.log = function() {
77448 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
77449 };
77450
77451
77452 /**
77453 * Inherit the prototype methods from one constructor into another.
77454 *
77455 * The Function.prototype.inherits from lang.js rewritten as a standalone
77456 * function (not on Function.prototype). NOTE: If this file is to be loaded
77457 * during bootstrapping this function needs to be rewritten using some native
77458 * functions as prototype setup using normal JavaScript does not work as
77459 * expected during bootstrapping (see mirror.js in r114903).
77460 *
77461 * @param {function} ctor Constructor function which needs to inherit the
77462 * prototype.
77463 * @param {function} superCtor Constructor function to inherit prototype from.
77464 */
77465 exports.inherits = require('inherits');
77466
77467 exports._extend = function(origin, add) {
77468 // Don't do anything if add isn't an object
77469 if (!add || !isObject(add)) return origin;
77470
77471 var keys = Object.keys(add);
77472 var i = keys.length;
77473 while (i--) {
77474 origin[keys[i]] = add[keys[i]];
77475 }
77476 return origin;
77477 };
77478
77479 function hasOwnProperty(obj, prop) {
77480 return Object.prototype.hasOwnProperty.call(obj, prop);
77481 }
77482
77483 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
77484 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
77485 (function (Buffer){
77486 const createKeccakHash = require('keccak')
77487 const secp256k1 = require('secp256k1')
77488 const assert = require('assert')
77489 const rlp = require('rlp')
77490 const BN = require('bn.js')
77491 const createHash = require('create-hash')
77492 Object.assign(exports, require('ethjs-util'))
77493
77494 /**
77495 * the max integer that this VM can handle (a ```BN```)
77496 * @var {BN} MAX_INTEGER
77497 */
77498 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
77499
77500 /**
77501 * 2^256 (a ```BN```)
77502 * @var {BN} TWO_POW256
77503 */
77504 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
77505
77506 /**
77507 * SHA3-256 hash of null (a ```String```)
77508 * @var {String} SHA3_NULL_S
77509 */
77510 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
77511
77512 /**
77513 * SHA3-256 hash of null (a ```Buffer```)
77514 * @var {Buffer} SHA3_NULL
77515 */
77516 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
77517
77518 /**
77519 * SHA3-256 of an RLP of an empty array (a ```String```)
77520 * @var {String} SHA3_RLP_ARRAY_S
77521 */
77522 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
77523
77524 /**
77525 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
77526 * @var {Buffer} SHA3_RLP_ARRAY
77527 */
77528 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
77529
77530 /**
77531 * SHA3-256 hash of the RLP of null (a ```String```)
77532 * @var {String} SHA3_RLP_S
77533 */
77534 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
77535
77536 /**
77537 * SHA3-256 hash of the RLP of null (a ```Buffer```)
77538 * @var {Buffer} SHA3_RLP
77539 */
77540 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
77541
77542 /**
77543 * [`BN`](https://github.com/indutny/bn.js)
77544 * @var {Function}
77545 */
77546 exports.BN = BN
77547
77548 /**
77549 * [`rlp`](https://github.com/ethereumjs/rlp)
77550 * @var {Function}
77551 */
77552 exports.rlp = rlp
77553
77554 /**
77555 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
77556 * @var {Object}
77557 */
77558 exports.secp256k1 = secp256k1
77559
77560 /**
77561 * Returns a buffer filled with 0s
77562 * @method zeros
77563 * @param {Number} bytes the number of bytes the buffer should be
77564 * @return {Buffer}
77565 */
77566 exports.zeros = function (bytes) {
77567 return Buffer.allocUnsafe(bytes).fill(0)
77568 }
77569
77570 /**
77571 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77572 * Or it truncates the beginning if it exceeds.
77573 * @method lsetLength
77574 * @param {Buffer|Array} msg the value to pad
77575 * @param {Number} length the number of bytes the output should be
77576 * @param {Boolean} [right=false] whether to start padding form the left or right
77577 * @return {Buffer|Array}
77578 */
77579 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
77580 var buf = exports.zeros(length)
77581 msg = exports.toBuffer(msg)
77582 if (right) {
77583 if (msg.length < length) {
77584 msg.copy(buf)
77585 return buf
77586 }
77587 return msg.slice(0, length)
77588 } else {
77589 if (msg.length < length) {
77590 msg.copy(buf, length - msg.length)
77591 return buf
77592 }
77593 return msg.slice(-length)
77594 }
77595 }
77596
77597 /**
77598 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
77599 * Or it truncates the beginning if it exceeds.
77600 * @param {Buffer|Array} msg the value to pad
77601 * @param {Number} length the number of bytes the output should be
77602 * @return {Buffer|Array}
77603 */
77604 exports.setLengthRight = function (msg, length) {
77605 return exports.setLength(msg, length, true)
77606 }
77607
77608 /**
77609 * Trims leading zeros from a `Buffer` or an `Array`
77610 * @param {Buffer|Array|String} a
77611 * @return {Buffer|Array|String}
77612 */
77613 exports.unpad = exports.stripZeros = function (a) {
77614 a = exports.stripHexPrefix(a)
77615 var first = a[0]
77616 while (a.length > 0 && first.toString() === '0') {
77617 a = a.slice(1)
77618 first = a[0]
77619 }
77620 return a
77621 }
77622 /**
77623 * 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.
77624 * @param {*} v the value
77625 */
77626 exports.toBuffer = function (v) {
77627 if (!Buffer.isBuffer(v)) {
77628 if (Array.isArray(v)) {
77629 v = Buffer.from(v)
77630 } else if (typeof v === 'string') {
77631 if (exports.isHexPrefixed(v)) {
77632 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
77633 } else {
77634 v = Buffer.from(v)
77635 }
77636 } else if (typeof v === 'number') {
77637 v = exports.intToBuffer(v)
77638 } else if (v === null || v === undefined) {
77639 v = Buffer.allocUnsafe(0)
77640 } else if (v.toArray) {
77641 // converts a BN to a Buffer
77642 v = Buffer.from(v.toArray())
77643 } else {
77644 throw new Error('invalid type')
77645 }
77646 }
77647 return v
77648 }
77649
77650 /**
77651 * Converts a `Buffer` to a `Number`
77652 * @param {Buffer} buf
77653 * @return {Number}
77654 * @throws If the input number exceeds 53 bits.
77655 */
77656 exports.bufferToInt = function (buf) {
77657 return new BN(exports.toBuffer(buf)).toNumber()
77658 }
77659
77660 /**
77661 * Converts a `Buffer` into a hex `String`
77662 * @param {Buffer} buf
77663 * @return {String}
77664 */
77665 exports.bufferToHex = function (buf) {
77666 buf = exports.toBuffer(buf)
77667 return '0x' + buf.toString('hex')
77668 }
77669
77670 /**
77671 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
77672 * @param {Buffer} num
77673 * @return {BN}
77674 */
77675 exports.fromSigned = function (num) {
77676 return new BN(num).fromTwos(256)
77677 }
77678
77679 /**
77680 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
77681 * @param {BN} num
77682 * @return {Buffer}
77683 */
77684 exports.toUnsigned = function (num) {
77685 return Buffer.from(num.toTwos(256).toArray())
77686 }
77687
77688 /**
77689 * Creates SHA-3 hash of the input
77690 * @param {Buffer|Array|String|Number} a the input data
77691 * @param {Number} [bits=256] the SHA width
77692 * @return {Buffer}
77693 */
77694 exports.sha3 = function (a, bits) {
77695 a = exports.toBuffer(a)
77696 if (!bits) bits = 256
77697
77698 return createKeccakHash('keccak' + bits).update(a).digest()
77699 }
77700
77701 /**
77702 * Creates SHA256 hash of the input
77703 * @param {Buffer|Array|String|Number} a the input data
77704 * @return {Buffer}
77705 */
77706 exports.sha256 = function (a) {
77707 a = exports.toBuffer(a)
77708 return createHash('sha256').update(a).digest()
77709 }
77710
77711 /**
77712 * Creates RIPEMD160 hash of the input
77713 * @param {Buffer|Array|String|Number} a the input data
77714 * @param {Boolean} padded whether it should be padded to 256 bits or not
77715 * @return {Buffer}
77716 */
77717 exports.ripemd160 = function (a, padded) {
77718 a = exports.toBuffer(a)
77719 var hash = createHash('rmd160').update(a).digest()
77720 if (padded === true) {
77721 return exports.setLength(hash, 32)
77722 } else {
77723 return hash
77724 }
77725 }
77726
77727 /**
77728 * Creates SHA-3 hash of the RLP encoded version of the input
77729 * @param {Buffer|Array|String|Number} a the input data
77730 * @return {Buffer}
77731 */
77732 exports.rlphash = function (a) {
77733 return exports.sha3(rlp.encode(a))
77734 }
77735
77736 /**
77737 * Checks if the private key satisfies the rules of the curve secp256k1.
77738 * @param {Buffer} privateKey
77739 * @return {Boolean}
77740 */
77741 exports.isValidPrivate = function (privateKey) {
77742 return secp256k1.privateKeyVerify(privateKey)
77743 }
77744
77745 /**
77746 * Checks if the public key satisfies the rules of the curve secp256k1
77747 * and the requirements of Ethereum.
77748 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
77749 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77750 * @return {Boolean}
77751 */
77752 exports.isValidPublic = function (publicKey, sanitize) {
77753 if (publicKey.length === 64) {
77754 // Convert to SEC1 for secp256k1
77755 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
77756 }
77757
77758 if (!sanitize) {
77759 return false
77760 }
77761
77762 return secp256k1.publicKeyVerify(publicKey)
77763 }
77764
77765 /**
77766 * Returns the ethereum address of a given public key.
77767 * Accepts "Ethereum public keys" and SEC1 encoded keys.
77768 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
77769 * @param {Boolean} [sanitize=false] Accept public keys in other formats
77770 * @return {Buffer}
77771 */
77772 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
77773 pubKey = exports.toBuffer(pubKey)
77774 if (sanitize && (pubKey.length !== 64)) {
77775 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
77776 }
77777 assert(pubKey.length === 64)
77778 // Only take the lower 160bits of the hash
77779 return exports.sha3(pubKey).slice(-20)
77780 }
77781
77782 /**
77783 * Returns the ethereum public key of a given private key
77784 * @param {Buffer} privateKey A private key must be 256 bits wide
77785 * @return {Buffer}
77786 */
77787 var privateToPublic = exports.privateToPublic = function (privateKey) {
77788 privateKey = exports.toBuffer(privateKey)
77789 // skip the type flag and use the X, Y points
77790 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
77791 }
77792
77793 /**
77794 * Converts a public key to the Ethereum format.
77795 * @param {Buffer} publicKey
77796 * @return {Buffer}
77797 */
77798 exports.importPublic = function (publicKey) {
77799 publicKey = exports.toBuffer(publicKey)
77800 if (publicKey.length !== 64) {
77801 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
77802 }
77803 return publicKey
77804 }
77805
77806 /**
77807 * ECDSA sign
77808 * @param {Buffer} msgHash
77809 * @param {Buffer} privateKey
77810 * @return {Object}
77811 */
77812 exports.ecsign = function (msgHash, privateKey) {
77813 var sig = secp256k1.sign(msgHash, privateKey)
77814
77815 var ret = {}
77816 ret.r = sig.signature.slice(0, 32)
77817 ret.s = sig.signature.slice(32, 64)
77818 ret.v = sig.recovery + 27
77819 return ret
77820 }
77821
77822 /**
77823 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
77824 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
77825 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
77826 * used to produce the signature.
77827 * @param message
77828 * @returns {Buffer} hash
77829 */
77830 exports.hashPersonalMessage = function (message) {
77831 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
77832 return exports.sha3(Buffer.concat([prefix, message]))
77833 }
77834
77835 /**
77836 * ECDSA public key recovery from signature
77837 * @param {Buffer} msgHash
77838 * @param {Number} v
77839 * @param {Buffer} r
77840 * @param {Buffer} s
77841 * @return {Buffer} publicKey
77842 */
77843 exports.ecrecover = function (msgHash, v, r, s) {
77844 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
77845 var recovery = v - 27
77846 if (recovery !== 0 && recovery !== 1) {
77847 throw new Error('Invalid signature v value')
77848 }
77849 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
77850 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
77851 }
77852
77853 /**
77854 * Convert signature parameters into the format of `eth_sign` RPC method
77855 * @param {Number} v
77856 * @param {Buffer} r
77857 * @param {Buffer} s
77858 * @return {String} sig
77859 */
77860 exports.toRpcSig = function (v, r, s) {
77861 // NOTE: with potential introduction of chainId this might need to be updated
77862 if (v !== 27 && v !== 28) {
77863 throw new Error('Invalid recovery id')
77864 }
77865
77866 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
77867 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
77868 return exports.bufferToHex(Buffer.concat([
77869 exports.setLengthLeft(r, 32),
77870 exports.setLengthLeft(s, 32),
77871 exports.toBuffer(v - 27)
77872 ]))
77873 }
77874
77875 /**
77876 * Convert signature format of the `eth_sign` RPC method to signature parameters
77877 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
77878 * @param {String} sig
77879 * @return {Object}
77880 */
77881 exports.fromRpcSig = function (sig) {
77882 sig = exports.toBuffer(sig)
77883
77884 // NOTE: with potential introduction of chainId this might need to be updated
77885 if (sig.length !== 65) {
77886 throw new Error('Invalid signature length')
77887 }
77888
77889 var v = sig[64]
77890 // support both versions of `eth_sign` responses
77891 if (v < 27) {
77892 v += 27
77893 }
77894
77895 return {
77896 v: v,
77897 r: sig.slice(0, 32),
77898 s: sig.slice(32, 64)
77899 }
77900 }
77901
77902 /**
77903 * Returns the ethereum address of a given private key
77904 * @param {Buffer} privateKey A private key must be 256 bits wide
77905 * @return {Buffer}
77906 */
77907 exports.privateToAddress = function (privateKey) {
77908 return exports.publicToAddress(privateToPublic(privateKey))
77909 }
77910
77911 /**
77912 * Checks if the address is a valid. Accepts checksummed addresses too
77913 * @param {String} address
77914 * @return {Boolean}
77915 */
77916 exports.isValidAddress = function (address) {
77917 return /^0x[0-9a-fA-F]{40}$/i.test(address)
77918 }
77919
77920 /**
77921 * Returns a checksummed address
77922 * @param {String} address
77923 * @return {String}
77924 */
77925 exports.toChecksumAddress = function (address) {
77926 address = exports.stripHexPrefix(address).toLowerCase()
77927 var hash = exports.sha3(address).toString('hex')
77928 var ret = '0x'
77929
77930 for (var i = 0; i < address.length; i++) {
77931 if (parseInt(hash[i], 16) >= 8) {
77932 ret += address[i].toUpperCase()
77933 } else {
77934 ret += address[i]
77935 }
77936 }
77937
77938 return ret
77939 }
77940
77941 /**
77942 * Checks if the address is a valid checksummed address
77943 * @param {Buffer} address
77944 * @return {Boolean}
77945 */
77946 exports.isValidChecksumAddress = function (address) {
77947 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
77948 }
77949
77950 /**
77951 * Generates an address of a newly created contract
77952 * @param {Buffer} from the address which is creating this new address
77953 * @param {Buffer} nonce the nonce of the from account
77954 * @return {Buffer}
77955 */
77956 exports.generateAddress = function (from, nonce) {
77957 from = exports.toBuffer(from)
77958 nonce = new BN(nonce)
77959
77960 if (nonce.isZero()) {
77961 // in RLP we want to encode null in the case of zero nonce
77962 // read the RLP documentation for an answer if you dare
77963 nonce = null
77964 } else {
77965 nonce = Buffer.from(nonce.toArray())
77966 }
77967
77968 // Only take the lower 160bits of the hash
77969 return exports.rlphash([from, nonce]).slice(-20)
77970 }
77971
77972 /**
77973 * Returns true if the supplied address belongs to a precompiled account
77974 * @param {Buffer|String} address
77975 * @return {Boolean}
77976 */
77977 exports.isPrecompiled = function (address) {
77978 var a = exports.unpad(address)
77979 return a.length === 1 && a[0] > 0 && a[0] < 5
77980 }
77981
77982 /**
77983 * Adds "0x" to a given `String` if it does not already start with "0x"
77984 * @param {String} str
77985 * @return {String}
77986 */
77987 exports.addHexPrefix = function (str) {
77988 if (typeof str !== 'string') {
77989 return str
77990 }
77991
77992 return exports.isHexPrefixed(str) ? str : '0x' + str
77993 }
77994
77995 /**
77996 * Validate ECDSA signature
77997 * @method isValidSignature
77998 * @param {Buffer} v
77999 * @param {Buffer} r
78000 * @param {Buffer} s
78001 * @param {Boolean} [homestead=true]
78002 * @return {Boolean}
78003 */
78004
78005 exports.isValidSignature = function (v, r, s, homestead) {
78006 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
78007 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
78008
78009 if (r.length !== 32 || s.length !== 32) {
78010 return false
78011 }
78012
78013 if (v !== 27 && v !== 28) {
78014 return false
78015 }
78016
78017 r = new BN(r)
78018 s = new BN(s)
78019
78020 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
78021 return false
78022 }
78023
78024 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
78025 return false
78026 }
78027
78028 return true
78029 }
78030
78031 /**
78032 * Converts a `Buffer` or `Array` to JSON
78033 * @param {Buffer|Array} ba
78034 * @return {Array|String|null}
78035 */
78036 exports.baToJSON = function (ba) {
78037 if (Buffer.isBuffer(ba)) {
78038 return '0x' + ba.toString('hex')
78039 } else if (ba instanceof Array) {
78040 var array = []
78041 for (var i = 0; i < ba.length; i++) {
78042 array.push(exports.baToJSON(ba[i]))
78043 }
78044 return array
78045 }
78046 }
78047
78048 /**
78049 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
78050 * @param {Object} self the `Object` to define properties on
78051 * @param {Array} fields an array fields to define. Fields can contain:
78052 * * `name` - the name of the properties
78053 * * `length` - the number of bytes the field can have
78054 * * `allowLess` - if the field can be less than the length
78055 * * `allowEmpty`
78056 * @param {*} data data to be validated against the definitions
78057 */
78058 exports.defineProperties = function (self, fields, data) {
78059 self.raw = []
78060 self._fields = []
78061
78062 // attach the `toJSON`
78063 self.toJSON = function (label) {
78064 if (label) {
78065 var obj = {}
78066 self._fields.forEach(function (field) {
78067 obj[field] = '0x' + self[field].toString('hex')
78068 })
78069 return obj
78070 }
78071 return exports.baToJSON(this.raw)
78072 }
78073
78074 self.serialize = function serialize () {
78075 return rlp.encode(self.raw)
78076 }
78077
78078 fields.forEach(function (field, i) {
78079 self._fields.push(field.name)
78080 function getter () {
78081 return self.raw[i]
78082 }
78083 function setter (v) {
78084 v = exports.toBuffer(v)
78085
78086 if (v.toString('hex') === '00' && !field.allowZero) {
78087 v = Buffer.allocUnsafe(0)
78088 }
78089
78090 if (field.allowLess && field.length) {
78091 v = exports.stripZeros(v)
78092 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
78093 } else if (!(field.allowZero && v.length === 0) && field.length) {
78094 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
78095 }
78096
78097 self.raw[i] = v
78098 }
78099
78100 Object.defineProperty(self, field.name, {
78101 enumerable: true,
78102 configurable: true,
78103 get: getter,
78104 set: setter
78105 })
78106
78107 if (field.default) {
78108 self[field.name] = field.default
78109 }
78110
78111 // attach alias
78112 if (field.alias) {
78113 Object.defineProperty(self, field.alias, {
78114 enumerable: false,
78115 configurable: true,
78116 set: setter,
78117 get: getter
78118 })
78119 }
78120 })
78121
78122 // if the constuctor is passed data
78123 if (data) {
78124 if (typeof data === 'string') {
78125 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
78126 }
78127
78128 if (Buffer.isBuffer(data)) {
78129 data = rlp.decode(data)
78130 }
78131
78132 if (Array.isArray(data)) {
78133 if (data.length > self._fields.length) {
78134 throw (new Error('wrong number of fields in data'))
78135 }
78136
78137 // make sure all the items are buffers
78138 data.forEach(function (d, i) {
78139 self[self._fields[i]] = exports.toBuffer(d)
78140 })
78141 } else if (typeof data === 'object') {
78142 const keys = Object.keys(data)
78143 fields.forEach(function (field) {
78144 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
78145 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
78146 })
78147 } else {
78148 throw new Error('invalid data')
78149 }
78150 }
78151 }
78152
78153 }).call(this,require("buffer").Buffer)
78154 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
78155 (function (Buffer){
78156 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
78157 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78158 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
78159
78160 function check (buffer) {
78161 if (buffer.length < 8) return false
78162 if (buffer.length > 72) return false
78163 if (buffer[0] !== 0x30) return false
78164 if (buffer[1] !== buffer.length - 2) return false
78165 if (buffer[2] !== 0x02) return false
78166
78167 var lenR = buffer[3]
78168 if (lenR === 0) return false
78169 if (5 + lenR >= buffer.length) return false
78170 if (buffer[4 + lenR] !== 0x02) return false
78171
78172 var lenS = buffer[5 + lenR]
78173 if (lenS === 0) return false
78174 if ((6 + lenR + lenS) !== buffer.length) return false
78175
78176 if (buffer[4] & 0x80) return false
78177 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
78178
78179 if (buffer[lenR + 6] & 0x80) return false
78180 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
78181 return true
78182 }
78183
78184 function decode (buffer) {
78185 if (buffer.length < 8) throw new Error('DER sequence length is too short')
78186 if (buffer.length > 72) throw new Error('DER sequence length is too long')
78187 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
78188 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
78189 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
78190
78191 var lenR = buffer[3]
78192 if (lenR === 0) throw new Error('R length is zero')
78193 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
78194 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
78195
78196 var lenS = buffer[5 + lenR]
78197 if (lenS === 0) throw new Error('S length is zero')
78198 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
78199
78200 if (buffer[4] & 0x80) throw new Error('R value is negative')
78201 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
78202
78203 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
78204 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
78205
78206 // non-BIP66 - extract R, S values
78207 return {
78208 r: buffer.slice(4, 4 + lenR),
78209 s: buffer.slice(6 + lenR)
78210 }
78211 }
78212
78213 /*
78214 * Expects r and s to be positive DER integers.
78215 *
78216 * The DER format uses the most significant bit as a sign bit (& 0x80).
78217 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
78218 *
78219 * Examples:
78220 *
78221 * 0 => 0x00
78222 * 1 => 0x01
78223 * -1 => 0xff
78224 * 127 => 0x7f
78225 * -127 => 0x81
78226 * 128 => 0x0080
78227 * -128 => 0x80
78228 * 255 => 0x00ff
78229 * -255 => 0xff01
78230 * 16300 => 0x3fac
78231 * -16300 => 0xc054
78232 * 62300 => 0x00f35c
78233 * -62300 => 0xff0ca4
78234 */
78235 function encode (r, s) {
78236 var lenR = r.length
78237 var lenS = s.length
78238 if (lenR === 0) throw new Error('R length is zero')
78239 if (lenS === 0) throw new Error('S length is zero')
78240 if (lenR > 33) throw new Error('R length is too long')
78241 if (lenS > 33) throw new Error('S length is too long')
78242 if (r[0] & 0x80) throw new Error('R value is negative')
78243 if (s[0] & 0x80) throw new Error('S value is negative')
78244 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
78245 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
78246
78247 var signature = new Buffer(6 + lenR + lenS)
78248
78249 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
78250 signature[0] = 0x30
78251 signature[1] = signature.length - 2
78252 signature[2] = 0x02
78253 signature[3] = r.length
78254 r.copy(signature, 4)
78255 signature[4 + lenR] = 0x02
78256 signature[5 + lenR] = s.length
78257 s.copy(signature, 6 + lenR)
78258
78259 return signature
78260 }
78261
78262 module.exports = {
78263 check: check,
78264 decode: decode,
78265 encode: encode
78266 }
78267
78268 }).call(this,require("buffer").Buffer)
78269 },{"buffer":5}],33:[function(require,module,exports){
78270 (function (module, exports) {
78271 'use strict';
78272
78273 // Utils
78274 function assert (val, msg) {
78275 if (!val) throw new Error(msg || 'Assertion failed');
78276 }
78277
78278 // Could use `inherits` module, but don't want to move from single file
78279 // architecture yet.
78280 function inherits (ctor, superCtor) {
78281 ctor.super_ = superCtor;
78282 var TempCtor = function () {};
78283 TempCtor.prototype = superCtor.prototype;
78284 ctor.prototype = new TempCtor();
78285 ctor.prototype.constructor = ctor;
78286 }
78287
78288 // BN
78289
78290 function BN (number, base, endian) {
78291 if (BN.isBN(number)) {
78292 return number;
78293 }
78294
78295 this.negative = 0;
78296 this.words = null;
78297 this.length = 0;
78298
78299 // Reduction context
78300 this.red = null;
78301
78302 if (number !== null) {
78303 if (base === 'le' || base === 'be') {
78304 endian = base;
78305 base = 10;
78306 }
78307
78308 this._init(number || 0, base || 10, endian || 'be');
78309 }
78310 }
78311 if (typeof module === 'object') {
78312 module.exports = BN;
78313 } else {
78314 exports.BN = BN;
78315 }
78316
78317 BN.BN = BN;
78318 BN.wordSize = 26;
78319
78320 var Buffer;
78321 try {
78322 Buffer = require('buf' + 'fer').Buffer;
78323 } catch (e) {
78324 }
78325
78326 BN.isBN = function isBN (num) {
78327 if (num instanceof BN) {
78328 return true;
78329 }
78330
78331 return num !== null && typeof num === 'object' &&
78332 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
78333 };
78334
78335 BN.max = function max (left, right) {
78336 if (left.cmp(right) > 0) return left;
78337 return right;
78338 };
78339
78340 BN.min = function min (left, right) {
78341 if (left.cmp(right) < 0) return left;
78342 return right;
78343 };
78344
78345 BN.prototype._init = function init (number, base, endian) {
78346 if (typeof number === 'number') {
78347 return this._initNumber(number, base, endian);
78348 }
78349
78350 if (typeof number === 'object') {
78351 return this._initArray(number, base, endian);
78352 }
78353
78354 if (base === 'hex') {
78355 base = 16;
78356 }
78357 assert(base === (base | 0) && base >= 2 && base <= 36);
78358
78359 number = number.toString().replace(/\s+/g, '');
78360 var start = 0;
78361 if (number[0] === '-') {
78362 start++;
78363 }
78364
78365 if (base === 16) {
78366 this._parseHex(number, start);
78367 } else {
78368 this._parseBase(number, base, start);
78369 }
78370
78371 if (number[0] === '-') {
78372 this.negative = 1;
78373 }
78374
78375 this.strip();
78376
78377 if (endian !== 'le') return;
78378
78379 this._initArray(this.toArray(), base, endian);
78380 };
78381
78382 BN.prototype._initNumber = function _initNumber (number, base, endian) {
78383 if (number < 0) {
78384 this.negative = 1;
78385 number = -number;
78386 }
78387 if (number < 0x4000000) {
78388 this.words = [ number & 0x3ffffff ];
78389 this.length = 1;
78390 } else if (number < 0x10000000000000) {
78391 this.words = [
78392 number & 0x3ffffff,
78393 (number / 0x4000000) & 0x3ffffff
78394 ];
78395 this.length = 2;
78396 } else {
78397 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
78398 this.words = [
78399 number & 0x3ffffff,
78400 (number / 0x4000000) & 0x3ffffff,
78401 1
78402 ];
78403 this.length = 3;
78404 }
78405
78406 if (endian !== 'le') return;
78407
78408 // Reverse the bytes
78409 this._initArray(this.toArray(), base, endian);
78410 };
78411
78412 BN.prototype._initArray = function _initArray (number, base, endian) {
78413 // Perhaps a Uint8Array
78414 assert(typeof number.length === 'number');
78415 if (number.length <= 0) {
78416 this.words = [ 0 ];
78417 this.length = 1;
78418 return this;
78419 }
78420
78421 this.length = Math.ceil(number.length / 3);
78422 this.words = new Array(this.length);
78423 for (var i = 0; i < this.length; i++) {
78424 this.words[i] = 0;
78425 }
78426
78427 var j, w;
78428 var off = 0;
78429 if (endian === 'be') {
78430 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
78431 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
78432 this.words[j] |= (w << off) & 0x3ffffff;
78433 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78434 off += 24;
78435 if (off >= 26) {
78436 off -= 26;
78437 j++;
78438 }
78439 }
78440 } else if (endian === 'le') {
78441 for (i = 0, j = 0; i < number.length; i += 3) {
78442 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
78443 this.words[j] |= (w << off) & 0x3ffffff;
78444 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
78445 off += 24;
78446 if (off >= 26) {
78447 off -= 26;
78448 j++;
78449 }
78450 }
78451 }
78452 return this.strip();
78453 };
78454
78455 function parseHex (str, start, end) {
78456 var r = 0;
78457 var len = Math.min(str.length, end);
78458 for (var i = start; i < len; i++) {
78459 var c = str.charCodeAt(i) - 48;
78460
78461 r <<= 4;
78462
78463 // 'a' - 'f'
78464 if (c >= 49 && c <= 54) {
78465 r |= c - 49 + 0xa;
78466
78467 // 'A' - 'F'
78468 } else if (c >= 17 && c <= 22) {
78469 r |= c - 17 + 0xa;
78470
78471 // '0' - '9'
78472 } else {
78473 r |= c & 0xf;
78474 }
78475 }
78476 return r;
78477 }
78478
78479 BN.prototype._parseHex = function _parseHex (number, start) {
78480 // Create possibly bigger array to ensure that it fits the number
78481 this.length = Math.ceil((number.length - start) / 6);
78482 this.words = new Array(this.length);
78483 for (var i = 0; i < this.length; i++) {
78484 this.words[i] = 0;
78485 }
78486
78487 var j, w;
78488 // Scan 24-bit chunks and add them to the number
78489 var off = 0;
78490 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
78491 w = parseHex(number, i, i + 6);
78492 this.words[j] |= (w << off) & 0x3ffffff;
78493 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
78494 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78495 off += 24;
78496 if (off >= 26) {
78497 off -= 26;
78498 j++;
78499 }
78500 }
78501 if (i + 6 !== start) {
78502 w = parseHex(number, start, i + 6);
78503 this.words[j] |= (w << off) & 0x3ffffff;
78504 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
78505 }
78506 this.strip();
78507 };
78508
78509 function parseBase (str, start, end, mul) {
78510 var r = 0;
78511 var len = Math.min(str.length, end);
78512 for (var i = start; i < len; i++) {
78513 var c = str.charCodeAt(i) - 48;
78514
78515 r *= mul;
78516
78517 // 'a'
78518 if (c >= 49) {
78519 r += c - 49 + 0xa;
78520
78521 // 'A'
78522 } else if (c >= 17) {
78523 r += c - 17 + 0xa;
78524
78525 // '0' - '9'
78526 } else {
78527 r += c;
78528 }
78529 }
78530 return r;
78531 }
78532
78533 BN.prototype._parseBase = function _parseBase (number, base, start) {
78534 // Initialize as zero
78535 this.words = [ 0 ];
78536 this.length = 1;
78537
78538 // Find length of limb in base
78539 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
78540 limbLen++;
78541 }
78542 limbLen--;
78543 limbPow = (limbPow / base) | 0;
78544
78545 var total = number.length - start;
78546 var mod = total % limbLen;
78547 var end = Math.min(total, total - mod) + start;
78548
78549 var word = 0;
78550 for (var i = start; i < end; i += limbLen) {
78551 word = parseBase(number, i, i + limbLen, base);
78552
78553 this.imuln(limbPow);
78554 if (this.words[0] + word < 0x4000000) {
78555 this.words[0] += word;
78556 } else {
78557 this._iaddn(word);
78558 }
78559 }
78560
78561 if (mod !== 0) {
78562 var pow = 1;
78563 word = parseBase(number, i, number.length, base);
78564
78565 for (i = 0; i < mod; i++) {
78566 pow *= base;
78567 }
78568
78569 this.imuln(pow);
78570 if (this.words[0] + word < 0x4000000) {
78571 this.words[0] += word;
78572 } else {
78573 this._iaddn(word);
78574 }
78575 }
78576 };
78577
78578 BN.prototype.copy = function copy (dest) {
78579 dest.words = new Array(this.length);
78580 for (var i = 0; i < this.length; i++) {
78581 dest.words[i] = this.words[i];
78582 }
78583 dest.length = this.length;
78584 dest.negative = this.negative;
78585 dest.red = this.red;
78586 };
78587
78588 BN.prototype.clone = function clone () {
78589 var r = new BN(null);
78590 this.copy(r);
78591 return r;
78592 };
78593
78594 BN.prototype._expand = function _expand (size) {
78595 while (this.length < size) {
78596 this.words[this.length++] = 0;
78597 }
78598 return this;
78599 };
78600
78601 // Remove leading `0` from `this`
78602 BN.prototype.strip = function strip () {
78603 while (this.length > 1 && this.words[this.length - 1] === 0) {
78604 this.length--;
78605 }
78606 return this._normSign();
78607 };
78608
78609 BN.prototype._normSign = function _normSign () {
78610 // -0 = 0
78611 if (this.length === 1 && this.words[0] === 0) {
78612 this.negative = 0;
78613 }
78614 return this;
78615 };
78616
78617 BN.prototype.inspect = function inspect () {
78618 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
78619 };
78620
78621 /*
78622
78623 var zeros = [];
78624 var groupSizes = [];
78625 var groupBases = [];
78626
78627 var s = '';
78628 var i = -1;
78629 while (++i < BN.wordSize) {
78630 zeros[i] = s;
78631 s += '0';
78632 }
78633 groupSizes[0] = 0;
78634 groupSizes[1] = 0;
78635 groupBases[0] = 0;
78636 groupBases[1] = 0;
78637 var base = 2 - 1;
78638 while (++base < 36 + 1) {
78639 var groupSize = 0;
78640 var groupBase = 1;
78641 while (groupBase < (1 << BN.wordSize) / base) {
78642 groupBase *= base;
78643 groupSize += 1;
78644 }
78645 groupSizes[base] = groupSize;
78646 groupBases[base] = groupBase;
78647 }
78648
78649 */
78650
78651 var zeros = [
78652 '',
78653 '0',
78654 '00',
78655 '000',
78656 '0000',
78657 '00000',
78658 '000000',
78659 '0000000',
78660 '00000000',
78661 '000000000',
78662 '0000000000',
78663 '00000000000',
78664 '000000000000',
78665 '0000000000000',
78666 '00000000000000',
78667 '000000000000000',
78668 '0000000000000000',
78669 '00000000000000000',
78670 '000000000000000000',
78671 '0000000000000000000',
78672 '00000000000000000000',
78673 '000000000000000000000',
78674 '0000000000000000000000',
78675 '00000000000000000000000',
78676 '000000000000000000000000',
78677 '0000000000000000000000000'
78678 ];
78679
78680 var groupSizes = [
78681 0, 0,
78682 25, 16, 12, 11, 10, 9, 8,
78683 8, 7, 7, 7, 7, 6, 6,
78684 6, 6, 6, 6, 6, 5, 5,
78685 5, 5, 5, 5, 5, 5, 5,
78686 5, 5, 5, 5, 5, 5, 5
78687 ];
78688
78689 var groupBases = [
78690 0, 0,
78691 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
78692 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
78693 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
78694 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
78695 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
78696 ];
78697
78698 BN.prototype.toString = function toString (base, padding) {
78699 base = base || 10;
78700 padding = padding | 0 || 1;
78701
78702 var out;
78703 if (base === 16 || base === 'hex') {
78704 out = '';
78705 var off = 0;
78706 var carry = 0;
78707 for (var i = 0; i < this.length; i++) {
78708 var w = this.words[i];
78709 var word = (((w << off) | carry) & 0xffffff).toString(16);
78710 carry = (w >>> (24 - off)) & 0xffffff;
78711 if (carry !== 0 || i !== this.length - 1) {
78712 out = zeros[6 - word.length] + word + out;
78713 } else {
78714 out = word + out;
78715 }
78716 off += 2;
78717 if (off >= 26) {
78718 off -= 26;
78719 i--;
78720 }
78721 }
78722 if (carry !== 0) {
78723 out = carry.toString(16) + out;
78724 }
78725 while (out.length % padding !== 0) {
78726 out = '0' + out;
78727 }
78728 if (this.negative !== 0) {
78729 out = '-' + out;
78730 }
78731 return out;
78732 }
78733
78734 if (base === (base | 0) && base >= 2 && base <= 36) {
78735 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
78736 var groupSize = groupSizes[base];
78737 // var groupBase = Math.pow(base, groupSize);
78738 var groupBase = groupBases[base];
78739 out = '';
78740 var c = this.clone();
78741 c.negative = 0;
78742 while (!c.isZero()) {
78743 var r = c.modn(groupBase).toString(base);
78744 c = c.idivn(groupBase);
78745
78746 if (!c.isZero()) {
78747 out = zeros[groupSize - r.length] + r + out;
78748 } else {
78749 out = r + out;
78750 }
78751 }
78752 if (this.isZero()) {
78753 out = '0' + out;
78754 }
78755 while (out.length % padding !== 0) {
78756 out = '0' + out;
78757 }
78758 if (this.negative !== 0) {
78759 out = '-' + out;
78760 }
78761 return out;
78762 }
78763
78764 assert(false, 'Base should be between 2 and 36');
78765 };
78766
78767 BN.prototype.toNumber = function toNumber () {
78768 var ret = this.words[0];
78769 if (this.length === 2) {
78770 ret += this.words[1] * 0x4000000;
78771 } else if (this.length === 3 && this.words[2] === 0x01) {
78772 // NOTE: at this stage it is known that the top bit is set
78773 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
78774 } else if (this.length > 2) {
78775 assert(false, 'Number can only safely store up to 53 bits');
78776 }
78777 return (this.negative !== 0) ? -ret : ret;
78778 };
78779
78780 BN.prototype.toJSON = function toJSON () {
78781 return this.toString(16);
78782 };
78783
78784 BN.prototype.toBuffer = function toBuffer (endian, length) {
78785 assert(typeof Buffer !== 'undefined');
78786 return this.toArrayLike(Buffer, endian, length);
78787 };
78788
78789 BN.prototype.toArray = function toArray (endian, length) {
78790 return this.toArrayLike(Array, endian, length);
78791 };
78792
78793 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
78794 var byteLength = this.byteLength();
78795 var reqLength = length || Math.max(1, byteLength);
78796 assert(byteLength <= reqLength, 'byte array longer than desired length');
78797 assert(reqLength > 0, 'Requested array length <= 0');
78798
78799 this.strip();
78800 var littleEndian = endian === 'le';
78801 var res = new ArrayType(reqLength);
78802
78803 var b, i;
78804 var q = this.clone();
78805 if (!littleEndian) {
78806 // Assume big-endian
78807 for (i = 0; i < reqLength - byteLength; i++) {
78808 res[i] = 0;
78809 }
78810
78811 for (i = 0; !q.isZero(); i++) {
78812 b = q.andln(0xff);
78813 q.iushrn(8);
78814
78815 res[reqLength - i - 1] = b;
78816 }
78817 } else {
78818 for (i = 0; !q.isZero(); i++) {
78819 b = q.andln(0xff);
78820 q.iushrn(8);
78821
78822 res[i] = b;
78823 }
78824
78825 for (; i < reqLength; i++) {
78826 res[i] = 0;
78827 }
78828 }
78829
78830 return res;
78831 };
78832
78833 if (Math.clz32) {
78834 BN.prototype._countBits = function _countBits (w) {
78835 return 32 - Math.clz32(w);
78836 };
78837 } else {
78838 BN.prototype._countBits = function _countBits (w) {
78839 var t = w;
78840 var r = 0;
78841 if (t >= 0x1000) {
78842 r += 13;
78843 t >>>= 13;
78844 }
78845 if (t >= 0x40) {
78846 r += 7;
78847 t >>>= 7;
78848 }
78849 if (t >= 0x8) {
78850 r += 4;
78851 t >>>= 4;
78852 }
78853 if (t >= 0x02) {
78854 r += 2;
78855 t >>>= 2;
78856 }
78857 return r + t;
78858 };
78859 }
78860
78861 BN.prototype._zeroBits = function _zeroBits (w) {
78862 // Short-cut
78863 if (w === 0) return 26;
78864
78865 var t = w;
78866 var r = 0;
78867 if ((t & 0x1fff) === 0) {
78868 r += 13;
78869 t >>>= 13;
78870 }
78871 if ((t & 0x7f) === 0) {
78872 r += 7;
78873 t >>>= 7;
78874 }
78875 if ((t & 0xf) === 0) {
78876 r += 4;
78877 t >>>= 4;
78878 }
78879 if ((t & 0x3) === 0) {
78880 r += 2;
78881 t >>>= 2;
78882 }
78883 if ((t & 0x1) === 0) {
78884 r++;
78885 }
78886 return r;
78887 };
78888
78889 // Return number of used bits in a BN
78890 BN.prototype.bitLength = function bitLength () {
78891 var w = this.words[this.length - 1];
78892 var hi = this._countBits(w);
78893 return (this.length - 1) * 26 + hi;
78894 };
78895
78896 function toBitArray (num) {
78897 var w = new Array(num.bitLength());
78898
78899 for (var bit = 0; bit < w.length; bit++) {
78900 var off = (bit / 26) | 0;
78901 var wbit = bit % 26;
78902
78903 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
78904 }
78905
78906 return w;
78907 }
78908
78909 // Number of trailing zero bits
78910 BN.prototype.zeroBits = function zeroBits () {
78911 if (this.isZero()) return 0;
78912
78913 var r = 0;
78914 for (var i = 0; i < this.length; i++) {
78915 var b = this._zeroBits(this.words[i]);
78916 r += b;
78917 if (b !== 26) break;
78918 }
78919 return r;
78920 };
78921
78922 BN.prototype.byteLength = function byteLength () {
78923 return Math.ceil(this.bitLength() / 8);
78924 };
78925
78926 BN.prototype.toTwos = function toTwos (width) {
78927 if (this.negative !== 0) {
78928 return this.abs().inotn(width).iaddn(1);
78929 }
78930 return this.clone();
78931 };
78932
78933 BN.prototype.fromTwos = function fromTwos (width) {
78934 if (this.testn(width - 1)) {
78935 return this.notn(width).iaddn(1).ineg();
78936 }
78937 return this.clone();
78938 };
78939
78940 BN.prototype.isNeg = function isNeg () {
78941 return this.negative !== 0;
78942 };
78943
78944 // Return negative clone of `this`
78945 BN.prototype.neg = function neg () {
78946 return this.clone().ineg();
78947 };
78948
78949 BN.prototype.ineg = function ineg () {
78950 if (!this.isZero()) {
78951 this.negative ^= 1;
78952 }
78953
78954 return this;
78955 };
78956
78957 // Or `num` with `this` in-place
78958 BN.prototype.iuor = function iuor (num) {
78959 while (this.length < num.length) {
78960 this.words[this.length++] = 0;
78961 }
78962
78963 for (var i = 0; i < num.length; i++) {
78964 this.words[i] = this.words[i] | num.words[i];
78965 }
78966
78967 return this.strip();
78968 };
78969
78970 BN.prototype.ior = function ior (num) {
78971 assert((this.negative | num.negative) === 0);
78972 return this.iuor(num);
78973 };
78974
78975 // Or `num` with `this`
78976 BN.prototype.or = function or (num) {
78977 if (this.length > num.length) return this.clone().ior(num);
78978 return num.clone().ior(this);
78979 };
78980
78981 BN.prototype.uor = function uor (num) {
78982 if (this.length > num.length) return this.clone().iuor(num);
78983 return num.clone().iuor(this);
78984 };
78985
78986 // And `num` with `this` in-place
78987 BN.prototype.iuand = function iuand (num) {
78988 // b = min-length(num, this)
78989 var b;
78990 if (this.length > num.length) {
78991 b = num;
78992 } else {
78993 b = this;
78994 }
78995
78996 for (var i = 0; i < b.length; i++) {
78997 this.words[i] = this.words[i] & num.words[i];
78998 }
78999
79000 this.length = b.length;
79001
79002 return this.strip();
79003 };
79004
79005 BN.prototype.iand = function iand (num) {
79006 assert((this.negative | num.negative) === 0);
79007 return this.iuand(num);
79008 };
79009
79010 // And `num` with `this`
79011 BN.prototype.and = function and (num) {
79012 if (this.length > num.length) return this.clone().iand(num);
79013 return num.clone().iand(this);
79014 };
79015
79016 BN.prototype.uand = function uand (num) {
79017 if (this.length > num.length) return this.clone().iuand(num);
79018 return num.clone().iuand(this);
79019 };
79020
79021 // Xor `num` with `this` in-place
79022 BN.prototype.iuxor = function iuxor (num) {
79023 // a.length > b.length
79024 var a;
79025 var b;
79026 if (this.length > num.length) {
79027 a = this;
79028 b = num;
79029 } else {
79030 a = num;
79031 b = this;
79032 }
79033
79034 for (var i = 0; i < b.length; i++) {
79035 this.words[i] = a.words[i] ^ b.words[i];
79036 }
79037
79038 if (this !== a) {
79039 for (; i < a.length; i++) {
79040 this.words[i] = a.words[i];
79041 }
79042 }
79043
79044 this.length = a.length;
79045
79046 return this.strip();
79047 };
79048
79049 BN.prototype.ixor = function ixor (num) {
79050 assert((this.negative | num.negative) === 0);
79051 return this.iuxor(num);
79052 };
79053
79054 // Xor `num` with `this`
79055 BN.prototype.xor = function xor (num) {
79056 if (this.length > num.length) return this.clone().ixor(num);
79057 return num.clone().ixor(this);
79058 };
79059
79060 BN.prototype.uxor = function uxor (num) {
79061 if (this.length > num.length) return this.clone().iuxor(num);
79062 return num.clone().iuxor(this);
79063 };
79064
79065 // Not ``this`` with ``width`` bitwidth
79066 BN.prototype.inotn = function inotn (width) {
79067 assert(typeof width === 'number' && width >= 0);
79068
79069 var bytesNeeded = Math.ceil(width / 26) | 0;
79070 var bitsLeft = width % 26;
79071
79072 // Extend the buffer with leading zeroes
79073 this._expand(bytesNeeded);
79074
79075 if (bitsLeft > 0) {
79076 bytesNeeded--;
79077 }
79078
79079 // Handle complete words
79080 for (var i = 0; i < bytesNeeded; i++) {
79081 this.words[i] = ~this.words[i] & 0x3ffffff;
79082 }
79083
79084 // Handle the residue
79085 if (bitsLeft > 0) {
79086 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
79087 }
79088
79089 // And remove leading zeroes
79090 return this.strip();
79091 };
79092
79093 BN.prototype.notn = function notn (width) {
79094 return this.clone().inotn(width);
79095 };
79096
79097 // Set `bit` of `this`
79098 BN.prototype.setn = function setn (bit, val) {
79099 assert(typeof bit === 'number' && bit >= 0);
79100
79101 var off = (bit / 26) | 0;
79102 var wbit = bit % 26;
79103
79104 this._expand(off + 1);
79105
79106 if (val) {
79107 this.words[off] = this.words[off] | (1 << wbit);
79108 } else {
79109 this.words[off] = this.words[off] & ~(1 << wbit);
79110 }
79111
79112 return this.strip();
79113 };
79114
79115 // Add `num` to `this` in-place
79116 BN.prototype.iadd = function iadd (num) {
79117 var r;
79118
79119 // negative + positive
79120 if (this.negative !== 0 && num.negative === 0) {
79121 this.negative = 0;
79122 r = this.isub(num);
79123 this.negative ^= 1;
79124 return this._normSign();
79125
79126 // positive + negative
79127 } else if (this.negative === 0 && num.negative !== 0) {
79128 num.negative = 0;
79129 r = this.isub(num);
79130 num.negative = 1;
79131 return r._normSign();
79132 }
79133
79134 // a.length > b.length
79135 var a, b;
79136 if (this.length > num.length) {
79137 a = this;
79138 b = num;
79139 } else {
79140 a = num;
79141 b = this;
79142 }
79143
79144 var carry = 0;
79145 for (var i = 0; i < b.length; i++) {
79146 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
79147 this.words[i] = r & 0x3ffffff;
79148 carry = r >>> 26;
79149 }
79150 for (; carry !== 0 && i < a.length; i++) {
79151 r = (a.words[i] | 0) + carry;
79152 this.words[i] = r & 0x3ffffff;
79153 carry = r >>> 26;
79154 }
79155
79156 this.length = a.length;
79157 if (carry !== 0) {
79158 this.words[this.length] = carry;
79159 this.length++;
79160 // Copy the rest of the words
79161 } else if (a !== this) {
79162 for (; i < a.length; i++) {
79163 this.words[i] = a.words[i];
79164 }
79165 }
79166
79167 return this;
79168 };
79169
79170 // Add `num` to `this`
79171 BN.prototype.add = function add (num) {
79172 var res;
79173 if (num.negative !== 0 && this.negative === 0) {
79174 num.negative = 0;
79175 res = this.sub(num);
79176 num.negative ^= 1;
79177 return res;
79178 } else if (num.negative === 0 && this.negative !== 0) {
79179 this.negative = 0;
79180 res = num.sub(this);
79181 this.negative = 1;
79182 return res;
79183 }
79184
79185 if (this.length > num.length) return this.clone().iadd(num);
79186
79187 return num.clone().iadd(this);
79188 };
79189
79190 // Subtract `num` from `this` in-place
79191 BN.prototype.isub = function isub (num) {
79192 // this - (-num) = this + num
79193 if (num.negative !== 0) {
79194 num.negative = 0;
79195 var r = this.iadd(num);
79196 num.negative = 1;
79197 return r._normSign();
79198
79199 // -this - num = -(this + num)
79200 } else if (this.negative !== 0) {
79201 this.negative = 0;
79202 this.iadd(num);
79203 this.negative = 1;
79204 return this._normSign();
79205 }
79206
79207 // At this point both numbers are positive
79208 var cmp = this.cmp(num);
79209
79210 // Optimization - zeroify
79211 if (cmp === 0) {
79212 this.negative = 0;
79213 this.length = 1;
79214 this.words[0] = 0;
79215 return this;
79216 }
79217
79218 // a > b
79219 var a, b;
79220 if (cmp > 0) {
79221 a = this;
79222 b = num;
79223 } else {
79224 a = num;
79225 b = this;
79226 }
79227
79228 var carry = 0;
79229 for (var i = 0; i < b.length; i++) {
79230 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
79231 carry = r >> 26;
79232 this.words[i] = r & 0x3ffffff;
79233 }
79234 for (; carry !== 0 && i < a.length; i++) {
79235 r = (a.words[i] | 0) + carry;
79236 carry = r >> 26;
79237 this.words[i] = r & 0x3ffffff;
79238 }
79239
79240 // Copy rest of the words
79241 if (carry === 0 && i < a.length && a !== this) {
79242 for (; i < a.length; i++) {
79243 this.words[i] = a.words[i];
79244 }
79245 }
79246
79247 this.length = Math.max(this.length, i);
79248
79249 if (a !== this) {
79250 this.negative = 1;
79251 }
79252
79253 return this.strip();
79254 };
79255
79256 // Subtract `num` from `this`
79257 BN.prototype.sub = function sub (num) {
79258 return this.clone().isub(num);
79259 };
79260
79261 function smallMulTo (self, num, out) {
79262 out.negative = num.negative ^ self.negative;
79263 var len = (self.length + num.length) | 0;
79264 out.length = len;
79265 len = (len - 1) | 0;
79266
79267 // Peel one iteration (compiler can't do it, because of code complexity)
79268 var a = self.words[0] | 0;
79269 var b = num.words[0] | 0;
79270 var r = a * b;
79271
79272 var lo = r & 0x3ffffff;
79273 var carry = (r / 0x4000000) | 0;
79274 out.words[0] = lo;
79275
79276 for (var k = 1; k < len; k++) {
79277 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79278 // note that ncarry could be >= 0x3ffffff
79279 var ncarry = carry >>> 26;
79280 var rword = carry & 0x3ffffff;
79281 var maxJ = Math.min(k, num.length - 1);
79282 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79283 var i = (k - j) | 0;
79284 a = self.words[i] | 0;
79285 b = num.words[j] | 0;
79286 r = a * b + rword;
79287 ncarry += (r / 0x4000000) | 0;
79288 rword = r & 0x3ffffff;
79289 }
79290 out.words[k] = rword | 0;
79291 carry = ncarry | 0;
79292 }
79293 if (carry !== 0) {
79294 out.words[k] = carry | 0;
79295 } else {
79296 out.length--;
79297 }
79298
79299 return out.strip();
79300 }
79301
79302 // TODO(indutny): it may be reasonable to omit it for users who don't need
79303 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
79304 // multiplication (like elliptic secp256k1).
79305 var comb10MulTo = function comb10MulTo (self, num, out) {
79306 var a = self.words;
79307 var b = num.words;
79308 var o = out.words;
79309 var c = 0;
79310 var lo;
79311 var mid;
79312 var hi;
79313 var a0 = a[0] | 0;
79314 var al0 = a0 & 0x1fff;
79315 var ah0 = a0 >>> 13;
79316 var a1 = a[1] | 0;
79317 var al1 = a1 & 0x1fff;
79318 var ah1 = a1 >>> 13;
79319 var a2 = a[2] | 0;
79320 var al2 = a2 & 0x1fff;
79321 var ah2 = a2 >>> 13;
79322 var a3 = a[3] | 0;
79323 var al3 = a3 & 0x1fff;
79324 var ah3 = a3 >>> 13;
79325 var a4 = a[4] | 0;
79326 var al4 = a4 & 0x1fff;
79327 var ah4 = a4 >>> 13;
79328 var a5 = a[5] | 0;
79329 var al5 = a5 & 0x1fff;
79330 var ah5 = a5 >>> 13;
79331 var a6 = a[6] | 0;
79332 var al6 = a6 & 0x1fff;
79333 var ah6 = a6 >>> 13;
79334 var a7 = a[7] | 0;
79335 var al7 = a7 & 0x1fff;
79336 var ah7 = a7 >>> 13;
79337 var a8 = a[8] | 0;
79338 var al8 = a8 & 0x1fff;
79339 var ah8 = a8 >>> 13;
79340 var a9 = a[9] | 0;
79341 var al9 = a9 & 0x1fff;
79342 var ah9 = a9 >>> 13;
79343 var b0 = b[0] | 0;
79344 var bl0 = b0 & 0x1fff;
79345 var bh0 = b0 >>> 13;
79346 var b1 = b[1] | 0;
79347 var bl1 = b1 & 0x1fff;
79348 var bh1 = b1 >>> 13;
79349 var b2 = b[2] | 0;
79350 var bl2 = b2 & 0x1fff;
79351 var bh2 = b2 >>> 13;
79352 var b3 = b[3] | 0;
79353 var bl3 = b3 & 0x1fff;
79354 var bh3 = b3 >>> 13;
79355 var b4 = b[4] | 0;
79356 var bl4 = b4 & 0x1fff;
79357 var bh4 = b4 >>> 13;
79358 var b5 = b[5] | 0;
79359 var bl5 = b5 & 0x1fff;
79360 var bh5 = b5 >>> 13;
79361 var b6 = b[6] | 0;
79362 var bl6 = b6 & 0x1fff;
79363 var bh6 = b6 >>> 13;
79364 var b7 = b[7] | 0;
79365 var bl7 = b7 & 0x1fff;
79366 var bh7 = b7 >>> 13;
79367 var b8 = b[8] | 0;
79368 var bl8 = b8 & 0x1fff;
79369 var bh8 = b8 >>> 13;
79370 var b9 = b[9] | 0;
79371 var bl9 = b9 & 0x1fff;
79372 var bh9 = b9 >>> 13;
79373
79374 out.negative = self.negative ^ num.negative;
79375 out.length = 19;
79376 /* k = 0 */
79377 lo = Math.imul(al0, bl0);
79378 mid = Math.imul(al0, bh0);
79379 mid = (mid + Math.imul(ah0, bl0)) | 0;
79380 hi = Math.imul(ah0, bh0);
79381 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79382 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
79383 w0 &= 0x3ffffff;
79384 /* k = 1 */
79385 lo = Math.imul(al1, bl0);
79386 mid = Math.imul(al1, bh0);
79387 mid = (mid + Math.imul(ah1, bl0)) | 0;
79388 hi = Math.imul(ah1, bh0);
79389 lo = (lo + Math.imul(al0, bl1)) | 0;
79390 mid = (mid + Math.imul(al0, bh1)) | 0;
79391 mid = (mid + Math.imul(ah0, bl1)) | 0;
79392 hi = (hi + Math.imul(ah0, bh1)) | 0;
79393 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79394 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
79395 w1 &= 0x3ffffff;
79396 /* k = 2 */
79397 lo = Math.imul(al2, bl0);
79398 mid = Math.imul(al2, bh0);
79399 mid = (mid + Math.imul(ah2, bl0)) | 0;
79400 hi = Math.imul(ah2, bh0);
79401 lo = (lo + Math.imul(al1, bl1)) | 0;
79402 mid = (mid + Math.imul(al1, bh1)) | 0;
79403 mid = (mid + Math.imul(ah1, bl1)) | 0;
79404 hi = (hi + Math.imul(ah1, bh1)) | 0;
79405 lo = (lo + Math.imul(al0, bl2)) | 0;
79406 mid = (mid + Math.imul(al0, bh2)) | 0;
79407 mid = (mid + Math.imul(ah0, bl2)) | 0;
79408 hi = (hi + Math.imul(ah0, bh2)) | 0;
79409 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79410 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
79411 w2 &= 0x3ffffff;
79412 /* k = 3 */
79413 lo = Math.imul(al3, bl0);
79414 mid = Math.imul(al3, bh0);
79415 mid = (mid + Math.imul(ah3, bl0)) | 0;
79416 hi = Math.imul(ah3, bh0);
79417 lo = (lo + Math.imul(al2, bl1)) | 0;
79418 mid = (mid + Math.imul(al2, bh1)) | 0;
79419 mid = (mid + Math.imul(ah2, bl1)) | 0;
79420 hi = (hi + Math.imul(ah2, bh1)) | 0;
79421 lo = (lo + Math.imul(al1, bl2)) | 0;
79422 mid = (mid + Math.imul(al1, bh2)) | 0;
79423 mid = (mid + Math.imul(ah1, bl2)) | 0;
79424 hi = (hi + Math.imul(ah1, bh2)) | 0;
79425 lo = (lo + Math.imul(al0, bl3)) | 0;
79426 mid = (mid + Math.imul(al0, bh3)) | 0;
79427 mid = (mid + Math.imul(ah0, bl3)) | 0;
79428 hi = (hi + Math.imul(ah0, bh3)) | 0;
79429 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79430 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
79431 w3 &= 0x3ffffff;
79432 /* k = 4 */
79433 lo = Math.imul(al4, bl0);
79434 mid = Math.imul(al4, bh0);
79435 mid = (mid + Math.imul(ah4, bl0)) | 0;
79436 hi = Math.imul(ah4, bh0);
79437 lo = (lo + Math.imul(al3, bl1)) | 0;
79438 mid = (mid + Math.imul(al3, bh1)) | 0;
79439 mid = (mid + Math.imul(ah3, bl1)) | 0;
79440 hi = (hi + Math.imul(ah3, bh1)) | 0;
79441 lo = (lo + Math.imul(al2, bl2)) | 0;
79442 mid = (mid + Math.imul(al2, bh2)) | 0;
79443 mid = (mid + Math.imul(ah2, bl2)) | 0;
79444 hi = (hi + Math.imul(ah2, bh2)) | 0;
79445 lo = (lo + Math.imul(al1, bl3)) | 0;
79446 mid = (mid + Math.imul(al1, bh3)) | 0;
79447 mid = (mid + Math.imul(ah1, bl3)) | 0;
79448 hi = (hi + Math.imul(ah1, bh3)) | 0;
79449 lo = (lo + Math.imul(al0, bl4)) | 0;
79450 mid = (mid + Math.imul(al0, bh4)) | 0;
79451 mid = (mid + Math.imul(ah0, bl4)) | 0;
79452 hi = (hi + Math.imul(ah0, bh4)) | 0;
79453 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79454 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
79455 w4 &= 0x3ffffff;
79456 /* k = 5 */
79457 lo = Math.imul(al5, bl0);
79458 mid = Math.imul(al5, bh0);
79459 mid = (mid + Math.imul(ah5, bl0)) | 0;
79460 hi = Math.imul(ah5, bh0);
79461 lo = (lo + Math.imul(al4, bl1)) | 0;
79462 mid = (mid + Math.imul(al4, bh1)) | 0;
79463 mid = (mid + Math.imul(ah4, bl1)) | 0;
79464 hi = (hi + Math.imul(ah4, bh1)) | 0;
79465 lo = (lo + Math.imul(al3, bl2)) | 0;
79466 mid = (mid + Math.imul(al3, bh2)) | 0;
79467 mid = (mid + Math.imul(ah3, bl2)) | 0;
79468 hi = (hi + Math.imul(ah3, bh2)) | 0;
79469 lo = (lo + Math.imul(al2, bl3)) | 0;
79470 mid = (mid + Math.imul(al2, bh3)) | 0;
79471 mid = (mid + Math.imul(ah2, bl3)) | 0;
79472 hi = (hi + Math.imul(ah2, bh3)) | 0;
79473 lo = (lo + Math.imul(al1, bl4)) | 0;
79474 mid = (mid + Math.imul(al1, bh4)) | 0;
79475 mid = (mid + Math.imul(ah1, bl4)) | 0;
79476 hi = (hi + Math.imul(ah1, bh4)) | 0;
79477 lo = (lo + Math.imul(al0, bl5)) | 0;
79478 mid = (mid + Math.imul(al0, bh5)) | 0;
79479 mid = (mid + Math.imul(ah0, bl5)) | 0;
79480 hi = (hi + Math.imul(ah0, bh5)) | 0;
79481 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79482 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
79483 w5 &= 0x3ffffff;
79484 /* k = 6 */
79485 lo = Math.imul(al6, bl0);
79486 mid = Math.imul(al6, bh0);
79487 mid = (mid + Math.imul(ah6, bl0)) | 0;
79488 hi = Math.imul(ah6, bh0);
79489 lo = (lo + Math.imul(al5, bl1)) | 0;
79490 mid = (mid + Math.imul(al5, bh1)) | 0;
79491 mid = (mid + Math.imul(ah5, bl1)) | 0;
79492 hi = (hi + Math.imul(ah5, bh1)) | 0;
79493 lo = (lo + Math.imul(al4, bl2)) | 0;
79494 mid = (mid + Math.imul(al4, bh2)) | 0;
79495 mid = (mid + Math.imul(ah4, bl2)) | 0;
79496 hi = (hi + Math.imul(ah4, bh2)) | 0;
79497 lo = (lo + Math.imul(al3, bl3)) | 0;
79498 mid = (mid + Math.imul(al3, bh3)) | 0;
79499 mid = (mid + Math.imul(ah3, bl3)) | 0;
79500 hi = (hi + Math.imul(ah3, bh3)) | 0;
79501 lo = (lo + Math.imul(al2, bl4)) | 0;
79502 mid = (mid + Math.imul(al2, bh4)) | 0;
79503 mid = (mid + Math.imul(ah2, bl4)) | 0;
79504 hi = (hi + Math.imul(ah2, bh4)) | 0;
79505 lo = (lo + Math.imul(al1, bl5)) | 0;
79506 mid = (mid + Math.imul(al1, bh5)) | 0;
79507 mid = (mid + Math.imul(ah1, bl5)) | 0;
79508 hi = (hi + Math.imul(ah1, bh5)) | 0;
79509 lo = (lo + Math.imul(al0, bl6)) | 0;
79510 mid = (mid + Math.imul(al0, bh6)) | 0;
79511 mid = (mid + Math.imul(ah0, bl6)) | 0;
79512 hi = (hi + Math.imul(ah0, bh6)) | 0;
79513 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79514 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
79515 w6 &= 0x3ffffff;
79516 /* k = 7 */
79517 lo = Math.imul(al7, bl0);
79518 mid = Math.imul(al7, bh0);
79519 mid = (mid + Math.imul(ah7, bl0)) | 0;
79520 hi = Math.imul(ah7, bh0);
79521 lo = (lo + Math.imul(al6, bl1)) | 0;
79522 mid = (mid + Math.imul(al6, bh1)) | 0;
79523 mid = (mid + Math.imul(ah6, bl1)) | 0;
79524 hi = (hi + Math.imul(ah6, bh1)) | 0;
79525 lo = (lo + Math.imul(al5, bl2)) | 0;
79526 mid = (mid + Math.imul(al5, bh2)) | 0;
79527 mid = (mid + Math.imul(ah5, bl2)) | 0;
79528 hi = (hi + Math.imul(ah5, bh2)) | 0;
79529 lo = (lo + Math.imul(al4, bl3)) | 0;
79530 mid = (mid + Math.imul(al4, bh3)) | 0;
79531 mid = (mid + Math.imul(ah4, bl3)) | 0;
79532 hi = (hi + Math.imul(ah4, bh3)) | 0;
79533 lo = (lo + Math.imul(al3, bl4)) | 0;
79534 mid = (mid + Math.imul(al3, bh4)) | 0;
79535 mid = (mid + Math.imul(ah3, bl4)) | 0;
79536 hi = (hi + Math.imul(ah3, bh4)) | 0;
79537 lo = (lo + Math.imul(al2, bl5)) | 0;
79538 mid = (mid + Math.imul(al2, bh5)) | 0;
79539 mid = (mid + Math.imul(ah2, bl5)) | 0;
79540 hi = (hi + Math.imul(ah2, bh5)) | 0;
79541 lo = (lo + Math.imul(al1, bl6)) | 0;
79542 mid = (mid + Math.imul(al1, bh6)) | 0;
79543 mid = (mid + Math.imul(ah1, bl6)) | 0;
79544 hi = (hi + Math.imul(ah1, bh6)) | 0;
79545 lo = (lo + Math.imul(al0, bl7)) | 0;
79546 mid = (mid + Math.imul(al0, bh7)) | 0;
79547 mid = (mid + Math.imul(ah0, bl7)) | 0;
79548 hi = (hi + Math.imul(ah0, bh7)) | 0;
79549 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79550 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
79551 w7 &= 0x3ffffff;
79552 /* k = 8 */
79553 lo = Math.imul(al8, bl0);
79554 mid = Math.imul(al8, bh0);
79555 mid = (mid + Math.imul(ah8, bl0)) | 0;
79556 hi = Math.imul(ah8, bh0);
79557 lo = (lo + Math.imul(al7, bl1)) | 0;
79558 mid = (mid + Math.imul(al7, bh1)) | 0;
79559 mid = (mid + Math.imul(ah7, bl1)) | 0;
79560 hi = (hi + Math.imul(ah7, bh1)) | 0;
79561 lo = (lo + Math.imul(al6, bl2)) | 0;
79562 mid = (mid + Math.imul(al6, bh2)) | 0;
79563 mid = (mid + Math.imul(ah6, bl2)) | 0;
79564 hi = (hi + Math.imul(ah6, bh2)) | 0;
79565 lo = (lo + Math.imul(al5, bl3)) | 0;
79566 mid = (mid + Math.imul(al5, bh3)) | 0;
79567 mid = (mid + Math.imul(ah5, bl3)) | 0;
79568 hi = (hi + Math.imul(ah5, bh3)) | 0;
79569 lo = (lo + Math.imul(al4, bl4)) | 0;
79570 mid = (mid + Math.imul(al4, bh4)) | 0;
79571 mid = (mid + Math.imul(ah4, bl4)) | 0;
79572 hi = (hi + Math.imul(ah4, bh4)) | 0;
79573 lo = (lo + Math.imul(al3, bl5)) | 0;
79574 mid = (mid + Math.imul(al3, bh5)) | 0;
79575 mid = (mid + Math.imul(ah3, bl5)) | 0;
79576 hi = (hi + Math.imul(ah3, bh5)) | 0;
79577 lo = (lo + Math.imul(al2, bl6)) | 0;
79578 mid = (mid + Math.imul(al2, bh6)) | 0;
79579 mid = (mid + Math.imul(ah2, bl6)) | 0;
79580 hi = (hi + Math.imul(ah2, bh6)) | 0;
79581 lo = (lo + Math.imul(al1, bl7)) | 0;
79582 mid = (mid + Math.imul(al1, bh7)) | 0;
79583 mid = (mid + Math.imul(ah1, bl7)) | 0;
79584 hi = (hi + Math.imul(ah1, bh7)) | 0;
79585 lo = (lo + Math.imul(al0, bl8)) | 0;
79586 mid = (mid + Math.imul(al0, bh8)) | 0;
79587 mid = (mid + Math.imul(ah0, bl8)) | 0;
79588 hi = (hi + Math.imul(ah0, bh8)) | 0;
79589 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79590 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
79591 w8 &= 0x3ffffff;
79592 /* k = 9 */
79593 lo = Math.imul(al9, bl0);
79594 mid = Math.imul(al9, bh0);
79595 mid = (mid + Math.imul(ah9, bl0)) | 0;
79596 hi = Math.imul(ah9, bh0);
79597 lo = (lo + Math.imul(al8, bl1)) | 0;
79598 mid = (mid + Math.imul(al8, bh1)) | 0;
79599 mid = (mid + Math.imul(ah8, bl1)) | 0;
79600 hi = (hi + Math.imul(ah8, bh1)) | 0;
79601 lo = (lo + Math.imul(al7, bl2)) | 0;
79602 mid = (mid + Math.imul(al7, bh2)) | 0;
79603 mid = (mid + Math.imul(ah7, bl2)) | 0;
79604 hi = (hi + Math.imul(ah7, bh2)) | 0;
79605 lo = (lo + Math.imul(al6, bl3)) | 0;
79606 mid = (mid + Math.imul(al6, bh3)) | 0;
79607 mid = (mid + Math.imul(ah6, bl3)) | 0;
79608 hi = (hi + Math.imul(ah6, bh3)) | 0;
79609 lo = (lo + Math.imul(al5, bl4)) | 0;
79610 mid = (mid + Math.imul(al5, bh4)) | 0;
79611 mid = (mid + Math.imul(ah5, bl4)) | 0;
79612 hi = (hi + Math.imul(ah5, bh4)) | 0;
79613 lo = (lo + Math.imul(al4, bl5)) | 0;
79614 mid = (mid + Math.imul(al4, bh5)) | 0;
79615 mid = (mid + Math.imul(ah4, bl5)) | 0;
79616 hi = (hi + Math.imul(ah4, bh5)) | 0;
79617 lo = (lo + Math.imul(al3, bl6)) | 0;
79618 mid = (mid + Math.imul(al3, bh6)) | 0;
79619 mid = (mid + Math.imul(ah3, bl6)) | 0;
79620 hi = (hi + Math.imul(ah3, bh6)) | 0;
79621 lo = (lo + Math.imul(al2, bl7)) | 0;
79622 mid = (mid + Math.imul(al2, bh7)) | 0;
79623 mid = (mid + Math.imul(ah2, bl7)) | 0;
79624 hi = (hi + Math.imul(ah2, bh7)) | 0;
79625 lo = (lo + Math.imul(al1, bl8)) | 0;
79626 mid = (mid + Math.imul(al1, bh8)) | 0;
79627 mid = (mid + Math.imul(ah1, bl8)) | 0;
79628 hi = (hi + Math.imul(ah1, bh8)) | 0;
79629 lo = (lo + Math.imul(al0, bl9)) | 0;
79630 mid = (mid + Math.imul(al0, bh9)) | 0;
79631 mid = (mid + Math.imul(ah0, bl9)) | 0;
79632 hi = (hi + Math.imul(ah0, bh9)) | 0;
79633 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79634 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
79635 w9 &= 0x3ffffff;
79636 /* k = 10 */
79637 lo = Math.imul(al9, bl1);
79638 mid = Math.imul(al9, bh1);
79639 mid = (mid + Math.imul(ah9, bl1)) | 0;
79640 hi = Math.imul(ah9, bh1);
79641 lo = (lo + Math.imul(al8, bl2)) | 0;
79642 mid = (mid + Math.imul(al8, bh2)) | 0;
79643 mid = (mid + Math.imul(ah8, bl2)) | 0;
79644 hi = (hi + Math.imul(ah8, bh2)) | 0;
79645 lo = (lo + Math.imul(al7, bl3)) | 0;
79646 mid = (mid + Math.imul(al7, bh3)) | 0;
79647 mid = (mid + Math.imul(ah7, bl3)) | 0;
79648 hi = (hi + Math.imul(ah7, bh3)) | 0;
79649 lo = (lo + Math.imul(al6, bl4)) | 0;
79650 mid = (mid + Math.imul(al6, bh4)) | 0;
79651 mid = (mid + Math.imul(ah6, bl4)) | 0;
79652 hi = (hi + Math.imul(ah6, bh4)) | 0;
79653 lo = (lo + Math.imul(al5, bl5)) | 0;
79654 mid = (mid + Math.imul(al5, bh5)) | 0;
79655 mid = (mid + Math.imul(ah5, bl5)) | 0;
79656 hi = (hi + Math.imul(ah5, bh5)) | 0;
79657 lo = (lo + Math.imul(al4, bl6)) | 0;
79658 mid = (mid + Math.imul(al4, bh6)) | 0;
79659 mid = (mid + Math.imul(ah4, bl6)) | 0;
79660 hi = (hi + Math.imul(ah4, bh6)) | 0;
79661 lo = (lo + Math.imul(al3, bl7)) | 0;
79662 mid = (mid + Math.imul(al3, bh7)) | 0;
79663 mid = (mid + Math.imul(ah3, bl7)) | 0;
79664 hi = (hi + Math.imul(ah3, bh7)) | 0;
79665 lo = (lo + Math.imul(al2, bl8)) | 0;
79666 mid = (mid + Math.imul(al2, bh8)) | 0;
79667 mid = (mid + Math.imul(ah2, bl8)) | 0;
79668 hi = (hi + Math.imul(ah2, bh8)) | 0;
79669 lo = (lo + Math.imul(al1, bl9)) | 0;
79670 mid = (mid + Math.imul(al1, bh9)) | 0;
79671 mid = (mid + Math.imul(ah1, bl9)) | 0;
79672 hi = (hi + Math.imul(ah1, bh9)) | 0;
79673 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79674 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
79675 w10 &= 0x3ffffff;
79676 /* k = 11 */
79677 lo = Math.imul(al9, bl2);
79678 mid = Math.imul(al9, bh2);
79679 mid = (mid + Math.imul(ah9, bl2)) | 0;
79680 hi = Math.imul(ah9, bh2);
79681 lo = (lo + Math.imul(al8, bl3)) | 0;
79682 mid = (mid + Math.imul(al8, bh3)) | 0;
79683 mid = (mid + Math.imul(ah8, bl3)) | 0;
79684 hi = (hi + Math.imul(ah8, bh3)) | 0;
79685 lo = (lo + Math.imul(al7, bl4)) | 0;
79686 mid = (mid + Math.imul(al7, bh4)) | 0;
79687 mid = (mid + Math.imul(ah7, bl4)) | 0;
79688 hi = (hi + Math.imul(ah7, bh4)) | 0;
79689 lo = (lo + Math.imul(al6, bl5)) | 0;
79690 mid = (mid + Math.imul(al6, bh5)) | 0;
79691 mid = (mid + Math.imul(ah6, bl5)) | 0;
79692 hi = (hi + Math.imul(ah6, bh5)) | 0;
79693 lo = (lo + Math.imul(al5, bl6)) | 0;
79694 mid = (mid + Math.imul(al5, bh6)) | 0;
79695 mid = (mid + Math.imul(ah5, bl6)) | 0;
79696 hi = (hi + Math.imul(ah5, bh6)) | 0;
79697 lo = (lo + Math.imul(al4, bl7)) | 0;
79698 mid = (mid + Math.imul(al4, bh7)) | 0;
79699 mid = (mid + Math.imul(ah4, bl7)) | 0;
79700 hi = (hi + Math.imul(ah4, bh7)) | 0;
79701 lo = (lo + Math.imul(al3, bl8)) | 0;
79702 mid = (mid + Math.imul(al3, bh8)) | 0;
79703 mid = (mid + Math.imul(ah3, bl8)) | 0;
79704 hi = (hi + Math.imul(ah3, bh8)) | 0;
79705 lo = (lo + Math.imul(al2, bl9)) | 0;
79706 mid = (mid + Math.imul(al2, bh9)) | 0;
79707 mid = (mid + Math.imul(ah2, bl9)) | 0;
79708 hi = (hi + Math.imul(ah2, bh9)) | 0;
79709 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79710 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
79711 w11 &= 0x3ffffff;
79712 /* k = 12 */
79713 lo = Math.imul(al9, bl3);
79714 mid = Math.imul(al9, bh3);
79715 mid = (mid + Math.imul(ah9, bl3)) | 0;
79716 hi = Math.imul(ah9, bh3);
79717 lo = (lo + Math.imul(al8, bl4)) | 0;
79718 mid = (mid + Math.imul(al8, bh4)) | 0;
79719 mid = (mid + Math.imul(ah8, bl4)) | 0;
79720 hi = (hi + Math.imul(ah8, bh4)) | 0;
79721 lo = (lo + Math.imul(al7, bl5)) | 0;
79722 mid = (mid + Math.imul(al7, bh5)) | 0;
79723 mid = (mid + Math.imul(ah7, bl5)) | 0;
79724 hi = (hi + Math.imul(ah7, bh5)) | 0;
79725 lo = (lo + Math.imul(al6, bl6)) | 0;
79726 mid = (mid + Math.imul(al6, bh6)) | 0;
79727 mid = (mid + Math.imul(ah6, bl6)) | 0;
79728 hi = (hi + Math.imul(ah6, bh6)) | 0;
79729 lo = (lo + Math.imul(al5, bl7)) | 0;
79730 mid = (mid + Math.imul(al5, bh7)) | 0;
79731 mid = (mid + Math.imul(ah5, bl7)) | 0;
79732 hi = (hi + Math.imul(ah5, bh7)) | 0;
79733 lo = (lo + Math.imul(al4, bl8)) | 0;
79734 mid = (mid + Math.imul(al4, bh8)) | 0;
79735 mid = (mid + Math.imul(ah4, bl8)) | 0;
79736 hi = (hi + Math.imul(ah4, bh8)) | 0;
79737 lo = (lo + Math.imul(al3, bl9)) | 0;
79738 mid = (mid + Math.imul(al3, bh9)) | 0;
79739 mid = (mid + Math.imul(ah3, bl9)) | 0;
79740 hi = (hi + Math.imul(ah3, bh9)) | 0;
79741 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79742 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
79743 w12 &= 0x3ffffff;
79744 /* k = 13 */
79745 lo = Math.imul(al9, bl4);
79746 mid = Math.imul(al9, bh4);
79747 mid = (mid + Math.imul(ah9, bl4)) | 0;
79748 hi = Math.imul(ah9, bh4);
79749 lo = (lo + Math.imul(al8, bl5)) | 0;
79750 mid = (mid + Math.imul(al8, bh5)) | 0;
79751 mid = (mid + Math.imul(ah8, bl5)) | 0;
79752 hi = (hi + Math.imul(ah8, bh5)) | 0;
79753 lo = (lo + Math.imul(al7, bl6)) | 0;
79754 mid = (mid + Math.imul(al7, bh6)) | 0;
79755 mid = (mid + Math.imul(ah7, bl6)) | 0;
79756 hi = (hi + Math.imul(ah7, bh6)) | 0;
79757 lo = (lo + Math.imul(al6, bl7)) | 0;
79758 mid = (mid + Math.imul(al6, bh7)) | 0;
79759 mid = (mid + Math.imul(ah6, bl7)) | 0;
79760 hi = (hi + Math.imul(ah6, bh7)) | 0;
79761 lo = (lo + Math.imul(al5, bl8)) | 0;
79762 mid = (mid + Math.imul(al5, bh8)) | 0;
79763 mid = (mid + Math.imul(ah5, bl8)) | 0;
79764 hi = (hi + Math.imul(ah5, bh8)) | 0;
79765 lo = (lo + Math.imul(al4, bl9)) | 0;
79766 mid = (mid + Math.imul(al4, bh9)) | 0;
79767 mid = (mid + Math.imul(ah4, bl9)) | 0;
79768 hi = (hi + Math.imul(ah4, bh9)) | 0;
79769 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79770 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
79771 w13 &= 0x3ffffff;
79772 /* k = 14 */
79773 lo = Math.imul(al9, bl5);
79774 mid = Math.imul(al9, bh5);
79775 mid = (mid + Math.imul(ah9, bl5)) | 0;
79776 hi = Math.imul(ah9, bh5);
79777 lo = (lo + Math.imul(al8, bl6)) | 0;
79778 mid = (mid + Math.imul(al8, bh6)) | 0;
79779 mid = (mid + Math.imul(ah8, bl6)) | 0;
79780 hi = (hi + Math.imul(ah8, bh6)) | 0;
79781 lo = (lo + Math.imul(al7, bl7)) | 0;
79782 mid = (mid + Math.imul(al7, bh7)) | 0;
79783 mid = (mid + Math.imul(ah7, bl7)) | 0;
79784 hi = (hi + Math.imul(ah7, bh7)) | 0;
79785 lo = (lo + Math.imul(al6, bl8)) | 0;
79786 mid = (mid + Math.imul(al6, bh8)) | 0;
79787 mid = (mid + Math.imul(ah6, bl8)) | 0;
79788 hi = (hi + Math.imul(ah6, bh8)) | 0;
79789 lo = (lo + Math.imul(al5, bl9)) | 0;
79790 mid = (mid + Math.imul(al5, bh9)) | 0;
79791 mid = (mid + Math.imul(ah5, bl9)) | 0;
79792 hi = (hi + Math.imul(ah5, bh9)) | 0;
79793 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79794 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
79795 w14 &= 0x3ffffff;
79796 /* k = 15 */
79797 lo = Math.imul(al9, bl6);
79798 mid = Math.imul(al9, bh6);
79799 mid = (mid + Math.imul(ah9, bl6)) | 0;
79800 hi = Math.imul(ah9, bh6);
79801 lo = (lo + Math.imul(al8, bl7)) | 0;
79802 mid = (mid + Math.imul(al8, bh7)) | 0;
79803 mid = (mid + Math.imul(ah8, bl7)) | 0;
79804 hi = (hi + Math.imul(ah8, bh7)) | 0;
79805 lo = (lo + Math.imul(al7, bl8)) | 0;
79806 mid = (mid + Math.imul(al7, bh8)) | 0;
79807 mid = (mid + Math.imul(ah7, bl8)) | 0;
79808 hi = (hi + Math.imul(ah7, bh8)) | 0;
79809 lo = (lo + Math.imul(al6, bl9)) | 0;
79810 mid = (mid + Math.imul(al6, bh9)) | 0;
79811 mid = (mid + Math.imul(ah6, bl9)) | 0;
79812 hi = (hi + Math.imul(ah6, bh9)) | 0;
79813 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79814 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
79815 w15 &= 0x3ffffff;
79816 /* k = 16 */
79817 lo = Math.imul(al9, bl7);
79818 mid = Math.imul(al9, bh7);
79819 mid = (mid + Math.imul(ah9, bl7)) | 0;
79820 hi = Math.imul(ah9, bh7);
79821 lo = (lo + Math.imul(al8, bl8)) | 0;
79822 mid = (mid + Math.imul(al8, bh8)) | 0;
79823 mid = (mid + Math.imul(ah8, bl8)) | 0;
79824 hi = (hi + Math.imul(ah8, bh8)) | 0;
79825 lo = (lo + Math.imul(al7, bl9)) | 0;
79826 mid = (mid + Math.imul(al7, bh9)) | 0;
79827 mid = (mid + Math.imul(ah7, bl9)) | 0;
79828 hi = (hi + Math.imul(ah7, bh9)) | 0;
79829 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79830 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
79831 w16 &= 0x3ffffff;
79832 /* k = 17 */
79833 lo = Math.imul(al9, bl8);
79834 mid = Math.imul(al9, bh8);
79835 mid = (mid + Math.imul(ah9, bl8)) | 0;
79836 hi = Math.imul(ah9, bh8);
79837 lo = (lo + Math.imul(al8, bl9)) | 0;
79838 mid = (mid + Math.imul(al8, bh9)) | 0;
79839 mid = (mid + Math.imul(ah8, bl9)) | 0;
79840 hi = (hi + Math.imul(ah8, bh9)) | 0;
79841 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79842 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
79843 w17 &= 0x3ffffff;
79844 /* k = 18 */
79845 lo = Math.imul(al9, bl9);
79846 mid = Math.imul(al9, bh9);
79847 mid = (mid + Math.imul(ah9, bl9)) | 0;
79848 hi = Math.imul(ah9, bh9);
79849 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
79850 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
79851 w18 &= 0x3ffffff;
79852 o[0] = w0;
79853 o[1] = w1;
79854 o[2] = w2;
79855 o[3] = w3;
79856 o[4] = w4;
79857 o[5] = w5;
79858 o[6] = w6;
79859 o[7] = w7;
79860 o[8] = w8;
79861 o[9] = w9;
79862 o[10] = w10;
79863 o[11] = w11;
79864 o[12] = w12;
79865 o[13] = w13;
79866 o[14] = w14;
79867 o[15] = w15;
79868 o[16] = w16;
79869 o[17] = w17;
79870 o[18] = w18;
79871 if (c !== 0) {
79872 o[19] = c;
79873 out.length++;
79874 }
79875 return out;
79876 };
79877
79878 // Polyfill comb
79879 if (!Math.imul) {
79880 comb10MulTo = smallMulTo;
79881 }
79882
79883 function bigMulTo (self, num, out) {
79884 out.negative = num.negative ^ self.negative;
79885 out.length = self.length + num.length;
79886
79887 var carry = 0;
79888 var hncarry = 0;
79889 for (var k = 0; k < out.length - 1; k++) {
79890 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
79891 // note that ncarry could be >= 0x3ffffff
79892 var ncarry = hncarry;
79893 hncarry = 0;
79894 var rword = carry & 0x3ffffff;
79895 var maxJ = Math.min(k, num.length - 1);
79896 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
79897 var i = k - j;
79898 var a = self.words[i] | 0;
79899 var b = num.words[j] | 0;
79900 var r = a * b;
79901
79902 var lo = r & 0x3ffffff;
79903 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
79904 lo = (lo + rword) | 0;
79905 rword = lo & 0x3ffffff;
79906 ncarry = (ncarry + (lo >>> 26)) | 0;
79907
79908 hncarry += ncarry >>> 26;
79909 ncarry &= 0x3ffffff;
79910 }
79911 out.words[k] = rword;
79912 carry = ncarry;
79913 ncarry = hncarry;
79914 }
79915 if (carry !== 0) {
79916 out.words[k] = carry;
79917 } else {
79918 out.length--;
79919 }
79920
79921 return out.strip();
79922 }
79923
79924 function jumboMulTo (self, num, out) {
79925 var fftm = new FFTM();
79926 return fftm.mulp(self, num, out);
79927 }
79928
79929 BN.prototype.mulTo = function mulTo (num, out) {
79930 var res;
79931 var len = this.length + num.length;
79932 if (this.length === 10 && num.length === 10) {
79933 res = comb10MulTo(this, num, out);
79934 } else if (len < 63) {
79935 res = smallMulTo(this, num, out);
79936 } else if (len < 1024) {
79937 res = bigMulTo(this, num, out);
79938 } else {
79939 res = jumboMulTo(this, num, out);
79940 }
79941
79942 return res;
79943 };
79944
79945 // Cooley-Tukey algorithm for FFT
79946 // slightly revisited to rely on looping instead of recursion
79947
79948 function FFTM (x, y) {
79949 this.x = x;
79950 this.y = y;
79951 }
79952
79953 FFTM.prototype.makeRBT = function makeRBT (N) {
79954 var t = new Array(N);
79955 var l = BN.prototype._countBits(N) - 1;
79956 for (var i = 0; i < N; i++) {
79957 t[i] = this.revBin(i, l, N);
79958 }
79959
79960 return t;
79961 };
79962
79963 // Returns binary-reversed representation of `x`
79964 FFTM.prototype.revBin = function revBin (x, l, N) {
79965 if (x === 0 || x === N - 1) return x;
79966
79967 var rb = 0;
79968 for (var i = 0; i < l; i++) {
79969 rb |= (x & 1) << (l - i - 1);
79970 x >>= 1;
79971 }
79972
79973 return rb;
79974 };
79975
79976 // Performs "tweedling" phase, therefore 'emulating'
79977 // behaviour of the recursive algorithm
79978 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
79979 for (var i = 0; i < N; i++) {
79980 rtws[i] = rws[rbt[i]];
79981 itws[i] = iws[rbt[i]];
79982 }
79983 };
79984
79985 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
79986 this.permute(rbt, rws, iws, rtws, itws, N);
79987
79988 for (var s = 1; s < N; s <<= 1) {
79989 var l = s << 1;
79990
79991 var rtwdf = Math.cos(2 * Math.PI / l);
79992 var itwdf = Math.sin(2 * Math.PI / l);
79993
79994 for (var p = 0; p < N; p += l) {
79995 var rtwdf_ = rtwdf;
79996 var itwdf_ = itwdf;
79997
79998 for (var j = 0; j < s; j++) {
79999 var re = rtws[p + j];
80000 var ie = itws[p + j];
80001
80002 var ro = rtws[p + j + s];
80003 var io = itws[p + j + s];
80004
80005 var rx = rtwdf_ * ro - itwdf_ * io;
80006
80007 io = rtwdf_ * io + itwdf_ * ro;
80008 ro = rx;
80009
80010 rtws[p + j] = re + ro;
80011 itws[p + j] = ie + io;
80012
80013 rtws[p + j + s] = re - ro;
80014 itws[p + j + s] = ie - io;
80015
80016 /* jshint maxdepth : false */
80017 if (j !== l) {
80018 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
80019
80020 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
80021 rtwdf_ = rx;
80022 }
80023 }
80024 }
80025 }
80026 };
80027
80028 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
80029 var N = Math.max(m, n) | 1;
80030 var odd = N & 1;
80031 var i = 0;
80032 for (N = N / 2 | 0; N; N = N >>> 1) {
80033 i++;
80034 }
80035
80036 return 1 << i + 1 + odd;
80037 };
80038
80039 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
80040 if (N <= 1) return;
80041
80042 for (var i = 0; i < N / 2; i++) {
80043 var t = rws[i];
80044
80045 rws[i] = rws[N - i - 1];
80046 rws[N - i - 1] = t;
80047
80048 t = iws[i];
80049
80050 iws[i] = -iws[N - i - 1];
80051 iws[N - i - 1] = -t;
80052 }
80053 };
80054
80055 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
80056 var carry = 0;
80057 for (var i = 0; i < N / 2; i++) {
80058 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
80059 Math.round(ws[2 * i] / N) +
80060 carry;
80061
80062 ws[i] = w & 0x3ffffff;
80063
80064 if (w < 0x4000000) {
80065 carry = 0;
80066 } else {
80067 carry = w / 0x4000000 | 0;
80068 }
80069 }
80070
80071 return ws;
80072 };
80073
80074 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
80075 var carry = 0;
80076 for (var i = 0; i < len; i++) {
80077 carry = carry + (ws[i] | 0);
80078
80079 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
80080 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
80081 }
80082
80083 // Pad with zeroes
80084 for (i = 2 * len; i < N; ++i) {
80085 rws[i] = 0;
80086 }
80087
80088 assert(carry === 0);
80089 assert((carry & ~0x1fff) === 0);
80090 };
80091
80092 FFTM.prototype.stub = function stub (N) {
80093 var ph = new Array(N);
80094 for (var i = 0; i < N; i++) {
80095 ph[i] = 0;
80096 }
80097
80098 return ph;
80099 };
80100
80101 FFTM.prototype.mulp = function mulp (x, y, out) {
80102 var N = 2 * this.guessLen13b(x.length, y.length);
80103
80104 var rbt = this.makeRBT(N);
80105
80106 var _ = this.stub(N);
80107
80108 var rws = new Array(N);
80109 var rwst = new Array(N);
80110 var iwst = new Array(N);
80111
80112 var nrws = new Array(N);
80113 var nrwst = new Array(N);
80114 var niwst = new Array(N);
80115
80116 var rmws = out.words;
80117 rmws.length = N;
80118
80119 this.convert13b(x.words, x.length, rws, N);
80120 this.convert13b(y.words, y.length, nrws, N);
80121
80122 this.transform(rws, _, rwst, iwst, N, rbt);
80123 this.transform(nrws, _, nrwst, niwst, N, rbt);
80124
80125 for (var i = 0; i < N; i++) {
80126 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
80127 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
80128 rwst[i] = rx;
80129 }
80130
80131 this.conjugate(rwst, iwst, N);
80132 this.transform(rwst, iwst, rmws, _, N, rbt);
80133 this.conjugate(rmws, _, N);
80134 this.normalize13b(rmws, N);
80135
80136 out.negative = x.negative ^ y.negative;
80137 out.length = x.length + y.length;
80138 return out.strip();
80139 };
80140
80141 // Multiply `this` by `num`
80142 BN.prototype.mul = function mul (num) {
80143 var out = new BN(null);
80144 out.words = new Array(this.length + num.length);
80145 return this.mulTo(num, out);
80146 };
80147
80148 // Multiply employing FFT
80149 BN.prototype.mulf = function mulf (num) {
80150 var out = new BN(null);
80151 out.words = new Array(this.length + num.length);
80152 return jumboMulTo(this, num, out);
80153 };
80154
80155 // In-place Multiplication
80156 BN.prototype.imul = function imul (num) {
80157 return this.clone().mulTo(num, this);
80158 };
80159
80160 BN.prototype.imuln = function imuln (num) {
80161 assert(typeof num === 'number');
80162 assert(num < 0x4000000);
80163
80164 // Carry
80165 var carry = 0;
80166 for (var i = 0; i < this.length; i++) {
80167 var w = (this.words[i] | 0) * num;
80168 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
80169 carry >>= 26;
80170 carry += (w / 0x4000000) | 0;
80171 // NOTE: lo is 27bit maximum
80172 carry += lo >>> 26;
80173 this.words[i] = lo & 0x3ffffff;
80174 }
80175
80176 if (carry !== 0) {
80177 this.words[i] = carry;
80178 this.length++;
80179 }
80180
80181 return this;
80182 };
80183
80184 BN.prototype.muln = function muln (num) {
80185 return this.clone().imuln(num);
80186 };
80187
80188 // `this` * `this`
80189 BN.prototype.sqr = function sqr () {
80190 return this.mul(this);
80191 };
80192
80193 // `this` * `this` in-place
80194 BN.prototype.isqr = function isqr () {
80195 return this.imul(this.clone());
80196 };
80197
80198 // Math.pow(`this`, `num`)
80199 BN.prototype.pow = function pow (num) {
80200 var w = toBitArray(num);
80201 if (w.length === 0) return new BN(1);
80202
80203 // Skip leading zeroes
80204 var res = this;
80205 for (var i = 0; i < w.length; i++, res = res.sqr()) {
80206 if (w[i] !== 0) break;
80207 }
80208
80209 if (++i < w.length) {
80210 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
80211 if (w[i] === 0) continue;
80212
80213 res = res.mul(q);
80214 }
80215 }
80216
80217 return res;
80218 };
80219
80220 // Shift-left in-place
80221 BN.prototype.iushln = function iushln (bits) {
80222 assert(typeof bits === 'number' && bits >= 0);
80223 var r = bits % 26;
80224 var s = (bits - r) / 26;
80225 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
80226 var i;
80227
80228 if (r !== 0) {
80229 var carry = 0;
80230
80231 for (i = 0; i < this.length; i++) {
80232 var newCarry = this.words[i] & carryMask;
80233 var c = ((this.words[i] | 0) - newCarry) << r;
80234 this.words[i] = c | carry;
80235 carry = newCarry >>> (26 - r);
80236 }
80237
80238 if (carry) {
80239 this.words[i] = carry;
80240 this.length++;
80241 }
80242 }
80243
80244 if (s !== 0) {
80245 for (i = this.length - 1; i >= 0; i--) {
80246 this.words[i + s] = this.words[i];
80247 }
80248
80249 for (i = 0; i < s; i++) {
80250 this.words[i] = 0;
80251 }
80252
80253 this.length += s;
80254 }
80255
80256 return this.strip();
80257 };
80258
80259 BN.prototype.ishln = function ishln (bits) {
80260 // TODO(indutny): implement me
80261 assert(this.negative === 0);
80262 return this.iushln(bits);
80263 };
80264
80265 // Shift-right in-place
80266 // NOTE: `hint` is a lowest bit before trailing zeroes
80267 // NOTE: if `extended` is present - it will be filled with destroyed bits
80268 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
80269 assert(typeof bits === 'number' && bits >= 0);
80270 var h;
80271 if (hint) {
80272 h = (hint - (hint % 26)) / 26;
80273 } else {
80274 h = 0;
80275 }
80276
80277 var r = bits % 26;
80278 var s = Math.min((bits - r) / 26, this.length);
80279 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80280 var maskedWords = extended;
80281
80282 h -= s;
80283 h = Math.max(0, h);
80284
80285 // Extended mode, copy masked part
80286 if (maskedWords) {
80287 for (var i = 0; i < s; i++) {
80288 maskedWords.words[i] = this.words[i];
80289 }
80290 maskedWords.length = s;
80291 }
80292
80293 if (s === 0) {
80294 // No-op, we should not move anything at all
80295 } else if (this.length > s) {
80296 this.length -= s;
80297 for (i = 0; i < this.length; i++) {
80298 this.words[i] = this.words[i + s];
80299 }
80300 } else {
80301 this.words[0] = 0;
80302 this.length = 1;
80303 }
80304
80305 var carry = 0;
80306 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
80307 var word = this.words[i] | 0;
80308 this.words[i] = (carry << (26 - r)) | (word >>> r);
80309 carry = word & mask;
80310 }
80311
80312 // Push carried bits as a mask
80313 if (maskedWords && carry !== 0) {
80314 maskedWords.words[maskedWords.length++] = carry;
80315 }
80316
80317 if (this.length === 0) {
80318 this.words[0] = 0;
80319 this.length = 1;
80320 }
80321
80322 return this.strip();
80323 };
80324
80325 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
80326 // TODO(indutny): implement me
80327 assert(this.negative === 0);
80328 return this.iushrn(bits, hint, extended);
80329 };
80330
80331 // Shift-left
80332 BN.prototype.shln = function shln (bits) {
80333 return this.clone().ishln(bits);
80334 };
80335
80336 BN.prototype.ushln = function ushln (bits) {
80337 return this.clone().iushln(bits);
80338 };
80339
80340 // Shift-right
80341 BN.prototype.shrn = function shrn (bits) {
80342 return this.clone().ishrn(bits);
80343 };
80344
80345 BN.prototype.ushrn = function ushrn (bits) {
80346 return this.clone().iushrn(bits);
80347 };
80348
80349 // Test if n bit is set
80350 BN.prototype.testn = function testn (bit) {
80351 assert(typeof bit === 'number' && bit >= 0);
80352 var r = bit % 26;
80353 var s = (bit - r) / 26;
80354 var q = 1 << r;
80355
80356 // Fast case: bit is much higher than all existing words
80357 if (this.length <= s) return false;
80358
80359 // Check bit and return
80360 var w = this.words[s];
80361
80362 return !!(w & q);
80363 };
80364
80365 // Return only lowers bits of number (in-place)
80366 BN.prototype.imaskn = function imaskn (bits) {
80367 assert(typeof bits === 'number' && bits >= 0);
80368 var r = bits % 26;
80369 var s = (bits - r) / 26;
80370
80371 assert(this.negative === 0, 'imaskn works only with positive numbers');
80372
80373 if (this.length <= s) {
80374 return this;
80375 }
80376
80377 if (r !== 0) {
80378 s++;
80379 }
80380 this.length = Math.min(s, this.length);
80381
80382 if (r !== 0) {
80383 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
80384 this.words[this.length - 1] &= mask;
80385 }
80386
80387 return this.strip();
80388 };
80389
80390 // Return only lowers bits of number
80391 BN.prototype.maskn = function maskn (bits) {
80392 return this.clone().imaskn(bits);
80393 };
80394
80395 // Add plain number `num` to `this`
80396 BN.prototype.iaddn = function iaddn (num) {
80397 assert(typeof num === 'number');
80398 assert(num < 0x4000000);
80399 if (num < 0) return this.isubn(-num);
80400
80401 // Possible sign change
80402 if (this.negative !== 0) {
80403 if (this.length === 1 && (this.words[0] | 0) < num) {
80404 this.words[0] = num - (this.words[0] | 0);
80405 this.negative = 0;
80406 return this;
80407 }
80408
80409 this.negative = 0;
80410 this.isubn(num);
80411 this.negative = 1;
80412 return this;
80413 }
80414
80415 // Add without checks
80416 return this._iaddn(num);
80417 };
80418
80419 BN.prototype._iaddn = function _iaddn (num) {
80420 this.words[0] += num;
80421
80422 // Carry
80423 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
80424 this.words[i] -= 0x4000000;
80425 if (i === this.length - 1) {
80426 this.words[i + 1] = 1;
80427 } else {
80428 this.words[i + 1]++;
80429 }
80430 }
80431 this.length = Math.max(this.length, i + 1);
80432
80433 return this;
80434 };
80435
80436 // Subtract plain number `num` from `this`
80437 BN.prototype.isubn = function isubn (num) {
80438 assert(typeof num === 'number');
80439 assert(num < 0x4000000);
80440 if (num < 0) return this.iaddn(-num);
80441
80442 if (this.negative !== 0) {
80443 this.negative = 0;
80444 this.iaddn(num);
80445 this.negative = 1;
80446 return this;
80447 }
80448
80449 this.words[0] -= num;
80450
80451 if (this.length === 1 && this.words[0] < 0) {
80452 this.words[0] = -this.words[0];
80453 this.negative = 1;
80454 } else {
80455 // Carry
80456 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
80457 this.words[i] += 0x4000000;
80458 this.words[i + 1] -= 1;
80459 }
80460 }
80461
80462 return this.strip();
80463 };
80464
80465 BN.prototype.addn = function addn (num) {
80466 return this.clone().iaddn(num);
80467 };
80468
80469 BN.prototype.subn = function subn (num) {
80470 return this.clone().isubn(num);
80471 };
80472
80473 BN.prototype.iabs = function iabs () {
80474 this.negative = 0;
80475
80476 return this;
80477 };
80478
80479 BN.prototype.abs = function abs () {
80480 return this.clone().iabs();
80481 };
80482
80483 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
80484 var len = num.length + shift;
80485 var i;
80486
80487 this._expand(len);
80488
80489 var w;
80490 var carry = 0;
80491 for (i = 0; i < num.length; i++) {
80492 w = (this.words[i + shift] | 0) + carry;
80493 var right = (num.words[i] | 0) * mul;
80494 w -= right & 0x3ffffff;
80495 carry = (w >> 26) - ((right / 0x4000000) | 0);
80496 this.words[i + shift] = w & 0x3ffffff;
80497 }
80498 for (; i < this.length - shift; i++) {
80499 w = (this.words[i + shift] | 0) + carry;
80500 carry = w >> 26;
80501 this.words[i + shift] = w & 0x3ffffff;
80502 }
80503
80504 if (carry === 0) return this.strip();
80505
80506 // Subtraction overflow
80507 assert(carry === -1);
80508 carry = 0;
80509 for (i = 0; i < this.length; i++) {
80510 w = -(this.words[i] | 0) + carry;
80511 carry = w >> 26;
80512 this.words[i] = w & 0x3ffffff;
80513 }
80514 this.negative = 1;
80515
80516 return this.strip();
80517 };
80518
80519 BN.prototype._wordDiv = function _wordDiv (num, mode) {
80520 var shift = this.length - num.length;
80521
80522 var a = this.clone();
80523 var b = num;
80524
80525 // Normalize
80526 var bhi = b.words[b.length - 1] | 0;
80527 var bhiBits = this._countBits(bhi);
80528 shift = 26 - bhiBits;
80529 if (shift !== 0) {
80530 b = b.ushln(shift);
80531 a.iushln(shift);
80532 bhi = b.words[b.length - 1] | 0;
80533 }
80534
80535 // Initialize quotient
80536 var m = a.length - b.length;
80537 var q;
80538
80539 if (mode !== 'mod') {
80540 q = new BN(null);
80541 q.length = m + 1;
80542 q.words = new Array(q.length);
80543 for (var i = 0; i < q.length; i++) {
80544 q.words[i] = 0;
80545 }
80546 }
80547
80548 var diff = a.clone()._ishlnsubmul(b, 1, m);
80549 if (diff.negative === 0) {
80550 a = diff;
80551 if (q) {
80552 q.words[m] = 1;
80553 }
80554 }
80555
80556 for (var j = m - 1; j >= 0; j--) {
80557 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
80558 (a.words[b.length + j - 1] | 0);
80559
80560 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
80561 // (0x7ffffff)
80562 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
80563
80564 a._ishlnsubmul(b, qj, j);
80565 while (a.negative !== 0) {
80566 qj--;
80567 a.negative = 0;
80568 a._ishlnsubmul(b, 1, j);
80569 if (!a.isZero()) {
80570 a.negative ^= 1;
80571 }
80572 }
80573 if (q) {
80574 q.words[j] = qj;
80575 }
80576 }
80577 if (q) {
80578 q.strip();
80579 }
80580 a.strip();
80581
80582 // Denormalize
80583 if (mode !== 'div' && shift !== 0) {
80584 a.iushrn(shift);
80585 }
80586
80587 return {
80588 div: q || null,
80589 mod: a
80590 };
80591 };
80592
80593 // NOTE: 1) `mode` can be set to `mod` to request mod only,
80594 // to `div` to request div only, or be absent to
80595 // request both div & mod
80596 // 2) `positive` is true if unsigned mod is requested
80597 BN.prototype.divmod = function divmod (num, mode, positive) {
80598 assert(!num.isZero());
80599
80600 if (this.isZero()) {
80601 return {
80602 div: new BN(0),
80603 mod: new BN(0)
80604 };
80605 }
80606
80607 var div, mod, res;
80608 if (this.negative !== 0 && num.negative === 0) {
80609 res = this.neg().divmod(num, mode);
80610
80611 if (mode !== 'mod') {
80612 div = res.div.neg();
80613 }
80614
80615 if (mode !== 'div') {
80616 mod = res.mod.neg();
80617 if (positive && mod.negative !== 0) {
80618 mod.iadd(num);
80619 }
80620 }
80621
80622 return {
80623 div: div,
80624 mod: mod
80625 };
80626 }
80627
80628 if (this.negative === 0 && num.negative !== 0) {
80629 res = this.divmod(num.neg(), mode);
80630
80631 if (mode !== 'mod') {
80632 div = res.div.neg();
80633 }
80634
80635 return {
80636 div: div,
80637 mod: res.mod
80638 };
80639 }
80640
80641 if ((this.negative & num.negative) !== 0) {
80642 res = this.neg().divmod(num.neg(), mode);
80643
80644 if (mode !== 'div') {
80645 mod = res.mod.neg();
80646 if (positive && mod.negative !== 0) {
80647 mod.isub(num);
80648 }
80649 }
80650
80651 return {
80652 div: res.div,
80653 mod: mod
80654 };
80655 }
80656
80657 // Both numbers are positive at this point
80658
80659 // Strip both numbers to approximate shift value
80660 if (num.length > this.length || this.cmp(num) < 0) {
80661 return {
80662 div: new BN(0),
80663 mod: this
80664 };
80665 }
80666
80667 // Very short reduction
80668 if (num.length === 1) {
80669 if (mode === 'div') {
80670 return {
80671 div: this.divn(num.words[0]),
80672 mod: null
80673 };
80674 }
80675
80676 if (mode === 'mod') {
80677 return {
80678 div: null,
80679 mod: new BN(this.modn(num.words[0]))
80680 };
80681 }
80682
80683 return {
80684 div: this.divn(num.words[0]),
80685 mod: new BN(this.modn(num.words[0]))
80686 };
80687 }
80688
80689 return this._wordDiv(num, mode);
80690 };
80691
80692 // Find `this` / `num`
80693 BN.prototype.div = function div (num) {
80694 return this.divmod(num, 'div', false).div;
80695 };
80696
80697 // Find `this` % `num`
80698 BN.prototype.mod = function mod (num) {
80699 return this.divmod(num, 'mod', false).mod;
80700 };
80701
80702 BN.prototype.umod = function umod (num) {
80703 return this.divmod(num, 'mod', true).mod;
80704 };
80705
80706 // Find Round(`this` / `num`)
80707 BN.prototype.divRound = function divRound (num) {
80708 var dm = this.divmod(num);
80709
80710 // Fast case - exact division
80711 if (dm.mod.isZero()) return dm.div;
80712
80713 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
80714
80715 var half = num.ushrn(1);
80716 var r2 = num.andln(1);
80717 var cmp = mod.cmp(half);
80718
80719 // Round down
80720 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
80721
80722 // Round up
80723 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
80724 };
80725
80726 BN.prototype.modn = function modn (num) {
80727 assert(num <= 0x3ffffff);
80728 var p = (1 << 26) % num;
80729
80730 var acc = 0;
80731 for (var i = this.length - 1; i >= 0; i--) {
80732 acc = (p * acc + (this.words[i] | 0)) % num;
80733 }
80734
80735 return acc;
80736 };
80737
80738 // In-place division by number
80739 BN.prototype.idivn = function idivn (num) {
80740 assert(num <= 0x3ffffff);
80741
80742 var carry = 0;
80743 for (var i = this.length - 1; i >= 0; i--) {
80744 var w = (this.words[i] | 0) + carry * 0x4000000;
80745 this.words[i] = (w / num) | 0;
80746 carry = w % num;
80747 }
80748
80749 return this.strip();
80750 };
80751
80752 BN.prototype.divn = function divn (num) {
80753 return this.clone().idivn(num);
80754 };
80755
80756 BN.prototype.egcd = function egcd (p) {
80757 assert(p.negative === 0);
80758 assert(!p.isZero());
80759
80760 var x = this;
80761 var y = p.clone();
80762
80763 if (x.negative !== 0) {
80764 x = x.umod(p);
80765 } else {
80766 x = x.clone();
80767 }
80768
80769 // A * x + B * y = x
80770 var A = new BN(1);
80771 var B = new BN(0);
80772
80773 // C * x + D * y = y
80774 var C = new BN(0);
80775 var D = new BN(1);
80776
80777 var g = 0;
80778
80779 while (x.isEven() && y.isEven()) {
80780 x.iushrn(1);
80781 y.iushrn(1);
80782 ++g;
80783 }
80784
80785 var yp = y.clone();
80786 var xp = x.clone();
80787
80788 while (!x.isZero()) {
80789 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80790 if (i > 0) {
80791 x.iushrn(i);
80792 while (i-- > 0) {
80793 if (A.isOdd() || B.isOdd()) {
80794 A.iadd(yp);
80795 B.isub(xp);
80796 }
80797
80798 A.iushrn(1);
80799 B.iushrn(1);
80800 }
80801 }
80802
80803 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80804 if (j > 0) {
80805 y.iushrn(j);
80806 while (j-- > 0) {
80807 if (C.isOdd() || D.isOdd()) {
80808 C.iadd(yp);
80809 D.isub(xp);
80810 }
80811
80812 C.iushrn(1);
80813 D.iushrn(1);
80814 }
80815 }
80816
80817 if (x.cmp(y) >= 0) {
80818 x.isub(y);
80819 A.isub(C);
80820 B.isub(D);
80821 } else {
80822 y.isub(x);
80823 C.isub(A);
80824 D.isub(B);
80825 }
80826 }
80827
80828 return {
80829 a: C,
80830 b: D,
80831 gcd: y.iushln(g)
80832 };
80833 };
80834
80835 // This is reduced incarnation of the binary EEA
80836 // above, designated to invert members of the
80837 // _prime_ fields F(p) at a maximal speed
80838 BN.prototype._invmp = function _invmp (p) {
80839 assert(p.negative === 0);
80840 assert(!p.isZero());
80841
80842 var a = this;
80843 var b = p.clone();
80844
80845 if (a.negative !== 0) {
80846 a = a.umod(p);
80847 } else {
80848 a = a.clone();
80849 }
80850
80851 var x1 = new BN(1);
80852 var x2 = new BN(0);
80853
80854 var delta = b.clone();
80855
80856 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
80857 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
80858 if (i > 0) {
80859 a.iushrn(i);
80860 while (i-- > 0) {
80861 if (x1.isOdd()) {
80862 x1.iadd(delta);
80863 }
80864
80865 x1.iushrn(1);
80866 }
80867 }
80868
80869 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
80870 if (j > 0) {
80871 b.iushrn(j);
80872 while (j-- > 0) {
80873 if (x2.isOdd()) {
80874 x2.iadd(delta);
80875 }
80876
80877 x2.iushrn(1);
80878 }
80879 }
80880
80881 if (a.cmp(b) >= 0) {
80882 a.isub(b);
80883 x1.isub(x2);
80884 } else {
80885 b.isub(a);
80886 x2.isub(x1);
80887 }
80888 }
80889
80890 var res;
80891 if (a.cmpn(1) === 0) {
80892 res = x1;
80893 } else {
80894 res = x2;
80895 }
80896
80897 if (res.cmpn(0) < 0) {
80898 res.iadd(p);
80899 }
80900
80901 return res;
80902 };
80903
80904 BN.prototype.gcd = function gcd (num) {
80905 if (this.isZero()) return num.abs();
80906 if (num.isZero()) return this.abs();
80907
80908 var a = this.clone();
80909 var b = num.clone();
80910 a.negative = 0;
80911 b.negative = 0;
80912
80913 // Remove common factor of two
80914 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
80915 a.iushrn(1);
80916 b.iushrn(1);
80917 }
80918
80919 do {
80920 while (a.isEven()) {
80921 a.iushrn(1);
80922 }
80923 while (b.isEven()) {
80924 b.iushrn(1);
80925 }
80926
80927 var r = a.cmp(b);
80928 if (r < 0) {
80929 // Swap `a` and `b` to make `a` always bigger than `b`
80930 var t = a;
80931 a = b;
80932 b = t;
80933 } else if (r === 0 || b.cmpn(1) === 0) {
80934 break;
80935 }
80936
80937 a.isub(b);
80938 } while (true);
80939
80940 return b.iushln(shift);
80941 };
80942
80943 // Invert number in the field F(num)
80944 BN.prototype.invm = function invm (num) {
80945 return this.egcd(num).a.umod(num);
80946 };
80947
80948 BN.prototype.isEven = function isEven () {
80949 return (this.words[0] & 1) === 0;
80950 };
80951
80952 BN.prototype.isOdd = function isOdd () {
80953 return (this.words[0] & 1) === 1;
80954 };
80955
80956 // And first word and num
80957 BN.prototype.andln = function andln (num) {
80958 return this.words[0] & num;
80959 };
80960
80961 // Increment at the bit position in-line
80962 BN.prototype.bincn = function bincn (bit) {
80963 assert(typeof bit === 'number');
80964 var r = bit % 26;
80965 var s = (bit - r) / 26;
80966 var q = 1 << r;
80967
80968 // Fast case: bit is much higher than all existing words
80969 if (this.length <= s) {
80970 this._expand(s + 1);
80971 this.words[s] |= q;
80972 return this;
80973 }
80974
80975 // Add bit and propagate, if needed
80976 var carry = q;
80977 for (var i = s; carry !== 0 && i < this.length; i++) {
80978 var w = this.words[i] | 0;
80979 w += carry;
80980 carry = w >>> 26;
80981 w &= 0x3ffffff;
80982 this.words[i] = w;
80983 }
80984 if (carry !== 0) {
80985 this.words[i] = carry;
80986 this.length++;
80987 }
80988 return this;
80989 };
80990
80991 BN.prototype.isZero = function isZero () {
80992 return this.length === 1 && this.words[0] === 0;
80993 };
80994
80995 BN.prototype.cmpn = function cmpn (num) {
80996 var negative = num < 0;
80997
80998 if (this.negative !== 0 && !negative) return -1;
80999 if (this.negative === 0 && negative) return 1;
81000
81001 this.strip();
81002
81003 var res;
81004 if (this.length > 1) {
81005 res = 1;
81006 } else {
81007 if (negative) {
81008 num = -num;
81009 }
81010
81011 assert(num <= 0x3ffffff, 'Number is too big');
81012
81013 var w = this.words[0] | 0;
81014 res = w === num ? 0 : w < num ? -1 : 1;
81015 }
81016 if (this.negative !== 0) return -res | 0;
81017 return res;
81018 };
81019
81020 // Compare two numbers and return:
81021 // 1 - if `this` > `num`
81022 // 0 - if `this` == `num`
81023 // -1 - if `this` < `num`
81024 BN.prototype.cmp = function cmp (num) {
81025 if (this.negative !== 0 && num.negative === 0) return -1;
81026 if (this.negative === 0 && num.negative !== 0) return 1;
81027
81028 var res = this.ucmp(num);
81029 if (this.negative !== 0) return -res | 0;
81030 return res;
81031 };
81032
81033 // Unsigned comparison
81034 BN.prototype.ucmp = function ucmp (num) {
81035 // At this point both numbers have the same sign
81036 if (this.length > num.length) return 1;
81037 if (this.length < num.length) return -1;
81038
81039 var res = 0;
81040 for (var i = this.length - 1; i >= 0; i--) {
81041 var a = this.words[i] | 0;
81042 var b = num.words[i] | 0;
81043
81044 if (a === b) continue;
81045 if (a < b) {
81046 res = -1;
81047 } else if (a > b) {
81048 res = 1;
81049 }
81050 break;
81051 }
81052 return res;
81053 };
81054
81055 BN.prototype.gtn = function gtn (num) {
81056 return this.cmpn(num) === 1;
81057 };
81058
81059 BN.prototype.gt = function gt (num) {
81060 return this.cmp(num) === 1;
81061 };
81062
81063 BN.prototype.gten = function gten (num) {
81064 return this.cmpn(num) >= 0;
81065 };
81066
81067 BN.prototype.gte = function gte (num) {
81068 return this.cmp(num) >= 0;
81069 };
81070
81071 BN.prototype.ltn = function ltn (num) {
81072 return this.cmpn(num) === -1;
81073 };
81074
81075 BN.prototype.lt = function lt (num) {
81076 return this.cmp(num) === -1;
81077 };
81078
81079 BN.prototype.lten = function lten (num) {
81080 return this.cmpn(num) <= 0;
81081 };
81082
81083 BN.prototype.lte = function lte (num) {
81084 return this.cmp(num) <= 0;
81085 };
81086
81087 BN.prototype.eqn = function eqn (num) {
81088 return this.cmpn(num) === 0;
81089 };
81090
81091 BN.prototype.eq = function eq (num) {
81092 return this.cmp(num) === 0;
81093 };
81094
81095 //
81096 // A reduce context, could be using montgomery or something better, depending
81097 // on the `m` itself.
81098 //
81099 BN.red = function red (num) {
81100 return new Red(num);
81101 };
81102
81103 BN.prototype.toRed = function toRed (ctx) {
81104 assert(!this.red, 'Already a number in reduction context');
81105 assert(this.negative === 0, 'red works only with positives');
81106 return ctx.convertTo(this)._forceRed(ctx);
81107 };
81108
81109 BN.prototype.fromRed = function fromRed () {
81110 assert(this.red, 'fromRed works only with numbers in reduction context');
81111 return this.red.convertFrom(this);
81112 };
81113
81114 BN.prototype._forceRed = function _forceRed (ctx) {
81115 this.red = ctx;
81116 return this;
81117 };
81118
81119 BN.prototype.forceRed = function forceRed (ctx) {
81120 assert(!this.red, 'Already a number in reduction context');
81121 return this._forceRed(ctx);
81122 };
81123
81124 BN.prototype.redAdd = function redAdd (num) {
81125 assert(this.red, 'redAdd works only with red numbers');
81126 return this.red.add(this, num);
81127 };
81128
81129 BN.prototype.redIAdd = function redIAdd (num) {
81130 assert(this.red, 'redIAdd works only with red numbers');
81131 return this.red.iadd(this, num);
81132 };
81133
81134 BN.prototype.redSub = function redSub (num) {
81135 assert(this.red, 'redSub works only with red numbers');
81136 return this.red.sub(this, num);
81137 };
81138
81139 BN.prototype.redISub = function redISub (num) {
81140 assert(this.red, 'redISub works only with red numbers');
81141 return this.red.isub(this, num);
81142 };
81143
81144 BN.prototype.redShl = function redShl (num) {
81145 assert(this.red, 'redShl works only with red numbers');
81146 return this.red.shl(this, num);
81147 };
81148
81149 BN.prototype.redMul = function redMul (num) {
81150 assert(this.red, 'redMul works only with red numbers');
81151 this.red._verify2(this, num);
81152 return this.red.mul(this, num);
81153 };
81154
81155 BN.prototype.redIMul = function redIMul (num) {
81156 assert(this.red, 'redMul works only with red numbers');
81157 this.red._verify2(this, num);
81158 return this.red.imul(this, num);
81159 };
81160
81161 BN.prototype.redSqr = function redSqr () {
81162 assert(this.red, 'redSqr works only with red numbers');
81163 this.red._verify1(this);
81164 return this.red.sqr(this);
81165 };
81166
81167 BN.prototype.redISqr = function redISqr () {
81168 assert(this.red, 'redISqr works only with red numbers');
81169 this.red._verify1(this);
81170 return this.red.isqr(this);
81171 };
81172
81173 // Square root over p
81174 BN.prototype.redSqrt = function redSqrt () {
81175 assert(this.red, 'redSqrt works only with red numbers');
81176 this.red._verify1(this);
81177 return this.red.sqrt(this);
81178 };
81179
81180 BN.prototype.redInvm = function redInvm () {
81181 assert(this.red, 'redInvm works only with red numbers');
81182 this.red._verify1(this);
81183 return this.red.invm(this);
81184 };
81185
81186 // Return negative clone of `this` % `red modulo`
81187 BN.prototype.redNeg = function redNeg () {
81188 assert(this.red, 'redNeg works only with red numbers');
81189 this.red._verify1(this);
81190 return this.red.neg(this);
81191 };
81192
81193 BN.prototype.redPow = function redPow (num) {
81194 assert(this.red && !num.red, 'redPow(normalNum)');
81195 this.red._verify1(this);
81196 return this.red.pow(this, num);
81197 };
81198
81199 // Prime numbers with efficient reduction
81200 var primes = {
81201 k256: null,
81202 p224: null,
81203 p192: null,
81204 p25519: null
81205 };
81206
81207 // Pseudo-Mersenne prime
81208 function MPrime (name, p) {
81209 // P = 2 ^ N - K
81210 this.name = name;
81211 this.p = new BN(p, 16);
81212 this.n = this.p.bitLength();
81213 this.k = new BN(1).iushln(this.n).isub(this.p);
81214
81215 this.tmp = this._tmp();
81216 }
81217
81218 MPrime.prototype._tmp = function _tmp () {
81219 var tmp = new BN(null);
81220 tmp.words = new Array(Math.ceil(this.n / 13));
81221 return tmp;
81222 };
81223
81224 MPrime.prototype.ireduce = function ireduce (num) {
81225 // Assumes that `num` is less than `P^2`
81226 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
81227 var r = num;
81228 var rlen;
81229
81230 do {
81231 this.split(r, this.tmp);
81232 r = this.imulK(r);
81233 r = r.iadd(this.tmp);
81234 rlen = r.bitLength();
81235 } while (rlen > this.n);
81236
81237 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
81238 if (cmp === 0) {
81239 r.words[0] = 0;
81240 r.length = 1;
81241 } else if (cmp > 0) {
81242 r.isub(this.p);
81243 } else {
81244 r.strip();
81245 }
81246
81247 return r;
81248 };
81249
81250 MPrime.prototype.split = function split (input, out) {
81251 input.iushrn(this.n, 0, out);
81252 };
81253
81254 MPrime.prototype.imulK = function imulK (num) {
81255 return num.imul(this.k);
81256 };
81257
81258 function K256 () {
81259 MPrime.call(
81260 this,
81261 'k256',
81262 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
81263 }
81264 inherits(K256, MPrime);
81265
81266 K256.prototype.split = function split (input, output) {
81267 // 256 = 9 * 26 + 22
81268 var mask = 0x3fffff;
81269
81270 var outLen = Math.min(input.length, 9);
81271 for (var i = 0; i < outLen; i++) {
81272 output.words[i] = input.words[i];
81273 }
81274 output.length = outLen;
81275
81276 if (input.length <= 9) {
81277 input.words[0] = 0;
81278 input.length = 1;
81279 return;
81280 }
81281
81282 // Shift by 9 limbs
81283 var prev = input.words[9];
81284 output.words[output.length++] = prev & mask;
81285
81286 for (i = 10; i < input.length; i++) {
81287 var next = input.words[i] | 0;
81288 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
81289 prev = next;
81290 }
81291 prev >>>= 22;
81292 input.words[i - 10] = prev;
81293 if (prev === 0 && input.length > 10) {
81294 input.length -= 10;
81295 } else {
81296 input.length -= 9;
81297 }
81298 };
81299
81300 K256.prototype.imulK = function imulK (num) {
81301 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
81302 num.words[num.length] = 0;
81303 num.words[num.length + 1] = 0;
81304 num.length += 2;
81305
81306 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
81307 var lo = 0;
81308 for (var i = 0; i < num.length; i++) {
81309 var w = num.words[i] | 0;
81310 lo += w * 0x3d1;
81311 num.words[i] = lo & 0x3ffffff;
81312 lo = w * 0x40 + ((lo / 0x4000000) | 0);
81313 }
81314
81315 // Fast length reduction
81316 if (num.words[num.length - 1] === 0) {
81317 num.length--;
81318 if (num.words[num.length - 1] === 0) {
81319 num.length--;
81320 }
81321 }
81322 return num;
81323 };
81324
81325 function P224 () {
81326 MPrime.call(
81327 this,
81328 'p224',
81329 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
81330 }
81331 inherits(P224, MPrime);
81332
81333 function P192 () {
81334 MPrime.call(
81335 this,
81336 'p192',
81337 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
81338 }
81339 inherits(P192, MPrime);
81340
81341 function P25519 () {
81342 // 2 ^ 255 - 19
81343 MPrime.call(
81344 this,
81345 '25519',
81346 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
81347 }
81348 inherits(P25519, MPrime);
81349
81350 P25519.prototype.imulK = function imulK (num) {
81351 // K = 0x13
81352 var carry = 0;
81353 for (var i = 0; i < num.length; i++) {
81354 var hi = (num.words[i] | 0) * 0x13 + carry;
81355 var lo = hi & 0x3ffffff;
81356 hi >>>= 26;
81357
81358 num.words[i] = lo;
81359 carry = hi;
81360 }
81361 if (carry !== 0) {
81362 num.words[num.length++] = carry;
81363 }
81364 return num;
81365 };
81366
81367 // Exported mostly for testing purposes, use plain name instead
81368 BN._prime = function prime (name) {
81369 // Cached version of prime
81370 if (primes[name]) return primes[name];
81371
81372 var prime;
81373 if (name === 'k256') {
81374 prime = new K256();
81375 } else if (name === 'p224') {
81376 prime = new P224();
81377 } else if (name === 'p192') {
81378 prime = new P192();
81379 } else if (name === 'p25519') {
81380 prime = new P25519();
81381 } else {
81382 throw new Error('Unknown prime ' + name);
81383 }
81384 primes[name] = prime;
81385
81386 return prime;
81387 };
81388
81389 //
81390 // Base reduction engine
81391 //
81392 function Red (m) {
81393 if (typeof m === 'string') {
81394 var prime = BN._prime(m);
81395 this.m = prime.p;
81396 this.prime = prime;
81397 } else {
81398 assert(m.gtn(1), 'modulus must be greater than 1');
81399 this.m = m;
81400 this.prime = null;
81401 }
81402 }
81403
81404 Red.prototype._verify1 = function _verify1 (a) {
81405 assert(a.negative === 0, 'red works only with positives');
81406 assert(a.red, 'red works only with red numbers');
81407 };
81408
81409 Red.prototype._verify2 = function _verify2 (a, b) {
81410 assert((a.negative | b.negative) === 0, 'red works only with positives');
81411 assert(a.red && a.red === b.red,
81412 'red works only with red numbers');
81413 };
81414
81415 Red.prototype.imod = function imod (a) {
81416 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
81417 return a.umod(this.m)._forceRed(this);
81418 };
81419
81420 Red.prototype.neg = function neg (a) {
81421 if (a.isZero()) {
81422 return a.clone();
81423 }
81424
81425 return this.m.sub(a)._forceRed(this);
81426 };
81427
81428 Red.prototype.add = function add (a, b) {
81429 this._verify2(a, b);
81430
81431 var res = a.add(b);
81432 if (res.cmp(this.m) >= 0) {
81433 res.isub(this.m);
81434 }
81435 return res._forceRed(this);
81436 };
81437
81438 Red.prototype.iadd = function iadd (a, b) {
81439 this._verify2(a, b);
81440
81441 var res = a.iadd(b);
81442 if (res.cmp(this.m) >= 0) {
81443 res.isub(this.m);
81444 }
81445 return res;
81446 };
81447
81448 Red.prototype.sub = function sub (a, b) {
81449 this._verify2(a, b);
81450
81451 var res = a.sub(b);
81452 if (res.cmpn(0) < 0) {
81453 res.iadd(this.m);
81454 }
81455 return res._forceRed(this);
81456 };
81457
81458 Red.prototype.isub = function isub (a, b) {
81459 this._verify2(a, b);
81460
81461 var res = a.isub(b);
81462 if (res.cmpn(0) < 0) {
81463 res.iadd(this.m);
81464 }
81465 return res;
81466 };
81467
81468 Red.prototype.shl = function shl (a, num) {
81469 this._verify1(a);
81470 return this.imod(a.ushln(num));
81471 };
81472
81473 Red.prototype.imul = function imul (a, b) {
81474 this._verify2(a, b);
81475 return this.imod(a.imul(b));
81476 };
81477
81478 Red.prototype.mul = function mul (a, b) {
81479 this._verify2(a, b);
81480 return this.imod(a.mul(b));
81481 };
81482
81483 Red.prototype.isqr = function isqr (a) {
81484 return this.imul(a, a.clone());
81485 };
81486
81487 Red.prototype.sqr = function sqr (a) {
81488 return this.mul(a, a);
81489 };
81490
81491 Red.prototype.sqrt = function sqrt (a) {
81492 if (a.isZero()) return a.clone();
81493
81494 var mod3 = this.m.andln(3);
81495 assert(mod3 % 2 === 1);
81496
81497 // Fast case
81498 if (mod3 === 3) {
81499 var pow = this.m.add(new BN(1)).iushrn(2);
81500 return this.pow(a, pow);
81501 }
81502
81503 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
81504 //
81505 // Find Q and S, that Q * 2 ^ S = (P - 1)
81506 var q = this.m.subn(1);
81507 var s = 0;
81508 while (!q.isZero() && q.andln(1) === 0) {
81509 s++;
81510 q.iushrn(1);
81511 }
81512 assert(!q.isZero());
81513
81514 var one = new BN(1).toRed(this);
81515 var nOne = one.redNeg();
81516
81517 // Find quadratic non-residue
81518 // NOTE: Max is such because of generalized Riemann hypothesis.
81519 var lpow = this.m.subn(1).iushrn(1);
81520 var z = this.m.bitLength();
81521 z = new BN(2 * z * z).toRed(this);
81522
81523 while (this.pow(z, lpow).cmp(nOne) !== 0) {
81524 z.redIAdd(nOne);
81525 }
81526
81527 var c = this.pow(z, q);
81528 var r = this.pow(a, q.addn(1).iushrn(1));
81529 var t = this.pow(a, q);
81530 var m = s;
81531 while (t.cmp(one) !== 0) {
81532 var tmp = t;
81533 for (var i = 0; tmp.cmp(one) !== 0; i++) {
81534 tmp = tmp.redSqr();
81535 }
81536 assert(i < m);
81537 var b = this.pow(c, new BN(1).iushln(m - i - 1));
81538
81539 r = r.redMul(b);
81540 c = b.redSqr();
81541 t = t.redMul(c);
81542 m = i;
81543 }
81544
81545 return r;
81546 };
81547
81548 Red.prototype.invm = function invm (a) {
81549 var inv = a._invmp(this.m);
81550 if (inv.negative !== 0) {
81551 inv.negative = 0;
81552 return this.imod(inv).redNeg();
81553 } else {
81554 return this.imod(inv);
81555 }
81556 };
81557
81558 Red.prototype.pow = function pow (a, num) {
81559 if (num.isZero()) return new BN(1);
81560 if (num.cmpn(1) === 0) return a.clone();
81561
81562 var windowSize = 4;
81563 var wnd = new Array(1 << windowSize);
81564 wnd[0] = new BN(1).toRed(this);
81565 wnd[1] = a;
81566 for (var i = 2; i < wnd.length; i++) {
81567 wnd[i] = this.mul(wnd[i - 1], a);
81568 }
81569
81570 var res = wnd[0];
81571 var current = 0;
81572 var currentLen = 0;
81573 var start = num.bitLength() % 26;
81574 if (start === 0) {
81575 start = 26;
81576 }
81577
81578 for (i = num.length - 1; i >= 0; i--) {
81579 var word = num.words[i];
81580 for (var j = start - 1; j >= 0; j--) {
81581 var bit = (word >> j) & 1;
81582 if (res !== wnd[0]) {
81583 res = this.sqr(res);
81584 }
81585
81586 if (bit === 0 && current === 0) {
81587 currentLen = 0;
81588 continue;
81589 }
81590
81591 current <<= 1;
81592 current |= bit;
81593 currentLen++;
81594 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
81595
81596 res = this.mul(res, wnd[current]);
81597 currentLen = 0;
81598 current = 0;
81599 }
81600 start = 26;
81601 }
81602
81603 return res;
81604 };
81605
81606 Red.prototype.convertTo = function convertTo (num) {
81607 var r = num.umod(this.m);
81608
81609 return r === num ? r.clone() : r;
81610 };
81611
81612 Red.prototype.convertFrom = function convertFrom (num) {
81613 var res = num.clone();
81614 res.red = null;
81615 return res;
81616 };
81617
81618 //
81619 // Montgomery method engine
81620 //
81621
81622 BN.mont = function mont (num) {
81623 return new Mont(num);
81624 };
81625
81626 function Mont (m) {
81627 Red.call(this, m);
81628
81629 this.shift = this.m.bitLength();
81630 if (this.shift % 26 !== 0) {
81631 this.shift += 26 - (this.shift % 26);
81632 }
81633
81634 this.r = new BN(1).iushln(this.shift);
81635 this.r2 = this.imod(this.r.sqr());
81636 this.rinv = this.r._invmp(this.m);
81637
81638 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
81639 this.minv = this.minv.umod(this.r);
81640 this.minv = this.r.sub(this.minv);
81641 }
81642 inherits(Mont, Red);
81643
81644 Mont.prototype.convertTo = function convertTo (num) {
81645 return this.imod(num.ushln(this.shift));
81646 };
81647
81648 Mont.prototype.convertFrom = function convertFrom (num) {
81649 var r = this.imod(num.mul(this.rinv));
81650 r.red = null;
81651 return r;
81652 };
81653
81654 Mont.prototype.imul = function imul (a, b) {
81655 if (a.isZero() || b.isZero()) {
81656 a.words[0] = 0;
81657 a.length = 1;
81658 return a;
81659 }
81660
81661 var t = a.imul(b);
81662 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81663 var u = t.isub(c).iushrn(this.shift);
81664 var res = u;
81665
81666 if (u.cmp(this.m) >= 0) {
81667 res = u.isub(this.m);
81668 } else if (u.cmpn(0) < 0) {
81669 res = u.iadd(this.m);
81670 }
81671
81672 return res._forceRed(this);
81673 };
81674
81675 Mont.prototype.mul = function mul (a, b) {
81676 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
81677
81678 var t = a.mul(b);
81679 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
81680 var u = t.isub(c).iushrn(this.shift);
81681 var res = u;
81682 if (u.cmp(this.m) >= 0) {
81683 res = u.isub(this.m);
81684 } else if (u.cmpn(0) < 0) {
81685 res = u.iadd(this.m);
81686 }
81687
81688 return res._forceRed(this);
81689 };
81690
81691 Mont.prototype.invm = function invm (a) {
81692 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
81693 var res = this.imod(a._invmp(this.m).mul(this.r2));
81694 return res._forceRed(this);
81695 };
81696 })(typeof module === 'undefined' || module, this);
81697
81698 },{}],34:[function(require,module,exports){
81699 var r;
81700
81701 module.exports = function rand(len) {
81702 if (!r)
81703 r = new Rand(null);
81704
81705 return r.generate(len);
81706 };
81707
81708 function Rand(rand) {
81709 this.rand = rand;
81710 }
81711 module.exports.Rand = Rand;
81712
81713 Rand.prototype.generate = function generate(len) {
81714 return this._rand(len);
81715 };
81716
81717 if (typeof self === 'object') {
81718 if (self.crypto && self.crypto.getRandomValues) {
81719 // Modern browsers
81720 Rand.prototype._rand = function _rand(n) {
81721 var arr = new Uint8Array(n);
81722 self.crypto.getRandomValues(arr);
81723 return arr;
81724 };
81725 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
81726 // IE
81727 Rand.prototype._rand = function _rand(n) {
81728 var arr = new Uint8Array(n);
81729 self.msCrypto.getRandomValues(arr);
81730 return arr;
81731 };
81732 } else {
81733 // Old junk
81734 Rand.prototype._rand = function() {
81735 throw new Error('Not implemented yet');
81736 };
81737 }
81738 } else {
81739 // Node.js or Web worker with no crypto support
81740 try {
81741 var crypto = require('crypto');
81742
81743 Rand.prototype._rand = function _rand(n) {
81744 return crypto.randomBytes(n);
81745 };
81746 } catch (e) {
81747 // Emulate crypto API using randy
81748 Rand.prototype._rand = function _rand(n) {
81749 var res = new Uint8Array(n);
81750 for (var i = 0; i < res.length; i++)
81751 res[i] = this.rand.getByte();
81752 return res;
81753 };
81754 }
81755 }
81756
81757 },{"crypto":3}],35:[function(require,module,exports){
81758 (function (Buffer){
81759 var Transform = require('stream').Transform
81760 var inherits = require('inherits')
81761 var StringDecoder = require('string_decoder').StringDecoder
81762 module.exports = CipherBase
81763 inherits(CipherBase, Transform)
81764 function CipherBase (hashMode) {
81765 Transform.call(this)
81766 this.hashMode = typeof hashMode === 'string'
81767 if (this.hashMode) {
81768 this[hashMode] = this._finalOrDigest
81769 } else {
81770 this.final = this._finalOrDigest
81771 }
81772 this._decoder = null
81773 this._encoding = null
81774 }
81775 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
81776 if (typeof data === 'string') {
81777 data = new Buffer(data, inputEnc)
81778 }
81779 var outData = this._update(data)
81780 if (this.hashMode) {
81781 return this
81782 }
81783 if (outputEnc) {
81784 outData = this._toString(outData, outputEnc)
81785 }
81786 return outData
81787 }
81788
81789 CipherBase.prototype.setAutoPadding = function () {}
81790
81791 CipherBase.prototype.getAuthTag = function () {
81792 throw new Error('trying to get auth tag in unsupported state')
81793 }
81794
81795 CipherBase.prototype.setAuthTag = function () {
81796 throw new Error('trying to set auth tag in unsupported state')
81797 }
81798
81799 CipherBase.prototype.setAAD = function () {
81800 throw new Error('trying to set aad in unsupported state')
81801 }
81802
81803 CipherBase.prototype._transform = function (data, _, next) {
81804 var err
81805 try {
81806 if (this.hashMode) {
81807 this._update(data)
81808 } else {
81809 this.push(this._update(data))
81810 }
81811 } catch (e) {
81812 err = e
81813 } finally {
81814 next(err)
81815 }
81816 }
81817 CipherBase.prototype._flush = function (done) {
81818 var err
81819 try {
81820 this.push(this._final())
81821 } catch (e) {
81822 err = e
81823 } finally {
81824 done(err)
81825 }
81826 }
81827 CipherBase.prototype._finalOrDigest = function (outputEnc) {
81828 var outData = this._final() || new Buffer('')
81829 if (outputEnc) {
81830 outData = this._toString(outData, outputEnc, true)
81831 }
81832 return outData
81833 }
81834
81835 CipherBase.prototype._toString = function (value, enc, fin) {
81836 if (!this._decoder) {
81837 this._decoder = new StringDecoder(enc)
81838 this._encoding = enc
81839 }
81840 if (this._encoding !== enc) {
81841 throw new Error('can\'t switch encodings')
81842 }
81843 var out = this._decoder.write(value)
81844 if (fin) {
81845 out += this._decoder.end()
81846 }
81847 return out
81848 }
81849
81850 }).call(this,require("buffer").Buffer)
81851 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
81852 (function (Buffer){
81853 'use strict';
81854 var inherits = require('inherits')
81855 var md5 = require('./md5')
81856 var rmd160 = require('ripemd160')
81857 var sha = require('sha.js')
81858
81859 var Base = require('cipher-base')
81860
81861 function HashNoConstructor(hash) {
81862 Base.call(this, 'digest')
81863
81864 this._hash = hash
81865 this.buffers = []
81866 }
81867
81868 inherits(HashNoConstructor, Base)
81869
81870 HashNoConstructor.prototype._update = function (data) {
81871 this.buffers.push(data)
81872 }
81873
81874 HashNoConstructor.prototype._final = function () {
81875 var buf = Buffer.concat(this.buffers)
81876 var r = this._hash(buf)
81877 this.buffers = null
81878
81879 return r
81880 }
81881
81882 function Hash(hash) {
81883 Base.call(this, 'digest')
81884
81885 this._hash = hash
81886 }
81887
81888 inherits(Hash, Base)
81889
81890 Hash.prototype._update = function (data) {
81891 this._hash.update(data)
81892 }
81893
81894 Hash.prototype._final = function () {
81895 return this._hash.digest()
81896 }
81897
81898 module.exports = function createHash (alg) {
81899 alg = alg.toLowerCase()
81900 if ('md5' === alg) return new HashNoConstructor(md5)
81901 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
81902
81903 return new Hash(sha(alg))
81904 }
81905
81906 }).call(this,require("buffer").Buffer)
81907 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
81908 (function (Buffer){
81909 'use strict';
81910 var intSize = 4;
81911 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
81912 var chrsz = 8;
81913
81914 function toArray(buf, bigEndian) {
81915 if ((buf.length % intSize) !== 0) {
81916 var len = buf.length + (intSize - (buf.length % intSize));
81917 buf = Buffer.concat([buf, zeroBuffer], len);
81918 }
81919
81920 var arr = [];
81921 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
81922 for (var i = 0; i < buf.length; i += intSize) {
81923 arr.push(fn.call(buf, i));
81924 }
81925 return arr;
81926 }
81927
81928 function toBuffer(arr, size, bigEndian) {
81929 var buf = new Buffer(size);
81930 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
81931 for (var i = 0; i < arr.length; i++) {
81932 fn.call(buf, arr[i], i * 4, true);
81933 }
81934 return buf;
81935 }
81936
81937 function hash(buf, fn, hashSize, bigEndian) {
81938 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
81939 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
81940 return toBuffer(arr, hashSize, bigEndian);
81941 }
81942 exports.hash = hash;
81943 }).call(this,require("buffer").Buffer)
81944 },{"buffer":5}],38:[function(require,module,exports){
81945 'use strict';
81946 /*
81947 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
81948 * Digest Algorithm, as defined in RFC 1321.
81949 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
81950 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
81951 * Distributed under the BSD License
81952 * See http://pajhome.org.uk/crypt/md5 for more info.
81953 */
81954
81955 var helpers = require('./helpers');
81956
81957 /*
81958 * Calculate the MD5 of an array of little-endian words, and a bit length
81959 */
81960 function core_md5(x, len)
81961 {
81962 /* append padding */
81963 x[len >> 5] |= 0x80 << ((len) % 32);
81964 x[(((len + 64) >>> 9) << 4) + 14] = len;
81965
81966 var a = 1732584193;
81967 var b = -271733879;
81968 var c = -1732584194;
81969 var d = 271733878;
81970
81971 for(var i = 0; i < x.length; i += 16)
81972 {
81973 var olda = a;
81974 var oldb = b;
81975 var oldc = c;
81976 var oldd = d;
81977
81978 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
81979 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
81980 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
81981 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
81982 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
81983 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
81984 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
81985 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
81986 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
81987 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
81988 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
81989 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
81990 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
81991 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
81992 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
81993 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
81994
81995 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
81996 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
81997 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
81998 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
81999 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
82000 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
82001 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
82002 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
82003 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
82004 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
82005 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
82006 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
82007 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
82008 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
82009 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
82010 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
82011
82012 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
82013 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
82014 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
82015 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
82016 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
82017 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
82018 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
82019 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
82020 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
82021 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
82022 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
82023 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
82024 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
82025 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
82026 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
82027 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
82028
82029 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
82030 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
82031 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
82032 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
82033 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
82034 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
82035 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
82036 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
82037 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
82038 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
82039 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
82040 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
82041 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
82042 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
82043 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
82044 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
82045
82046 a = safe_add(a, olda);
82047 b = safe_add(b, oldb);
82048 c = safe_add(c, oldc);
82049 d = safe_add(d, oldd);
82050 }
82051 return Array(a, b, c, d);
82052
82053 }
82054
82055 /*
82056 * These functions implement the four basic operations the algorithm uses.
82057 */
82058 function md5_cmn(q, a, b, x, s, t)
82059 {
82060 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
82061 }
82062 function md5_ff(a, b, c, d, x, s, t)
82063 {
82064 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
82065 }
82066 function md5_gg(a, b, c, d, x, s, t)
82067 {
82068 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
82069 }
82070 function md5_hh(a, b, c, d, x, s, t)
82071 {
82072 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
82073 }
82074 function md5_ii(a, b, c, d, x, s, t)
82075 {
82076 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
82077 }
82078
82079 /*
82080 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
82081 * to work around bugs in some JS interpreters.
82082 */
82083 function safe_add(x, y)
82084 {
82085 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
82086 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
82087 return (msw << 16) | (lsw & 0xFFFF);
82088 }
82089
82090 /*
82091 * Bitwise rotate a 32-bit number to the left.
82092 */
82093 function bit_rol(num, cnt)
82094 {
82095 return (num << cnt) | (num >>> (32 - cnt));
82096 }
82097
82098 module.exports = function md5(buf) {
82099 return helpers.hash(buf, core_md5, 16);
82100 };
82101 },{"./helpers":37}],39:[function(require,module,exports){
82102 'use strict';
82103
82104 var elliptic = exports;
82105
82106 elliptic.version = require('../package.json').version;
82107 elliptic.utils = require('./elliptic/utils');
82108 elliptic.rand = require('brorand');
82109 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
82110 elliptic.curve = require('./elliptic/curve');
82111 elliptic.curves = require('./elliptic/curves');
82112
82113 // Protocols
82114 elliptic.ec = require('./elliptic/ec');
82115 elliptic.eddsa = require('./elliptic/eddsa');
82116
82117 },{"../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){
82118 'use strict';
82119
82120 var BN = require('bn.js');
82121 var elliptic = require('../../elliptic');
82122 var utils = elliptic.utils;
82123 var getNAF = utils.getNAF;
82124 var getJSF = utils.getJSF;
82125 var assert = utils.assert;
82126
82127 function BaseCurve(type, conf) {
82128 this.type = type;
82129 this.p = new BN(conf.p, 16);
82130
82131 // Use Montgomery, when there is no fast reduction for the prime
82132 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
82133
82134 // Useful for many curves
82135 this.zero = new BN(0).toRed(this.red);
82136 this.one = new BN(1).toRed(this.red);
82137 this.two = new BN(2).toRed(this.red);
82138
82139 // Curve configuration, optional
82140 this.n = conf.n && new BN(conf.n, 16);
82141 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
82142
82143 // Temporary arrays
82144 this._wnafT1 = new Array(4);
82145 this._wnafT2 = new Array(4);
82146 this._wnafT3 = new Array(4);
82147 this._wnafT4 = new Array(4);
82148
82149 // Generalized Greg Maxwell's trick
82150 var adjustCount = this.n && this.p.div(this.n);
82151 if (!adjustCount || adjustCount.cmpn(100) > 0) {
82152 this.redN = null;
82153 } else {
82154 this._maxwellTrick = true;
82155 this.redN = this.n.toRed(this.red);
82156 }
82157 }
82158 module.exports = BaseCurve;
82159
82160 BaseCurve.prototype.point = function point() {
82161 throw new Error('Not implemented');
82162 };
82163
82164 BaseCurve.prototype.validate = function validate() {
82165 throw new Error('Not implemented');
82166 };
82167
82168 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
82169 assert(p.precomputed);
82170 var doubles = p._getDoubles();
82171
82172 var naf = getNAF(k, 1);
82173 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
82174 I /= 3;
82175
82176 // Translate into more windowed form
82177 var repr = [];
82178 for (var j = 0; j < naf.length; j += doubles.step) {
82179 var nafW = 0;
82180 for (var k = j + doubles.step - 1; k >= j; k--)
82181 nafW = (nafW << 1) + naf[k];
82182 repr.push(nafW);
82183 }
82184
82185 var a = this.jpoint(null, null, null);
82186 var b = this.jpoint(null, null, null);
82187 for (var i = I; i > 0; i--) {
82188 for (var j = 0; j < repr.length; j++) {
82189 var nafW = repr[j];
82190 if (nafW === i)
82191 b = b.mixedAdd(doubles.points[j]);
82192 else if (nafW === -i)
82193 b = b.mixedAdd(doubles.points[j].neg());
82194 }
82195 a = a.add(b);
82196 }
82197 return a.toP();
82198 };
82199
82200 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
82201 var w = 4;
82202
82203 // Precompute window
82204 var nafPoints = p._getNAFPoints(w);
82205 w = nafPoints.wnd;
82206 var wnd = nafPoints.points;
82207
82208 // Get NAF form
82209 var naf = getNAF(k, w);
82210
82211 // Add `this`*(N+1) for every w-NAF index
82212 var acc = this.jpoint(null, null, null);
82213 for (var i = naf.length - 1; i >= 0; i--) {
82214 // Count zeroes
82215 for (var k = 0; i >= 0 && naf[i] === 0; i--)
82216 k++;
82217 if (i >= 0)
82218 k++;
82219 acc = acc.dblp(k);
82220
82221 if (i < 0)
82222 break;
82223 var z = naf[i];
82224 assert(z !== 0);
82225 if (p.type === 'affine') {
82226 // J +- P
82227 if (z > 0)
82228 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
82229 else
82230 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
82231 } else {
82232 // J +- J
82233 if (z > 0)
82234 acc = acc.add(wnd[(z - 1) >> 1]);
82235 else
82236 acc = acc.add(wnd[(-z - 1) >> 1].neg());
82237 }
82238 }
82239 return p.type === 'affine' ? acc.toP() : acc;
82240 };
82241
82242 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
82243 points,
82244 coeffs,
82245 len,
82246 jacobianResult) {
82247 var wndWidth = this._wnafT1;
82248 var wnd = this._wnafT2;
82249 var naf = this._wnafT3;
82250
82251 // Fill all arrays
82252 var max = 0;
82253 for (var i = 0; i < len; i++) {
82254 var p = points[i];
82255 var nafPoints = p._getNAFPoints(defW);
82256 wndWidth[i] = nafPoints.wnd;
82257 wnd[i] = nafPoints.points;
82258 }
82259
82260 // Comb small window NAFs
82261 for (var i = len - 1; i >= 1; i -= 2) {
82262 var a = i - 1;
82263 var b = i;
82264 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
82265 naf[a] = getNAF(coeffs[a], wndWidth[a]);
82266 naf[b] = getNAF(coeffs[b], wndWidth[b]);
82267 max = Math.max(naf[a].length, max);
82268 max = Math.max(naf[b].length, max);
82269 continue;
82270 }
82271
82272 var comb = [
82273 points[a], /* 1 */
82274 null, /* 3 */
82275 null, /* 5 */
82276 points[b] /* 7 */
82277 ];
82278
82279 // Try to avoid Projective points, if possible
82280 if (points[a].y.cmp(points[b].y) === 0) {
82281 comb[1] = points[a].add(points[b]);
82282 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82283 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
82284 comb[1] = points[a].toJ().mixedAdd(points[b]);
82285 comb[2] = points[a].add(points[b].neg());
82286 } else {
82287 comb[1] = points[a].toJ().mixedAdd(points[b]);
82288 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
82289 }
82290
82291 var index = [
82292 -3, /* -1 -1 */
82293 -1, /* -1 0 */
82294 -5, /* -1 1 */
82295 -7, /* 0 -1 */
82296 0, /* 0 0 */
82297 7, /* 0 1 */
82298 5, /* 1 -1 */
82299 1, /* 1 0 */
82300 3 /* 1 1 */
82301 ];
82302
82303 var jsf = getJSF(coeffs[a], coeffs[b]);
82304 max = Math.max(jsf[0].length, max);
82305 naf[a] = new Array(max);
82306 naf[b] = new Array(max);
82307 for (var j = 0; j < max; j++) {
82308 var ja = jsf[0][j] | 0;
82309 var jb = jsf[1][j] | 0;
82310
82311 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
82312 naf[b][j] = 0;
82313 wnd[a] = comb;
82314 }
82315 }
82316
82317 var acc = this.jpoint(null, null, null);
82318 var tmp = this._wnafT4;
82319 for (var i = max; i >= 0; i--) {
82320 var k = 0;
82321
82322 while (i >= 0) {
82323 var zero = true;
82324 for (var j = 0; j < len; j++) {
82325 tmp[j] = naf[j][i] | 0;
82326 if (tmp[j] !== 0)
82327 zero = false;
82328 }
82329 if (!zero)
82330 break;
82331 k++;
82332 i--;
82333 }
82334 if (i >= 0)
82335 k++;
82336 acc = acc.dblp(k);
82337 if (i < 0)
82338 break;
82339
82340 for (var j = 0; j < len; j++) {
82341 var z = tmp[j];
82342 var p;
82343 if (z === 0)
82344 continue;
82345 else if (z > 0)
82346 p = wnd[j][(z - 1) >> 1];
82347 else if (z < 0)
82348 p = wnd[j][(-z - 1) >> 1].neg();
82349
82350 if (p.type === 'affine')
82351 acc = acc.mixedAdd(p);
82352 else
82353 acc = acc.add(p);
82354 }
82355 }
82356 // Zeroify references
82357 for (var i = 0; i < len; i++)
82358 wnd[i] = null;
82359
82360 if (jacobianResult)
82361 return acc;
82362 else
82363 return acc.toP();
82364 };
82365
82366 function BasePoint(curve, type) {
82367 this.curve = curve;
82368 this.type = type;
82369 this.precomputed = null;
82370 }
82371 BaseCurve.BasePoint = BasePoint;
82372
82373 BasePoint.prototype.eq = function eq(/*other*/) {
82374 throw new Error('Not implemented');
82375 };
82376
82377 BasePoint.prototype.validate = function validate() {
82378 return this.curve.validate(this);
82379 };
82380
82381 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82382 bytes = utils.toArray(bytes, enc);
82383
82384 var len = this.p.byteLength();
82385
82386 // uncompressed, hybrid-odd, hybrid-even
82387 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
82388 bytes.length - 1 === 2 * len) {
82389 if (bytes[0] === 0x06)
82390 assert(bytes[bytes.length - 1] % 2 === 0);
82391 else if (bytes[0] === 0x07)
82392 assert(bytes[bytes.length - 1] % 2 === 1);
82393
82394 var res = this.point(bytes.slice(1, 1 + len),
82395 bytes.slice(1 + len, 1 + 2 * len));
82396
82397 return res;
82398 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
82399 bytes.length - 1 === len) {
82400 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
82401 }
82402 throw new Error('Unknown point format');
82403 };
82404
82405 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
82406 return this.encode(enc, true);
82407 };
82408
82409 BasePoint.prototype._encode = function _encode(compact) {
82410 var len = this.curve.p.byteLength();
82411 var x = this.getX().toArray('be', len);
82412
82413 if (compact)
82414 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
82415
82416 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
82417 };
82418
82419 BasePoint.prototype.encode = function encode(enc, compact) {
82420 return utils.encode(this._encode(compact), enc);
82421 };
82422
82423 BasePoint.prototype.precompute = function precompute(power) {
82424 if (this.precomputed)
82425 return this;
82426
82427 var precomputed = {
82428 doubles: null,
82429 naf: null,
82430 beta: null
82431 };
82432 precomputed.naf = this._getNAFPoints(8);
82433 precomputed.doubles = this._getDoubles(4, power);
82434 precomputed.beta = this._getBeta();
82435 this.precomputed = precomputed;
82436
82437 return this;
82438 };
82439
82440 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
82441 if (!this.precomputed)
82442 return false;
82443
82444 var doubles = this.precomputed.doubles;
82445 if (!doubles)
82446 return false;
82447
82448 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
82449 };
82450
82451 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
82452 if (this.precomputed && this.precomputed.doubles)
82453 return this.precomputed.doubles;
82454
82455 var doubles = [ this ];
82456 var acc = this;
82457 for (var i = 0; i < power; i += step) {
82458 for (var j = 0; j < step; j++)
82459 acc = acc.dbl();
82460 doubles.push(acc);
82461 }
82462 return {
82463 step: step,
82464 points: doubles
82465 };
82466 };
82467
82468 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
82469 if (this.precomputed && this.precomputed.naf)
82470 return this.precomputed.naf;
82471
82472 var res = [ this ];
82473 var max = (1 << wnd) - 1;
82474 var dbl = max === 1 ? null : this.dbl();
82475 for (var i = 1; i < max; i++)
82476 res[i] = res[i - 1].add(dbl);
82477 return {
82478 wnd: wnd,
82479 points: res
82480 };
82481 };
82482
82483 BasePoint.prototype._getBeta = function _getBeta() {
82484 return null;
82485 };
82486
82487 BasePoint.prototype.dblp = function dblp(k) {
82488 var r = this;
82489 for (var i = 0; i < k; i++)
82490 r = r.dbl();
82491 return r;
82492 };
82493
82494 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
82495 'use strict';
82496
82497 var curve = require('../curve');
82498 var elliptic = require('../../elliptic');
82499 var BN = require('bn.js');
82500 var inherits = require('inherits');
82501 var Base = curve.base;
82502
82503 var assert = elliptic.utils.assert;
82504
82505 function EdwardsCurve(conf) {
82506 // NOTE: Important as we are creating point in Base.call()
82507 this.twisted = (conf.a | 0) !== 1;
82508 this.mOneA = this.twisted && (conf.a | 0) === -1;
82509 this.extended = this.mOneA;
82510
82511 Base.call(this, 'edwards', conf);
82512
82513 this.a = new BN(conf.a, 16).umod(this.red.m);
82514 this.a = this.a.toRed(this.red);
82515 this.c = new BN(conf.c, 16).toRed(this.red);
82516 this.c2 = this.c.redSqr();
82517 this.d = new BN(conf.d, 16).toRed(this.red);
82518 this.dd = this.d.redAdd(this.d);
82519
82520 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
82521 this.oneC = (conf.c | 0) === 1;
82522 }
82523 inherits(EdwardsCurve, Base);
82524 module.exports = EdwardsCurve;
82525
82526 EdwardsCurve.prototype._mulA = function _mulA(num) {
82527 if (this.mOneA)
82528 return num.redNeg();
82529 else
82530 return this.a.redMul(num);
82531 };
82532
82533 EdwardsCurve.prototype._mulC = function _mulC(num) {
82534 if (this.oneC)
82535 return num;
82536 else
82537 return this.c.redMul(num);
82538 };
82539
82540 // Just for compatibility with Short curve
82541 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
82542 return this.point(x, y, z, t);
82543 };
82544
82545 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
82546 x = new BN(x, 16);
82547 if (!x.red)
82548 x = x.toRed(this.red);
82549
82550 var x2 = x.redSqr();
82551 var rhs = this.c2.redSub(this.a.redMul(x2));
82552 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
82553
82554 var y2 = rhs.redMul(lhs.redInvm());
82555 var y = y2.redSqrt();
82556 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
82557 throw new Error('invalid point');
82558
82559 var isOdd = y.fromRed().isOdd();
82560 if (odd && !isOdd || !odd && isOdd)
82561 y = y.redNeg();
82562
82563 return this.point(x, y);
82564 };
82565
82566 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
82567 y = new BN(y, 16);
82568 if (!y.red)
82569 y = y.toRed(this.red);
82570
82571 // x^2 = (y^2 - 1) / (d y^2 + 1)
82572 var y2 = y.redSqr();
82573 var lhs = y2.redSub(this.one);
82574 var rhs = y2.redMul(this.d).redAdd(this.one);
82575 var x2 = lhs.redMul(rhs.redInvm());
82576
82577 if (x2.cmp(this.zero) === 0) {
82578 if (odd)
82579 throw new Error('invalid point');
82580 else
82581 return this.point(this.zero, y);
82582 }
82583
82584 var x = x2.redSqrt();
82585 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
82586 throw new Error('invalid point');
82587
82588 if (x.isOdd() !== odd)
82589 x = x.redNeg();
82590
82591 return this.point(x, y);
82592 };
82593
82594 EdwardsCurve.prototype.validate = function validate(point) {
82595 if (point.isInfinity())
82596 return true;
82597
82598 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
82599 point.normalize();
82600
82601 var x2 = point.x.redSqr();
82602 var y2 = point.y.redSqr();
82603 var lhs = x2.redMul(this.a).redAdd(y2);
82604 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
82605
82606 return lhs.cmp(rhs) === 0;
82607 };
82608
82609 function Point(curve, x, y, z, t) {
82610 Base.BasePoint.call(this, curve, 'projective');
82611 if (x === null && y === null && z === null) {
82612 this.x = this.curve.zero;
82613 this.y = this.curve.one;
82614 this.z = this.curve.one;
82615 this.t = this.curve.zero;
82616 this.zOne = true;
82617 } else {
82618 this.x = new BN(x, 16);
82619 this.y = new BN(y, 16);
82620 this.z = z ? new BN(z, 16) : this.curve.one;
82621 this.t = t && new BN(t, 16);
82622 if (!this.x.red)
82623 this.x = this.x.toRed(this.curve.red);
82624 if (!this.y.red)
82625 this.y = this.y.toRed(this.curve.red);
82626 if (!this.z.red)
82627 this.z = this.z.toRed(this.curve.red);
82628 if (this.t && !this.t.red)
82629 this.t = this.t.toRed(this.curve.red);
82630 this.zOne = this.z === this.curve.one;
82631
82632 // Use extended coordinates
82633 if (this.curve.extended && !this.t) {
82634 this.t = this.x.redMul(this.y);
82635 if (!this.zOne)
82636 this.t = this.t.redMul(this.z.redInvm());
82637 }
82638 }
82639 }
82640 inherits(Point, Base.BasePoint);
82641
82642 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82643 return Point.fromJSON(this, obj);
82644 };
82645
82646 EdwardsCurve.prototype.point = function point(x, y, z, t) {
82647 return new Point(this, x, y, z, t);
82648 };
82649
82650 Point.fromJSON = function fromJSON(curve, obj) {
82651 return new Point(curve, obj[0], obj[1], obj[2]);
82652 };
82653
82654 Point.prototype.inspect = function inspect() {
82655 if (this.isInfinity())
82656 return '<EC Point Infinity>';
82657 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
82658 ' y: ' + this.y.fromRed().toString(16, 2) +
82659 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
82660 };
82661
82662 Point.prototype.isInfinity = function isInfinity() {
82663 // XXX This code assumes that zero is always zero in red
82664 return this.x.cmpn(0) === 0 &&
82665 this.y.cmp(this.z) === 0;
82666 };
82667
82668 Point.prototype._extDbl = function _extDbl() {
82669 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82670 // #doubling-dbl-2008-hwcd
82671 // 4M + 4S
82672
82673 // A = X1^2
82674 var a = this.x.redSqr();
82675 // B = Y1^2
82676 var b = this.y.redSqr();
82677 // C = 2 * Z1^2
82678 var c = this.z.redSqr();
82679 c = c.redIAdd(c);
82680 // D = a * A
82681 var d = this.curve._mulA(a);
82682 // E = (X1 + Y1)^2 - A - B
82683 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
82684 // G = D + B
82685 var g = d.redAdd(b);
82686 // F = G - C
82687 var f = g.redSub(c);
82688 // H = D - B
82689 var h = d.redSub(b);
82690 // X3 = E * F
82691 var nx = e.redMul(f);
82692 // Y3 = G * H
82693 var ny = g.redMul(h);
82694 // T3 = E * H
82695 var nt = e.redMul(h);
82696 // Z3 = F * G
82697 var nz = f.redMul(g);
82698 return this.curve.point(nx, ny, nz, nt);
82699 };
82700
82701 Point.prototype._projDbl = function _projDbl() {
82702 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82703 // #doubling-dbl-2008-bbjlp
82704 // #doubling-dbl-2007-bl
82705 // and others
82706 // Generally 3M + 4S or 2M + 4S
82707
82708 // B = (X1 + Y1)^2
82709 var b = this.x.redAdd(this.y).redSqr();
82710 // C = X1^2
82711 var c = this.x.redSqr();
82712 // D = Y1^2
82713 var d = this.y.redSqr();
82714
82715 var nx;
82716 var ny;
82717 var nz;
82718 if (this.curve.twisted) {
82719 // E = a * C
82720 var e = this.curve._mulA(c);
82721 // F = E + D
82722 var f = e.redAdd(d);
82723 if (this.zOne) {
82724 // X3 = (B - C - D) * (F - 2)
82725 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
82726 // Y3 = F * (E - D)
82727 ny = f.redMul(e.redSub(d));
82728 // Z3 = F^2 - 2 * F
82729 nz = f.redSqr().redSub(f).redSub(f);
82730 } else {
82731 // H = Z1^2
82732 var h = this.z.redSqr();
82733 // J = F - 2 * H
82734 var j = f.redSub(h).redISub(h);
82735 // X3 = (B-C-D)*J
82736 nx = b.redSub(c).redISub(d).redMul(j);
82737 // Y3 = F * (E - D)
82738 ny = f.redMul(e.redSub(d));
82739 // Z3 = F * J
82740 nz = f.redMul(j);
82741 }
82742 } else {
82743 // E = C + D
82744 var e = c.redAdd(d);
82745 // H = (c * Z1)^2
82746 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
82747 // J = E - 2 * H
82748 var j = e.redSub(h).redSub(h);
82749 // X3 = c * (B - E) * J
82750 nx = this.curve._mulC(b.redISub(e)).redMul(j);
82751 // Y3 = c * E * (C - D)
82752 ny = this.curve._mulC(e).redMul(c.redISub(d));
82753 // Z3 = E * J
82754 nz = e.redMul(j);
82755 }
82756 return this.curve.point(nx, ny, nz);
82757 };
82758
82759 Point.prototype.dbl = function dbl() {
82760 if (this.isInfinity())
82761 return this;
82762
82763 // Double in extended coordinates
82764 if (this.curve.extended)
82765 return this._extDbl();
82766 else
82767 return this._projDbl();
82768 };
82769
82770 Point.prototype._extAdd = function _extAdd(p) {
82771 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
82772 // #addition-add-2008-hwcd-3
82773 // 8M
82774
82775 // A = (Y1 - X1) * (Y2 - X2)
82776 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
82777 // B = (Y1 + X1) * (Y2 + X2)
82778 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
82779 // C = T1 * k * T2
82780 var c = this.t.redMul(this.curve.dd).redMul(p.t);
82781 // D = Z1 * 2 * Z2
82782 var d = this.z.redMul(p.z.redAdd(p.z));
82783 // E = B - A
82784 var e = b.redSub(a);
82785 // F = D - C
82786 var f = d.redSub(c);
82787 // G = D + C
82788 var g = d.redAdd(c);
82789 // H = B + A
82790 var h = b.redAdd(a);
82791 // X3 = E * F
82792 var nx = e.redMul(f);
82793 // Y3 = G * H
82794 var ny = g.redMul(h);
82795 // T3 = E * H
82796 var nt = e.redMul(h);
82797 // Z3 = F * G
82798 var nz = f.redMul(g);
82799 return this.curve.point(nx, ny, nz, nt);
82800 };
82801
82802 Point.prototype._projAdd = function _projAdd(p) {
82803 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
82804 // #addition-add-2008-bbjlp
82805 // #addition-add-2007-bl
82806 // 10M + 1S
82807
82808 // A = Z1 * Z2
82809 var a = this.z.redMul(p.z);
82810 // B = A^2
82811 var b = a.redSqr();
82812 // C = X1 * X2
82813 var c = this.x.redMul(p.x);
82814 // D = Y1 * Y2
82815 var d = this.y.redMul(p.y);
82816 // E = d * C * D
82817 var e = this.curve.d.redMul(c).redMul(d);
82818 // F = B - E
82819 var f = b.redSub(e);
82820 // G = B + E
82821 var g = b.redAdd(e);
82822 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
82823 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
82824 var nx = a.redMul(f).redMul(tmp);
82825 var ny;
82826 var nz;
82827 if (this.curve.twisted) {
82828 // Y3 = A * G * (D - a * C)
82829 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
82830 // Z3 = F * G
82831 nz = f.redMul(g);
82832 } else {
82833 // Y3 = A * G * (D - C)
82834 ny = a.redMul(g).redMul(d.redSub(c));
82835 // Z3 = c * F * G
82836 nz = this.curve._mulC(f).redMul(g);
82837 }
82838 return this.curve.point(nx, ny, nz);
82839 };
82840
82841 Point.prototype.add = function add(p) {
82842 if (this.isInfinity())
82843 return p;
82844 if (p.isInfinity())
82845 return this;
82846
82847 if (this.curve.extended)
82848 return this._extAdd(p);
82849 else
82850 return this._projAdd(p);
82851 };
82852
82853 Point.prototype.mul = function mul(k) {
82854 if (this._hasDoubles(k))
82855 return this.curve._fixedNafMul(this, k);
82856 else
82857 return this.curve._wnafMul(this, k);
82858 };
82859
82860 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
82861 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
82862 };
82863
82864 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
82865 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
82866 };
82867
82868 Point.prototype.normalize = function normalize() {
82869 if (this.zOne)
82870 return this;
82871
82872 // Normalize coordinates
82873 var zi = this.z.redInvm();
82874 this.x = this.x.redMul(zi);
82875 this.y = this.y.redMul(zi);
82876 if (this.t)
82877 this.t = this.t.redMul(zi);
82878 this.z = this.curve.one;
82879 this.zOne = true;
82880 return this;
82881 };
82882
82883 Point.prototype.neg = function neg() {
82884 return this.curve.point(this.x.redNeg(),
82885 this.y,
82886 this.z,
82887 this.t && this.t.redNeg());
82888 };
82889
82890 Point.prototype.getX = function getX() {
82891 this.normalize();
82892 return this.x.fromRed();
82893 };
82894
82895 Point.prototype.getY = function getY() {
82896 this.normalize();
82897 return this.y.fromRed();
82898 };
82899
82900 Point.prototype.eq = function eq(other) {
82901 return this === other ||
82902 this.getX().cmp(other.getX()) === 0 &&
82903 this.getY().cmp(other.getY()) === 0;
82904 };
82905
82906 Point.prototype.eqXToP = function eqXToP(x) {
82907 var rx = x.toRed(this.curve.red).redMul(this.z);
82908 if (this.x.cmp(rx) === 0)
82909 return true;
82910
82911 var xc = x.clone();
82912 var t = this.curve.redN.redMul(this.z);
82913 for (;;) {
82914 xc.iadd(this.curve.n);
82915 if (xc.cmp(this.curve.p) >= 0)
82916 return false;
82917
82918 rx.redIAdd(t);
82919 if (this.x.cmp(rx) === 0)
82920 return true;
82921 }
82922 return false;
82923 };
82924
82925 // Compatibility with BaseCurve
82926 Point.prototype.toP = Point.prototype.normalize;
82927 Point.prototype.mixedAdd = Point.prototype.add;
82928
82929 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
82930 'use strict';
82931
82932 var curve = exports;
82933
82934 curve.base = require('./base');
82935 curve.short = require('./short');
82936 curve.mont = require('./mont');
82937 curve.edwards = require('./edwards');
82938
82939 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
82940 'use strict';
82941
82942 var curve = require('../curve');
82943 var BN = require('bn.js');
82944 var inherits = require('inherits');
82945 var Base = curve.base;
82946
82947 var elliptic = require('../../elliptic');
82948 var utils = elliptic.utils;
82949
82950 function MontCurve(conf) {
82951 Base.call(this, 'mont', conf);
82952
82953 this.a = new BN(conf.a, 16).toRed(this.red);
82954 this.b = new BN(conf.b, 16).toRed(this.red);
82955 this.i4 = new BN(4).toRed(this.red).redInvm();
82956 this.two = new BN(2).toRed(this.red);
82957 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
82958 }
82959 inherits(MontCurve, Base);
82960 module.exports = MontCurve;
82961
82962 MontCurve.prototype.validate = function validate(point) {
82963 var x = point.normalize().x;
82964 var x2 = x.redSqr();
82965 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
82966 var y = rhs.redSqrt();
82967
82968 return y.redSqr().cmp(rhs) === 0;
82969 };
82970
82971 function Point(curve, x, z) {
82972 Base.BasePoint.call(this, curve, 'projective');
82973 if (x === null && z === null) {
82974 this.x = this.curve.one;
82975 this.z = this.curve.zero;
82976 } else {
82977 this.x = new BN(x, 16);
82978 this.z = new BN(z, 16);
82979 if (!this.x.red)
82980 this.x = this.x.toRed(this.curve.red);
82981 if (!this.z.red)
82982 this.z = this.z.toRed(this.curve.red);
82983 }
82984 }
82985 inherits(Point, Base.BasePoint);
82986
82987 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
82988 return this.point(utils.toArray(bytes, enc), 1);
82989 };
82990
82991 MontCurve.prototype.point = function point(x, z) {
82992 return new Point(this, x, z);
82993 };
82994
82995 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
82996 return Point.fromJSON(this, obj);
82997 };
82998
82999 Point.prototype.precompute = function precompute() {
83000 // No-op
83001 };
83002
83003 Point.prototype._encode = function _encode() {
83004 return this.getX().toArray('be', this.curve.p.byteLength());
83005 };
83006
83007 Point.fromJSON = function fromJSON(curve, obj) {
83008 return new Point(curve, obj[0], obj[1] || curve.one);
83009 };
83010
83011 Point.prototype.inspect = function inspect() {
83012 if (this.isInfinity())
83013 return '<EC Point Infinity>';
83014 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
83015 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
83016 };
83017
83018 Point.prototype.isInfinity = function isInfinity() {
83019 // XXX This code assumes that zero is always zero in red
83020 return this.z.cmpn(0) === 0;
83021 };
83022
83023 Point.prototype.dbl = function dbl() {
83024 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
83025 // 2M + 2S + 4A
83026
83027 // A = X1 + Z1
83028 var a = this.x.redAdd(this.z);
83029 // AA = A^2
83030 var aa = a.redSqr();
83031 // B = X1 - Z1
83032 var b = this.x.redSub(this.z);
83033 // BB = B^2
83034 var bb = b.redSqr();
83035 // C = AA - BB
83036 var c = aa.redSub(bb);
83037 // X3 = AA * BB
83038 var nx = aa.redMul(bb);
83039 // Z3 = C * (BB + A24 * C)
83040 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
83041 return this.curve.point(nx, nz);
83042 };
83043
83044 Point.prototype.add = function add() {
83045 throw new Error('Not supported on Montgomery curve');
83046 };
83047
83048 Point.prototype.diffAdd = function diffAdd(p, diff) {
83049 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
83050 // 4M + 2S + 6A
83051
83052 // A = X2 + Z2
83053 var a = this.x.redAdd(this.z);
83054 // B = X2 - Z2
83055 var b = this.x.redSub(this.z);
83056 // C = X3 + Z3
83057 var c = p.x.redAdd(p.z);
83058 // D = X3 - Z3
83059 var d = p.x.redSub(p.z);
83060 // DA = D * A
83061 var da = d.redMul(a);
83062 // CB = C * B
83063 var cb = c.redMul(b);
83064 // X5 = Z1 * (DA + CB)^2
83065 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
83066 // Z5 = X1 * (DA - CB)^2
83067 var nz = diff.x.redMul(da.redISub(cb).redSqr());
83068 return this.curve.point(nx, nz);
83069 };
83070
83071 Point.prototype.mul = function mul(k) {
83072 var t = k.clone();
83073 var a = this; // (N / 2) * Q + Q
83074 var b = this.curve.point(null, null); // (N / 2) * Q
83075 var c = this; // Q
83076
83077 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
83078 bits.push(t.andln(1));
83079
83080 for (var i = bits.length - 1; i >= 0; i--) {
83081 if (bits[i] === 0) {
83082 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
83083 a = a.diffAdd(b, c);
83084 // N * Q = 2 * ((N / 2) * Q + Q))
83085 b = b.dbl();
83086 } else {
83087 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
83088 b = a.diffAdd(b, c);
83089 // N * Q + Q = 2 * ((N / 2) * Q + Q)
83090 a = a.dbl();
83091 }
83092 }
83093 return b;
83094 };
83095
83096 Point.prototype.mulAdd = function mulAdd() {
83097 throw new Error('Not supported on Montgomery curve');
83098 };
83099
83100 Point.prototype.jumlAdd = function jumlAdd() {
83101 throw new Error('Not supported on Montgomery curve');
83102 };
83103
83104 Point.prototype.eq = function eq(other) {
83105 return this.getX().cmp(other.getX()) === 0;
83106 };
83107
83108 Point.prototype.normalize = function normalize() {
83109 this.x = this.x.redMul(this.z.redInvm());
83110 this.z = this.curve.one;
83111 return this;
83112 };
83113
83114 Point.prototype.getX = function getX() {
83115 // Normalize coordinates
83116 this.normalize();
83117
83118 return this.x.fromRed();
83119 };
83120
83121 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
83122 'use strict';
83123
83124 var curve = require('../curve');
83125 var elliptic = require('../../elliptic');
83126 var BN = require('bn.js');
83127 var inherits = require('inherits');
83128 var Base = curve.base;
83129
83130 var assert = elliptic.utils.assert;
83131
83132 function ShortCurve(conf) {
83133 Base.call(this, 'short', conf);
83134
83135 this.a = new BN(conf.a, 16).toRed(this.red);
83136 this.b = new BN(conf.b, 16).toRed(this.red);
83137 this.tinv = this.two.redInvm();
83138
83139 this.zeroA = this.a.fromRed().cmpn(0) === 0;
83140 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
83141
83142 // If the curve is endomorphic, precalculate beta and lambda
83143 this.endo = this._getEndomorphism(conf);
83144 this._endoWnafT1 = new Array(4);
83145 this._endoWnafT2 = new Array(4);
83146 }
83147 inherits(ShortCurve, Base);
83148 module.exports = ShortCurve;
83149
83150 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
83151 // No efficient endomorphism
83152 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
83153 return;
83154
83155 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
83156 var beta;
83157 var lambda;
83158 if (conf.beta) {
83159 beta = new BN(conf.beta, 16).toRed(this.red);
83160 } else {
83161 var betas = this._getEndoRoots(this.p);
83162 // Choose the smallest beta
83163 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
83164 beta = beta.toRed(this.red);
83165 }
83166 if (conf.lambda) {
83167 lambda = new BN(conf.lambda, 16);
83168 } else {
83169 // Choose the lambda that is matching selected beta
83170 var lambdas = this._getEndoRoots(this.n);
83171 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
83172 lambda = lambdas[0];
83173 } else {
83174 lambda = lambdas[1];
83175 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
83176 }
83177 }
83178
83179 // Get basis vectors, used for balanced length-two representation
83180 var basis;
83181 if (conf.basis) {
83182 basis = conf.basis.map(function(vec) {
83183 return {
83184 a: new BN(vec.a, 16),
83185 b: new BN(vec.b, 16)
83186 };
83187 });
83188 } else {
83189 basis = this._getEndoBasis(lambda);
83190 }
83191
83192 return {
83193 beta: beta,
83194 lambda: lambda,
83195 basis: basis
83196 };
83197 };
83198
83199 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
83200 // Find roots of for x^2 + x + 1 in F
83201 // Root = (-1 +- Sqrt(-3)) / 2
83202 //
83203 var red = num === this.p ? this.red : BN.mont(num);
83204 var tinv = new BN(2).toRed(red).redInvm();
83205 var ntinv = tinv.redNeg();
83206
83207 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
83208
83209 var l1 = ntinv.redAdd(s).fromRed();
83210 var l2 = ntinv.redSub(s).fromRed();
83211 return [ l1, l2 ];
83212 };
83213
83214 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
83215 // aprxSqrt >= sqrt(this.n)
83216 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
83217
83218 // 3.74
83219 // Run EGCD, until r(L + 1) < aprxSqrt
83220 var u = lambda;
83221 var v = this.n.clone();
83222 var x1 = new BN(1);
83223 var y1 = new BN(0);
83224 var x2 = new BN(0);
83225 var y2 = new BN(1);
83226
83227 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
83228 var a0;
83229 var b0;
83230 // First vector
83231 var a1;
83232 var b1;
83233 // Second vector
83234 var a2;
83235 var b2;
83236
83237 var prevR;
83238 var i = 0;
83239 var r;
83240 var x;
83241 while (u.cmpn(0) !== 0) {
83242 var q = v.div(u);
83243 r = v.sub(q.mul(u));
83244 x = x2.sub(q.mul(x1));
83245 var y = y2.sub(q.mul(y1));
83246
83247 if (!a1 && r.cmp(aprxSqrt) < 0) {
83248 a0 = prevR.neg();
83249 b0 = x1;
83250 a1 = r.neg();
83251 b1 = x;
83252 } else if (a1 && ++i === 2) {
83253 break;
83254 }
83255 prevR = r;
83256
83257 v = u;
83258 u = r;
83259 x2 = x1;
83260 x1 = x;
83261 y2 = y1;
83262 y1 = y;
83263 }
83264 a2 = r.neg();
83265 b2 = x;
83266
83267 var len1 = a1.sqr().add(b1.sqr());
83268 var len2 = a2.sqr().add(b2.sqr());
83269 if (len2.cmp(len1) >= 0) {
83270 a2 = a0;
83271 b2 = b0;
83272 }
83273
83274 // Normalize signs
83275 if (a1.negative) {
83276 a1 = a1.neg();
83277 b1 = b1.neg();
83278 }
83279 if (a2.negative) {
83280 a2 = a2.neg();
83281 b2 = b2.neg();
83282 }
83283
83284 return [
83285 { a: a1, b: b1 },
83286 { a: a2, b: b2 }
83287 ];
83288 };
83289
83290 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
83291 var basis = this.endo.basis;
83292 var v1 = basis[0];
83293 var v2 = basis[1];
83294
83295 var c1 = v2.b.mul(k).divRound(this.n);
83296 var c2 = v1.b.neg().mul(k).divRound(this.n);
83297
83298 var p1 = c1.mul(v1.a);
83299 var p2 = c2.mul(v2.a);
83300 var q1 = c1.mul(v1.b);
83301 var q2 = c2.mul(v2.b);
83302
83303 // Calculate answer
83304 var k1 = k.sub(p1).sub(p2);
83305 var k2 = q1.add(q2).neg();
83306 return { k1: k1, k2: k2 };
83307 };
83308
83309 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
83310 x = new BN(x, 16);
83311 if (!x.red)
83312 x = x.toRed(this.red);
83313
83314 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
83315 var y = y2.redSqrt();
83316 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
83317 throw new Error('invalid point');
83318
83319 // XXX Is there any way to tell if the number is odd without converting it
83320 // to non-red form?
83321 var isOdd = y.fromRed().isOdd();
83322 if (odd && !isOdd || !odd && isOdd)
83323 y = y.redNeg();
83324
83325 return this.point(x, y);
83326 };
83327
83328 ShortCurve.prototype.validate = function validate(point) {
83329 if (point.inf)
83330 return true;
83331
83332 var x = point.x;
83333 var y = point.y;
83334
83335 var ax = this.a.redMul(x);
83336 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
83337 return y.redSqr().redISub(rhs).cmpn(0) === 0;
83338 };
83339
83340 ShortCurve.prototype._endoWnafMulAdd =
83341 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
83342 var npoints = this._endoWnafT1;
83343 var ncoeffs = this._endoWnafT2;
83344 for (var i = 0; i < points.length; i++) {
83345 var split = this._endoSplit(coeffs[i]);
83346 var p = points[i];
83347 var beta = p._getBeta();
83348
83349 if (split.k1.negative) {
83350 split.k1.ineg();
83351 p = p.neg(true);
83352 }
83353 if (split.k2.negative) {
83354 split.k2.ineg();
83355 beta = beta.neg(true);
83356 }
83357
83358 npoints[i * 2] = p;
83359 npoints[i * 2 + 1] = beta;
83360 ncoeffs[i * 2] = split.k1;
83361 ncoeffs[i * 2 + 1] = split.k2;
83362 }
83363 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
83364
83365 // Clean-up references to points and coefficients
83366 for (var j = 0; j < i * 2; j++) {
83367 npoints[j] = null;
83368 ncoeffs[j] = null;
83369 }
83370 return res;
83371 };
83372
83373 function Point(curve, x, y, isRed) {
83374 Base.BasePoint.call(this, curve, 'affine');
83375 if (x === null && y === null) {
83376 this.x = null;
83377 this.y = null;
83378 this.inf = true;
83379 } else {
83380 this.x = new BN(x, 16);
83381 this.y = new BN(y, 16);
83382 // Force redgomery representation when loading from JSON
83383 if (isRed) {
83384 this.x.forceRed(this.curve.red);
83385 this.y.forceRed(this.curve.red);
83386 }
83387 if (!this.x.red)
83388 this.x = this.x.toRed(this.curve.red);
83389 if (!this.y.red)
83390 this.y = this.y.toRed(this.curve.red);
83391 this.inf = false;
83392 }
83393 }
83394 inherits(Point, Base.BasePoint);
83395
83396 ShortCurve.prototype.point = function point(x, y, isRed) {
83397 return new Point(this, x, y, isRed);
83398 };
83399
83400 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
83401 return Point.fromJSON(this, obj, red);
83402 };
83403
83404 Point.prototype._getBeta = function _getBeta() {
83405 if (!this.curve.endo)
83406 return;
83407
83408 var pre = this.precomputed;
83409 if (pre && pre.beta)
83410 return pre.beta;
83411
83412 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
83413 if (pre) {
83414 var curve = this.curve;
83415 var endoMul = function(p) {
83416 return curve.point(p.x.redMul(curve.endo.beta), p.y);
83417 };
83418 pre.beta = beta;
83419 beta.precomputed = {
83420 beta: null,
83421 naf: pre.naf && {
83422 wnd: pre.naf.wnd,
83423 points: pre.naf.points.map(endoMul)
83424 },
83425 doubles: pre.doubles && {
83426 step: pre.doubles.step,
83427 points: pre.doubles.points.map(endoMul)
83428 }
83429 };
83430 }
83431 return beta;
83432 };
83433
83434 Point.prototype.toJSON = function toJSON() {
83435 if (!this.precomputed)
83436 return [ this.x, this.y ];
83437
83438 return [ this.x, this.y, this.precomputed && {
83439 doubles: this.precomputed.doubles && {
83440 step: this.precomputed.doubles.step,
83441 points: this.precomputed.doubles.points.slice(1)
83442 },
83443 naf: this.precomputed.naf && {
83444 wnd: this.precomputed.naf.wnd,
83445 points: this.precomputed.naf.points.slice(1)
83446 }
83447 } ];
83448 };
83449
83450 Point.fromJSON = function fromJSON(curve, obj, red) {
83451 if (typeof obj === 'string')
83452 obj = JSON.parse(obj);
83453 var res = curve.point(obj[0], obj[1], red);
83454 if (!obj[2])
83455 return res;
83456
83457 function obj2point(obj) {
83458 return curve.point(obj[0], obj[1], red);
83459 }
83460
83461 var pre = obj[2];
83462 res.precomputed = {
83463 beta: null,
83464 doubles: pre.doubles && {
83465 step: pre.doubles.step,
83466 points: [ res ].concat(pre.doubles.points.map(obj2point))
83467 },
83468 naf: pre.naf && {
83469 wnd: pre.naf.wnd,
83470 points: [ res ].concat(pre.naf.points.map(obj2point))
83471 }
83472 };
83473 return res;
83474 };
83475
83476 Point.prototype.inspect = function inspect() {
83477 if (this.isInfinity())
83478 return '<EC Point Infinity>';
83479 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
83480 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
83481 };
83482
83483 Point.prototype.isInfinity = function isInfinity() {
83484 return this.inf;
83485 };
83486
83487 Point.prototype.add = function add(p) {
83488 // O + P = P
83489 if (this.inf)
83490 return p;
83491
83492 // P + O = P
83493 if (p.inf)
83494 return this;
83495
83496 // P + P = 2P
83497 if (this.eq(p))
83498 return this.dbl();
83499
83500 // P + (-P) = O
83501 if (this.neg().eq(p))
83502 return this.curve.point(null, null);
83503
83504 // P + Q = O
83505 if (this.x.cmp(p.x) === 0)
83506 return this.curve.point(null, null);
83507
83508 var c = this.y.redSub(p.y);
83509 if (c.cmpn(0) !== 0)
83510 c = c.redMul(this.x.redSub(p.x).redInvm());
83511 var nx = c.redSqr().redISub(this.x).redISub(p.x);
83512 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83513 return this.curve.point(nx, ny);
83514 };
83515
83516 Point.prototype.dbl = function dbl() {
83517 if (this.inf)
83518 return this;
83519
83520 // 2P = O
83521 var ys1 = this.y.redAdd(this.y);
83522 if (ys1.cmpn(0) === 0)
83523 return this.curve.point(null, null);
83524
83525 var a = this.curve.a;
83526
83527 var x2 = this.x.redSqr();
83528 var dyinv = ys1.redInvm();
83529 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
83530
83531 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
83532 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
83533 return this.curve.point(nx, ny);
83534 };
83535
83536 Point.prototype.getX = function getX() {
83537 return this.x.fromRed();
83538 };
83539
83540 Point.prototype.getY = function getY() {
83541 return this.y.fromRed();
83542 };
83543
83544 Point.prototype.mul = function mul(k) {
83545 k = new BN(k, 16);
83546
83547 if (this._hasDoubles(k))
83548 return this.curve._fixedNafMul(this, k);
83549 else if (this.curve.endo)
83550 return this.curve._endoWnafMulAdd([ this ], [ k ]);
83551 else
83552 return this.curve._wnafMul(this, k);
83553 };
83554
83555 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
83556 var points = [ this, p2 ];
83557 var coeffs = [ k1, k2 ];
83558 if (this.curve.endo)
83559 return this.curve._endoWnafMulAdd(points, coeffs);
83560 else
83561 return this.curve._wnafMulAdd(1, points, coeffs, 2);
83562 };
83563
83564 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
83565 var points = [ this, p2 ];
83566 var coeffs = [ k1, k2 ];
83567 if (this.curve.endo)
83568 return this.curve._endoWnafMulAdd(points, coeffs, true);
83569 else
83570 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
83571 };
83572
83573 Point.prototype.eq = function eq(p) {
83574 return this === p ||
83575 this.inf === p.inf &&
83576 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
83577 };
83578
83579 Point.prototype.neg = function neg(_precompute) {
83580 if (this.inf)
83581 return this;
83582
83583 var res = this.curve.point(this.x, this.y.redNeg());
83584 if (_precompute && this.precomputed) {
83585 var pre = this.precomputed;
83586 var negate = function(p) {
83587 return p.neg();
83588 };
83589 res.precomputed = {
83590 naf: pre.naf && {
83591 wnd: pre.naf.wnd,
83592 points: pre.naf.points.map(negate)
83593 },
83594 doubles: pre.doubles && {
83595 step: pre.doubles.step,
83596 points: pre.doubles.points.map(negate)
83597 }
83598 };
83599 }
83600 return res;
83601 };
83602
83603 Point.prototype.toJ = function toJ() {
83604 if (this.inf)
83605 return this.curve.jpoint(null, null, null);
83606
83607 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
83608 return res;
83609 };
83610
83611 function JPoint(curve, x, y, z) {
83612 Base.BasePoint.call(this, curve, 'jacobian');
83613 if (x === null && y === null && z === null) {
83614 this.x = this.curve.one;
83615 this.y = this.curve.one;
83616 this.z = new BN(0);
83617 } else {
83618 this.x = new BN(x, 16);
83619 this.y = new BN(y, 16);
83620 this.z = new BN(z, 16);
83621 }
83622 if (!this.x.red)
83623 this.x = this.x.toRed(this.curve.red);
83624 if (!this.y.red)
83625 this.y = this.y.toRed(this.curve.red);
83626 if (!this.z.red)
83627 this.z = this.z.toRed(this.curve.red);
83628
83629 this.zOne = this.z === this.curve.one;
83630 }
83631 inherits(JPoint, Base.BasePoint);
83632
83633 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
83634 return new JPoint(this, x, y, z);
83635 };
83636
83637 JPoint.prototype.toP = function toP() {
83638 if (this.isInfinity())
83639 return this.curve.point(null, null);
83640
83641 var zinv = this.z.redInvm();
83642 var zinv2 = zinv.redSqr();
83643 var ax = this.x.redMul(zinv2);
83644 var ay = this.y.redMul(zinv2).redMul(zinv);
83645
83646 return this.curve.point(ax, ay);
83647 };
83648
83649 JPoint.prototype.neg = function neg() {
83650 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
83651 };
83652
83653 JPoint.prototype.add = function add(p) {
83654 // O + P = P
83655 if (this.isInfinity())
83656 return p;
83657
83658 // P + O = P
83659 if (p.isInfinity())
83660 return this;
83661
83662 // 12M + 4S + 7A
83663 var pz2 = p.z.redSqr();
83664 var z2 = this.z.redSqr();
83665 var u1 = this.x.redMul(pz2);
83666 var u2 = p.x.redMul(z2);
83667 var s1 = this.y.redMul(pz2.redMul(p.z));
83668 var s2 = p.y.redMul(z2.redMul(this.z));
83669
83670 var h = u1.redSub(u2);
83671 var r = s1.redSub(s2);
83672 if (h.cmpn(0) === 0) {
83673 if (r.cmpn(0) !== 0)
83674 return this.curve.jpoint(null, null, null);
83675 else
83676 return this.dbl();
83677 }
83678
83679 var h2 = h.redSqr();
83680 var h3 = h2.redMul(h);
83681 var v = u1.redMul(h2);
83682
83683 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83684 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83685 var nz = this.z.redMul(p.z).redMul(h);
83686
83687 return this.curve.jpoint(nx, ny, nz);
83688 };
83689
83690 JPoint.prototype.mixedAdd = function mixedAdd(p) {
83691 // O + P = P
83692 if (this.isInfinity())
83693 return p.toJ();
83694
83695 // P + O = P
83696 if (p.isInfinity())
83697 return this;
83698
83699 // 8M + 3S + 7A
83700 var z2 = this.z.redSqr();
83701 var u1 = this.x;
83702 var u2 = p.x.redMul(z2);
83703 var s1 = this.y;
83704 var s2 = p.y.redMul(z2).redMul(this.z);
83705
83706 var h = u1.redSub(u2);
83707 var r = s1.redSub(s2);
83708 if (h.cmpn(0) === 0) {
83709 if (r.cmpn(0) !== 0)
83710 return this.curve.jpoint(null, null, null);
83711 else
83712 return this.dbl();
83713 }
83714
83715 var h2 = h.redSqr();
83716 var h3 = h2.redMul(h);
83717 var v = u1.redMul(h2);
83718
83719 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
83720 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
83721 var nz = this.z.redMul(h);
83722
83723 return this.curve.jpoint(nx, ny, nz);
83724 };
83725
83726 JPoint.prototype.dblp = function dblp(pow) {
83727 if (pow === 0)
83728 return this;
83729 if (this.isInfinity())
83730 return this;
83731 if (!pow)
83732 return this.dbl();
83733
83734 if (this.curve.zeroA || this.curve.threeA) {
83735 var r = this;
83736 for (var i = 0; i < pow; i++)
83737 r = r.dbl();
83738 return r;
83739 }
83740
83741 // 1M + 2S + 1A + N * (4S + 5M + 8A)
83742 // N = 1 => 6M + 6S + 9A
83743 var a = this.curve.a;
83744 var tinv = this.curve.tinv;
83745
83746 var jx = this.x;
83747 var jy = this.y;
83748 var jz = this.z;
83749 var jz4 = jz.redSqr().redSqr();
83750
83751 // Reuse results
83752 var jyd = jy.redAdd(jy);
83753 for (var i = 0; i < pow; i++) {
83754 var jx2 = jx.redSqr();
83755 var jyd2 = jyd.redSqr();
83756 var jyd4 = jyd2.redSqr();
83757 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83758
83759 var t1 = jx.redMul(jyd2);
83760 var nx = c.redSqr().redISub(t1.redAdd(t1));
83761 var t2 = t1.redISub(nx);
83762 var dny = c.redMul(t2);
83763 dny = dny.redIAdd(dny).redISub(jyd4);
83764 var nz = jyd.redMul(jz);
83765 if (i + 1 < pow)
83766 jz4 = jz4.redMul(jyd4);
83767
83768 jx = nx;
83769 jz = nz;
83770 jyd = dny;
83771 }
83772
83773 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
83774 };
83775
83776 JPoint.prototype.dbl = function dbl() {
83777 if (this.isInfinity())
83778 return this;
83779
83780 if (this.curve.zeroA)
83781 return this._zeroDbl();
83782 else if (this.curve.threeA)
83783 return this._threeDbl();
83784 else
83785 return this._dbl();
83786 };
83787
83788 JPoint.prototype._zeroDbl = function _zeroDbl() {
83789 var nx;
83790 var ny;
83791 var nz;
83792 // Z = 1
83793 if (this.zOne) {
83794 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83795 // #doubling-mdbl-2007-bl
83796 // 1M + 5S + 14A
83797
83798 // XX = X1^2
83799 var xx = this.x.redSqr();
83800 // YY = Y1^2
83801 var yy = this.y.redSqr();
83802 // YYYY = YY^2
83803 var yyyy = yy.redSqr();
83804 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83805 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83806 s = s.redIAdd(s);
83807 // M = 3 * XX + a; a = 0
83808 var m = xx.redAdd(xx).redIAdd(xx);
83809 // T = M ^ 2 - 2*S
83810 var t = m.redSqr().redISub(s).redISub(s);
83811
83812 // 8 * YYYY
83813 var yyyy8 = yyyy.redIAdd(yyyy);
83814 yyyy8 = yyyy8.redIAdd(yyyy8);
83815 yyyy8 = yyyy8.redIAdd(yyyy8);
83816
83817 // X3 = T
83818 nx = t;
83819 // Y3 = M * (S - T) - 8 * YYYY
83820 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83821 // Z3 = 2*Y1
83822 nz = this.y.redAdd(this.y);
83823 } else {
83824 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
83825 // #doubling-dbl-2009-l
83826 // 2M + 5S + 13A
83827
83828 // A = X1^2
83829 var a = this.x.redSqr();
83830 // B = Y1^2
83831 var b = this.y.redSqr();
83832 // C = B^2
83833 var c = b.redSqr();
83834 // D = 2 * ((X1 + B)^2 - A - C)
83835 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
83836 d = d.redIAdd(d);
83837 // E = 3 * A
83838 var e = a.redAdd(a).redIAdd(a);
83839 // F = E^2
83840 var f = e.redSqr();
83841
83842 // 8 * C
83843 var c8 = c.redIAdd(c);
83844 c8 = c8.redIAdd(c8);
83845 c8 = c8.redIAdd(c8);
83846
83847 // X3 = F - 2 * D
83848 nx = f.redISub(d).redISub(d);
83849 // Y3 = E * (D - X3) - 8 * C
83850 ny = e.redMul(d.redISub(nx)).redISub(c8);
83851 // Z3 = 2 * Y1 * Z1
83852 nz = this.y.redMul(this.z);
83853 nz = nz.redIAdd(nz);
83854 }
83855
83856 return this.curve.jpoint(nx, ny, nz);
83857 };
83858
83859 JPoint.prototype._threeDbl = function _threeDbl() {
83860 var nx;
83861 var ny;
83862 var nz;
83863 // Z = 1
83864 if (this.zOne) {
83865 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
83866 // #doubling-mdbl-2007-bl
83867 // 1M + 5S + 15A
83868
83869 // XX = X1^2
83870 var xx = this.x.redSqr();
83871 // YY = Y1^2
83872 var yy = this.y.redSqr();
83873 // YYYY = YY^2
83874 var yyyy = yy.redSqr();
83875 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
83876 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83877 s = s.redIAdd(s);
83878 // M = 3 * XX + a
83879 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
83880 // T = M^2 - 2 * S
83881 var t = m.redSqr().redISub(s).redISub(s);
83882 // X3 = T
83883 nx = t;
83884 // Y3 = M * (S - T) - 8 * YYYY
83885 var yyyy8 = yyyy.redIAdd(yyyy);
83886 yyyy8 = yyyy8.redIAdd(yyyy8);
83887 yyyy8 = yyyy8.redIAdd(yyyy8);
83888 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
83889 // Z3 = 2 * Y1
83890 nz = this.y.redAdd(this.y);
83891 } else {
83892 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
83893 // 3M + 5S
83894
83895 // delta = Z1^2
83896 var delta = this.z.redSqr();
83897 // gamma = Y1^2
83898 var gamma = this.y.redSqr();
83899 // beta = X1 * gamma
83900 var beta = this.x.redMul(gamma);
83901 // alpha = 3 * (X1 - delta) * (X1 + delta)
83902 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
83903 alpha = alpha.redAdd(alpha).redIAdd(alpha);
83904 // X3 = alpha^2 - 8 * beta
83905 var beta4 = beta.redIAdd(beta);
83906 beta4 = beta4.redIAdd(beta4);
83907 var beta8 = beta4.redAdd(beta4);
83908 nx = alpha.redSqr().redISub(beta8);
83909 // Z3 = (Y1 + Z1)^2 - gamma - delta
83910 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
83911 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
83912 var ggamma8 = gamma.redSqr();
83913 ggamma8 = ggamma8.redIAdd(ggamma8);
83914 ggamma8 = ggamma8.redIAdd(ggamma8);
83915 ggamma8 = ggamma8.redIAdd(ggamma8);
83916 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
83917 }
83918
83919 return this.curve.jpoint(nx, ny, nz);
83920 };
83921
83922 JPoint.prototype._dbl = function _dbl() {
83923 var a = this.curve.a;
83924
83925 // 4M + 6S + 10A
83926 var jx = this.x;
83927 var jy = this.y;
83928 var jz = this.z;
83929 var jz4 = jz.redSqr().redSqr();
83930
83931 var jx2 = jx.redSqr();
83932 var jy2 = jy.redSqr();
83933
83934 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
83935
83936 var jxd4 = jx.redAdd(jx);
83937 jxd4 = jxd4.redIAdd(jxd4);
83938 var t1 = jxd4.redMul(jy2);
83939 var nx = c.redSqr().redISub(t1.redAdd(t1));
83940 var t2 = t1.redISub(nx);
83941
83942 var jyd8 = jy2.redSqr();
83943 jyd8 = jyd8.redIAdd(jyd8);
83944 jyd8 = jyd8.redIAdd(jyd8);
83945 jyd8 = jyd8.redIAdd(jyd8);
83946 var ny = c.redMul(t2).redISub(jyd8);
83947 var nz = jy.redAdd(jy).redMul(jz);
83948
83949 return this.curve.jpoint(nx, ny, nz);
83950 };
83951
83952 JPoint.prototype.trpl = function trpl() {
83953 if (!this.curve.zeroA)
83954 return this.dbl().add(this);
83955
83956 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
83957 // 5M + 10S + ...
83958
83959 // XX = X1^2
83960 var xx = this.x.redSqr();
83961 // YY = Y1^2
83962 var yy = this.y.redSqr();
83963 // ZZ = Z1^2
83964 var zz = this.z.redSqr();
83965 // YYYY = YY^2
83966 var yyyy = yy.redSqr();
83967 // M = 3 * XX + a * ZZ2; a = 0
83968 var m = xx.redAdd(xx).redIAdd(xx);
83969 // MM = M^2
83970 var mm = m.redSqr();
83971 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
83972 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
83973 e = e.redIAdd(e);
83974 e = e.redAdd(e).redIAdd(e);
83975 e = e.redISub(mm);
83976 // EE = E^2
83977 var ee = e.redSqr();
83978 // T = 16*YYYY
83979 var t = yyyy.redIAdd(yyyy);
83980 t = t.redIAdd(t);
83981 t = t.redIAdd(t);
83982 t = t.redIAdd(t);
83983 // U = (M + E)^2 - MM - EE - T
83984 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
83985 // X3 = 4 * (X1 * EE - 4 * YY * U)
83986 var yyu4 = yy.redMul(u);
83987 yyu4 = yyu4.redIAdd(yyu4);
83988 yyu4 = yyu4.redIAdd(yyu4);
83989 var nx = this.x.redMul(ee).redISub(yyu4);
83990 nx = nx.redIAdd(nx);
83991 nx = nx.redIAdd(nx);
83992 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
83993 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
83994 ny = ny.redIAdd(ny);
83995 ny = ny.redIAdd(ny);
83996 ny = ny.redIAdd(ny);
83997 // Z3 = (Z1 + E)^2 - ZZ - EE
83998 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
83999
84000 return this.curve.jpoint(nx, ny, nz);
84001 };
84002
84003 JPoint.prototype.mul = function mul(k, kbase) {
84004 k = new BN(k, kbase);
84005
84006 return this.curve._wnafMul(this, k);
84007 };
84008
84009 JPoint.prototype.eq = function eq(p) {
84010 if (p.type === 'affine')
84011 return this.eq(p.toJ());
84012
84013 if (this === p)
84014 return true;
84015
84016 // x1 * z2^2 == x2 * z1^2
84017 var z2 = this.z.redSqr();
84018 var pz2 = p.z.redSqr();
84019 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
84020 return false;
84021
84022 // y1 * z2^3 == y2 * z1^3
84023 var z3 = z2.redMul(this.z);
84024 var pz3 = pz2.redMul(p.z);
84025 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
84026 };
84027
84028 JPoint.prototype.eqXToP = function eqXToP(x) {
84029 var zs = this.z.redSqr();
84030 var rx = x.toRed(this.curve.red).redMul(zs);
84031 if (this.x.cmp(rx) === 0)
84032 return true;
84033
84034 var xc = x.clone();
84035 var t = this.curve.redN.redMul(zs);
84036 for (;;) {
84037 xc.iadd(this.curve.n);
84038 if (xc.cmp(this.curve.p) >= 0)
84039 return false;
84040
84041 rx.redIAdd(t);
84042 if (this.x.cmp(rx) === 0)
84043 return true;
84044 }
84045 return false;
84046 };
84047
84048 JPoint.prototype.inspect = function inspect() {
84049 if (this.isInfinity())
84050 return '<EC JPoint Infinity>';
84051 return '<EC JPoint x: ' + this.x.toString(16, 2) +
84052 ' y: ' + this.y.toString(16, 2) +
84053 ' z: ' + this.z.toString(16, 2) + '>';
84054 };
84055
84056 JPoint.prototype.isInfinity = function isInfinity() {
84057 // XXX This code assumes that zero is always zero in red
84058 return this.z.cmpn(0) === 0;
84059 };
84060
84061 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
84062 'use strict';
84063
84064 var curves = exports;
84065
84066 var hash = require('hash.js');
84067 var elliptic = require('../elliptic');
84068
84069 var assert = elliptic.utils.assert;
84070
84071 function PresetCurve(options) {
84072 if (options.type === 'short')
84073 this.curve = new elliptic.curve.short(options);
84074 else if (options.type === 'edwards')
84075 this.curve = new elliptic.curve.edwards(options);
84076 else
84077 this.curve = new elliptic.curve.mont(options);
84078 this.g = this.curve.g;
84079 this.n = this.curve.n;
84080 this.hash = options.hash;
84081
84082 assert(this.g.validate(), 'Invalid curve');
84083 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
84084 }
84085 curves.PresetCurve = PresetCurve;
84086
84087 function defineCurve(name, options) {
84088 Object.defineProperty(curves, name, {
84089 configurable: true,
84090 enumerable: true,
84091 get: function() {
84092 var curve = new PresetCurve(options);
84093 Object.defineProperty(curves, name, {
84094 configurable: true,
84095 enumerable: true,
84096 value: curve
84097 });
84098 return curve;
84099 }
84100 });
84101 }
84102
84103 defineCurve('p192', {
84104 type: 'short',
84105 prime: 'p192',
84106 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
84107 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
84108 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
84109 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
84110 hash: hash.sha256,
84111 gRed: false,
84112 g: [
84113 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
84114 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
84115 ]
84116 });
84117
84118 defineCurve('p224', {
84119 type: 'short',
84120 prime: 'p224',
84121 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
84122 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
84123 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
84124 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
84125 hash: hash.sha256,
84126 gRed: false,
84127 g: [
84128 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
84129 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
84130 ]
84131 });
84132
84133 defineCurve('p256', {
84134 type: 'short',
84135 prime: null,
84136 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
84137 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
84138 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
84139 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
84140 hash: hash.sha256,
84141 gRed: false,
84142 g: [
84143 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
84144 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
84145 ]
84146 });
84147
84148 defineCurve('p384', {
84149 type: 'short',
84150 prime: null,
84151 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84152 'fffffffe ffffffff 00000000 00000000 ffffffff',
84153 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84154 'fffffffe ffffffff 00000000 00000000 fffffffc',
84155 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
84156 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
84157 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
84158 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
84159 hash: hash.sha384,
84160 gRed: false,
84161 g: [
84162 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
84163 '5502f25d bf55296c 3a545e38 72760ab7',
84164 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
84165 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
84166 ]
84167 });
84168
84169 defineCurve('p521', {
84170 type: 'short',
84171 prime: null,
84172 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84173 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84174 'ffffffff ffffffff ffffffff ffffffff ffffffff',
84175 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84176 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84177 'ffffffff ffffffff ffffffff ffffffff fffffffc',
84178 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
84179 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
84180 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
84181 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
84182 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
84183 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
84184 hash: hash.sha512,
84185 gRed: false,
84186 g: [
84187 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
84188 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
84189 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
84190 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
84191 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
84192 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
84193 ]
84194 });
84195
84196 defineCurve('curve25519', {
84197 type: 'mont',
84198 prime: 'p25519',
84199 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84200 a: '76d06',
84201 b: '1',
84202 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84203 hash: hash.sha256,
84204 gRed: false,
84205 g: [
84206 '9'
84207 ]
84208 });
84209
84210 defineCurve('ed25519', {
84211 type: 'edwards',
84212 prime: 'p25519',
84213 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
84214 a: '-1',
84215 c: '1',
84216 // -121665 * (121666^(-1)) (mod P)
84217 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
84218 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
84219 hash: hash.sha256,
84220 gRed: false,
84221 g: [
84222 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
84223
84224 // 4/5
84225 '6666666666666666666666666666666666666666666666666666666666666658'
84226 ]
84227 });
84228
84229 var pre;
84230 try {
84231 pre = require('./precomputed/secp256k1');
84232 } catch (e) {
84233 pre = undefined;
84234 }
84235
84236 defineCurve('secp256k1', {
84237 type: 'short',
84238 prime: 'k256',
84239 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
84240 a: '0',
84241 b: '7',
84242 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
84243 h: '1',
84244 hash: hash.sha256,
84245
84246 // Precomputed endomorphism
84247 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
84248 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
84249 basis: [
84250 {
84251 a: '3086d221a7d46bcde86c90e49284eb15',
84252 b: '-e4437ed6010e88286f547fa90abfe4c3'
84253 },
84254 {
84255 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
84256 b: '3086d221a7d46bcde86c90e49284eb15'
84257 }
84258 ],
84259
84260 gRed: false,
84261 g: [
84262 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
84263 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
84264 pre
84265 ]
84266 });
84267
84268 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
84269 'use strict';
84270
84271 var BN = require('bn.js');
84272 var elliptic = require('../../elliptic');
84273 var utils = elliptic.utils;
84274 var assert = utils.assert;
84275
84276 var KeyPair = require('./key');
84277 var Signature = require('./signature');
84278
84279 function EC(options) {
84280 if (!(this instanceof EC))
84281 return new EC(options);
84282
84283 // Shortcut `elliptic.ec(curve-name)`
84284 if (typeof options === 'string') {
84285 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
84286
84287 options = elliptic.curves[options];
84288 }
84289
84290 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
84291 if (options instanceof elliptic.curves.PresetCurve)
84292 options = { curve: options };
84293
84294 this.curve = options.curve.curve;
84295 this.n = this.curve.n;
84296 this.nh = this.n.ushrn(1);
84297 this.g = this.curve.g;
84298
84299 // Point on curve
84300 this.g = options.curve.g;
84301 this.g.precompute(options.curve.n.bitLength() + 1);
84302
84303 // Hash for function for DRBG
84304 this.hash = options.hash || options.curve.hash;
84305 }
84306 module.exports = EC;
84307
84308 EC.prototype.keyPair = function keyPair(options) {
84309 return new KeyPair(this, options);
84310 };
84311
84312 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
84313 return KeyPair.fromPrivate(this, priv, enc);
84314 };
84315
84316 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
84317 return KeyPair.fromPublic(this, pub, enc);
84318 };
84319
84320 EC.prototype.genKeyPair = function genKeyPair(options) {
84321 if (!options)
84322 options = {};
84323
84324 // Instantiate Hmac_DRBG
84325 var drbg = new elliptic.hmacDRBG({
84326 hash: this.hash,
84327 pers: options.pers,
84328 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
84329 nonce: this.n.toArray()
84330 });
84331
84332 var bytes = this.n.byteLength();
84333 var ns2 = this.n.sub(new BN(2));
84334 do {
84335 var priv = new BN(drbg.generate(bytes));
84336 if (priv.cmp(ns2) > 0)
84337 continue;
84338
84339 priv.iaddn(1);
84340 return this.keyFromPrivate(priv);
84341 } while (true);
84342 };
84343
84344 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
84345 var delta = msg.byteLength() * 8 - this.n.bitLength();
84346 if (delta > 0)
84347 msg = msg.ushrn(delta);
84348 if (!truncOnly && msg.cmp(this.n) >= 0)
84349 return msg.sub(this.n);
84350 else
84351 return msg;
84352 };
84353
84354 EC.prototype.sign = function sign(msg, key, enc, options) {
84355 if (typeof enc === 'object') {
84356 options = enc;
84357 enc = null;
84358 }
84359 if (!options)
84360 options = {};
84361
84362 key = this.keyFromPrivate(key, enc);
84363 msg = this._truncateToN(new BN(msg, 16));
84364
84365 // Zero-extend key to provide enough entropy
84366 var bytes = this.n.byteLength();
84367 var bkey = key.getPrivate().toArray('be', bytes);
84368
84369 // Zero-extend nonce to have the same byte size as N
84370 var nonce = msg.toArray('be', bytes);
84371
84372 // Instantiate Hmac_DRBG
84373 var drbg = new elliptic.hmacDRBG({
84374 hash: this.hash,
84375 entropy: bkey,
84376 nonce: nonce,
84377 pers: options.pers,
84378 persEnc: options.persEnc
84379 });
84380
84381 // Number of bytes to generate
84382 var ns1 = this.n.sub(new BN(1));
84383
84384 for (var iter = 0; true; iter++) {
84385 var k = options.k ?
84386 options.k(iter) :
84387 new BN(drbg.generate(this.n.byteLength()));
84388 k = this._truncateToN(k, true);
84389 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
84390 continue;
84391
84392 var kp = this.g.mul(k);
84393 if (kp.isInfinity())
84394 continue;
84395
84396 var kpX = kp.getX();
84397 var r = kpX.umod(this.n);
84398 if (r.cmpn(0) === 0)
84399 continue;
84400
84401 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
84402 s = s.umod(this.n);
84403 if (s.cmpn(0) === 0)
84404 continue;
84405
84406 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
84407 (kpX.cmp(r) !== 0 ? 2 : 0);
84408
84409 // Use complement of `s`, if it is > `n / 2`
84410 if (options.canonical && s.cmp(this.nh) > 0) {
84411 s = this.n.sub(s);
84412 recoveryParam ^= 1;
84413 }
84414
84415 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
84416 }
84417 };
84418
84419 EC.prototype.verify = function verify(msg, signature, key, enc) {
84420 msg = this._truncateToN(new BN(msg, 16));
84421 key = this.keyFromPublic(key, enc);
84422 signature = new Signature(signature, 'hex');
84423
84424 // Perform primitive values validation
84425 var r = signature.r;
84426 var s = signature.s;
84427 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
84428 return false;
84429 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
84430 return false;
84431
84432 // Validate signature
84433 var sinv = s.invm(this.n);
84434 var u1 = sinv.mul(msg).umod(this.n);
84435 var u2 = sinv.mul(r).umod(this.n);
84436
84437 if (!this.curve._maxwellTrick) {
84438 var p = this.g.mulAdd(u1, key.getPublic(), u2);
84439 if (p.isInfinity())
84440 return false;
84441
84442 return p.getX().umod(this.n).cmp(r) === 0;
84443 }
84444
84445 // NOTE: Greg Maxwell's trick, inspired by:
84446 // https://git.io/vad3K
84447
84448 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
84449 if (p.isInfinity())
84450 return false;
84451
84452 // Compare `p.x` of Jacobian point with `r`,
84453 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
84454 // inverse of `p.z^2`
84455 return p.eqXToP(r);
84456 };
84457
84458 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
84459 assert((3 & j) === j, 'The recovery param is more than two bits');
84460 signature = new Signature(signature, enc);
84461
84462 var n = this.n;
84463 var e = new BN(msg);
84464 var r = signature.r;
84465 var s = signature.s;
84466
84467 // A set LSB signifies that the y-coordinate is odd
84468 var isYOdd = j & 1;
84469 var isSecondKey = j >> 1;
84470 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
84471 throw new Error('Unable to find sencond key candinate');
84472
84473 // 1.1. Let x = r + jn.
84474 if (isSecondKey)
84475 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
84476 else
84477 r = this.curve.pointFromX(r, isYOdd);
84478
84479 var rInv = signature.r.invm(n);
84480 var s1 = n.sub(e).mul(rInv).umod(n);
84481 var s2 = s.mul(rInv).umod(n);
84482
84483 // 1.6.1 Compute Q = r^-1 (sR - eG)
84484 // Q = r^-1 (sR + -eG)
84485 return this.g.mulAdd(s1, r, s2);
84486 };
84487
84488 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
84489 signature = new Signature(signature, enc);
84490 if (signature.recoveryParam !== null)
84491 return signature.recoveryParam;
84492
84493 for (var i = 0; i < 4; i++) {
84494 var Qprime;
84495 try {
84496 Qprime = this.recoverPubKey(e, signature, i);
84497 } catch (e) {
84498 continue;
84499 }
84500
84501 if (Qprime.eq(Q))
84502 return i;
84503 }
84504 throw new Error('Unable to find valid recovery factor');
84505 };
84506
84507 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
84508 'use strict';
84509
84510 var BN = require('bn.js');
84511 var elliptic = require('../../elliptic');
84512 var utils = elliptic.utils;
84513 var assert = utils.assert;
84514
84515 function KeyPair(ec, options) {
84516 this.ec = ec;
84517 this.priv = null;
84518 this.pub = null;
84519
84520 // KeyPair(ec, { priv: ..., pub: ... })
84521 if (options.priv)
84522 this._importPrivate(options.priv, options.privEnc);
84523 if (options.pub)
84524 this._importPublic(options.pub, options.pubEnc);
84525 }
84526 module.exports = KeyPair;
84527
84528 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
84529 if (pub instanceof KeyPair)
84530 return pub;
84531
84532 return new KeyPair(ec, {
84533 pub: pub,
84534 pubEnc: enc
84535 });
84536 };
84537
84538 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
84539 if (priv instanceof KeyPair)
84540 return priv;
84541
84542 return new KeyPair(ec, {
84543 priv: priv,
84544 privEnc: enc
84545 });
84546 };
84547
84548 KeyPair.prototype.validate = function validate() {
84549 var pub = this.getPublic();
84550
84551 if (pub.isInfinity())
84552 return { result: false, reason: 'Invalid public key' };
84553 if (!pub.validate())
84554 return { result: false, reason: 'Public key is not a point' };
84555 if (!pub.mul(this.ec.curve.n).isInfinity())
84556 return { result: false, reason: 'Public key * N != O' };
84557
84558 return { result: true, reason: null };
84559 };
84560
84561 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
84562 // compact is optional argument
84563 if (typeof compact === 'string') {
84564 enc = compact;
84565 compact = null;
84566 }
84567
84568 if (!this.pub)
84569 this.pub = this.ec.g.mul(this.priv);
84570
84571 if (!enc)
84572 return this.pub;
84573
84574 return this.pub.encode(enc, compact);
84575 };
84576
84577 KeyPair.prototype.getPrivate = function getPrivate(enc) {
84578 if (enc === 'hex')
84579 return this.priv.toString(16, 2);
84580 else
84581 return this.priv;
84582 };
84583
84584 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
84585 this.priv = new BN(key, enc || 16);
84586
84587 // Ensure that the priv won't be bigger than n, otherwise we may fail
84588 // in fixed multiplication method
84589 this.priv = this.priv.umod(this.ec.curve.n);
84590 };
84591
84592 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
84593 if (key.x || key.y) {
84594 // Montgomery points only have an `x` coordinate.
84595 // Weierstrass/Edwards points on the other hand have both `x` and
84596 // `y` coordinates.
84597 if (this.ec.curve.type === 'mont') {
84598 assert(key.x, 'Need x coordinate');
84599 } else if (this.ec.curve.type === 'short' ||
84600 this.ec.curve.type === 'edwards') {
84601 assert(key.x && key.y, 'Need both x and y coordinate');
84602 }
84603 this.pub = this.ec.curve.point(key.x, key.y);
84604 return;
84605 }
84606 this.pub = this.ec.curve.decodePoint(key, enc);
84607 };
84608
84609 // ECDH
84610 KeyPair.prototype.derive = function derive(pub) {
84611 return pub.mul(this.priv).getX();
84612 };
84613
84614 // ECDSA
84615 KeyPair.prototype.sign = function sign(msg, enc, options) {
84616 return this.ec.sign(msg, this, enc, options);
84617 };
84618
84619 KeyPair.prototype.verify = function verify(msg, signature) {
84620 return this.ec.verify(msg, signature, this);
84621 };
84622
84623 KeyPair.prototype.inspect = function inspect() {
84624 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
84625 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
84626 };
84627
84628 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
84629 'use strict';
84630
84631 var BN = require('bn.js');
84632
84633 var elliptic = require('../../elliptic');
84634 var utils = elliptic.utils;
84635 var assert = utils.assert;
84636
84637 function Signature(options, enc) {
84638 if (options instanceof Signature)
84639 return options;
84640
84641 if (this._importDER(options, enc))
84642 return;
84643
84644 assert(options.r && options.s, 'Signature without r or s');
84645 this.r = new BN(options.r, 16);
84646 this.s = new BN(options.s, 16);
84647 if (options.recoveryParam === undefined)
84648 this.recoveryParam = null;
84649 else
84650 this.recoveryParam = options.recoveryParam;
84651 }
84652 module.exports = Signature;
84653
84654 function Position() {
84655 this.place = 0;
84656 }
84657
84658 function getLength(buf, p) {
84659 var initial = buf[p.place++];
84660 if (!(initial & 0x80)) {
84661 return initial;
84662 }
84663 var octetLen = initial & 0xf;
84664 var val = 0;
84665 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
84666 val <<= 8;
84667 val |= buf[off];
84668 }
84669 p.place = off;
84670 return val;
84671 }
84672
84673 function rmPadding(buf) {
84674 var i = 0;
84675 var len = buf.length - 1;
84676 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
84677 i++;
84678 }
84679 if (i === 0) {
84680 return buf;
84681 }
84682 return buf.slice(i);
84683 }
84684
84685 Signature.prototype._importDER = function _importDER(data, enc) {
84686 data = utils.toArray(data, enc);
84687 var p = new Position();
84688 if (data[p.place++] !== 0x30) {
84689 return false;
84690 }
84691 var len = getLength(data, p);
84692 if ((len + p.place) !== data.length) {
84693 return false;
84694 }
84695 if (data[p.place++] !== 0x02) {
84696 return false;
84697 }
84698 var rlen = getLength(data, p);
84699 var r = data.slice(p.place, rlen + p.place);
84700 p.place += rlen;
84701 if (data[p.place++] !== 0x02) {
84702 return false;
84703 }
84704 var slen = getLength(data, p);
84705 if (data.length !== slen + p.place) {
84706 return false;
84707 }
84708 var s = data.slice(p.place, slen + p.place);
84709 if (r[0] === 0 && (r[1] & 0x80)) {
84710 r = r.slice(1);
84711 }
84712 if (s[0] === 0 && (s[1] & 0x80)) {
84713 s = s.slice(1);
84714 }
84715
84716 this.r = new BN(r);
84717 this.s = new BN(s);
84718 this.recoveryParam = null;
84719
84720 return true;
84721 };
84722
84723 function constructLength(arr, len) {
84724 if (len < 0x80) {
84725 arr.push(len);
84726 return;
84727 }
84728 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
84729 arr.push(octets | 0x80);
84730 while (--octets) {
84731 arr.push((len >>> (octets << 3)) & 0xff);
84732 }
84733 arr.push(len);
84734 }
84735
84736 Signature.prototype.toDER = function toDER(enc) {
84737 var r = this.r.toArray();
84738 var s = this.s.toArray();
84739
84740 // Pad values
84741 if (r[0] & 0x80)
84742 r = [ 0 ].concat(r);
84743 // Pad values
84744 if (s[0] & 0x80)
84745 s = [ 0 ].concat(s);
84746
84747 r = rmPadding(r);
84748 s = rmPadding(s);
84749
84750 while (!s[0] && !(s[1] & 0x80)) {
84751 s = s.slice(1);
84752 }
84753 var arr = [ 0x02 ];
84754 constructLength(arr, r.length);
84755 arr = arr.concat(r);
84756 arr.push(0x02);
84757 constructLength(arr, s.length);
84758 var backHalf = arr.concat(s);
84759 var res = [ 0x30 ];
84760 constructLength(res, backHalf.length);
84761 res = res.concat(backHalf);
84762 return utils.encode(res, enc);
84763 };
84764
84765 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
84766 'use strict';
84767
84768 var hash = require('hash.js');
84769 var elliptic = require('../../elliptic');
84770 var utils = elliptic.utils;
84771 var assert = utils.assert;
84772 var parseBytes = utils.parseBytes;
84773 var KeyPair = require('./key');
84774 var Signature = require('./signature');
84775
84776 function EDDSA(curve) {
84777 assert(curve === 'ed25519', 'only tested with ed25519 so far');
84778
84779 if (!(this instanceof EDDSA))
84780 return new EDDSA(curve);
84781
84782 var curve = elliptic.curves[curve].curve;
84783 this.curve = curve;
84784 this.g = curve.g;
84785 this.g.precompute(curve.n.bitLength() + 1);
84786
84787 this.pointClass = curve.point().constructor;
84788 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
84789 this.hash = hash.sha512;
84790 }
84791
84792 module.exports = EDDSA;
84793
84794 /**
84795 * @param {Array|String} message - message bytes
84796 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
84797 * @returns {Signature} - signature
84798 */
84799 EDDSA.prototype.sign = function sign(message, secret) {
84800 message = parseBytes(message);
84801 var key = this.keyFromSecret(secret);
84802 var r = this.hashInt(key.messagePrefix(), message);
84803 var R = this.g.mul(r);
84804 var Rencoded = this.encodePoint(R);
84805 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
84806 .mul(key.priv());
84807 var S = r.add(s_).umod(this.curve.n);
84808 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
84809 };
84810
84811 /**
84812 * @param {Array} message - message bytes
84813 * @param {Array|String|Signature} sig - sig bytes
84814 * @param {Array|String|Point|KeyPair} pub - public key
84815 * @returns {Boolean} - true if public key matches sig of message
84816 */
84817 EDDSA.prototype.verify = function verify(message, sig, pub) {
84818 message = parseBytes(message);
84819 sig = this.makeSignature(sig);
84820 var key = this.keyFromPublic(pub);
84821 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
84822 var SG = this.g.mul(sig.S());
84823 var RplusAh = sig.R().add(key.pub().mul(h));
84824 return RplusAh.eq(SG);
84825 };
84826
84827 EDDSA.prototype.hashInt = function hashInt() {
84828 var hash = this.hash();
84829 for (var i = 0; i < arguments.length; i++)
84830 hash.update(arguments[i]);
84831 return utils.intFromLE(hash.digest()).umod(this.curve.n);
84832 };
84833
84834 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
84835 return KeyPair.fromPublic(this, pub);
84836 };
84837
84838 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
84839 return KeyPair.fromSecret(this, secret);
84840 };
84841
84842 EDDSA.prototype.makeSignature = function makeSignature(sig) {
84843 if (sig instanceof Signature)
84844 return sig;
84845 return new Signature(this, sig);
84846 };
84847
84848 /**
84849 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
84850 *
84851 * EDDSA defines methods for encoding and decoding points and integers. These are
84852 * helper convenience methods, that pass along to utility functions implied
84853 * parameters.
84854 *
84855 */
84856 EDDSA.prototype.encodePoint = function encodePoint(point) {
84857 var enc = point.getY().toArray('le', this.encodingLength);
84858 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
84859 return enc;
84860 };
84861
84862 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
84863 bytes = utils.parseBytes(bytes);
84864
84865 var lastIx = bytes.length - 1;
84866 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
84867 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
84868
84869 var y = utils.intFromLE(normed);
84870 return this.curve.pointFromY(y, xIsOdd);
84871 };
84872
84873 EDDSA.prototype.encodeInt = function encodeInt(num) {
84874 return num.toArray('le', this.encodingLength);
84875 };
84876
84877 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
84878 return utils.intFromLE(bytes);
84879 };
84880
84881 EDDSA.prototype.isPoint = function isPoint(val) {
84882 return val instanceof this.pointClass;
84883 };
84884
84885 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
84886 'use strict';
84887
84888 var elliptic = require('../../elliptic');
84889 var utils = elliptic.utils;
84890 var assert = utils.assert;
84891 var parseBytes = utils.parseBytes;
84892 var cachedProperty = utils.cachedProperty;
84893
84894 /**
84895 * @param {EDDSA} eddsa - instance
84896 * @param {Object} params - public/private key parameters
84897 *
84898 * @param {Array<Byte>} [params.secret] - secret seed bytes
84899 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
84900 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
84901 *
84902 */
84903 function KeyPair(eddsa, params) {
84904 this.eddsa = eddsa;
84905 this._secret = parseBytes(params.secret);
84906 if (eddsa.isPoint(params.pub))
84907 this._pub = params.pub;
84908 else
84909 this._pubBytes = parseBytes(params.pub);
84910 }
84911
84912 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
84913 if (pub instanceof KeyPair)
84914 return pub;
84915 return new KeyPair(eddsa, { pub: pub });
84916 };
84917
84918 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
84919 if (secret instanceof KeyPair)
84920 return secret;
84921 return new KeyPair(eddsa, { secret: secret });
84922 };
84923
84924 KeyPair.prototype.secret = function secret() {
84925 return this._secret;
84926 };
84927
84928 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
84929 return this.eddsa.encodePoint(this.pub());
84930 });
84931
84932 cachedProperty(KeyPair, 'pub', function pub() {
84933 if (this._pubBytes)
84934 return this.eddsa.decodePoint(this._pubBytes);
84935 return this.eddsa.g.mul(this.priv());
84936 });
84937
84938 cachedProperty(KeyPair, 'privBytes', function privBytes() {
84939 var eddsa = this.eddsa;
84940 var hash = this.hash();
84941 var lastIx = eddsa.encodingLength - 1;
84942
84943 var a = hash.slice(0, eddsa.encodingLength);
84944 a[0] &= 248;
84945 a[lastIx] &= 127;
84946 a[lastIx] |= 64;
84947
84948 return a;
84949 });
84950
84951 cachedProperty(KeyPair, 'priv', function priv() {
84952 return this.eddsa.decodeInt(this.privBytes());
84953 });
84954
84955 cachedProperty(KeyPair, 'hash', function hash() {
84956 return this.eddsa.hash().update(this.secret()).digest();
84957 });
84958
84959 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
84960 return this.hash().slice(this.eddsa.encodingLength);
84961 });
84962
84963 KeyPair.prototype.sign = function sign(message) {
84964 assert(this._secret, 'KeyPair can only verify');
84965 return this.eddsa.sign(message, this);
84966 };
84967
84968 KeyPair.prototype.verify = function verify(message, sig) {
84969 return this.eddsa.verify(message, sig, this);
84970 };
84971
84972 KeyPair.prototype.getSecret = function getSecret(enc) {
84973 assert(this._secret, 'KeyPair is public only');
84974 return utils.encode(this.secret(), enc);
84975 };
84976
84977 KeyPair.prototype.getPublic = function getPublic(enc) {
84978 return utils.encode(this.pubBytes(), enc);
84979 };
84980
84981 module.exports = KeyPair;
84982
84983 },{"../../elliptic":39}],51:[function(require,module,exports){
84984 'use strict';
84985
84986 var BN = require('bn.js');
84987 var elliptic = require('../../elliptic');
84988 var utils = elliptic.utils;
84989 var assert = utils.assert;
84990 var cachedProperty = utils.cachedProperty;
84991 var parseBytes = utils.parseBytes;
84992
84993 /**
84994 * @param {EDDSA} eddsa - eddsa instance
84995 * @param {Array<Bytes>|Object} sig -
84996 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
84997 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
84998 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
84999 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
85000 */
85001 function Signature(eddsa, sig) {
85002 this.eddsa = eddsa;
85003
85004 if (typeof sig !== 'object')
85005 sig = parseBytes(sig);
85006
85007 if (Array.isArray(sig)) {
85008 sig = {
85009 R: sig.slice(0, eddsa.encodingLength),
85010 S: sig.slice(eddsa.encodingLength)
85011 };
85012 }
85013
85014 assert(sig.R && sig.S, 'Signature without R or S');
85015
85016 if (eddsa.isPoint(sig.R))
85017 this._R = sig.R;
85018 if (sig.S instanceof BN)
85019 this._S = sig.S;
85020
85021 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
85022 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
85023 }
85024
85025 cachedProperty(Signature, 'S', function S() {
85026 return this.eddsa.decodeInt(this.Sencoded());
85027 });
85028
85029 cachedProperty(Signature, 'R', function R() {
85030 return this.eddsa.decodePoint(this.Rencoded());
85031 });
85032
85033 cachedProperty(Signature, 'Rencoded', function Rencoded() {
85034 return this.eddsa.encodePoint(this.R());
85035 });
85036
85037 cachedProperty(Signature, 'Sencoded', function Sencoded() {
85038 return this.eddsa.encodeInt(this.S());
85039 });
85040
85041 Signature.prototype.toBytes = function toBytes() {
85042 return this.Rencoded().concat(this.Sencoded());
85043 };
85044
85045 Signature.prototype.toHex = function toHex() {
85046 return utils.encode(this.toBytes(), 'hex').toUpperCase();
85047 };
85048
85049 module.exports = Signature;
85050
85051 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
85052 'use strict';
85053
85054 var hash = require('hash.js');
85055 var elliptic = require('../elliptic');
85056 var utils = elliptic.utils;
85057 var assert = utils.assert;
85058
85059 function HmacDRBG(options) {
85060 if (!(this instanceof HmacDRBG))
85061 return new HmacDRBG(options);
85062 this.hash = options.hash;
85063 this.predResist = !!options.predResist;
85064
85065 this.outLen = this.hash.outSize;
85066 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
85067
85068 this.reseed = null;
85069 this.reseedInterval = null;
85070 this.K = null;
85071 this.V = null;
85072
85073 var entropy = utils.toArray(options.entropy, options.entropyEnc);
85074 var nonce = utils.toArray(options.nonce, options.nonceEnc);
85075 var pers = utils.toArray(options.pers, options.persEnc);
85076 assert(entropy.length >= (this.minEntropy / 8),
85077 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
85078 this._init(entropy, nonce, pers);
85079 }
85080 module.exports = HmacDRBG;
85081
85082 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
85083 var seed = entropy.concat(nonce).concat(pers);
85084
85085 this.K = new Array(this.outLen / 8);
85086 this.V = new Array(this.outLen / 8);
85087 for (var i = 0; i < this.V.length; i++) {
85088 this.K[i] = 0x00;
85089 this.V[i] = 0x01;
85090 }
85091
85092 this._update(seed);
85093 this.reseed = 1;
85094 this.reseedInterval = 0x1000000000000; // 2^48
85095 };
85096
85097 HmacDRBG.prototype._hmac = function hmac() {
85098 return new hash.hmac(this.hash, this.K);
85099 };
85100
85101 HmacDRBG.prototype._update = function update(seed) {
85102 var kmac = this._hmac()
85103 .update(this.V)
85104 .update([ 0x00 ]);
85105 if (seed)
85106 kmac = kmac.update(seed);
85107 this.K = kmac.digest();
85108 this.V = this._hmac().update(this.V).digest();
85109 if (!seed)
85110 return;
85111
85112 this.K = this._hmac()
85113 .update(this.V)
85114 .update([ 0x01 ])
85115 .update(seed)
85116 .digest();
85117 this.V = this._hmac().update(this.V).digest();
85118 };
85119
85120 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
85121 // Optional entropy enc
85122 if (typeof entropyEnc !== 'string') {
85123 addEnc = add;
85124 add = entropyEnc;
85125 entropyEnc = null;
85126 }
85127
85128 entropy = utils.toBuffer(entropy, entropyEnc);
85129 add = utils.toBuffer(add, addEnc);
85130
85131 assert(entropy.length >= (this.minEntropy / 8),
85132 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
85133
85134 this._update(entropy.concat(add || []));
85135 this.reseed = 1;
85136 };
85137
85138 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
85139 if (this.reseed > this.reseedInterval)
85140 throw new Error('Reseed is required');
85141
85142 // Optional encoding
85143 if (typeof enc !== 'string') {
85144 addEnc = add;
85145 add = enc;
85146 enc = null;
85147 }
85148
85149 // Optional additional data
85150 if (add) {
85151 add = utils.toArray(add, addEnc);
85152 this._update(add);
85153 }
85154
85155 var temp = [];
85156 while (temp.length < len) {
85157 this.V = this._hmac().update(this.V).digest();
85158 temp = temp.concat(this.V);
85159 }
85160
85161 var res = temp.slice(0, len);
85162 this._update(add);
85163 this.reseed++;
85164 return utils.encode(res, enc);
85165 };
85166
85167 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
85168 module.exports = {
85169 doubles: {
85170 step: 4,
85171 points: [
85172 [
85173 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
85174 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
85175 ],
85176 [
85177 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
85178 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
85179 ],
85180 [
85181 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
85182 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
85183 ],
85184 [
85185 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
85186 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
85187 ],
85188 [
85189 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
85190 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
85191 ],
85192 [
85193 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
85194 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
85195 ],
85196 [
85197 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
85198 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
85199 ],
85200 [
85201 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
85202 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
85203 ],
85204 [
85205 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
85206 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
85207 ],
85208 [
85209 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
85210 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
85211 ],
85212 [
85213 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
85214 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
85215 ],
85216 [
85217 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
85218 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
85219 ],
85220 [
85221 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
85222 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
85223 ],
85224 [
85225 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
85226 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
85227 ],
85228 [
85229 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
85230 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
85231 ],
85232 [
85233 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
85234 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
85235 ],
85236 [
85237 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
85238 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
85239 ],
85240 [
85241 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
85242 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
85243 ],
85244 [
85245 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
85246 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
85247 ],
85248 [
85249 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
85250 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
85251 ],
85252 [
85253 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
85254 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
85255 ],
85256 [
85257 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
85258 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
85259 ],
85260 [
85261 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
85262 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
85263 ],
85264 [
85265 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
85266 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
85267 ],
85268 [
85269 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
85270 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
85271 ],
85272 [
85273 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
85274 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
85275 ],
85276 [
85277 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
85278 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
85279 ],
85280 [
85281 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
85282 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
85283 ],
85284 [
85285 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
85286 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
85287 ],
85288 [
85289 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
85290 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
85291 ],
85292 [
85293 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
85294 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
85295 ],
85296 [
85297 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
85298 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
85299 ],
85300 [
85301 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
85302 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
85303 ],
85304 [
85305 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
85306 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
85307 ],
85308 [
85309 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
85310 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
85311 ],
85312 [
85313 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
85314 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
85315 ],
85316 [
85317 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
85318 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
85319 ],
85320 [
85321 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
85322 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
85323 ],
85324 [
85325 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
85326 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
85327 ],
85328 [
85329 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
85330 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
85331 ],
85332 [
85333 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
85334 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
85335 ],
85336 [
85337 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
85338 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
85339 ],
85340 [
85341 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
85342 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
85343 ],
85344 [
85345 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
85346 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
85347 ],
85348 [
85349 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
85350 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
85351 ],
85352 [
85353 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
85354 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
85355 ],
85356 [
85357 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
85358 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
85359 ],
85360 [
85361 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
85362 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
85363 ],
85364 [
85365 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
85366 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
85367 ],
85368 [
85369 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
85370 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
85371 ],
85372 [
85373 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
85374 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
85375 ],
85376 [
85377 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
85378 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
85379 ],
85380 [
85381 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
85382 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
85383 ],
85384 [
85385 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
85386 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
85387 ],
85388 [
85389 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
85390 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
85391 ],
85392 [
85393 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
85394 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
85395 ],
85396 [
85397 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
85398 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
85399 ],
85400 [
85401 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
85402 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
85403 ],
85404 [
85405 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
85406 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
85407 ],
85408 [
85409 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
85410 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
85411 ],
85412 [
85413 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
85414 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
85415 ],
85416 [
85417 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
85418 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
85419 ],
85420 [
85421 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
85422 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
85423 ],
85424 [
85425 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
85426 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
85427 ],
85428 [
85429 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
85430 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
85431 ]
85432 ]
85433 },
85434 naf: {
85435 wnd: 7,
85436 points: [
85437 [
85438 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
85439 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
85440 ],
85441 [
85442 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
85443 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
85444 ],
85445 [
85446 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
85447 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
85448 ],
85449 [
85450 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
85451 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
85452 ],
85453 [
85454 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
85455 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
85456 ],
85457 [
85458 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
85459 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
85460 ],
85461 [
85462 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
85463 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
85464 ],
85465 [
85466 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
85467 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
85468 ],
85469 [
85470 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
85471 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
85472 ],
85473 [
85474 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
85475 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
85476 ],
85477 [
85478 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
85479 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
85480 ],
85481 [
85482 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
85483 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
85484 ],
85485 [
85486 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
85487 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
85488 ],
85489 [
85490 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
85491 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
85492 ],
85493 [
85494 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
85495 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
85496 ],
85497 [
85498 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
85499 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
85500 ],
85501 [
85502 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
85503 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
85504 ],
85505 [
85506 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
85507 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
85508 ],
85509 [
85510 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
85511 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
85512 ],
85513 [
85514 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
85515 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
85516 ],
85517 [
85518 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
85519 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
85520 ],
85521 [
85522 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
85523 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
85524 ],
85525 [
85526 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
85527 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
85528 ],
85529 [
85530 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
85531 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
85532 ],
85533 [
85534 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
85535 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
85536 ],
85537 [
85538 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
85539 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
85540 ],
85541 [
85542 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
85543 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
85544 ],
85545 [
85546 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
85547 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
85548 ],
85549 [
85550 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
85551 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
85552 ],
85553 [
85554 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
85555 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
85556 ],
85557 [
85558 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
85559 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
85560 ],
85561 [
85562 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
85563 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
85564 ],
85565 [
85566 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
85567 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
85568 ],
85569 [
85570 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
85571 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
85572 ],
85573 [
85574 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
85575 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
85576 ],
85577 [
85578 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
85579 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
85580 ],
85581 [
85582 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
85583 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
85584 ],
85585 [
85586 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
85587 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
85588 ],
85589 [
85590 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
85591 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
85592 ],
85593 [
85594 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
85595 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
85596 ],
85597 [
85598 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
85599 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
85600 ],
85601 [
85602 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
85603 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
85604 ],
85605 [
85606 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
85607 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
85608 ],
85609 [
85610 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
85611 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
85612 ],
85613 [
85614 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
85615 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
85616 ],
85617 [
85618 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
85619 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
85620 ],
85621 [
85622 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
85623 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
85624 ],
85625 [
85626 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
85627 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
85628 ],
85629 [
85630 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
85631 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
85632 ],
85633 [
85634 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
85635 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
85636 ],
85637 [
85638 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
85639 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
85640 ],
85641 [
85642 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
85643 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
85644 ],
85645 [
85646 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
85647 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
85648 ],
85649 [
85650 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
85651 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
85652 ],
85653 [
85654 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
85655 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
85656 ],
85657 [
85658 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
85659 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
85660 ],
85661 [
85662 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
85663 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
85664 ],
85665 [
85666 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
85667 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
85668 ],
85669 [
85670 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
85671 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
85672 ],
85673 [
85674 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
85675 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
85676 ],
85677 [
85678 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
85679 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
85680 ],
85681 [
85682 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
85683 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
85684 ],
85685 [
85686 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
85687 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
85688 ],
85689 [
85690 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
85691 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
85692 ],
85693 [
85694 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
85695 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
85696 ],
85697 [
85698 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
85699 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
85700 ],
85701 [
85702 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
85703 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
85704 ],
85705 [
85706 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
85707 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
85708 ],
85709 [
85710 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
85711 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
85712 ],
85713 [
85714 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
85715 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
85716 ],
85717 [
85718 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
85719 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
85720 ],
85721 [
85722 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
85723 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
85724 ],
85725 [
85726 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
85727 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
85728 ],
85729 [
85730 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
85731 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
85732 ],
85733 [
85734 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
85735 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
85736 ],
85737 [
85738 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
85739 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
85740 ],
85741 [
85742 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
85743 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
85744 ],
85745 [
85746 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
85747 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
85748 ],
85749 [
85750 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
85751 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
85752 ],
85753 [
85754 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
85755 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
85756 ],
85757 [
85758 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
85759 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
85760 ],
85761 [
85762 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
85763 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
85764 ],
85765 [
85766 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
85767 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
85768 ],
85769 [
85770 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
85771 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
85772 ],
85773 [
85774 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
85775 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
85776 ],
85777 [
85778 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
85779 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
85780 ],
85781 [
85782 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
85783 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
85784 ],
85785 [
85786 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
85787 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
85788 ],
85789 [
85790 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
85791 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
85792 ],
85793 [
85794 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
85795 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
85796 ],
85797 [
85798 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
85799 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
85800 ],
85801 [
85802 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
85803 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
85804 ],
85805 [
85806 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
85807 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
85808 ],
85809 [
85810 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
85811 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
85812 ],
85813 [
85814 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
85815 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
85816 ],
85817 [
85818 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
85819 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
85820 ],
85821 [
85822 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
85823 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
85824 ],
85825 [
85826 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
85827 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
85828 ],
85829 [
85830 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
85831 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
85832 ],
85833 [
85834 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
85835 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
85836 ],
85837 [
85838 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
85839 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
85840 ],
85841 [
85842 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
85843 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
85844 ],
85845 [
85846 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
85847 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
85848 ],
85849 [
85850 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
85851 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
85852 ],
85853 [
85854 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
85855 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
85856 ],
85857 [
85858 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
85859 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
85860 ],
85861 [
85862 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
85863 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
85864 ],
85865 [
85866 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
85867 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
85868 ],
85869 [
85870 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
85871 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
85872 ],
85873 [
85874 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
85875 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
85876 ],
85877 [
85878 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
85879 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
85880 ],
85881 [
85882 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
85883 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
85884 ],
85885 [
85886 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
85887 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
85888 ],
85889 [
85890 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
85891 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
85892 ],
85893 [
85894 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
85895 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
85896 ],
85897 [
85898 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
85899 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
85900 ],
85901 [
85902 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
85903 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
85904 ],
85905 [
85906 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
85907 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
85908 ],
85909 [
85910 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
85911 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
85912 ],
85913 [
85914 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
85915 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
85916 ],
85917 [
85918 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
85919 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
85920 ],
85921 [
85922 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
85923 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
85924 ],
85925 [
85926 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
85927 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
85928 ],
85929 [
85930 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
85931 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
85932 ],
85933 [
85934 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
85935 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
85936 ],
85937 [
85938 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
85939 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
85940 ],
85941 [
85942 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
85943 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
85944 ]
85945 ]
85946 }
85947 };
85948
85949 },{}],54:[function(require,module,exports){
85950 'use strict';
85951
85952 var utils = exports;
85953 var BN = require('bn.js');
85954
85955 utils.assert = function assert(val, msg) {
85956 if (!val)
85957 throw new Error(msg || 'Assertion failed');
85958 };
85959
85960 function toArray(msg, enc) {
85961 if (Array.isArray(msg))
85962 return msg.slice();
85963 if (!msg)
85964 return [];
85965 var res = [];
85966 if (typeof msg !== 'string') {
85967 for (var i = 0; i < msg.length; i++)
85968 res[i] = msg[i] | 0;
85969 return res;
85970 }
85971 if (!enc) {
85972 for (var i = 0; i < msg.length; i++) {
85973 var c = msg.charCodeAt(i);
85974 var hi = c >> 8;
85975 var lo = c & 0xff;
85976 if (hi)
85977 res.push(hi, lo);
85978 else
85979 res.push(lo);
85980 }
85981 } else if (enc === 'hex') {
85982 msg = msg.replace(/[^a-z0-9]+/ig, '');
85983 if (msg.length % 2 !== 0)
85984 msg = '0' + msg;
85985 for (var i = 0; i < msg.length; i += 2)
85986 res.push(parseInt(msg[i] + msg[i + 1], 16));
85987 }
85988 return res;
85989 }
85990 utils.toArray = toArray;
85991
85992 function zero2(word) {
85993 if (word.length === 1)
85994 return '0' + word;
85995 else
85996 return word;
85997 }
85998 utils.zero2 = zero2;
85999
86000 function toHex(msg) {
86001 var res = '';
86002 for (var i = 0; i < msg.length; i++)
86003 res += zero2(msg[i].toString(16));
86004 return res;
86005 }
86006 utils.toHex = toHex;
86007
86008 utils.encode = function encode(arr, enc) {
86009 if (enc === 'hex')
86010 return toHex(arr);
86011 else
86012 return arr;
86013 };
86014
86015 // Represent num in a w-NAF form
86016 function getNAF(num, w) {
86017 var naf = [];
86018 var ws = 1 << (w + 1);
86019 var k = num.clone();
86020 while (k.cmpn(1) >= 0) {
86021 var z;
86022 if (k.isOdd()) {
86023 var mod = k.andln(ws - 1);
86024 if (mod > (ws >> 1) - 1)
86025 z = (ws >> 1) - mod;
86026 else
86027 z = mod;
86028 k.isubn(z);
86029 } else {
86030 z = 0;
86031 }
86032 naf.push(z);
86033
86034 // Optimization, shift by word if possible
86035 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
86036 for (var i = 1; i < shift; i++)
86037 naf.push(0);
86038 k.iushrn(shift);
86039 }
86040
86041 return naf;
86042 }
86043 utils.getNAF = getNAF;
86044
86045 // Represent k1, k2 in a Joint Sparse Form
86046 function getJSF(k1, k2) {
86047 var jsf = [
86048 [],
86049 []
86050 ];
86051
86052 k1 = k1.clone();
86053 k2 = k2.clone();
86054 var d1 = 0;
86055 var d2 = 0;
86056 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
86057
86058 // First phase
86059 var m14 = (k1.andln(3) + d1) & 3;
86060 var m24 = (k2.andln(3) + d2) & 3;
86061 if (m14 === 3)
86062 m14 = -1;
86063 if (m24 === 3)
86064 m24 = -1;
86065 var u1;
86066 if ((m14 & 1) === 0) {
86067 u1 = 0;
86068 } else {
86069 var m8 = (k1.andln(7) + d1) & 7;
86070 if ((m8 === 3 || m8 === 5) && m24 === 2)
86071 u1 = -m14;
86072 else
86073 u1 = m14;
86074 }
86075 jsf[0].push(u1);
86076
86077 var u2;
86078 if ((m24 & 1) === 0) {
86079 u2 = 0;
86080 } else {
86081 var m8 = (k2.andln(7) + d2) & 7;
86082 if ((m8 === 3 || m8 === 5) && m14 === 2)
86083 u2 = -m24;
86084 else
86085 u2 = m24;
86086 }
86087 jsf[1].push(u2);
86088
86089 // Second phase
86090 if (2 * d1 === u1 + 1)
86091 d1 = 1 - d1;
86092 if (2 * d2 === u2 + 1)
86093 d2 = 1 - d2;
86094 k1.iushrn(1);
86095 k2.iushrn(1);
86096 }
86097
86098 return jsf;
86099 }
86100 utils.getJSF = getJSF;
86101
86102 function cachedProperty(obj, name, computer) {
86103 var key = '_' + name;
86104 obj.prototype[name] = function cachedProperty() {
86105 return this[key] !== undefined ? this[key] :
86106 this[key] = computer.call(this);
86107 };
86108 }
86109 utils.cachedProperty = cachedProperty;
86110
86111 function parseBytes(bytes) {
86112 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
86113 bytes;
86114 }
86115 utils.parseBytes = parseBytes;
86116
86117 function intFromLE(bytes) {
86118 return new BN(bytes, 'hex', 'le');
86119 }
86120 utils.intFromLE = intFromLE;
86121
86122
86123 },{"bn.js":33}],55:[function(require,module,exports){
86124 module.exports={
86125 "_args": [
86126 [
86127 {
86128 "raw": "elliptic@^6.2.3",
86129 "scope": null,
86130 "escapedName": "elliptic",
86131 "name": "elliptic",
86132 "rawSpec": "^6.2.3",
86133 "spec": ">=6.2.3 <7.0.0",
86134 "type": "range"
86135 },
86136 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
86137 ]
86138 ],
86139 "_from": "elliptic@>=6.2.3 <7.0.0",
86140 "_id": "elliptic@6.3.3",
86141 "_inCache": true,
86142 "_location": "/elliptic",
86143 "_nodeVersion": "7.0.0",
86144 "_npmOperationalInternal": {
86145 "host": "packages-18-east.internal.npmjs.com",
86146 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
86147 },
86148 "_npmUser": {
86149 "name": "indutny",
86150 "email": "fedor@indutny.com"
86151 },
86152 "_npmVersion": "3.10.8",
86153 "_phantomChildren": {},
86154 "_requested": {
86155 "raw": "elliptic@^6.2.3",
86156 "scope": null,
86157 "escapedName": "elliptic",
86158 "name": "elliptic",
86159 "rawSpec": "^6.2.3",
86160 "spec": ">=6.2.3 <7.0.0",
86161 "type": "range"
86162 },
86163 "_requiredBy": [
86164 "/browserify-sign",
86165 "/create-ecdh",
86166 "/secp256k1"
86167 ],
86168 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
86169 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86170 "_shrinkwrap": null,
86171 "_spec": "elliptic@^6.2.3",
86172 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
86173 "author": {
86174 "name": "Fedor Indutny",
86175 "email": "fedor@indutny.com"
86176 },
86177 "bugs": {
86178 "url": "https://github.com/indutny/elliptic/issues"
86179 },
86180 "dependencies": {
86181 "bn.js": "^4.4.0",
86182 "brorand": "^1.0.1",
86183 "hash.js": "^1.0.0",
86184 "inherits": "^2.0.1"
86185 },
86186 "description": "EC cryptography",
86187 "devDependencies": {
86188 "brfs": "^1.4.3",
86189 "coveralls": "^2.11.3",
86190 "grunt": "^0.4.5",
86191 "grunt-browserify": "^5.0.0",
86192 "grunt-cli": "^1.2.0",
86193 "grunt-contrib-connect": "^1.0.0",
86194 "grunt-contrib-copy": "^1.0.0",
86195 "grunt-contrib-uglify": "^1.0.1",
86196 "grunt-mocha-istanbul": "^3.0.1",
86197 "grunt-saucelabs": "^8.6.2",
86198 "istanbul": "^0.4.2",
86199 "jscs": "^2.9.0",
86200 "jshint": "^2.6.0",
86201 "mocha": "^2.1.0"
86202 },
86203 "directories": {},
86204 "dist": {
86205 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
86206 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
86207 },
86208 "files": [
86209 "lib"
86210 ],
86211 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
86212 "homepage": "https://github.com/indutny/elliptic",
86213 "keywords": [
86214 "EC",
86215 "Elliptic",
86216 "curve",
86217 "Cryptography"
86218 ],
86219 "license": "MIT",
86220 "main": "lib/elliptic.js",
86221 "maintainers": [
86222 {
86223 "name": "indutny",
86224 "email": "fedor@indutny.com"
86225 }
86226 ],
86227 "name": "elliptic",
86228 "optionalDependencies": {},
86229 "readme": "ERROR: No README data found!",
86230 "repository": {
86231 "type": "git",
86232 "url": "git+ssh://git@github.com/indutny/elliptic.git"
86233 },
86234 "scripts": {
86235 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86236 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
86237 "lint": "npm run jscs && npm run jshint",
86238 "test": "npm run lint && npm run unit",
86239 "unit": "istanbul test _mocha --reporter=spec test/index.js",
86240 "version": "grunt dist && git add dist/"
86241 },
86242 "version": "6.3.3"
86243 }
86244
86245 },{}],56:[function(require,module,exports){
86246 (function (Buffer){
86247 'use strict';
86248
86249 var isHexPrefixed = require('is-hex-prefixed');
86250 var stripHexPrefix = require('strip-hex-prefix');
86251
86252 /**
86253 * Pads a `String` to have an even length
86254 * @param {String} value
86255 * @return {String} output
86256 */
86257 function padToEven(value) {
86258 var a = value; // eslint-disable-line
86259
86260 if (typeof a !== 'string') {
86261 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
86262 }
86263
86264 if (a.length % 2) {
86265 a = '0' + a;
86266 }
86267
86268 return a;
86269 }
86270
86271 /**
86272 * Converts a `Number` into a hex `String`
86273 * @param {Number} i
86274 * @return {String}
86275 */
86276 function intToHex(i) {
86277 var hex = i.toString(16); // eslint-disable-line
86278
86279 return '0x' + padToEven(hex);
86280 }
86281
86282 /**
86283 * Converts an `Number` to a `Buffer`
86284 * @param {Number} i
86285 * @return {Buffer}
86286 */
86287 function intToBuffer(i) {
86288 var hex = intToHex(i);
86289
86290 return new Buffer(hex.slice(2), 'hex');
86291 }
86292
86293 /**
86294 * Get the binary size of a string
86295 * @param {String} str
86296 * @return {Number}
86297 */
86298 function getBinarySize(str) {
86299 if (typeof str !== 'string') {
86300 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
86301 }
86302
86303 return Buffer.byteLength(str, 'utf8');
86304 }
86305
86306 /**
86307 * Returns TRUE if the first specified array contains all elements
86308 * from the second one. FALSE otherwise.
86309 *
86310 * @param {array} superset
86311 * @param {array} subset
86312 *
86313 * @returns {boolean}
86314 */
86315 function arrayContainsArray(superset, subset, some) {
86316 if (Array.isArray(superset) !== true) {
86317 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
86318 }
86319 if (Array.isArray(subset) !== true) {
86320 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
86321 }
86322
86323 return subset[Boolean(some) && 'some' || 'every'](function (value) {
86324 return superset.indexOf(value) >= 0;
86325 });
86326 }
86327
86328 /**
86329 * Should be called to get utf8 from it's hex representation
86330 *
86331 * @method toUtf8
86332 * @param {String} string in hex
86333 * @returns {String} ascii string representation of hex value
86334 */
86335 function toUtf8(hex) {
86336 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
86337
86338 return bufferValue.toString('utf8');
86339 }
86340
86341 /**
86342 * Should be called to get ascii from it's hex representation
86343 *
86344 * @method toAscii
86345 * @param {String} string in hex
86346 * @returns {String} ascii string representation of hex value
86347 */
86348 function toAscii(hex) {
86349 var str = ''; // eslint-disable-line
86350 var i = 0,
86351 l = hex.length; // eslint-disable-line
86352
86353 if (hex.substring(0, 2) === '0x') {
86354 i = 2;
86355 }
86356
86357 for (; i < l; i += 2) {
86358 var code = parseInt(hex.substr(i, 2), 16);
86359 str += String.fromCharCode(code);
86360 }
86361
86362 return str;
86363 }
86364
86365 /**
86366 * Should be called to get hex representation (prefixed by 0x) of utf8 string
86367 *
86368 * @method fromUtf8
86369 * @param {String} string
86370 * @param {Number} optional padding
86371 * @returns {String} hex representation of input string
86372 */
86373 function fromUtf8(stringValue) {
86374 var str = new Buffer(stringValue, 'utf8');
86375
86376 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
86377 }
86378
86379 /**
86380 * Should be called to get hex representation (prefixed by 0x) of ascii string
86381 *
86382 * @method fromAscii
86383 * @param {String} string
86384 * @param {Number} optional padding
86385 * @returns {String} hex representation of input string
86386 */
86387 function fromAscii(stringValue) {
86388 var hex = ''; // eslint-disable-line
86389 for (var i = 0; i < stringValue.length; i++) {
86390 // eslint-disable-line
86391 var code = stringValue.charCodeAt(i);
86392 var n = code.toString(16);
86393 hex += n.length < 2 ? '0' + n : n;
86394 }
86395
86396 return '0x' + hex;
86397 }
86398
86399 /**
86400 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
86401 *
86402 * @method getKeys get specific key from inner object array of objects
86403 * @param {String} params
86404 * @param {String} key
86405 * @param {Boolean} allowEmpty
86406 * @returns {Array} output just a simple array of output keys
86407 */
86408 function getKeys(params, key, allowEmpty) {
86409 if (!Array.isArray(params)) {
86410 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
86411 }
86412 if (typeof key !== 'string') {
86413 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
86414 }
86415
86416 var result = []; // eslint-disable-line
86417
86418 for (var i = 0; i < params.length; i++) {
86419 // eslint-disable-line
86420 var value = params[i][key]; // eslint-disable-line
86421 if (allowEmpty && !value) {
86422 value = '';
86423 } else if (typeof value !== 'string') {
86424 throw new Error('invalid abi');
86425 }
86426 result.push(value);
86427 }
86428
86429 return result;
86430 }
86431
86432 /**
86433 * Is the string a hex string.
86434 *
86435 * @method check if string is hex string of specific length
86436 * @param {String} value
86437 * @param {Number} length
86438 * @returns {Boolean} output the string is a hex string
86439 */
86440 function isHexString(value, length) {
86441 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
86442 return false;
86443 }
86444
86445 if (length && value.length !== 2 + 2 * length) {
86446 return false;
86447 }
86448
86449 return true;
86450 }
86451
86452 module.exports = {
86453 arrayContainsArray: arrayContainsArray,
86454 intToBuffer: intToBuffer,
86455 getBinarySize: getBinarySize,
86456 isHexPrefixed: isHexPrefixed,
86457 stripHexPrefix: stripHexPrefix,
86458 padToEven: padToEven,
86459 intToHex: intToHex,
86460 fromAscii: fromAscii,
86461 fromUtf8: fromUtf8,
86462 toAscii: toAscii,
86463 toUtf8: toUtf8,
86464 getKeys: getKeys,
86465 isHexString: isHexString
86466 };
86467 }).call(this,require("buffer").Buffer)
86468 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
86469 var hash = exports;
86470
86471 hash.utils = require('./hash/utils');
86472 hash.common = require('./hash/common');
86473 hash.sha = require('./hash/sha');
86474 hash.ripemd = require('./hash/ripemd');
86475 hash.hmac = require('./hash/hmac');
86476
86477 // Proxy hash functions to the main object
86478 hash.sha1 = hash.sha.sha1;
86479 hash.sha256 = hash.sha.sha256;
86480 hash.sha224 = hash.sha.sha224;
86481 hash.sha384 = hash.sha.sha384;
86482 hash.sha512 = hash.sha.sha512;
86483 hash.ripemd160 = hash.ripemd.ripemd160;
86484
86485 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
86486 var hash = require('../hash');
86487 var utils = hash.utils;
86488 var assert = utils.assert;
86489
86490 function BlockHash() {
86491 this.pending = null;
86492 this.pendingTotal = 0;
86493 this.blockSize = this.constructor.blockSize;
86494 this.outSize = this.constructor.outSize;
86495 this.hmacStrength = this.constructor.hmacStrength;
86496 this.padLength = this.constructor.padLength / 8;
86497 this.endian = 'big';
86498
86499 this._delta8 = this.blockSize / 8;
86500 this._delta32 = this.blockSize / 32;
86501 }
86502 exports.BlockHash = BlockHash;
86503
86504 BlockHash.prototype.update = function update(msg, enc) {
86505 // Convert message to array, pad it, and join into 32bit blocks
86506 msg = utils.toArray(msg, enc);
86507 if (!this.pending)
86508 this.pending = msg;
86509 else
86510 this.pending = this.pending.concat(msg);
86511 this.pendingTotal += msg.length;
86512
86513 // Enough data, try updating
86514 if (this.pending.length >= this._delta8) {
86515 msg = this.pending;
86516
86517 // Process pending data in blocks
86518 var r = msg.length % this._delta8;
86519 this.pending = msg.slice(msg.length - r, msg.length);
86520 if (this.pending.length === 0)
86521 this.pending = null;
86522
86523 msg = utils.join32(msg, 0, msg.length - r, this.endian);
86524 for (var i = 0; i < msg.length; i += this._delta32)
86525 this._update(msg, i, i + this._delta32);
86526 }
86527
86528 return this;
86529 };
86530
86531 BlockHash.prototype.digest = function digest(enc) {
86532 this.update(this._pad());
86533 assert(this.pending === null);
86534
86535 return this._digest(enc);
86536 };
86537
86538 BlockHash.prototype._pad = function pad() {
86539 var len = this.pendingTotal;
86540 var bytes = this._delta8;
86541 var k = bytes - ((len + this.padLength) % bytes);
86542 var res = new Array(k + this.padLength);
86543 res[0] = 0x80;
86544 for (var i = 1; i < k; i++)
86545 res[i] = 0;
86546
86547 // Append length
86548 len <<= 3;
86549 if (this.endian === 'big') {
86550 for (var t = 8; t < this.padLength; t++)
86551 res[i++] = 0;
86552
86553 res[i++] = 0;
86554 res[i++] = 0;
86555 res[i++] = 0;
86556 res[i++] = 0;
86557 res[i++] = (len >>> 24) & 0xff;
86558 res[i++] = (len >>> 16) & 0xff;
86559 res[i++] = (len >>> 8) & 0xff;
86560 res[i++] = len & 0xff;
86561 } else {
86562 res[i++] = len & 0xff;
86563 res[i++] = (len >>> 8) & 0xff;
86564 res[i++] = (len >>> 16) & 0xff;
86565 res[i++] = (len >>> 24) & 0xff;
86566 res[i++] = 0;
86567 res[i++] = 0;
86568 res[i++] = 0;
86569 res[i++] = 0;
86570
86571 for (var t = 8; t < this.padLength; t++)
86572 res[i++] = 0;
86573 }
86574
86575 return res;
86576 };
86577
86578 },{"../hash":57}],59:[function(require,module,exports){
86579 var hmac = exports;
86580
86581 var hash = require('../hash');
86582 var utils = hash.utils;
86583 var assert = utils.assert;
86584
86585 function Hmac(hash, key, enc) {
86586 if (!(this instanceof Hmac))
86587 return new Hmac(hash, key, enc);
86588 this.Hash = hash;
86589 this.blockSize = hash.blockSize / 8;
86590 this.outSize = hash.outSize / 8;
86591 this.inner = null;
86592 this.outer = null;
86593
86594 this._init(utils.toArray(key, enc));
86595 }
86596 module.exports = Hmac;
86597
86598 Hmac.prototype._init = function init(key) {
86599 // Shorten key, if needed
86600 if (key.length > this.blockSize)
86601 key = new this.Hash().update(key).digest();
86602 assert(key.length <= this.blockSize);
86603
86604 // Add padding to key
86605 for (var i = key.length; i < this.blockSize; i++)
86606 key.push(0);
86607
86608 for (var i = 0; i < key.length; i++)
86609 key[i] ^= 0x36;
86610 this.inner = new this.Hash().update(key);
86611
86612 // 0x36 ^ 0x5c = 0x6a
86613 for (var i = 0; i < key.length; i++)
86614 key[i] ^= 0x6a;
86615 this.outer = new this.Hash().update(key);
86616 };
86617
86618 Hmac.prototype.update = function update(msg, enc) {
86619 this.inner.update(msg, enc);
86620 return this;
86621 };
86622
86623 Hmac.prototype.digest = function digest(enc) {
86624 this.outer.update(this.inner.digest());
86625 return this.outer.digest(enc);
86626 };
86627
86628 },{"../hash":57}],60:[function(require,module,exports){
86629 var hash = require('../hash');
86630 var utils = hash.utils;
86631
86632 var rotl32 = utils.rotl32;
86633 var sum32 = utils.sum32;
86634 var sum32_3 = utils.sum32_3;
86635 var sum32_4 = utils.sum32_4;
86636 var BlockHash = hash.common.BlockHash;
86637
86638 function RIPEMD160() {
86639 if (!(this instanceof RIPEMD160))
86640 return new RIPEMD160();
86641
86642 BlockHash.call(this);
86643
86644 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
86645 this.endian = 'little';
86646 }
86647 utils.inherits(RIPEMD160, BlockHash);
86648 exports.ripemd160 = RIPEMD160;
86649
86650 RIPEMD160.blockSize = 512;
86651 RIPEMD160.outSize = 160;
86652 RIPEMD160.hmacStrength = 192;
86653 RIPEMD160.padLength = 64;
86654
86655 RIPEMD160.prototype._update = function update(msg, start) {
86656 var A = this.h[0];
86657 var B = this.h[1];
86658 var C = this.h[2];
86659 var D = this.h[3];
86660 var E = this.h[4];
86661 var Ah = A;
86662 var Bh = B;
86663 var Ch = C;
86664 var Dh = D;
86665 var Eh = E;
86666 for (var j = 0; j < 80; j++) {
86667 var T = sum32(
86668 rotl32(
86669 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
86670 s[j]),
86671 E);
86672 A = E;
86673 E = D;
86674 D = rotl32(C, 10);
86675 C = B;
86676 B = T;
86677 T = sum32(
86678 rotl32(
86679 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
86680 sh[j]),
86681 Eh);
86682 Ah = Eh;
86683 Eh = Dh;
86684 Dh = rotl32(Ch, 10);
86685 Ch = Bh;
86686 Bh = T;
86687 }
86688 T = sum32_3(this.h[1], C, Dh);
86689 this.h[1] = sum32_3(this.h[2], D, Eh);
86690 this.h[2] = sum32_3(this.h[3], E, Ah);
86691 this.h[3] = sum32_3(this.h[4], A, Bh);
86692 this.h[4] = sum32_3(this.h[0], B, Ch);
86693 this.h[0] = T;
86694 };
86695
86696 RIPEMD160.prototype._digest = function digest(enc) {
86697 if (enc === 'hex')
86698 return utils.toHex32(this.h, 'little');
86699 else
86700 return utils.split32(this.h, 'little');
86701 };
86702
86703 function f(j, x, y, z) {
86704 if (j <= 15)
86705 return x ^ y ^ z;
86706 else if (j <= 31)
86707 return (x & y) | ((~x) & z);
86708 else if (j <= 47)
86709 return (x | (~y)) ^ z;
86710 else if (j <= 63)
86711 return (x & z) | (y & (~z));
86712 else
86713 return x ^ (y | (~z));
86714 }
86715
86716 function K(j) {
86717 if (j <= 15)
86718 return 0x00000000;
86719 else if (j <= 31)
86720 return 0x5a827999;
86721 else if (j <= 47)
86722 return 0x6ed9eba1;
86723 else if (j <= 63)
86724 return 0x8f1bbcdc;
86725 else
86726 return 0xa953fd4e;
86727 }
86728
86729 function Kh(j) {
86730 if (j <= 15)
86731 return 0x50a28be6;
86732 else if (j <= 31)
86733 return 0x5c4dd124;
86734 else if (j <= 47)
86735 return 0x6d703ef3;
86736 else if (j <= 63)
86737 return 0x7a6d76e9;
86738 else
86739 return 0x00000000;
86740 }
86741
86742 var r = [
86743 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
86744 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
86745 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
86746 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
86747 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
86748 ];
86749
86750 var rh = [
86751 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
86752 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
86753 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
86754 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
86755 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
86756 ];
86757
86758 var s = [
86759 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
86760 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
86761 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
86762 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
86763 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
86764 ];
86765
86766 var sh = [
86767 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
86768 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
86769 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
86770 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
86771 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
86772 ];
86773
86774 },{"../hash":57}],61:[function(require,module,exports){
86775 var hash = require('../hash');
86776 var utils = hash.utils;
86777 var assert = utils.assert;
86778
86779 var rotr32 = utils.rotr32;
86780 var rotl32 = utils.rotl32;
86781 var sum32 = utils.sum32;
86782 var sum32_4 = utils.sum32_4;
86783 var sum32_5 = utils.sum32_5;
86784 var rotr64_hi = utils.rotr64_hi;
86785 var rotr64_lo = utils.rotr64_lo;
86786 var shr64_hi = utils.shr64_hi;
86787 var shr64_lo = utils.shr64_lo;
86788 var sum64 = utils.sum64;
86789 var sum64_hi = utils.sum64_hi;
86790 var sum64_lo = utils.sum64_lo;
86791 var sum64_4_hi = utils.sum64_4_hi;
86792 var sum64_4_lo = utils.sum64_4_lo;
86793 var sum64_5_hi = utils.sum64_5_hi;
86794 var sum64_5_lo = utils.sum64_5_lo;
86795 var BlockHash = hash.common.BlockHash;
86796
86797 var sha256_K = [
86798 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
86799 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
86800 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
86801 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
86802 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
86803 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
86804 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
86805 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
86806 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
86807 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
86808 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
86809 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
86810 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
86811 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
86812 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
86813 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
86814 ];
86815
86816 var sha512_K = [
86817 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
86818 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
86819 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
86820 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
86821 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
86822 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
86823 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
86824 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
86825 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
86826 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
86827 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
86828 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
86829 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
86830 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
86831 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
86832 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
86833 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
86834 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
86835 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
86836 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
86837 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
86838 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
86839 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
86840 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
86841 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
86842 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
86843 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
86844 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
86845 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
86846 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
86847 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
86848 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
86849 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
86850 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
86851 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
86852 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
86853 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
86854 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
86855 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
86856 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
86857 ];
86858
86859 var sha1_K = [
86860 0x5A827999, 0x6ED9EBA1,
86861 0x8F1BBCDC, 0xCA62C1D6
86862 ];
86863
86864 function SHA256() {
86865 if (!(this instanceof SHA256))
86866 return new SHA256();
86867
86868 BlockHash.call(this);
86869 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
86870 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
86871 this.k = sha256_K;
86872 this.W = new Array(64);
86873 }
86874 utils.inherits(SHA256, BlockHash);
86875 exports.sha256 = SHA256;
86876
86877 SHA256.blockSize = 512;
86878 SHA256.outSize = 256;
86879 SHA256.hmacStrength = 192;
86880 SHA256.padLength = 64;
86881
86882 SHA256.prototype._update = function _update(msg, start) {
86883 var W = this.W;
86884
86885 for (var i = 0; i < 16; i++)
86886 W[i] = msg[start + i];
86887 for (; i < W.length; i++)
86888 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
86889
86890 var a = this.h[0];
86891 var b = this.h[1];
86892 var c = this.h[2];
86893 var d = this.h[3];
86894 var e = this.h[4];
86895 var f = this.h[5];
86896 var g = this.h[6];
86897 var h = this.h[7];
86898
86899 assert(this.k.length === W.length);
86900 for (var i = 0; i < W.length; i++) {
86901 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
86902 var T2 = sum32(s0_256(a), maj32(a, b, c));
86903 h = g;
86904 g = f;
86905 f = e;
86906 e = sum32(d, T1);
86907 d = c;
86908 c = b;
86909 b = a;
86910 a = sum32(T1, T2);
86911 }
86912
86913 this.h[0] = sum32(this.h[0], a);
86914 this.h[1] = sum32(this.h[1], b);
86915 this.h[2] = sum32(this.h[2], c);
86916 this.h[3] = sum32(this.h[3], d);
86917 this.h[4] = sum32(this.h[4], e);
86918 this.h[5] = sum32(this.h[5], f);
86919 this.h[6] = sum32(this.h[6], g);
86920 this.h[7] = sum32(this.h[7], h);
86921 };
86922
86923 SHA256.prototype._digest = function digest(enc) {
86924 if (enc === 'hex')
86925 return utils.toHex32(this.h, 'big');
86926 else
86927 return utils.split32(this.h, 'big');
86928 };
86929
86930 function SHA224() {
86931 if (!(this instanceof SHA224))
86932 return new SHA224();
86933
86934 SHA256.call(this);
86935 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
86936 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
86937 }
86938 utils.inherits(SHA224, SHA256);
86939 exports.sha224 = SHA224;
86940
86941 SHA224.blockSize = 512;
86942 SHA224.outSize = 224;
86943 SHA224.hmacStrength = 192;
86944 SHA224.padLength = 64;
86945
86946 SHA224.prototype._digest = function digest(enc) {
86947 // Just truncate output
86948 if (enc === 'hex')
86949 return utils.toHex32(this.h.slice(0, 7), 'big');
86950 else
86951 return utils.split32(this.h.slice(0, 7), 'big');
86952 };
86953
86954 function SHA512() {
86955 if (!(this instanceof SHA512))
86956 return new SHA512();
86957
86958 BlockHash.call(this);
86959 this.h = [ 0x6a09e667, 0xf3bcc908,
86960 0xbb67ae85, 0x84caa73b,
86961 0x3c6ef372, 0xfe94f82b,
86962 0xa54ff53a, 0x5f1d36f1,
86963 0x510e527f, 0xade682d1,
86964 0x9b05688c, 0x2b3e6c1f,
86965 0x1f83d9ab, 0xfb41bd6b,
86966 0x5be0cd19, 0x137e2179 ];
86967 this.k = sha512_K;
86968 this.W = new Array(160);
86969 }
86970 utils.inherits(SHA512, BlockHash);
86971 exports.sha512 = SHA512;
86972
86973 SHA512.blockSize = 1024;
86974 SHA512.outSize = 512;
86975 SHA512.hmacStrength = 192;
86976 SHA512.padLength = 128;
86977
86978 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
86979 var W = this.W;
86980
86981 // 32 x 32bit words
86982 for (var i = 0; i < 32; i++)
86983 W[i] = msg[start + i];
86984 for (; i < W.length; i += 2) {
86985 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
86986 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
86987 var c1_hi = W[i - 14]; // i - 7
86988 var c1_lo = W[i - 13];
86989 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
86990 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
86991 var c3_hi = W[i - 32]; // i - 16
86992 var c3_lo = W[i - 31];
86993
86994 W[i] = sum64_4_hi(c0_hi, c0_lo,
86995 c1_hi, c1_lo,
86996 c2_hi, c2_lo,
86997 c3_hi, c3_lo);
86998 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
86999 c1_hi, c1_lo,
87000 c2_hi, c2_lo,
87001 c3_hi, c3_lo);
87002 }
87003 };
87004
87005 SHA512.prototype._update = function _update(msg, start) {
87006 this._prepareBlock(msg, start);
87007
87008 var W = this.W;
87009
87010 var ah = this.h[0];
87011 var al = this.h[1];
87012 var bh = this.h[2];
87013 var bl = this.h[3];
87014 var ch = this.h[4];
87015 var cl = this.h[5];
87016 var dh = this.h[6];
87017 var dl = this.h[7];
87018 var eh = this.h[8];
87019 var el = this.h[9];
87020 var fh = this.h[10];
87021 var fl = this.h[11];
87022 var gh = this.h[12];
87023 var gl = this.h[13];
87024 var hh = this.h[14];
87025 var hl = this.h[15];
87026
87027 assert(this.k.length === W.length);
87028 for (var i = 0; i < W.length; i += 2) {
87029 var c0_hi = hh;
87030 var c0_lo = hl;
87031 var c1_hi = s1_512_hi(eh, el);
87032 var c1_lo = s1_512_lo(eh, el);
87033 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
87034 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
87035 var c3_hi = this.k[i];
87036 var c3_lo = this.k[i + 1];
87037 var c4_hi = W[i];
87038 var c4_lo = W[i + 1];
87039
87040 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
87041 c1_hi, c1_lo,
87042 c2_hi, c2_lo,
87043 c3_hi, c3_lo,
87044 c4_hi, c4_lo);
87045 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
87046 c1_hi, c1_lo,
87047 c2_hi, c2_lo,
87048 c3_hi, c3_lo,
87049 c4_hi, c4_lo);
87050
87051 var c0_hi = s0_512_hi(ah, al);
87052 var c0_lo = s0_512_lo(ah, al);
87053 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
87054 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
87055
87056 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
87057 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
87058
87059 hh = gh;
87060 hl = gl;
87061
87062 gh = fh;
87063 gl = fl;
87064
87065 fh = eh;
87066 fl = el;
87067
87068 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
87069 el = sum64_lo(dl, dl, T1_hi, T1_lo);
87070
87071 dh = ch;
87072 dl = cl;
87073
87074 ch = bh;
87075 cl = bl;
87076
87077 bh = ah;
87078 bl = al;
87079
87080 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
87081 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
87082 }
87083
87084 sum64(this.h, 0, ah, al);
87085 sum64(this.h, 2, bh, bl);
87086 sum64(this.h, 4, ch, cl);
87087 sum64(this.h, 6, dh, dl);
87088 sum64(this.h, 8, eh, el);
87089 sum64(this.h, 10, fh, fl);
87090 sum64(this.h, 12, gh, gl);
87091 sum64(this.h, 14, hh, hl);
87092 };
87093
87094 SHA512.prototype._digest = function digest(enc) {
87095 if (enc === 'hex')
87096 return utils.toHex32(this.h, 'big');
87097 else
87098 return utils.split32(this.h, 'big');
87099 };
87100
87101 function SHA384() {
87102 if (!(this instanceof SHA384))
87103 return new SHA384();
87104
87105 SHA512.call(this);
87106 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
87107 0x629a292a, 0x367cd507,
87108 0x9159015a, 0x3070dd17,
87109 0x152fecd8, 0xf70e5939,
87110 0x67332667, 0xffc00b31,
87111 0x8eb44a87, 0x68581511,
87112 0xdb0c2e0d, 0x64f98fa7,
87113 0x47b5481d, 0xbefa4fa4 ];
87114 }
87115 utils.inherits(SHA384, SHA512);
87116 exports.sha384 = SHA384;
87117
87118 SHA384.blockSize = 1024;
87119 SHA384.outSize = 384;
87120 SHA384.hmacStrength = 192;
87121 SHA384.padLength = 128;
87122
87123 SHA384.prototype._digest = function digest(enc) {
87124 if (enc === 'hex')
87125 return utils.toHex32(this.h.slice(0, 12), 'big');
87126 else
87127 return utils.split32(this.h.slice(0, 12), 'big');
87128 };
87129
87130 function SHA1() {
87131 if (!(this instanceof SHA1))
87132 return new SHA1();
87133
87134 BlockHash.call(this);
87135 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
87136 0x10325476, 0xc3d2e1f0 ];
87137 this.W = new Array(80);
87138 }
87139
87140 utils.inherits(SHA1, BlockHash);
87141 exports.sha1 = SHA1;
87142
87143 SHA1.blockSize = 512;
87144 SHA1.outSize = 160;
87145 SHA1.hmacStrength = 80;
87146 SHA1.padLength = 64;
87147
87148 SHA1.prototype._update = function _update(msg, start) {
87149 var W = this.W;
87150
87151 for (var i = 0; i < 16; i++)
87152 W[i] = msg[start + i];
87153
87154 for(; i < W.length; i++)
87155 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
87156
87157 var a = this.h[0];
87158 var b = this.h[1];
87159 var c = this.h[2];
87160 var d = this.h[3];
87161 var e = this.h[4];
87162
87163 for (var i = 0; i < W.length; i++) {
87164 var s = ~~(i / 20);
87165 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
87166 e = d;
87167 d = c;
87168 c = rotl32(b, 30);
87169 b = a;
87170 a = t;
87171 }
87172
87173 this.h[0] = sum32(this.h[0], a);
87174 this.h[1] = sum32(this.h[1], b);
87175 this.h[2] = sum32(this.h[2], c);
87176 this.h[3] = sum32(this.h[3], d);
87177 this.h[4] = sum32(this.h[4], e);
87178 };
87179
87180 SHA1.prototype._digest = function digest(enc) {
87181 if (enc === 'hex')
87182 return utils.toHex32(this.h, 'big');
87183 else
87184 return utils.split32(this.h, 'big');
87185 };
87186
87187 function ch32(x, y, z) {
87188 return (x & y) ^ ((~x) & z);
87189 }
87190
87191 function maj32(x, y, z) {
87192 return (x & y) ^ (x & z) ^ (y & z);
87193 }
87194
87195 function p32(x, y, z) {
87196 return x ^ y ^ z;
87197 }
87198
87199 function s0_256(x) {
87200 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
87201 }
87202
87203 function s1_256(x) {
87204 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
87205 }
87206
87207 function g0_256(x) {
87208 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
87209 }
87210
87211 function g1_256(x) {
87212 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
87213 }
87214
87215 function ft_1(s, x, y, z) {
87216 if (s === 0)
87217 return ch32(x, y, z);
87218 if (s === 1 || s === 3)
87219 return p32(x, y, z);
87220 if (s === 2)
87221 return maj32(x, y, z);
87222 }
87223
87224 function ch64_hi(xh, xl, yh, yl, zh, zl) {
87225 var r = (xh & yh) ^ ((~xh) & zh);
87226 if (r < 0)
87227 r += 0x100000000;
87228 return r;
87229 }
87230
87231 function ch64_lo(xh, xl, yh, yl, zh, zl) {
87232 var r = (xl & yl) ^ ((~xl) & zl);
87233 if (r < 0)
87234 r += 0x100000000;
87235 return r;
87236 }
87237
87238 function maj64_hi(xh, xl, yh, yl, zh, zl) {
87239 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
87240 if (r < 0)
87241 r += 0x100000000;
87242 return r;
87243 }
87244
87245 function maj64_lo(xh, xl, yh, yl, zh, zl) {
87246 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
87247 if (r < 0)
87248 r += 0x100000000;
87249 return r;
87250 }
87251
87252 function s0_512_hi(xh, xl) {
87253 var c0_hi = rotr64_hi(xh, xl, 28);
87254 var c1_hi = rotr64_hi(xl, xh, 2); // 34
87255 var c2_hi = rotr64_hi(xl, xh, 7); // 39
87256
87257 var r = c0_hi ^ c1_hi ^ c2_hi;
87258 if (r < 0)
87259 r += 0x100000000;
87260 return r;
87261 }
87262
87263 function s0_512_lo(xh, xl) {
87264 var c0_lo = rotr64_lo(xh, xl, 28);
87265 var c1_lo = rotr64_lo(xl, xh, 2); // 34
87266 var c2_lo = rotr64_lo(xl, xh, 7); // 39
87267
87268 var r = c0_lo ^ c1_lo ^ c2_lo;
87269 if (r < 0)
87270 r += 0x100000000;
87271 return r;
87272 }
87273
87274 function s1_512_hi(xh, xl) {
87275 var c0_hi = rotr64_hi(xh, xl, 14);
87276 var c1_hi = rotr64_hi(xh, xl, 18);
87277 var c2_hi = rotr64_hi(xl, xh, 9); // 41
87278
87279 var r = c0_hi ^ c1_hi ^ c2_hi;
87280 if (r < 0)
87281 r += 0x100000000;
87282 return r;
87283 }
87284
87285 function s1_512_lo(xh, xl) {
87286 var c0_lo = rotr64_lo(xh, xl, 14);
87287 var c1_lo = rotr64_lo(xh, xl, 18);
87288 var c2_lo = rotr64_lo(xl, xh, 9); // 41
87289
87290 var r = c0_lo ^ c1_lo ^ c2_lo;
87291 if (r < 0)
87292 r += 0x100000000;
87293 return r;
87294 }
87295
87296 function g0_512_hi(xh, xl) {
87297 var c0_hi = rotr64_hi(xh, xl, 1);
87298 var c1_hi = rotr64_hi(xh, xl, 8);
87299 var c2_hi = shr64_hi(xh, xl, 7);
87300
87301 var r = c0_hi ^ c1_hi ^ c2_hi;
87302 if (r < 0)
87303 r += 0x100000000;
87304 return r;
87305 }
87306
87307 function g0_512_lo(xh, xl) {
87308 var c0_lo = rotr64_lo(xh, xl, 1);
87309 var c1_lo = rotr64_lo(xh, xl, 8);
87310 var c2_lo = shr64_lo(xh, xl, 7);
87311
87312 var r = c0_lo ^ c1_lo ^ c2_lo;
87313 if (r < 0)
87314 r += 0x100000000;
87315 return r;
87316 }
87317
87318 function g1_512_hi(xh, xl) {
87319 var c0_hi = rotr64_hi(xh, xl, 19);
87320 var c1_hi = rotr64_hi(xl, xh, 29); // 61
87321 var c2_hi = shr64_hi(xh, xl, 6);
87322
87323 var r = c0_hi ^ c1_hi ^ c2_hi;
87324 if (r < 0)
87325 r += 0x100000000;
87326 return r;
87327 }
87328
87329 function g1_512_lo(xh, xl) {
87330 var c0_lo = rotr64_lo(xh, xl, 19);
87331 var c1_lo = rotr64_lo(xl, xh, 29); // 61
87332 var c2_lo = shr64_lo(xh, xl, 6);
87333
87334 var r = c0_lo ^ c1_lo ^ c2_lo;
87335 if (r < 0)
87336 r += 0x100000000;
87337 return r;
87338 }
87339
87340 },{"../hash":57}],62:[function(require,module,exports){
87341 var utils = exports;
87342 var inherits = require('inherits');
87343
87344 function toArray(msg, enc) {
87345 if (Array.isArray(msg))
87346 return msg.slice();
87347 if (!msg)
87348 return [];
87349 var res = [];
87350 if (typeof msg === 'string') {
87351 if (!enc) {
87352 for (var i = 0; i < msg.length; i++) {
87353 var c = msg.charCodeAt(i);
87354 var hi = c >> 8;
87355 var lo = c & 0xff;
87356 if (hi)
87357 res.push(hi, lo);
87358 else
87359 res.push(lo);
87360 }
87361 } else if (enc === 'hex') {
87362 msg = msg.replace(/[^a-z0-9]+/ig, '');
87363 if (msg.length % 2 !== 0)
87364 msg = '0' + msg;
87365 for (var i = 0; i < msg.length; i += 2)
87366 res.push(parseInt(msg[i] + msg[i + 1], 16));
87367 }
87368 } else {
87369 for (var i = 0; i < msg.length; i++)
87370 res[i] = msg[i] | 0;
87371 }
87372 return res;
87373 }
87374 utils.toArray = toArray;
87375
87376 function toHex(msg) {
87377 var res = '';
87378 for (var i = 0; i < msg.length; i++)
87379 res += zero2(msg[i].toString(16));
87380 return res;
87381 }
87382 utils.toHex = toHex;
87383
87384 function htonl(w) {
87385 var res = (w >>> 24) |
87386 ((w >>> 8) & 0xff00) |
87387 ((w << 8) & 0xff0000) |
87388 ((w & 0xff) << 24);
87389 return res >>> 0;
87390 }
87391 utils.htonl = htonl;
87392
87393 function toHex32(msg, endian) {
87394 var res = '';
87395 for (var i = 0; i < msg.length; i++) {
87396 var w = msg[i];
87397 if (endian === 'little')
87398 w = htonl(w);
87399 res += zero8(w.toString(16));
87400 }
87401 return res;
87402 }
87403 utils.toHex32 = toHex32;
87404
87405 function zero2(word) {
87406 if (word.length === 1)
87407 return '0' + word;
87408 else
87409 return word;
87410 }
87411 utils.zero2 = zero2;
87412
87413 function zero8(word) {
87414 if (word.length === 7)
87415 return '0' + word;
87416 else if (word.length === 6)
87417 return '00' + word;
87418 else if (word.length === 5)
87419 return '000' + word;
87420 else if (word.length === 4)
87421 return '0000' + word;
87422 else if (word.length === 3)
87423 return '00000' + word;
87424 else if (word.length === 2)
87425 return '000000' + word;
87426 else if (word.length === 1)
87427 return '0000000' + word;
87428 else
87429 return word;
87430 }
87431 utils.zero8 = zero8;
87432
87433 function join32(msg, start, end, endian) {
87434 var len = end - start;
87435 assert(len % 4 === 0);
87436 var res = new Array(len / 4);
87437 for (var i = 0, k = start; i < res.length; i++, k += 4) {
87438 var w;
87439 if (endian === 'big')
87440 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
87441 else
87442 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
87443 res[i] = w >>> 0;
87444 }
87445 return res;
87446 }
87447 utils.join32 = join32;
87448
87449 function split32(msg, endian) {
87450 var res = new Array(msg.length * 4);
87451 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
87452 var m = msg[i];
87453 if (endian === 'big') {
87454 res[k] = m >>> 24;
87455 res[k + 1] = (m >>> 16) & 0xff;
87456 res[k + 2] = (m >>> 8) & 0xff;
87457 res[k + 3] = m & 0xff;
87458 } else {
87459 res[k + 3] = m >>> 24;
87460 res[k + 2] = (m >>> 16) & 0xff;
87461 res[k + 1] = (m >>> 8) & 0xff;
87462 res[k] = m & 0xff;
87463 }
87464 }
87465 return res;
87466 }
87467 utils.split32 = split32;
87468
87469 function rotr32(w, b) {
87470 return (w >>> b) | (w << (32 - b));
87471 }
87472 utils.rotr32 = rotr32;
87473
87474 function rotl32(w, b) {
87475 return (w << b) | (w >>> (32 - b));
87476 }
87477 utils.rotl32 = rotl32;
87478
87479 function sum32(a, b) {
87480 return (a + b) >>> 0;
87481 }
87482 utils.sum32 = sum32;
87483
87484 function sum32_3(a, b, c) {
87485 return (a + b + c) >>> 0;
87486 }
87487 utils.sum32_3 = sum32_3;
87488
87489 function sum32_4(a, b, c, d) {
87490 return (a + b + c + d) >>> 0;
87491 }
87492 utils.sum32_4 = sum32_4;
87493
87494 function sum32_5(a, b, c, d, e) {
87495 return (a + b + c + d + e) >>> 0;
87496 }
87497 utils.sum32_5 = sum32_5;
87498
87499 function assert(cond, msg) {
87500 if (!cond)
87501 throw new Error(msg || 'Assertion failed');
87502 }
87503 utils.assert = assert;
87504
87505 utils.inherits = inherits;
87506
87507 function sum64(buf, pos, ah, al) {
87508 var bh = buf[pos];
87509 var bl = buf[pos + 1];
87510
87511 var lo = (al + bl) >>> 0;
87512 var hi = (lo < al ? 1 : 0) + ah + bh;
87513 buf[pos] = hi >>> 0;
87514 buf[pos + 1] = lo;
87515 }
87516 exports.sum64 = sum64;
87517
87518 function sum64_hi(ah, al, bh, bl) {
87519 var lo = (al + bl) >>> 0;
87520 var hi = (lo < al ? 1 : 0) + ah + bh;
87521 return hi >>> 0;
87522 };
87523 exports.sum64_hi = sum64_hi;
87524
87525 function sum64_lo(ah, al, bh, bl) {
87526 var lo = al + bl;
87527 return lo >>> 0;
87528 };
87529 exports.sum64_lo = sum64_lo;
87530
87531 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
87532 var carry = 0;
87533 var lo = al;
87534 lo = (lo + bl) >>> 0;
87535 carry += lo < al ? 1 : 0;
87536 lo = (lo + cl) >>> 0;
87537 carry += lo < cl ? 1 : 0;
87538 lo = (lo + dl) >>> 0;
87539 carry += lo < dl ? 1 : 0;
87540
87541 var hi = ah + bh + ch + dh + carry;
87542 return hi >>> 0;
87543 };
87544 exports.sum64_4_hi = sum64_4_hi;
87545
87546 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
87547 var lo = al + bl + cl + dl;
87548 return lo >>> 0;
87549 };
87550 exports.sum64_4_lo = sum64_4_lo;
87551
87552 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87553 var carry = 0;
87554 var lo = al;
87555 lo = (lo + bl) >>> 0;
87556 carry += lo < al ? 1 : 0;
87557 lo = (lo + cl) >>> 0;
87558 carry += lo < cl ? 1 : 0;
87559 lo = (lo + dl) >>> 0;
87560 carry += lo < dl ? 1 : 0;
87561 lo = (lo + el) >>> 0;
87562 carry += lo < el ? 1 : 0;
87563
87564 var hi = ah + bh + ch + dh + eh + carry;
87565 return hi >>> 0;
87566 };
87567 exports.sum64_5_hi = sum64_5_hi;
87568
87569 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
87570 var lo = al + bl + cl + dl + el;
87571
87572 return lo >>> 0;
87573 };
87574 exports.sum64_5_lo = sum64_5_lo;
87575
87576 function rotr64_hi(ah, al, num) {
87577 var r = (al << (32 - num)) | (ah >>> num);
87578 return r >>> 0;
87579 };
87580 exports.rotr64_hi = rotr64_hi;
87581
87582 function rotr64_lo(ah, al, num) {
87583 var r = (ah << (32 - num)) | (al >>> num);
87584 return r >>> 0;
87585 };
87586 exports.rotr64_lo = rotr64_lo;
87587
87588 function shr64_hi(ah, al, num) {
87589 return ah >>> num;
87590 };
87591 exports.shr64_hi = shr64_hi;
87592
87593 function shr64_lo(ah, al, num) {
87594 var r = (ah << (32 - num)) | (al >>> num);
87595 return r >>> 0;
87596 };
87597 exports.shr64_lo = shr64_lo;
87598
87599 },{"inherits":63}],63:[function(require,module,exports){
87600 arguments[4][9][0].apply(exports,arguments)
87601 },{"dup":9}],64:[function(require,module,exports){
87602 /**
87603 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
87604 * @param {String} str the string input value
87605 * @return {Boolean} a boolean if it is or is not hex prefixed
87606 * @throws if the str input is not a string
87607 */
87608 module.exports = function isHexPrefixed(str) {
87609 if (typeof str !== 'string') {
87610 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
87611 }
87612
87613 return str.slice(0, 2) === '0x';
87614 }
87615
87616 },{}],65:[function(require,module,exports){
87617 'use strict'
87618 module.exports = require('./lib/api')(require('./lib/keccak'))
87619
87620 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
87621 'use strict'
87622 var createKeccak = require('./keccak')
87623 var createShake = require('./shake')
87624
87625 module.exports = function (KeccakState) {
87626 var Keccak = createKeccak(KeccakState)
87627 var Shake = createShake(KeccakState)
87628
87629 return function (algorithm, options) {
87630 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
87631 switch (hash) {
87632 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
87633 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
87634 case 'keccak384': return new Keccak(832, 768, null, 384, options)
87635 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
87636
87637 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
87638 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
87639 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
87640 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
87641
87642 case 'shake128': return new Shake(1344, 256, 0x1f, options)
87643 case 'shake256': return new Shake(1088, 512, 0x1f, options)
87644
87645 default: throw new Error('Invald algorithm: ' + algorithm)
87646 }
87647 }
87648 }
87649
87650 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
87651 (function (Buffer){
87652 'use strict'
87653 var Transform = require('stream').Transform
87654 var inherits = require('inherits')
87655
87656 module.exports = function (KeccakState) {
87657 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
87658 Transform.call(this, options)
87659
87660 this._rate = rate
87661 this._capacity = capacity
87662 this._delimitedSuffix = delimitedSuffix
87663 this._hashBitLength = hashBitLength
87664 this._options = options
87665
87666 this._state = new KeccakState()
87667 this._state.initialize(rate, capacity)
87668 this._finalized = false
87669 }
87670
87671 inherits(Keccak, Transform)
87672
87673 Keccak.prototype._transform = function (chunk, encoding, callback) {
87674 var error = null
87675 try {
87676 this.update(chunk, encoding)
87677 } catch (err) {
87678 error = err
87679 }
87680
87681 callback(error)
87682 }
87683
87684 Keccak.prototype._flush = function (callback) {
87685 var error = null
87686 try {
87687 this.push(this.digest())
87688 } catch (err) {
87689 error = err
87690 }
87691
87692 callback(error)
87693 }
87694
87695 Keccak.prototype.update = function (data, encoding) {
87696 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87697 if (this._finalized) throw new Error('Digest already called')
87698 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87699
87700 this._state.absorb(data)
87701
87702 return this
87703 }
87704
87705 Keccak.prototype.digest = function (encoding) {
87706 if (this._finalized) throw new Error('Digest already called')
87707 this._finalized = true
87708
87709 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
87710 var digest = this._state.squeeze(this._hashBitLength / 8)
87711 if (encoding !== undefined) digest = digest.toString(encoding)
87712
87713 this._resetState()
87714
87715 return digest
87716 }
87717
87718 // remove result from memory
87719 Keccak.prototype._resetState = function () {
87720 this._state.initialize(this._rate, this._capacity)
87721 return this
87722 }
87723
87724 // because sometimes we need hash right now and little later
87725 Keccak.prototype._clone = function () {
87726 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
87727 this._state.copy(clone._state)
87728 clone._finalized = this._finalized
87729
87730 return clone
87731 }
87732
87733 return Keccak
87734 }
87735
87736 }).call(this,require("buffer").Buffer)
87737 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
87738 (function (Buffer){
87739 'use strict'
87740 var Transform = require('stream').Transform
87741 var inherits = require('inherits')
87742
87743 module.exports = function (KeccakState) {
87744 function Shake (rate, capacity, delimitedSuffix, options) {
87745 Transform.call(this, options)
87746
87747 this._rate = rate
87748 this._capacity = capacity
87749 this._delimitedSuffix = delimitedSuffix
87750 this._options = options
87751
87752 this._state = new KeccakState()
87753 this._state.initialize(rate, capacity)
87754 this._finalized = false
87755 }
87756
87757 inherits(Shake, Transform)
87758
87759 Shake.prototype._transform = function (chunk, encoding, callback) {
87760 var error = null
87761 try {
87762 this.update(chunk, encoding)
87763 } catch (err) {
87764 error = err
87765 }
87766
87767 callback(error)
87768 }
87769
87770 Shake.prototype._flush = function () {}
87771
87772 Shake.prototype._read = function (size) {
87773 this.push(this.squeeze(size))
87774 }
87775
87776 Shake.prototype.update = function (data, encoding) {
87777 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
87778 if (this._finalized) throw new Error('Squeeze already called')
87779 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
87780
87781 this._state.absorb(data)
87782
87783 return this
87784 }
87785
87786 Shake.prototype.squeeze = function (dataByteLength, encoding) {
87787 if (!this._finalized) {
87788 this._finalized = true
87789 this._state.absorbLastFewBits(this._delimitedSuffix)
87790 }
87791
87792 var data = this._state.squeeze(dataByteLength)
87793 if (encoding !== undefined) data = data.toString(encoding)
87794
87795 return data
87796 }
87797
87798 Shake.prototype._resetState = function () {
87799 this._state.initialize(this._rate, this._capacity)
87800 return this
87801 }
87802
87803 Shake.prototype._clone = function () {
87804 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
87805 this._state.copy(clone._state)
87806 clone._finalized = this._finalized
87807
87808 return clone
87809 }
87810
87811 return Shake
87812 }
87813
87814 }).call(this,require("buffer").Buffer)
87815 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
87816 'use strict'
87817 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]
87818
87819 exports.p1600 = function (s) {
87820 for (var round = 0; round < 24; ++round) {
87821 // theta
87822 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
87823 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
87824 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
87825 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
87826 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
87827 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
87828 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
87829 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
87830 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
87831 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
87832
87833 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
87834 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
87835 var t1slo0 = s[0] ^ lo
87836 var t1shi0 = s[1] ^ hi
87837 var t1slo5 = s[10] ^ lo
87838 var t1shi5 = s[11] ^ hi
87839 var t1slo10 = s[20] ^ lo
87840 var t1shi10 = s[21] ^ hi
87841 var t1slo15 = s[30] ^ lo
87842 var t1shi15 = s[31] ^ hi
87843 var t1slo20 = s[40] ^ lo
87844 var t1shi20 = s[41] ^ hi
87845 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
87846 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
87847 var t1slo1 = s[2] ^ lo
87848 var t1shi1 = s[3] ^ hi
87849 var t1slo6 = s[12] ^ lo
87850 var t1shi6 = s[13] ^ hi
87851 var t1slo11 = s[22] ^ lo
87852 var t1shi11 = s[23] ^ hi
87853 var t1slo16 = s[32] ^ lo
87854 var t1shi16 = s[33] ^ hi
87855 var t1slo21 = s[42] ^ lo
87856 var t1shi21 = s[43] ^ hi
87857 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
87858 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
87859 var t1slo2 = s[4] ^ lo
87860 var t1shi2 = s[5] ^ hi
87861 var t1slo7 = s[14] ^ lo
87862 var t1shi7 = s[15] ^ hi
87863 var t1slo12 = s[24] ^ lo
87864 var t1shi12 = s[25] ^ hi
87865 var t1slo17 = s[34] ^ lo
87866 var t1shi17 = s[35] ^ hi
87867 var t1slo22 = s[44] ^ lo
87868 var t1shi22 = s[45] ^ hi
87869 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
87870 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
87871 var t1slo3 = s[6] ^ lo
87872 var t1shi3 = s[7] ^ hi
87873 var t1slo8 = s[16] ^ lo
87874 var t1shi8 = s[17] ^ hi
87875 var t1slo13 = s[26] ^ lo
87876 var t1shi13 = s[27] ^ hi
87877 var t1slo18 = s[36] ^ lo
87878 var t1shi18 = s[37] ^ hi
87879 var t1slo23 = s[46] ^ lo
87880 var t1shi23 = s[47] ^ hi
87881 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
87882 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
87883 var t1slo4 = s[8] ^ lo
87884 var t1shi4 = s[9] ^ hi
87885 var t1slo9 = s[18] ^ lo
87886 var t1shi9 = s[19] ^ hi
87887 var t1slo14 = s[28] ^ lo
87888 var t1shi14 = s[29] ^ hi
87889 var t1slo19 = s[38] ^ lo
87890 var t1shi19 = s[39] ^ hi
87891 var t1slo24 = s[48] ^ lo
87892 var t1shi24 = s[49] ^ hi
87893
87894 // rho & pi
87895 var t2slo0 = t1slo0
87896 var t2shi0 = t1shi0
87897 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
87898 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
87899 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
87900 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
87901 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
87902 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
87903 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
87904 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
87905 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
87906 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
87907 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
87908 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
87909 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
87910 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
87911 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
87912 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
87913 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
87914 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
87915 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
87916 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
87917 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
87918 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
87919 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
87920 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
87921 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
87922 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
87923 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
87924 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
87925 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
87926 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
87927 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
87928 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
87929 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
87930 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
87931 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
87932 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
87933 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
87934 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
87935 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
87936 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
87937 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
87938 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
87939 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
87940 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
87941 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
87942 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
87943 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
87944 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
87945
87946 // chi
87947 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
87948 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
87949 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
87950 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
87951 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
87952 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
87953 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
87954 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
87955 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
87956 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
87957 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
87958 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
87959 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
87960 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
87961 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
87962 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
87963 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
87964 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
87965 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
87966 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
87967 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
87968 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
87969 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
87970 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
87971 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
87972 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
87973 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
87974 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
87975 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
87976 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
87977 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
87978 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
87979 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
87980 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
87981 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
87982 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
87983 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
87984 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
87985 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
87986 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
87987 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
87988 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
87989 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
87990 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
87991 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
87992 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
87993 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
87994 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
87995 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
87996 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
87997
87998 // iota
87999 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
88000 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
88001 }
88002 }
88003
88004 },{}],70:[function(require,module,exports){
88005 (function (Buffer){
88006 'use strict'
88007 var keccakState = require('./keccak-state-unroll')
88008
88009 function Keccak () {
88010 // much faster than `new Array(50)`
88011 this.state = [
88012 0, 0, 0, 0, 0,
88013 0, 0, 0, 0, 0,
88014 0, 0, 0, 0, 0,
88015 0, 0, 0, 0, 0,
88016 0, 0, 0, 0, 0
88017 ]
88018
88019 this.blockSize = null
88020 this.count = 0
88021 this.squeezing = false
88022 }
88023
88024 Keccak.prototype.initialize = function (rate, capacity) {
88025 for (var i = 0; i < 50; ++i) this.state[i] = 0
88026 this.blockSize = rate / 8
88027 this.count = 0
88028 this.squeezing = false
88029 }
88030
88031 Keccak.prototype.absorb = function (data) {
88032 for (var i = 0; i < data.length; ++i) {
88033 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
88034 this.count += 1
88035 if (this.count === this.blockSize) {
88036 keccakState.p1600(this.state)
88037 this.count = 0
88038 }
88039 }
88040 }
88041
88042 Keccak.prototype.absorbLastFewBits = function (bits) {
88043 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
88044 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
88045 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
88046 keccakState.p1600(this.state)
88047 this.count = 0
88048 this.squeezing = true
88049 }
88050
88051 Keccak.prototype.squeeze = function (length) {
88052 if (!this.squeezing) this.absorbLastFewBits(0x01)
88053
88054 var output = Buffer.allocUnsafe(length)
88055 for (var i = 0; i < length; ++i) {
88056 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
88057 this.count += 1
88058 if (this.count === this.blockSize) {
88059 keccakState.p1600(this.state)
88060 this.count = 0
88061 }
88062 }
88063
88064 return output
88065 }
88066
88067 Keccak.prototype.copy = function (dest) {
88068 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
88069 dest.blockSize = this.blockSize
88070 dest.count = this.count
88071 dest.squeezing = this.squeezing
88072 }
88073
88074 module.exports = Keccak
88075
88076 }).call(this,require("buffer").Buffer)
88077 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
88078 (function (Buffer){
88079 /*
88080 CryptoJS v3.1.2
88081 code.google.com/p/crypto-js
88082 (c) 2009-2013 by Jeff Mott. All rights reserved.
88083 code.google.com/p/crypto-js/wiki/License
88084 */
88085 /** @preserve
88086 (c) 2012 by Cédric Mesnil. All rights reserved.
88087
88088 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
88089
88090 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
88091 - 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.
88092
88093 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.
88094 */
88095
88096 // constants table
88097 var zl = [
88098 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
88099 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
88100 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
88101 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
88102 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
88103 ]
88104
88105 var zr = [
88106 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
88107 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
88108 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
88109 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
88110 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
88111 ]
88112
88113 var sl = [
88114 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
88115 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
88116 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
88117 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
88118 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
88119 ]
88120
88121 var sr = [
88122 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
88123 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
88124 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
88125 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
88126 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
88127 ]
88128
88129 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
88130 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
88131
88132 function bytesToWords (bytes) {
88133 var words = []
88134 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
88135 words[b >>> 5] |= bytes[i] << (24 - b % 32)
88136 }
88137 return words
88138 }
88139
88140 function wordsToBytes (words) {
88141 var bytes = []
88142 for (var b = 0; b < words.length * 32; b += 8) {
88143 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
88144 }
88145 return bytes
88146 }
88147
88148 function processBlock (H, M, offset) {
88149 // swap endian
88150 for (var i = 0; i < 16; i++) {
88151 var offset_i = offset + i
88152 var M_offset_i = M[offset_i]
88153
88154 // Swap
88155 M[offset_i] = (
88156 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
88157 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
88158 )
88159 }
88160
88161 // Working variables
88162 var al, bl, cl, dl, el
88163 var ar, br, cr, dr, er
88164
88165 ar = al = H[0]
88166 br = bl = H[1]
88167 cr = cl = H[2]
88168 dr = dl = H[3]
88169 er = el = H[4]
88170
88171 // computation
88172 var t
88173 for (i = 0; i < 80; i += 1) {
88174 t = (al + M[offset + zl[i]]) | 0
88175 if (i < 16) {
88176 t += f1(bl, cl, dl) + hl[0]
88177 } else if (i < 32) {
88178 t += f2(bl, cl, dl) + hl[1]
88179 } else if (i < 48) {
88180 t += f3(bl, cl, dl) + hl[2]
88181 } else if (i < 64) {
88182 t += f4(bl, cl, dl) + hl[3]
88183 } else {// if (i<80) {
88184 t += f5(bl, cl, dl) + hl[4]
88185 }
88186 t = t | 0
88187 t = rotl(t, sl[i])
88188 t = (t + el) | 0
88189 al = el
88190 el = dl
88191 dl = rotl(cl, 10)
88192 cl = bl
88193 bl = t
88194
88195 t = (ar + M[offset + zr[i]]) | 0
88196 if (i < 16) {
88197 t += f5(br, cr, dr) + hr[0]
88198 } else if (i < 32) {
88199 t += f4(br, cr, dr) + hr[1]
88200 } else if (i < 48) {
88201 t += f3(br, cr, dr) + hr[2]
88202 } else if (i < 64) {
88203 t += f2(br, cr, dr) + hr[3]
88204 } else {// if (i<80) {
88205 t += f1(br, cr, dr) + hr[4]
88206 }
88207
88208 t = t | 0
88209 t = rotl(t, sr[i])
88210 t = (t + er) | 0
88211 ar = er
88212 er = dr
88213 dr = rotl(cr, 10)
88214 cr = br
88215 br = t
88216 }
88217
88218 // intermediate hash value
88219 t = (H[1] + cl + dr) | 0
88220 H[1] = (H[2] + dl + er) | 0
88221 H[2] = (H[3] + el + ar) | 0
88222 H[3] = (H[4] + al + br) | 0
88223 H[4] = (H[0] + bl + cr) | 0
88224 H[0] = t
88225 }
88226
88227 function f1 (x, y, z) {
88228 return ((x) ^ (y) ^ (z))
88229 }
88230
88231 function f2 (x, y, z) {
88232 return (((x) & (y)) | ((~x) & (z)))
88233 }
88234
88235 function f3 (x, y, z) {
88236 return (((x) | (~(y))) ^ (z))
88237 }
88238
88239 function f4 (x, y, z) {
88240 return (((x) & (z)) | ((y) & (~(z))))
88241 }
88242
88243 function f5 (x, y, z) {
88244 return ((x) ^ ((y) | (~(z))))
88245 }
88246
88247 function rotl (x, n) {
88248 return (x << n) | (x >>> (32 - n))
88249 }
88250
88251 function ripemd160 (message) {
88252 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
88253
88254 if (typeof message === 'string') {
88255 message = new Buffer(message, 'utf8')
88256 }
88257
88258 var m = bytesToWords(message)
88259
88260 var nBitsLeft = message.length * 8
88261 var nBitsTotal = message.length * 8
88262
88263 // Add padding
88264 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
88265 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
88266 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
88267 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
88268 )
88269
88270 for (var i = 0; i < m.length; i += 16) {
88271 processBlock(H, m, i)
88272 }
88273
88274 // swap endian
88275 for (i = 0; i < 5; i++) {
88276 // shortcut
88277 var H_i = H[i]
88278
88279 // Swap
88280 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
88281 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
88282 }
88283
88284 var digestbytes = wordsToBytes(H)
88285 return new Buffer(digestbytes)
88286 }
88287
88288 module.exports = ripemd160
88289
88290 }).call(this,require("buffer").Buffer)
88291 },{"buffer":5}],72:[function(require,module,exports){
88292 (function (Buffer){
88293 const assert = require('assert')
88294 /**
88295 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
88296 * This function takes in a data, convert it to buffer if not, and a length for recursion
88297 *
88298 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88299 * @returns {Buffer} - returns buffer of encoded data
88300 **/
88301 exports.encode = function (input) {
88302 if (input instanceof Array) {
88303 var output = []
88304 for (var i = 0; i < input.length; i++) {
88305 output.push(exports.encode(input[i]))
88306 }
88307 var buf = Buffer.concat(output)
88308 return Buffer.concat([encodeLength(buf.length, 192), buf])
88309 } else {
88310 input = toBuffer(input)
88311 if (input.length === 1 && input[0] < 128) {
88312 return input
88313 } else {
88314 return Buffer.concat([encodeLength(input.length, 128), input])
88315 }
88316 }
88317 }
88318
88319 function safeParseInt (v, base) {
88320 if (v.slice(0, 2) === '00') {
88321 throw (new Error('invalid RLP: extra zeros'))
88322 }
88323
88324 return parseInt(v, base)
88325 }
88326
88327 function encodeLength (len, offset) {
88328 if (len < 56) {
88329 return new Buffer([len + offset])
88330 } else {
88331 var hexLength = intToHex(len)
88332 var lLength = hexLength.length / 2
88333 var firstByte = intToHex(offset + 55 + lLength)
88334 return new Buffer(firstByte + hexLength, 'hex')
88335 }
88336 }
88337
88338 /**
88339 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
88340 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
88341 * @returns {Array} - returns decode Array of Buffers containg the original message
88342 **/
88343 exports.decode = function (input, stream) {
88344 if (!input || input.length === 0) {
88345 return new Buffer([])
88346 }
88347
88348 input = toBuffer(input)
88349 var decoded = _decode(input)
88350
88351 if (stream) {
88352 return decoded
88353 }
88354
88355 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
88356 return decoded.data
88357 }
88358
88359 exports.getLength = function (input) {
88360 if (!input || input.length === 0) {
88361 return new Buffer([])
88362 }
88363
88364 input = toBuffer(input)
88365 var firstByte = input[0]
88366 if (firstByte <= 0x7f) {
88367 return input.length
88368 } else if (firstByte <= 0xb7) {
88369 return firstByte - 0x7f
88370 } else if (firstByte <= 0xbf) {
88371 return firstByte - 0xb6
88372 } else if (firstByte <= 0xf7) {
88373 // a list between 0-55 bytes long
88374 return firstByte - 0xbf
88375 } else {
88376 // a list over 55 bytes long
88377 var llength = firstByte - 0xf6
88378 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88379 return llength + length
88380 }
88381 }
88382
88383 function _decode (input) {
88384 var length, llength, data, innerRemainder, d
88385 var decoded = []
88386 var firstByte = input[0]
88387
88388 if (firstByte <= 0x7f) {
88389 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
88390 return {
88391 data: input.slice(0, 1),
88392 remainder: input.slice(1)
88393 }
88394 } else if (firstByte <= 0xb7) {
88395 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
88396 // The range of the first byte is [0x80, 0xb7]
88397 length = firstByte - 0x7f
88398
88399 // set 0x80 null to 0
88400 if (firstByte === 0x80) {
88401 data = new Buffer([])
88402 } else {
88403 data = input.slice(1, length)
88404 }
88405
88406 if (length === 2 && data[0] < 0x80) {
88407 throw new Error('invalid rlp encoding: byte must be less 0x80')
88408 }
88409
88410 return {
88411 data: data,
88412 remainder: input.slice(length)
88413 }
88414 } else if (firstByte <= 0xbf) {
88415 llength = firstByte - 0xb6
88416 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88417 data = input.slice(llength, length + llength)
88418 if (data.length < length) {
88419 throw (new Error('invalid RLP'))
88420 }
88421
88422 return {
88423 data: data,
88424 remainder: input.slice(length + llength)
88425 }
88426 } else if (firstByte <= 0xf7) {
88427 // a list between 0-55 bytes long
88428 length = firstByte - 0xbf
88429 innerRemainder = input.slice(1, length)
88430 while (innerRemainder.length) {
88431 d = _decode(innerRemainder)
88432 decoded.push(d.data)
88433 innerRemainder = d.remainder
88434 }
88435
88436 return {
88437 data: decoded,
88438 remainder: input.slice(length)
88439 }
88440 } else {
88441 // a list over 55 bytes long
88442 llength = firstByte - 0xf6
88443 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
88444 var totalLength = llength + length
88445 if (totalLength > input.length) {
88446 throw new Error('invalid rlp: total length is larger than the data')
88447 }
88448
88449 innerRemainder = input.slice(llength, totalLength)
88450 if (innerRemainder.length === 0) {
88451 throw new Error('invalid rlp, List has a invalid length')
88452 }
88453
88454 while (innerRemainder.length) {
88455 d = _decode(innerRemainder)
88456 decoded.push(d.data)
88457 innerRemainder = d.remainder
88458 }
88459 return {
88460 data: decoded,
88461 remainder: input.slice(totalLength)
88462 }
88463 }
88464 }
88465
88466 function isHexPrefixed (str) {
88467 return str.slice(0, 2) === '0x'
88468 }
88469
88470 // Removes 0x from a given String
88471 function stripHexPrefix (str) {
88472 if (typeof str !== 'string') {
88473 return str
88474 }
88475 return isHexPrefixed(str) ? str.slice(2) : str
88476 }
88477
88478 function intToHex (i) {
88479 var hex = i.toString(16)
88480 if (hex.length % 2) {
88481 hex = '0' + hex
88482 }
88483
88484 return hex
88485 }
88486
88487 function padToEven (a) {
88488 if (a.length % 2) a = '0' + a
88489 return a
88490 }
88491
88492 function intToBuffer (i) {
88493 var hex = intToHex(i)
88494 return new Buffer(hex, 'hex')
88495 }
88496
88497 function toBuffer (v) {
88498 if (!Buffer.isBuffer(v)) {
88499 if (typeof v === 'string') {
88500 if (isHexPrefixed(v)) {
88501 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
88502 } else {
88503 v = new Buffer(v)
88504 }
88505 } else if (typeof v === 'number') {
88506 if (!v) {
88507 v = new Buffer([])
88508 } else {
88509 v = intToBuffer(v)
88510 }
88511 } else if (v === null || v === undefined) {
88512 v = new Buffer([])
88513 } else if (v.toArray) {
88514 // converts a BN to a Buffer
88515 v = new Buffer(v.toArray())
88516 } else {
88517 throw new Error('invalid type')
88518 }
88519 }
88520 return v
88521 }
88522
88523 }).call(this,require("buffer").Buffer)
88524 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
88525 'use strict'
88526 module.exports = require('./lib')(require('./lib/elliptic'))
88527
88528 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
88529 (function (Buffer){
88530 'use strict'
88531 var toString = Object.prototype.toString
88532
88533 // TypeError
88534 exports.isArray = function (value, message) {
88535 if (!Array.isArray(value)) throw TypeError(message)
88536 }
88537
88538 exports.isBoolean = function (value, message) {
88539 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
88540 }
88541
88542 exports.isBuffer = function (value, message) {
88543 if (!Buffer.isBuffer(value)) throw TypeError(message)
88544 }
88545
88546 exports.isFunction = function (value, message) {
88547 if (toString.call(value) !== '[object Function]') throw TypeError(message)
88548 }
88549
88550 exports.isNumber = function (value, message) {
88551 if (toString.call(value) !== '[object Number]') throw TypeError(message)
88552 }
88553
88554 exports.isObject = function (value, message) {
88555 if (toString.call(value) !== '[object Object]') throw TypeError(message)
88556 }
88557
88558 // RangeError
88559 exports.isBufferLength = function (buffer, length, message) {
88560 if (buffer.length !== length) throw RangeError(message)
88561 }
88562
88563 exports.isBufferLength2 = function (buffer, length1, length2, message) {
88564 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
88565 }
88566
88567 exports.isLengthGTZero = function (value, message) {
88568 if (value.length === 0) throw RangeError(message)
88569 }
88570
88571 exports.isNumberInInterval = function (number, x, y, message) {
88572 if (number <= x || number >= y) throw RangeError(message)
88573 }
88574
88575 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
88576 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
88577 (function (Buffer){
88578 'use strict'
88579 var bip66 = require('bip66')
88580
88581 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
88582 // begin
88583 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
88584 // private key
88585 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88586 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88587 // middle
88588 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88589 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88590 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88591 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88592 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88593 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88594 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88595 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88596 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
88597 // public key
88598 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88599 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88600 0x00
88601 ])
88602
88603 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
88604 // begin
88605 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
88606 // private key
88607 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88608 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88609 // middle
88610 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
88611 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88612 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88613 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
88614 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
88615 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
88616 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
88617 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
88618 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
88619 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
88620 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
88621 // public key
88622 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88623 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88624 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88625 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88626 0x00
88627 ])
88628
88629 var ZERO_BUFFER_32 = new Buffer([
88630 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
88631 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
88632 ])
88633
88634 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
88635 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
88636 privateKey.copy(result, compressed ? 8 : 9)
88637 publicKey.copy(result, compressed ? 181 : 214)
88638 return result
88639 }
88640
88641 exports.privateKeyImport = function (privateKey) {
88642 var length = privateKey.length
88643
88644 // sequence header
88645 var index = 0
88646 if (length < index + 1 || privateKey[index] !== 0x30) return
88647 index += 1
88648
88649 // sequence length constructor
88650 if (length < index + 1 || !(privateKey[index] & 0x80)) return
88651
88652 var lenb = privateKey[index] & 0x7f
88653 index += 1
88654 if (lenb < 1 || lenb > 2) return
88655 if (length < index + lenb) return
88656
88657 // sequence length
88658 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
88659 index += lenb
88660 if (length < index + len) return
88661
88662 // sequence element 0: version number (=1)
88663 if (length < index + 3 ||
88664 privateKey[index] !== 0x02 ||
88665 privateKey[index + 1] !== 0x01 ||
88666 privateKey[index + 2] !== 0x01) {
88667 return
88668 }
88669 index += 3
88670
88671 // sequence element 1: octet string, up to 32 bytes
88672 if (length < index + 2 ||
88673 privateKey[index] !== 0x04 ||
88674 privateKey[index + 1] > 0x20 ||
88675 length < index + 2 + privateKey[index + 1]) {
88676 return
88677 }
88678
88679 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
88680 }
88681
88682 exports.signatureExport = function (sigObj) {
88683 var r = Buffer.concat([new Buffer([0]), sigObj.r])
88684 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
88685
88686 var s = Buffer.concat([new Buffer([0]), sigObj.s])
88687 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
88688
88689 return bip66.encode(r.slice(posR), s.slice(posS))
88690 }
88691
88692 exports.signatureImport = function (sig) {
88693 var r = new Buffer(ZERO_BUFFER_32)
88694 var s = new Buffer(ZERO_BUFFER_32)
88695
88696 try {
88697 var sigObj = bip66.decode(sig)
88698 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
88699 if (sigObj.r.length > 32) throw new Error('R length is too long')
88700 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
88701 if (sigObj.s.length > 32) throw new Error('S length is too long')
88702 } catch (err) {
88703 return
88704 }
88705
88706 sigObj.r.copy(r, 32 - sigObj.r.length)
88707 sigObj.s.copy(s, 32 - sigObj.s.length)
88708
88709 return { r: r, s: s }
88710 }
88711
88712 exports.signatureImportLax = function (sig) {
88713 var r = new Buffer(ZERO_BUFFER_32)
88714 var s = new Buffer(ZERO_BUFFER_32)
88715
88716 var length = sig.length
88717 var index = 0
88718
88719 // sequence tag byte
88720 if (sig[index++] !== 0x30) return
88721
88722 // sequence length byte
88723 var lenbyte = sig[index++]
88724 if (lenbyte & 0x80) {
88725 index += lenbyte - 0x80
88726 if (index > length) return
88727 }
88728
88729 // sequence tag byte for r
88730 if (sig[index++] !== 0x02) return
88731
88732 // length for r
88733 var rlen = sig[index++]
88734 if (rlen & 0x80) {
88735 lenbyte = rlen - 0x80
88736 if (index + lenbyte > length) return
88737 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88738 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
88739 }
88740 if (rlen > length - index) return
88741 var rindex = index
88742 index += rlen
88743
88744 // sequence tag byte for s
88745 if (sig[index++] !== 0x02) return
88746
88747 // length for s
88748 var slen = sig[index++]
88749 if (slen & 0x80) {
88750 lenbyte = slen - 0x80
88751 if (index + lenbyte > length) return
88752 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
88753 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
88754 }
88755 if (slen > length - index) return
88756 var sindex = index
88757 index += slen
88758
88759 // ignore leading zeros in r
88760 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
88761 // copy r value
88762 if (rlen > 32) return
88763 var rvalue = sig.slice(rindex, rindex + rlen)
88764 rvalue.copy(r, 32 - rvalue.length)
88765
88766 // ignore leading zeros in s
88767 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
88768 // copy s value
88769 if (slen > 32) return
88770 var svalue = sig.slice(sindex, sindex + slen)
88771 svalue.copy(s, 32 - svalue.length)
88772
88773 return { r: r, s: s }
88774 }
88775
88776 }).call(this,require("buffer").Buffer)
88777 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
88778 (function (Buffer){
88779 'use strict'
88780 var createHash = require('create-hash')
88781 var BN = require('bn.js')
88782 var EC = require('elliptic').ec
88783
88784 var messages = require('../messages.json')
88785
88786 var ec = new EC('secp256k1')
88787 var ecparams = ec.curve
88788
88789 function loadCompressedPublicKey (first, xBuffer) {
88790 var x = new BN(xBuffer)
88791
88792 // overflow
88793 if (x.cmp(ecparams.p) >= 0) return null
88794 x = x.toRed(ecparams.red)
88795
88796 // compute corresponding Y
88797 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
88798 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
88799
88800 return ec.keyPair({ pub: { x: x, y: y } })
88801 }
88802
88803 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
88804 var x = new BN(xBuffer)
88805 var y = new BN(yBuffer)
88806
88807 // overflow
88808 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
88809
88810 x = x.toRed(ecparams.red)
88811 y = y.toRed(ecparams.red)
88812
88813 // is odd flag
88814 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
88815
88816 // x*x*x + b = y*y
88817 var x3 = x.redSqr().redIMul(x)
88818 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
88819
88820 return ec.keyPair({ pub: { x: x, y: y } })
88821 }
88822
88823 function loadPublicKey (publicKey) {
88824 var first = publicKey[0]
88825 switch (first) {
88826 case 0x02:
88827 case 0x03:
88828 if (publicKey.length !== 33) return null
88829 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
88830 case 0x04:
88831 case 0x06:
88832 case 0x07:
88833 if (publicKey.length !== 65) return null
88834 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
88835 default:
88836 return null
88837 }
88838 }
88839
88840 exports.privateKeyVerify = function (privateKey) {
88841 var bn = new BN(privateKey)
88842 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
88843 }
88844
88845 exports.privateKeyExport = function (privateKey, compressed) {
88846 var d = new BN(privateKey)
88847 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
88848
88849 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88850 }
88851
88852 exports.privateKeyTweakAdd = function (privateKey, tweak) {
88853 var bn = new BN(tweak)
88854 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88855
88856 bn.iadd(new BN(privateKey))
88857 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
88858 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
88859
88860 return bn.toArrayLike(Buffer, 'be', 32)
88861 }
88862
88863 exports.privateKeyTweakMul = function (privateKey, tweak) {
88864 var bn = new BN(tweak)
88865 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
88866
88867 bn.imul(new BN(privateKey))
88868 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
88869
88870 return bn.toArrayLike(Buffer, 'be', 32)
88871 }
88872
88873 exports.publicKeyCreate = function (privateKey, compressed) {
88874 var d = new BN(privateKey)
88875 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
88876
88877 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
88878 }
88879
88880 exports.publicKeyConvert = function (publicKey, compressed) {
88881 var pair = loadPublicKey(publicKey)
88882 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88883
88884 return new Buffer(pair.getPublic(compressed, true))
88885 }
88886
88887 exports.publicKeyVerify = function (publicKey) {
88888 return loadPublicKey(publicKey) !== null
88889 }
88890
88891 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
88892 var pair = loadPublicKey(publicKey)
88893 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88894
88895 tweak = new BN(tweak)
88896 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
88897
88898 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
88899 }
88900
88901 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
88902 var pair = loadPublicKey(publicKey)
88903 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88904
88905 tweak = new BN(tweak)
88906 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
88907
88908 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
88909 }
88910
88911 exports.publicKeyCombine = function (publicKeys, compressed) {
88912 var pairs = new Array(publicKeys.length)
88913 for (var i = 0; i < publicKeys.length; ++i) {
88914 pairs[i] = loadPublicKey(publicKeys[i])
88915 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88916 }
88917
88918 var point = pairs[0].pub
88919 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
88920 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
88921
88922 return new Buffer(point.encode(true, compressed))
88923 }
88924
88925 exports.signatureNormalize = function (signature) {
88926 var r = new BN(signature.slice(0, 32))
88927 var s = new BN(signature.slice(32, 64))
88928 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88929
88930 var result = new Buffer(signature)
88931 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
88932
88933 return result
88934 }
88935
88936 exports.signatureExport = function (signature) {
88937 var r = signature.slice(0, 32)
88938 var s = signature.slice(32, 64)
88939 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88940
88941 return { r: r, s: s }
88942 }
88943
88944 exports.signatureImport = function (sigObj) {
88945 var r = new BN(sigObj.r)
88946 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
88947
88948 var s = new BN(sigObj.s)
88949 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
88950
88951 return Buffer.concat([
88952 r.toArrayLike(Buffer, 'be', 32),
88953 s.toArrayLike(Buffer, 'be', 32)
88954 ])
88955 }
88956
88957 exports.sign = function (message, privateKey, noncefn, data) {
88958 if (typeof noncefn === 'function') {
88959 var getNonce = noncefn
88960 noncefn = function (counter) {
88961 var nonce = getNonce(message, privateKey, null, data, counter)
88962 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
88963
88964 return new BN(nonce)
88965 }
88966 }
88967
88968 var d = new BN(privateKey)
88969 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
88970
88971 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
88972 return {
88973 signature: Buffer.concat([
88974 result.r.toArrayLike(Buffer, 'be', 32),
88975 result.s.toArrayLike(Buffer, 'be', 32)
88976 ]),
88977 recovery: result.recoveryParam
88978 }
88979 }
88980
88981 exports.verify = function (message, signature, publicKey) {
88982 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88983
88984 var sigr = new BN(sigObj.r)
88985 var sigs = new BN(sigObj.s)
88986 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
88987 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
88988
88989 var pair = loadPublicKey(publicKey)
88990 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
88991
88992 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
88993 }
88994
88995 exports.recover = function (message, signature, recovery, compressed) {
88996 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
88997
88998 var sigr = new BN(sigObj.r)
88999 var sigs = new BN(sigObj.s)
89000 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
89001
89002 try {
89003 if (sigr.isZero() || sigs.isZero()) throw new Error()
89004
89005 var point = ec.recoverPubKey(message, sigObj, recovery)
89006 return new Buffer(point.encode(true, compressed))
89007 } catch (err) {
89008 throw new Error(messages.ECDSA_RECOVER_FAIL)
89009 }
89010 }
89011
89012 exports.ecdh = function (publicKey, privateKey) {
89013 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
89014 return createHash('sha256').update(shared).digest()
89015 }
89016
89017 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
89018 var pair = loadPublicKey(publicKey)
89019 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
89020
89021 var scalar = new BN(privateKey)
89022 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
89023
89024 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
89025 }
89026
89027 }).call(this,require("buffer").Buffer)
89028 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
89029 'use strict'
89030 var assert = require('./assert')
89031 var der = require('./der')
89032 var messages = require('./messages.json')
89033
89034 function initCompressedValue (value, defaultValue) {
89035 if (value === undefined) return defaultValue
89036
89037 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
89038 return value
89039 }
89040
89041 module.exports = function (secp256k1) {
89042 return {
89043 privateKeyVerify: function (privateKey) {
89044 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89045 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
89046 },
89047
89048 privateKeyExport: function (privateKey, compressed) {
89049 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89050 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89051
89052 compressed = initCompressedValue(compressed, true)
89053 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
89054
89055 return der.privateKeyExport(privateKey, publicKey, compressed)
89056 },
89057
89058 privateKeyImport: function (privateKey) {
89059 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89060
89061 privateKey = der.privateKeyImport(privateKey)
89062 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
89063
89064 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
89065 },
89066
89067 privateKeyTweakAdd: function (privateKey, tweak) {
89068 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89069 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89070
89071 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89072 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89073
89074 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
89075 },
89076
89077 privateKeyTweakMul: function (privateKey, tweak) {
89078 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89079 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89080
89081 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89082 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89083
89084 return secp256k1.privateKeyTweakMul(privateKey, tweak)
89085 },
89086
89087 publicKeyCreate: function (privateKey, compressed) {
89088 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89089 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89090
89091 compressed = initCompressedValue(compressed, true)
89092
89093 return secp256k1.publicKeyCreate(privateKey, compressed)
89094 },
89095
89096 publicKeyConvert: function (publicKey, compressed) {
89097 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89098 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89099
89100 compressed = initCompressedValue(compressed, true)
89101
89102 return secp256k1.publicKeyConvert(publicKey, compressed)
89103 },
89104
89105 publicKeyVerify: function (publicKey) {
89106 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89107 return secp256k1.publicKeyVerify(publicKey)
89108 },
89109
89110 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
89111 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89112 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89113
89114 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89115 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89116
89117 compressed = initCompressedValue(compressed, true)
89118
89119 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
89120 },
89121
89122 publicKeyTweakMul: function (publicKey, tweak, compressed) {
89123 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89124 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89125
89126 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
89127 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
89128
89129 compressed = initCompressedValue(compressed, true)
89130
89131 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
89132 },
89133
89134 publicKeyCombine: function (publicKeys, compressed) {
89135 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
89136 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
89137 for (var i = 0; i < publicKeys.length; ++i) {
89138 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
89139 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89140 }
89141
89142 compressed = initCompressedValue(compressed, true)
89143
89144 return secp256k1.publicKeyCombine(publicKeys, compressed)
89145 },
89146
89147 signatureNormalize: function (signature) {
89148 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89149 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89150
89151 return secp256k1.signatureNormalize(signature)
89152 },
89153
89154 signatureExport: function (signature) {
89155 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89156 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89157
89158 var sigObj = secp256k1.signatureExport(signature)
89159 return der.signatureExport(sigObj)
89160 },
89161
89162 signatureImport: function (sig) {
89163 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89164 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89165
89166 var sigObj = der.signatureImport(sig)
89167 if (sigObj) return secp256k1.signatureImport(sigObj)
89168
89169 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89170 },
89171
89172 signatureImportLax: function (sig) {
89173 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89174 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89175
89176 var sigObj = der.signatureImportLax(sig)
89177 if (sigObj) return secp256k1.signatureImport(sigObj)
89178
89179 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
89180 },
89181
89182 sign: function (message, privateKey, options) {
89183 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89184 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89185
89186 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89187 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89188
89189 var data = null
89190 var noncefn = null
89191 if (options !== undefined) {
89192 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
89193
89194 if (options.data !== undefined) {
89195 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
89196 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
89197 data = options.data
89198 }
89199
89200 if (options.noncefn !== undefined) {
89201 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
89202 noncefn = options.noncefn
89203 }
89204 }
89205
89206 return secp256k1.sign(message, privateKey, noncefn, data)
89207 },
89208
89209 verify: function (message, signature, publicKey) {
89210 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89211 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89212
89213 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89214 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89215
89216 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89217 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89218
89219 return secp256k1.verify(message, signature, publicKey)
89220 },
89221
89222 recover: function (message, signature, recovery, compressed) {
89223 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
89224 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
89225
89226 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
89227 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
89228
89229 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
89230 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
89231
89232 compressed = initCompressedValue(compressed, true)
89233
89234 return secp256k1.recover(message, signature, recovery, compressed)
89235 },
89236
89237 ecdh: function (publicKey, privateKey) {
89238 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89239 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89240
89241 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89242 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89243
89244 return secp256k1.ecdh(publicKey, privateKey)
89245 },
89246
89247 ecdhUnsafe: function (publicKey, privateKey, compressed) {
89248 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
89249 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
89250
89251 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
89252 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
89253
89254 compressed = initCompressedValue(compressed, true)
89255
89256 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
89257 }
89258 }
89259 }
89260
89261 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
89262 module.exports={
89263 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
89264 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
89265 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
89266 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
89267 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89268 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
89269 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
89270 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
89271 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
89272 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
89273 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
89274 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
89275 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
89276 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
89277 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
89278 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
89279 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
89280 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
89281 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
89282 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
89283 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
89284 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
89285 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
89286 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
89287 "MSG32_TYPE_INVALID": "message should be a Buffer",
89288 "MSG32_LENGTH_INVALID": "message length is invalid",
89289 "OPTIONS_TYPE_INVALID": "options should be an Object",
89290 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
89291 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
89292 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
89293 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
89294 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
89295 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
89296 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
89297 }
89298
89299 },{}],79:[function(require,module,exports){
89300 (function (Buffer){
89301 // prototype class for hash functions
89302 function Hash (blockSize, finalSize) {
89303 this._block = new Buffer(blockSize)
89304 this._finalSize = finalSize
89305 this._blockSize = blockSize
89306 this._len = 0
89307 this._s = 0
89308 }
89309
89310 Hash.prototype.update = function (data, enc) {
89311 if (typeof data === 'string') {
89312 enc = enc || 'utf8'
89313 data = new Buffer(data, enc)
89314 }
89315
89316 var l = this._len += data.length
89317 var s = this._s || 0
89318 var f = 0
89319 var buffer = this._block
89320
89321 while (s < l) {
89322 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
89323 var ch = (t - f)
89324
89325 for (var i = 0; i < ch; i++) {
89326 buffer[(s % this._blockSize) + i] = data[i + f]
89327 }
89328
89329 s += ch
89330 f += ch
89331
89332 if ((s % this._blockSize) === 0) {
89333 this._update(buffer)
89334 }
89335 }
89336 this._s = s
89337
89338 return this
89339 }
89340
89341 Hash.prototype.digest = function (enc) {
89342 // Suppose the length of the message M, in bits, is l
89343 var l = this._len * 8
89344
89345 // Append the bit 1 to the end of the message
89346 this._block[this._len % this._blockSize] = 0x80
89347
89348 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
89349 this._block.fill(0, this._len % this._blockSize + 1)
89350
89351 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
89352 this._update(this._block)
89353 this._block.fill(0)
89354 }
89355
89356 // to this append the block which is equal to the number l written in binary
89357 // TODO: handle case where l is > Math.pow(2, 29)
89358 this._block.writeInt32BE(l, this._blockSize - 4)
89359
89360 var hash = this._update(this._block) || this._hash()
89361
89362 return enc ? hash.toString(enc) : hash
89363 }
89364
89365 Hash.prototype._update = function () {
89366 throw new Error('_update must be implemented by subclass')
89367 }
89368
89369 module.exports = Hash
89370
89371 }).call(this,require("buffer").Buffer)
89372 },{"buffer":5}],80:[function(require,module,exports){
89373 var exports = module.exports = function SHA (algorithm) {
89374 algorithm = algorithm.toLowerCase()
89375
89376 var Algorithm = exports[algorithm]
89377 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
89378
89379 return new Algorithm()
89380 }
89381
89382 exports.sha = require('./sha')
89383 exports.sha1 = require('./sha1')
89384 exports.sha224 = require('./sha224')
89385 exports.sha256 = require('./sha256')
89386 exports.sha384 = require('./sha384')
89387 exports.sha512 = require('./sha512')
89388
89389 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
89390 (function (Buffer){
89391 /*
89392 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
89393 * in FIPS PUB 180-1
89394 * This source code is derived from sha1.js of the same repository.
89395 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
89396 * operation was added.
89397 */
89398
89399 var inherits = require('inherits')
89400 var Hash = require('./hash')
89401
89402 var K = [
89403 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89404 ]
89405
89406 var W = new Array(80)
89407
89408 function Sha () {
89409 this.init()
89410 this._w = W
89411
89412 Hash.call(this, 64, 56)
89413 }
89414
89415 inherits(Sha, Hash)
89416
89417 Sha.prototype.init = function () {
89418 this._a = 0x67452301
89419 this._b = 0xefcdab89
89420 this._c = 0x98badcfe
89421 this._d = 0x10325476
89422 this._e = 0xc3d2e1f0
89423
89424 return this
89425 }
89426
89427 function rotl5 (num) {
89428 return (num << 5) | (num >>> 27)
89429 }
89430
89431 function rotl30 (num) {
89432 return (num << 30) | (num >>> 2)
89433 }
89434
89435 function ft (s, b, c, d) {
89436 if (s === 0) return (b & c) | ((~b) & d)
89437 if (s === 2) return (b & c) | (b & d) | (c & d)
89438 return b ^ c ^ d
89439 }
89440
89441 Sha.prototype._update = function (M) {
89442 var W = this._w
89443
89444 var a = this._a | 0
89445 var b = this._b | 0
89446 var c = this._c | 0
89447 var d = this._d | 0
89448 var e = this._e | 0
89449
89450 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89451 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
89452
89453 for (var j = 0; j < 80; ++j) {
89454 var s = ~~(j / 20)
89455 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89456
89457 e = d
89458 d = c
89459 c = rotl30(b)
89460 b = a
89461 a = t
89462 }
89463
89464 this._a = (a + this._a) | 0
89465 this._b = (b + this._b) | 0
89466 this._c = (c + this._c) | 0
89467 this._d = (d + this._d) | 0
89468 this._e = (e + this._e) | 0
89469 }
89470
89471 Sha.prototype._hash = function () {
89472 var H = new Buffer(20)
89473
89474 H.writeInt32BE(this._a | 0, 0)
89475 H.writeInt32BE(this._b | 0, 4)
89476 H.writeInt32BE(this._c | 0, 8)
89477 H.writeInt32BE(this._d | 0, 12)
89478 H.writeInt32BE(this._e | 0, 16)
89479
89480 return H
89481 }
89482
89483 module.exports = Sha
89484
89485 }).call(this,require("buffer").Buffer)
89486 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
89487 (function (Buffer){
89488 /*
89489 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
89490 * in FIPS PUB 180-1
89491 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
89492 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89493 * Distributed under the BSD License
89494 * See http://pajhome.org.uk/crypt/md5 for details.
89495 */
89496
89497 var inherits = require('inherits')
89498 var Hash = require('./hash')
89499
89500 var K = [
89501 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
89502 ]
89503
89504 var W = new Array(80)
89505
89506 function Sha1 () {
89507 this.init()
89508 this._w = W
89509
89510 Hash.call(this, 64, 56)
89511 }
89512
89513 inherits(Sha1, Hash)
89514
89515 Sha1.prototype.init = function () {
89516 this._a = 0x67452301
89517 this._b = 0xefcdab89
89518 this._c = 0x98badcfe
89519 this._d = 0x10325476
89520 this._e = 0xc3d2e1f0
89521
89522 return this
89523 }
89524
89525 function rotl1 (num) {
89526 return (num << 1) | (num >>> 31)
89527 }
89528
89529 function rotl5 (num) {
89530 return (num << 5) | (num >>> 27)
89531 }
89532
89533 function rotl30 (num) {
89534 return (num << 30) | (num >>> 2)
89535 }
89536
89537 function ft (s, b, c, d) {
89538 if (s === 0) return (b & c) | ((~b) & d)
89539 if (s === 2) return (b & c) | (b & d) | (c & d)
89540 return b ^ c ^ d
89541 }
89542
89543 Sha1.prototype._update = function (M) {
89544 var W = this._w
89545
89546 var a = this._a | 0
89547 var b = this._b | 0
89548 var c = this._c | 0
89549 var d = this._d | 0
89550 var e = this._e | 0
89551
89552 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89553 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
89554
89555 for (var j = 0; j < 80; ++j) {
89556 var s = ~~(j / 20)
89557 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
89558
89559 e = d
89560 d = c
89561 c = rotl30(b)
89562 b = a
89563 a = t
89564 }
89565
89566 this._a = (a + this._a) | 0
89567 this._b = (b + this._b) | 0
89568 this._c = (c + this._c) | 0
89569 this._d = (d + this._d) | 0
89570 this._e = (e + this._e) | 0
89571 }
89572
89573 Sha1.prototype._hash = function () {
89574 var H = new Buffer(20)
89575
89576 H.writeInt32BE(this._a | 0, 0)
89577 H.writeInt32BE(this._b | 0, 4)
89578 H.writeInt32BE(this._c | 0, 8)
89579 H.writeInt32BE(this._d | 0, 12)
89580 H.writeInt32BE(this._e | 0, 16)
89581
89582 return H
89583 }
89584
89585 module.exports = Sha1
89586
89587 }).call(this,require("buffer").Buffer)
89588 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
89589 (function (Buffer){
89590 /**
89591 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89592 * in FIPS 180-2
89593 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89594 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89595 *
89596 */
89597
89598 var inherits = require('inherits')
89599 var Sha256 = require('./sha256')
89600 var Hash = require('./hash')
89601
89602 var W = new Array(64)
89603
89604 function Sha224 () {
89605 this.init()
89606
89607 this._w = W // new Array(64)
89608
89609 Hash.call(this, 64, 56)
89610 }
89611
89612 inherits(Sha224, Sha256)
89613
89614 Sha224.prototype.init = function () {
89615 this._a = 0xc1059ed8
89616 this._b = 0x367cd507
89617 this._c = 0x3070dd17
89618 this._d = 0xf70e5939
89619 this._e = 0xffc00b31
89620 this._f = 0x68581511
89621 this._g = 0x64f98fa7
89622 this._h = 0xbefa4fa4
89623
89624 return this
89625 }
89626
89627 Sha224.prototype._hash = function () {
89628 var H = new Buffer(28)
89629
89630 H.writeInt32BE(this._a, 0)
89631 H.writeInt32BE(this._b, 4)
89632 H.writeInt32BE(this._c, 8)
89633 H.writeInt32BE(this._d, 12)
89634 H.writeInt32BE(this._e, 16)
89635 H.writeInt32BE(this._f, 20)
89636 H.writeInt32BE(this._g, 24)
89637
89638 return H
89639 }
89640
89641 module.exports = Sha224
89642
89643 }).call(this,require("buffer").Buffer)
89644 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
89645 (function (Buffer){
89646 /**
89647 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
89648 * in FIPS 180-2
89649 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
89650 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
89651 *
89652 */
89653
89654 var inherits = require('inherits')
89655 var Hash = require('./hash')
89656
89657 var K = [
89658 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
89659 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
89660 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
89661 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
89662 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
89663 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
89664 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
89665 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
89666 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
89667 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
89668 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
89669 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
89670 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
89671 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
89672 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
89673 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
89674 ]
89675
89676 var W = new Array(64)
89677
89678 function Sha256 () {
89679 this.init()
89680
89681 this._w = W // new Array(64)
89682
89683 Hash.call(this, 64, 56)
89684 }
89685
89686 inherits(Sha256, Hash)
89687
89688 Sha256.prototype.init = function () {
89689 this._a = 0x6a09e667
89690 this._b = 0xbb67ae85
89691 this._c = 0x3c6ef372
89692 this._d = 0xa54ff53a
89693 this._e = 0x510e527f
89694 this._f = 0x9b05688c
89695 this._g = 0x1f83d9ab
89696 this._h = 0x5be0cd19
89697
89698 return this
89699 }
89700
89701 function ch (x, y, z) {
89702 return z ^ (x & (y ^ z))
89703 }
89704
89705 function maj (x, y, z) {
89706 return (x & y) | (z & (x | y))
89707 }
89708
89709 function sigma0 (x) {
89710 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
89711 }
89712
89713 function sigma1 (x) {
89714 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
89715 }
89716
89717 function gamma0 (x) {
89718 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
89719 }
89720
89721 function gamma1 (x) {
89722 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
89723 }
89724
89725 Sha256.prototype._update = function (M) {
89726 var W = this._w
89727
89728 var a = this._a | 0
89729 var b = this._b | 0
89730 var c = this._c | 0
89731 var d = this._d | 0
89732 var e = this._e | 0
89733 var f = this._f | 0
89734 var g = this._g | 0
89735 var h = this._h | 0
89736
89737 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
89738 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
89739
89740 for (var j = 0; j < 64; ++j) {
89741 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
89742 var T2 = (sigma0(a) + maj(a, b, c)) | 0
89743
89744 h = g
89745 g = f
89746 f = e
89747 e = (d + T1) | 0
89748 d = c
89749 c = b
89750 b = a
89751 a = (T1 + T2) | 0
89752 }
89753
89754 this._a = (a + this._a) | 0
89755 this._b = (b + this._b) | 0
89756 this._c = (c + this._c) | 0
89757 this._d = (d + this._d) | 0
89758 this._e = (e + this._e) | 0
89759 this._f = (f + this._f) | 0
89760 this._g = (g + this._g) | 0
89761 this._h = (h + this._h) | 0
89762 }
89763
89764 Sha256.prototype._hash = function () {
89765 var H = new Buffer(32)
89766
89767 H.writeInt32BE(this._a, 0)
89768 H.writeInt32BE(this._b, 4)
89769 H.writeInt32BE(this._c, 8)
89770 H.writeInt32BE(this._d, 12)
89771 H.writeInt32BE(this._e, 16)
89772 H.writeInt32BE(this._f, 20)
89773 H.writeInt32BE(this._g, 24)
89774 H.writeInt32BE(this._h, 28)
89775
89776 return H
89777 }
89778
89779 module.exports = Sha256
89780
89781 }).call(this,require("buffer").Buffer)
89782 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
89783 (function (Buffer){
89784 var inherits = require('inherits')
89785 var SHA512 = require('./sha512')
89786 var Hash = require('./hash')
89787
89788 var W = new Array(160)
89789
89790 function Sha384 () {
89791 this.init()
89792 this._w = W
89793
89794 Hash.call(this, 128, 112)
89795 }
89796
89797 inherits(Sha384, SHA512)
89798
89799 Sha384.prototype.init = function () {
89800 this._ah = 0xcbbb9d5d
89801 this._bh = 0x629a292a
89802 this._ch = 0x9159015a
89803 this._dh = 0x152fecd8
89804 this._eh = 0x67332667
89805 this._fh = 0x8eb44a87
89806 this._gh = 0xdb0c2e0d
89807 this._hh = 0x47b5481d
89808
89809 this._al = 0xc1059ed8
89810 this._bl = 0x367cd507
89811 this._cl = 0x3070dd17
89812 this._dl = 0xf70e5939
89813 this._el = 0xffc00b31
89814 this._fl = 0x68581511
89815 this._gl = 0x64f98fa7
89816 this._hl = 0xbefa4fa4
89817
89818 return this
89819 }
89820
89821 Sha384.prototype._hash = function () {
89822 var H = new Buffer(48)
89823
89824 function writeInt64BE (h, l, offset) {
89825 H.writeInt32BE(h, offset)
89826 H.writeInt32BE(l, offset + 4)
89827 }
89828
89829 writeInt64BE(this._ah, this._al, 0)
89830 writeInt64BE(this._bh, this._bl, 8)
89831 writeInt64BE(this._ch, this._cl, 16)
89832 writeInt64BE(this._dh, this._dl, 24)
89833 writeInt64BE(this._eh, this._el, 32)
89834 writeInt64BE(this._fh, this._fl, 40)
89835
89836 return H
89837 }
89838
89839 module.exports = Sha384
89840
89841 }).call(this,require("buffer").Buffer)
89842 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
89843 (function (Buffer){
89844 var inherits = require('inherits')
89845 var Hash = require('./hash')
89846
89847 var K = [
89848 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
89849 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
89850 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
89851 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
89852 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
89853 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
89854 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
89855 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
89856 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
89857 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
89858 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
89859 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
89860 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
89861 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
89862 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
89863 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
89864 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
89865 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
89866 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
89867 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
89868 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
89869 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
89870 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
89871 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
89872 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
89873 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
89874 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
89875 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
89876 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
89877 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
89878 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
89879 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
89880 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
89881 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
89882 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
89883 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
89884 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
89885 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
89886 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
89887 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
89888 ]
89889
89890 var W = new Array(160)
89891
89892 function Sha512 () {
89893 this.init()
89894 this._w = W
89895
89896 Hash.call(this, 128, 112)
89897 }
89898
89899 inherits(Sha512, Hash)
89900
89901 Sha512.prototype.init = function () {
89902 this._ah = 0x6a09e667
89903 this._bh = 0xbb67ae85
89904 this._ch = 0x3c6ef372
89905 this._dh = 0xa54ff53a
89906 this._eh = 0x510e527f
89907 this._fh = 0x9b05688c
89908 this._gh = 0x1f83d9ab
89909 this._hh = 0x5be0cd19
89910
89911 this._al = 0xf3bcc908
89912 this._bl = 0x84caa73b
89913 this._cl = 0xfe94f82b
89914 this._dl = 0x5f1d36f1
89915 this._el = 0xade682d1
89916 this._fl = 0x2b3e6c1f
89917 this._gl = 0xfb41bd6b
89918 this._hl = 0x137e2179
89919
89920 return this
89921 }
89922
89923 function Ch (x, y, z) {
89924 return z ^ (x & (y ^ z))
89925 }
89926
89927 function maj (x, y, z) {
89928 return (x & y) | (z & (x | y))
89929 }
89930
89931 function sigma0 (x, xl) {
89932 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
89933 }
89934
89935 function sigma1 (x, xl) {
89936 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
89937 }
89938
89939 function Gamma0 (x, xl) {
89940 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
89941 }
89942
89943 function Gamma0l (x, xl) {
89944 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
89945 }
89946
89947 function Gamma1 (x, xl) {
89948 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
89949 }
89950
89951 function Gamma1l (x, xl) {
89952 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
89953 }
89954
89955 function getCarry (a, b) {
89956 return (a >>> 0) < (b >>> 0) ? 1 : 0
89957 }
89958
89959 Sha512.prototype._update = function (M) {
89960 var W = this._w
89961
89962 var ah = this._ah | 0
89963 var bh = this._bh | 0
89964 var ch = this._ch | 0
89965 var dh = this._dh | 0
89966 var eh = this._eh | 0
89967 var fh = this._fh | 0
89968 var gh = this._gh | 0
89969 var hh = this._hh | 0
89970
89971 var al = this._al | 0
89972 var bl = this._bl | 0
89973 var cl = this._cl | 0
89974 var dl = this._dl | 0
89975 var el = this._el | 0
89976 var fl = this._fl | 0
89977 var gl = this._gl | 0
89978 var hl = this._hl | 0
89979
89980 for (var i = 0; i < 32; i += 2) {
89981 W[i] = M.readInt32BE(i * 4)
89982 W[i + 1] = M.readInt32BE(i * 4 + 4)
89983 }
89984 for (; i < 160; i += 2) {
89985 var xh = W[i - 15 * 2]
89986 var xl = W[i - 15 * 2 + 1]
89987 var gamma0 = Gamma0(xh, xl)
89988 var gamma0l = Gamma0l(xl, xh)
89989
89990 xh = W[i - 2 * 2]
89991 xl = W[i - 2 * 2 + 1]
89992 var gamma1 = Gamma1(xh, xl)
89993 var gamma1l = Gamma1l(xl, xh)
89994
89995 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
89996 var Wi7h = W[i - 7 * 2]
89997 var Wi7l = W[i - 7 * 2 + 1]
89998
89999 var Wi16h = W[i - 16 * 2]
90000 var Wi16l = W[i - 16 * 2 + 1]
90001
90002 var Wil = (gamma0l + Wi7l) | 0
90003 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
90004 Wil = (Wil + gamma1l) | 0
90005 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
90006 Wil = (Wil + Wi16l) | 0
90007 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
90008
90009 W[i] = Wih
90010 W[i + 1] = Wil
90011 }
90012
90013 for (var j = 0; j < 160; j += 2) {
90014 Wih = W[j]
90015 Wil = W[j + 1]
90016
90017 var majh = maj(ah, bh, ch)
90018 var majl = maj(al, bl, cl)
90019
90020 var sigma0h = sigma0(ah, al)
90021 var sigma0l = sigma0(al, ah)
90022 var sigma1h = sigma1(eh, el)
90023 var sigma1l = sigma1(el, eh)
90024
90025 // t1 = h + sigma1 + ch + K[j] + W[j]
90026 var Kih = K[j]
90027 var Kil = K[j + 1]
90028
90029 var chh = Ch(eh, fh, gh)
90030 var chl = Ch(el, fl, gl)
90031
90032 var t1l = (hl + sigma1l) | 0
90033 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
90034 t1l = (t1l + chl) | 0
90035 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
90036 t1l = (t1l + Kil) | 0
90037 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
90038 t1l = (t1l + Wil) | 0
90039 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
90040
90041 // t2 = sigma0 + maj
90042 var t2l = (sigma0l + majl) | 0
90043 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
90044
90045 hh = gh
90046 hl = gl
90047 gh = fh
90048 gl = fl
90049 fh = eh
90050 fl = el
90051 el = (dl + t1l) | 0
90052 eh = (dh + t1h + getCarry(el, dl)) | 0
90053 dh = ch
90054 dl = cl
90055 ch = bh
90056 cl = bl
90057 bh = ah
90058 bl = al
90059 al = (t1l + t2l) | 0
90060 ah = (t1h + t2h + getCarry(al, t1l)) | 0
90061 }
90062
90063 this._al = (this._al + al) | 0
90064 this._bl = (this._bl + bl) | 0
90065 this._cl = (this._cl + cl) | 0
90066 this._dl = (this._dl + dl) | 0
90067 this._el = (this._el + el) | 0
90068 this._fl = (this._fl + fl) | 0
90069 this._gl = (this._gl + gl) | 0
90070 this._hl = (this._hl + hl) | 0
90071
90072 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
90073 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
90074 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
90075 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
90076 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
90077 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
90078 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
90079 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
90080 }
90081
90082 Sha512.prototype._hash = function () {
90083 var H = new Buffer(64)
90084
90085 function writeInt64BE (h, l, offset) {
90086 H.writeInt32BE(h, offset)
90087 H.writeInt32BE(l, offset + 4)
90088 }
90089
90090 writeInt64BE(this._ah, this._al, 0)
90091 writeInt64BE(this._bh, this._bl, 8)
90092 writeInt64BE(this._ch, this._cl, 16)
90093 writeInt64BE(this._dh, this._dl, 24)
90094 writeInt64BE(this._eh, this._el, 32)
90095 writeInt64BE(this._fh, this._fl, 40)
90096 writeInt64BE(this._gh, this._gl, 48)
90097 writeInt64BE(this._hh, this._hl, 56)
90098
90099 return H
90100 }
90101
90102 module.exports = Sha512
90103
90104 }).call(this,require("buffer").Buffer)
90105 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
90106 var isHexPrefixed = require('is-hex-prefixed');
90107
90108 /**
90109 * Removes '0x' from a given `String` is present
90110 * @param {String} str the string value
90111 * @return {String|Optional} a string by pass if necessary
90112 */
90113 module.exports = function stripHexPrefix(str) {
90114 if (typeof str !== 'string') {
90115 return str;
90116 }
90117
90118 return isHexPrefixed(str) ? str.slice(2) : str;
90119 }
90120
90121 },{"is-hex-prefixed":64}]},{},[31])(31)
90122 });</script>
90123 <script>function convertRippleAdrr(address) {
90124 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
90125 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
90126 )
90127 }
90128
90129 function convertRipplePriv(priv) {
90130 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
90131 }
90132
90133 </script>
90134 <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.bchaddr = 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){
90135 // base-x encoding
90136 // Forked from https://github.com/cryptocoinjs/bs58
90137 // Originally written by Mike Hearn for BitcoinJ
90138 // Copyright (c) 2011 Google Inc
90139 // Ported to JavaScript by Stefan Thomas
90140 // Merged Buffer refactorings from base58-native by Stephen Pair
90141 // Copyright (c) 2013 BitPay Inc
90142
90143 var Buffer = require('safe-buffer').Buffer
90144
90145 module.exports = function base (ALPHABET) {
90146 var ALPHABET_MAP = {}
90147 var BASE = ALPHABET.length
90148 var LEADER = ALPHABET.charAt(0)
90149
90150 // pre-compute lookup table
90151 for (var z = 0; z < ALPHABET.length; z++) {
90152 var x = ALPHABET.charAt(z)
90153
90154 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
90155 ALPHABET_MAP[x] = z
90156 }
90157
90158 function encode (source) {
90159 if (source.length === 0) return ''
90160
90161 var digits = [0]
90162 for (var i = 0; i < source.length; ++i) {
90163 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
90164 carry += digits[j] << 8
90165 digits[j] = carry % BASE
90166 carry = (carry / BASE) | 0
90167 }
90168
90169 while (carry > 0) {
90170 digits.push(carry % BASE)
90171 carry = (carry / BASE) | 0
90172 }
90173 }
90174
90175 var string = ''
90176
90177 // deal with leading zeros
90178 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += LEADER
90179 // convert digits to a string
90180 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
90181
90182 return string
90183 }
90184
90185 function decodeUnsafe (string) {
90186 if (typeof string !== 'string') throw new TypeError('Expected String')
90187 if (string.length === 0) return Buffer.allocUnsafe(0)
90188
90189 var bytes = [0]
90190 for (var i = 0; i < string.length; i++) {
90191 var value = ALPHABET_MAP[string[i]]
90192 if (value === undefined) return
90193
90194 for (var j = 0, carry = value; j < bytes.length; ++j) {
90195 carry += bytes[j] * BASE
90196 bytes[j] = carry & 0xff
90197 carry >>= 8
90198 }
90199
90200 while (carry > 0) {
90201 bytes.push(carry & 0xff)
90202 carry >>= 8
90203 }
90204 }
90205
90206 // deal with leading zeros
90207 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
90208 bytes.push(0)
90209 }
90210
90211 return Buffer.from(bytes.reverse())
90212 }
90213
90214 function decode (string) {
90215 var buffer = decodeUnsafe(string)
90216 if (buffer) return buffer
90217
90218 throw new Error('Non-base' + BASE + ' character')
90219 }
90220
90221 return {
90222 encode: encode,
90223 decodeUnsafe: decodeUnsafe,
90224 decode: decode
90225 }
90226 }
90227
90228 },{"safe-buffer":40}],2:[function(require,module,exports){
90229 'use strict'
90230
90231 exports.byteLength = byteLength
90232 exports.toByteArray = toByteArray
90233 exports.fromByteArray = fromByteArray
90234
90235 var lookup = []
90236 var revLookup = []
90237 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
90238
90239 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
90240 for (var i = 0, len = code.length; i < len; ++i) {
90241 lookup[i] = code[i]
90242 revLookup[code.charCodeAt(i)] = i
90243 }
90244
90245 revLookup['-'.charCodeAt(0)] = 62
90246 revLookup['_'.charCodeAt(0)] = 63
90247
90248 function placeHoldersCount (b64) {
90249 var len = b64.length
90250 if (len % 4 > 0) {
90251 throw new Error('Invalid string. Length must be a multiple of 4')
90252 }
90253
90254 // the number of equal signs (place holders)
90255 // if there are two placeholders, than the two characters before it
90256 // represent one byte
90257 // if there is only one, then the three characters before it represent 2 bytes
90258 // this is just a cheap hack to not do indexOf twice
90259 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
90260 }
90261
90262 function byteLength (b64) {
90263 // base64 is 4/3 + up to two characters of the original data
90264 return (b64.length * 3 / 4) - placeHoldersCount(b64)
90265 }
90266
90267 function toByteArray (b64) {
90268 var i, l, tmp, placeHolders, arr
90269 var len = b64.length
90270 placeHolders = placeHoldersCount(b64)
90271
90272 arr = new Arr((len * 3 / 4) - placeHolders)
90273
90274 // if there are placeholders, only get up to the last complete 4 chars
90275 l = placeHolders > 0 ? len - 4 : len
90276
90277 var L = 0
90278
90279 for (i = 0; i < l; i += 4) {
90280 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
90281 arr[L++] = (tmp >> 16) & 0xFF
90282 arr[L++] = (tmp >> 8) & 0xFF
90283 arr[L++] = tmp & 0xFF
90284 }
90285
90286 if (placeHolders === 2) {
90287 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
90288 arr[L++] = tmp & 0xFF
90289 } else if (placeHolders === 1) {
90290 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
90291 arr[L++] = (tmp >> 8) & 0xFF
90292 arr[L++] = tmp & 0xFF
90293 }
90294
90295 return arr
90296 }
90297
90298 function tripletToBase64 (num) {
90299 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
90300 }
90301
90302 function encodeChunk (uint8, start, end) {
90303 var tmp
90304 var output = []
90305 for (var i = start; i < end; i += 3) {
90306 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
90307 output.push(tripletToBase64(tmp))
90308 }
90309 return output.join('')
90310 }
90311
90312 function fromByteArray (uint8) {
90313 var tmp
90314 var len = uint8.length
90315 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
90316 var output = ''
90317 var parts = []
90318 var maxChunkLength = 16383 // must be multiple of 3
90319
90320 // go through the array every three bytes, we'll deal with trailing stuff later
90321 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
90322 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
90323 }
90324
90325 // pad the end with zeros, but make sure to not forget the extra bytes
90326 if (extraBytes === 1) {
90327 tmp = uint8[len - 1]
90328 output += lookup[tmp >> 2]
90329 output += lookup[(tmp << 4) & 0x3F]
90330 output += '=='
90331 } else if (extraBytes === 2) {
90332 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
90333 output += lookup[tmp >> 10]
90334 output += lookup[(tmp >> 4) & 0x3F]
90335 output += lookup[(tmp << 2) & 0x3F]
90336 output += '='
90337 }
90338
90339 parts.push(output)
90340
90341 return parts.join('')
90342 }
90343
90344 },{}],3:[function(require,module,exports){
90345 var bigInt = (function (undefined) {
90346 "use strict";
90347
90348 var BASE = 1e7,
90349 LOG_BASE = 7,
90350 MAX_INT = 9007199254740992,
90351 MAX_INT_ARR = smallToArray(MAX_INT),
90352 LOG_MAX_INT = Math.log(MAX_INT);
90353
90354 function Integer(v, radix) {
90355 if (typeof v === "undefined") return Integer[0];
90356 if (typeof radix !== "undefined") return +radix === 10 ? parseValue(v) : parseBase(v, radix);
90357 return parseValue(v);
90358 }
90359
90360 function BigInteger(value, sign) {
90361 this.value = value;
90362 this.sign = sign;
90363 this.isSmall = false;
90364 }
90365 BigInteger.prototype = Object.create(Integer.prototype);
90366
90367 function SmallInteger(value) {
90368 this.value = value;
90369 this.sign = value < 0;
90370 this.isSmall = true;
90371 }
90372 SmallInteger.prototype = Object.create(Integer.prototype);
90373
90374 function isPrecise(n) {
90375 return -MAX_INT < n && n < MAX_INT;
90376 }
90377
90378 function smallToArray(n) { // For performance reasons doesn't reference BASE, need to change this function if BASE changes
90379 if (n < 1e7)
90380 return [n];
90381 if (n < 1e14)
90382 return [n % 1e7, Math.floor(n / 1e7)];
90383 return [n % 1e7, Math.floor(n / 1e7) % 1e7, Math.floor(n / 1e14)];
90384 }
90385
90386 function arrayToSmall(arr) { // If BASE changes this function may need to change
90387 trim(arr);
90388 var length = arr.length;
90389 if (length < 4 && compareAbs(arr, MAX_INT_ARR) < 0) {
90390 switch (length) {
90391 case 0: return 0;
90392 case 1: return arr[0];
90393 case 2: return arr[0] + arr[1] * BASE;
90394 default: return arr[0] + (arr[1] + arr[2] * BASE) * BASE;
90395 }
90396 }
90397 return arr;
90398 }
90399
90400 function trim(v) {
90401 var i = v.length;
90402 while (v[--i] === 0);
90403 v.length = i + 1;
90404 }
90405
90406 function createArray(length) { // function shamelessly stolen from Yaffle's library https://github.com/Yaffle/BigInteger
90407 var x = new Array(length);
90408 var i = -1;
90409 while (++i < length) {
90410 x[i] = 0;
90411 }
90412 return x;
90413 }
90414
90415 function truncate(n) {
90416 if (n > 0) return Math.floor(n);
90417 return Math.ceil(n);
90418 }
90419
90420 function add(a, b) { // assumes a and b are arrays with a.length >= b.length
90421 var l_a = a.length,
90422 l_b = b.length,
90423 r = new Array(l_a),
90424 carry = 0,
90425 base = BASE,
90426 sum, i;
90427 for (i = 0; i < l_b; i++) {
90428 sum = a[i] + b[i] + carry;
90429 carry = sum >= base ? 1 : 0;
90430 r[i] = sum - carry * base;
90431 }
90432 while (i < l_a) {
90433 sum = a[i] + carry;
90434 carry = sum === base ? 1 : 0;
90435 r[i++] = sum - carry * base;
90436 }
90437 if (carry > 0) r.push(carry);
90438 return r;
90439 }
90440
90441 function addAny(a, b) {
90442 if (a.length >= b.length) return add(a, b);
90443 return add(b, a);
90444 }
90445
90446 function addSmall(a, carry) { // assumes a is array, carry is number with 0 <= carry < MAX_INT
90447 var l = a.length,
90448 r = new Array(l),
90449 base = BASE,
90450 sum, i;
90451 for (i = 0; i < l; i++) {
90452 sum = a[i] - base + carry;
90453 carry = Math.floor(sum / base);
90454 r[i] = sum - carry * base;
90455 carry += 1;
90456 }
90457 while (carry > 0) {
90458 r[i++] = carry % base;
90459 carry = Math.floor(carry / base);
90460 }
90461 return r;
90462 }
90463
90464 BigInteger.prototype.add = function (v) {
90465 var n = parseValue(v);
90466 if (this.sign !== n.sign) {
90467 return this.subtract(n.negate());
90468 }
90469 var a = this.value, b = n.value;
90470 if (n.isSmall) {
90471 return new BigInteger(addSmall(a, Math.abs(b)), this.sign);
90472 }
90473 return new BigInteger(addAny(a, b), this.sign);
90474 };
90475 BigInteger.prototype.plus = BigInteger.prototype.add;
90476
90477 SmallInteger.prototype.add = function (v) {
90478 var n = parseValue(v);
90479 var a = this.value;
90480 if (a < 0 !== n.sign) {
90481 return this.subtract(n.negate());
90482 }
90483 var b = n.value;
90484 if (n.isSmall) {
90485 if (isPrecise(a + b)) return new SmallInteger(a + b);
90486 b = smallToArray(Math.abs(b));
90487 }
90488 return new BigInteger(addSmall(b, Math.abs(a)), a < 0);
90489 };
90490 SmallInteger.prototype.plus = SmallInteger.prototype.add;
90491
90492 function subtract(a, b) { // assumes a and b are arrays with a >= b
90493 var a_l = a.length,
90494 b_l = b.length,
90495 r = new Array(a_l),
90496 borrow = 0,
90497 base = BASE,
90498 i, difference;
90499 for (i = 0; i < b_l; i++) {
90500 difference = a[i] - borrow - b[i];
90501 if (difference < 0) {
90502 difference += base;
90503 borrow = 1;
90504 } else borrow = 0;
90505 r[i] = difference;
90506 }
90507 for (i = b_l; i < a_l; i++) {
90508 difference = a[i] - borrow;
90509 if (difference < 0) difference += base;
90510 else {
90511 r[i++] = difference;
90512 break;
90513 }
90514 r[i] = difference;
90515 }
90516 for (; i < a_l; i++) {
90517 r[i] = a[i];
90518 }
90519 trim(r);
90520 return r;
90521 }
90522
90523 function subtractAny(a, b, sign) {
90524 var value;
90525 if (compareAbs(a, b) >= 0) {
90526 value = subtract(a,b);
90527 } else {
90528 value = subtract(b, a);
90529 sign = !sign;
90530 }
90531 value = arrayToSmall(value);
90532 if (typeof value === "number") {
90533 if (sign) value = -value;
90534 return new SmallInteger(value);
90535 }
90536 return new BigInteger(value, sign);
90537 }
90538
90539 function subtractSmall(a, b, sign) { // assumes a is array, b is number with 0 <= b < MAX_INT
90540 var l = a.length,
90541 r = new Array(l),
90542 carry = -b,
90543 base = BASE,
90544 i, difference;
90545 for (i = 0; i < l; i++) {
90546 difference = a[i] + carry;
90547 carry = Math.floor(difference / base);
90548 difference %= base;
90549 r[i] = difference < 0 ? difference + base : difference;
90550 }
90551 r = arrayToSmall(r);
90552 if (typeof r === "number") {
90553 if (sign) r = -r;
90554 return new SmallInteger(r);
90555 } return new BigInteger(r, sign);
90556 }
90557
90558 BigInteger.prototype.subtract = function (v) {
90559 var n = parseValue(v);
90560 if (this.sign !== n.sign) {
90561 return this.add(n.negate());
90562 }
90563 var a = this.value, b = n.value;
90564 if (n.isSmall)
90565 return subtractSmall(a, Math.abs(b), this.sign);
90566 return subtractAny(a, b, this.sign);
90567 };
90568 BigInteger.prototype.minus = BigInteger.prototype.subtract;
90569
90570 SmallInteger.prototype.subtract = function (v) {
90571 var n = parseValue(v);
90572 var a = this.value;
90573 if (a < 0 !== n.sign) {
90574 return this.add(n.negate());
90575 }
90576 var b = n.value;
90577 if (n.isSmall) {
90578 return new SmallInteger(a - b);
90579 }
90580 return subtractSmall(b, Math.abs(a), a >= 0);
90581 };
90582 SmallInteger.prototype.minus = SmallInteger.prototype.subtract;
90583
90584 BigInteger.prototype.negate = function () {
90585 return new BigInteger(this.value, !this.sign);
90586 };
90587 SmallInteger.prototype.negate = function () {
90588 var sign = this.sign;
90589 var small = new SmallInteger(-this.value);
90590 small.sign = !sign;
90591 return small;
90592 };
90593
90594 BigInteger.prototype.abs = function () {
90595 return new BigInteger(this.value, false);
90596 };
90597 SmallInteger.prototype.abs = function () {
90598 return new SmallInteger(Math.abs(this.value));
90599 };
90600
90601 function multiplyLong(a, b) {
90602 var a_l = a.length,
90603 b_l = b.length,
90604 l = a_l + b_l,
90605 r = createArray(l),
90606 base = BASE,
90607 product, carry, i, a_i, b_j;
90608 for (i = 0; i < a_l; ++i) {
90609 a_i = a[i];
90610 for (var j = 0; j < b_l; ++j) {
90611 b_j = b[j];
90612 product = a_i * b_j + r[i + j];
90613 carry = Math.floor(product / base);
90614 r[i + j] = product - carry * base;
90615 r[i + j + 1] += carry;
90616 }
90617 }
90618 trim(r);
90619 return r;
90620 }
90621
90622 function multiplySmall(a, b) { // assumes a is array, b is number with |b| < BASE
90623 var l = a.length,
90624 r = new Array(l),
90625 base = BASE,
90626 carry = 0,
90627 product, i;
90628 for (i = 0; i < l; i++) {
90629 product = a[i] * b + carry;
90630 carry = Math.floor(product / base);
90631 r[i] = product - carry * base;
90632 }
90633 while (carry > 0) {
90634 r[i++] = carry % base;
90635 carry = Math.floor(carry / base);
90636 }
90637 return r;
90638 }
90639
90640 function shiftLeft(x, n) {
90641 var r = [];
90642 while (n-- > 0) r.push(0);
90643 return r.concat(x);
90644 }
90645
90646 function multiplyKaratsuba(x, y) {
90647 var n = Math.max(x.length, y.length);
90648
90649 if (n <= 30) return multiplyLong(x, y);
90650 n = Math.ceil(n / 2);
90651
90652 var b = x.slice(n),
90653 a = x.slice(0, n),
90654 d = y.slice(n),
90655 c = y.slice(0, n);
90656
90657 var ac = multiplyKaratsuba(a, c),
90658 bd = multiplyKaratsuba(b, d),
90659 abcd = multiplyKaratsuba(addAny(a, b), addAny(c, d));
90660
90661 var product = addAny(addAny(ac, shiftLeft(subtract(subtract(abcd, ac), bd), n)), shiftLeft(bd, 2 * n));
90662 trim(product);
90663 return product;
90664 }
90665
90666 // The following function is derived from a surface fit of a graph plotting the performance difference
90667 // between long multiplication and karatsuba multiplication versus the lengths of the two arrays.
90668 function useKaratsuba(l1, l2) {
90669 return -0.012 * l1 - 0.012 * l2 + 0.000015 * l1 * l2 > 0;
90670 }
90671
90672 BigInteger.prototype.multiply = function (v) {
90673 var n = parseValue(v),
90674 a = this.value, b = n.value,
90675 sign = this.sign !== n.sign,
90676 abs;
90677 if (n.isSmall) {
90678 if (b === 0) return Integer[0];
90679 if (b === 1) return this;
90680 if (b === -1) return this.negate();
90681 abs = Math.abs(b);
90682 if (abs < BASE) {
90683 return new BigInteger(multiplySmall(a, abs), sign);
90684 }
90685 b = smallToArray(abs);
90686 }
90687 if (useKaratsuba(a.length, b.length)) // Karatsuba is only faster for certain array sizes
90688 return new BigInteger(multiplyKaratsuba(a, b), sign);
90689 return new BigInteger(multiplyLong(a, b), sign);
90690 };
90691
90692 BigInteger.prototype.times = BigInteger.prototype.multiply;
90693
90694 function multiplySmallAndArray(a, b, sign) { // a >= 0
90695 if (a < BASE) {
90696 return new BigInteger(multiplySmall(b, a), sign);
90697 }
90698 return new BigInteger(multiplyLong(b, smallToArray(a)), sign);
90699 }
90700 SmallInteger.prototype._multiplyBySmall = function (a) {
90701 if (isPrecise(a.value * this.value)) {
90702 return new SmallInteger(a.value * this.value);
90703 }
90704 return multiplySmallAndArray(Math.abs(a.value), smallToArray(Math.abs(this.value)), this.sign !== a.sign);
90705 };
90706 BigInteger.prototype._multiplyBySmall = function (a) {
90707 if (a.value === 0) return Integer[0];
90708 if (a.value === 1) return this;
90709 if (a.value === -1) return this.negate();
90710 return multiplySmallAndArray(Math.abs(a.value), this.value, this.sign !== a.sign);
90711 };
90712 SmallInteger.prototype.multiply = function (v) {
90713 return parseValue(v)._multiplyBySmall(this);
90714 };
90715 SmallInteger.prototype.times = SmallInteger.prototype.multiply;
90716
90717 function square(a) {
90718 var l = a.length,
90719 r = createArray(l + l),
90720 base = BASE,
90721 product, carry, i, a_i, a_j;
90722 for (i = 0; i < l; i++) {
90723 a_i = a[i];
90724 for (var j = 0; j < l; j++) {
90725 a_j = a[j];
90726 product = a_i * a_j + r[i + j];
90727 carry = Math.floor(product / base);
90728 r[i + j] = product - carry * base;
90729 r[i + j + 1] += carry;
90730 }
90731 }
90732 trim(r);
90733 return r;
90734 }
90735
90736 BigInteger.prototype.square = function () {
90737 return new BigInteger(square(this.value), false);
90738 };
90739
90740 SmallInteger.prototype.square = function () {
90741 var value = this.value * this.value;
90742 if (isPrecise(value)) return new SmallInteger(value);
90743 return new BigInteger(square(smallToArray(Math.abs(this.value))), false);
90744 };
90745
90746 function divMod1(a, b) { // Left over from previous version. Performs faster than divMod2 on smaller input sizes.
90747 var a_l = a.length,
90748 b_l = b.length,
90749 base = BASE,
90750 result = createArray(b.length),
90751 divisorMostSignificantDigit = b[b_l - 1],
90752 // normalization
90753 lambda = Math.ceil(base / (2 * divisorMostSignificantDigit)),
90754 remainder = multiplySmall(a, lambda),
90755 divisor = multiplySmall(b, lambda),
90756 quotientDigit, shift, carry, borrow, i, l, q;
90757 if (remainder.length <= a_l) remainder.push(0);
90758 divisor.push(0);
90759 divisorMostSignificantDigit = divisor[b_l - 1];
90760 for (shift = a_l - b_l; shift >= 0; shift--) {
90761 quotientDigit = base - 1;
90762 if (remainder[shift + b_l] !== divisorMostSignificantDigit) {
90763 quotientDigit = Math.floor((remainder[shift + b_l] * base + remainder[shift + b_l - 1]) / divisorMostSignificantDigit);
90764 }
90765 // quotientDigit <= base - 1
90766 carry = 0;
90767 borrow = 0;
90768 l = divisor.length;
90769 for (i = 0; i < l; i++) {
90770 carry += quotientDigit * divisor[i];
90771 q = Math.floor(carry / base);
90772 borrow += remainder[shift + i] - (carry - q * base);
90773 carry = q;
90774 if (borrow < 0) {
90775 remainder[shift + i] = borrow + base;
90776 borrow = -1;
90777 } else {
90778 remainder[shift + i] = borrow;
90779 borrow = 0;
90780 }
90781 }
90782 while (borrow !== 0) {
90783 quotientDigit -= 1;
90784 carry = 0;
90785 for (i = 0; i < l; i++) {
90786 carry += remainder[shift + i] - base + divisor[i];
90787 if (carry < 0) {
90788 remainder[shift + i] = carry + base;
90789 carry = 0;
90790 } else {
90791 remainder[shift + i] = carry;
90792 carry = 1;
90793 }
90794 }
90795 borrow += carry;
90796 }
90797 result[shift] = quotientDigit;
90798 }
90799 // denormalization
90800 remainder = divModSmall(remainder, lambda)[0];
90801 return [arrayToSmall(result), arrayToSmall(remainder)];
90802 }
90803
90804 function divMod2(a, b) { // Implementation idea shamelessly stolen from Silent Matt's library http://silentmatt.com/biginteger/
90805 // Performs faster than divMod1 on larger input sizes.
90806 var a_l = a.length,
90807 b_l = b.length,
90808 result = [],
90809 part = [],
90810 base = BASE,
90811 guess, xlen, highx, highy, check;
90812 while (a_l) {
90813 part.unshift(a[--a_l]);
90814 trim(part);
90815 if (compareAbs(part, b) < 0) {
90816 result.push(0);
90817 continue;
90818 }
90819 xlen = part.length;
90820 highx = part[xlen - 1] * base + part[xlen - 2];
90821 highy = b[b_l - 1] * base + b[b_l - 2];
90822 if (xlen > b_l) {
90823 highx = (highx + 1) * base;
90824 }
90825 guess = Math.ceil(highx / highy);
90826 do {
90827 check = multiplySmall(b, guess);
90828 if (compareAbs(check, part) <= 0) break;
90829 guess--;
90830 } while (guess);
90831 result.push(guess);
90832 part = subtract(part, check);
90833 }
90834 result.reverse();
90835 return [arrayToSmall(result), arrayToSmall(part)];
90836 }
90837
90838 function divModSmall(value, lambda) {
90839 var length = value.length,
90840 quotient = createArray(length),
90841 base = BASE,
90842 i, q, remainder, divisor;
90843 remainder = 0;
90844 for (i = length - 1; i >= 0; --i) {
90845 divisor = remainder * base + value[i];
90846 q = truncate(divisor / lambda);
90847 remainder = divisor - q * lambda;
90848 quotient[i] = q | 0;
90849 }
90850 return [quotient, remainder | 0];
90851 }
90852
90853 function divModAny(self, v) {
90854 var value, n = parseValue(v);
90855 var a = self.value, b = n.value;
90856 var quotient;
90857 if (b === 0) throw new Error("Cannot divide by zero");
90858 if (self.isSmall) {
90859 if (n.isSmall) {
90860 return [new SmallInteger(truncate(a / b)), new SmallInteger(a % b)];
90861 }
90862 return [Integer[0], self];
90863 }
90864 if (n.isSmall) {
90865 if (b === 1) return [self, Integer[0]];
90866 if (b == -1) return [self.negate(), Integer[0]];
90867 var abs = Math.abs(b);
90868 if (abs < BASE) {
90869 value = divModSmall(a, abs);
90870 quotient = arrayToSmall(value[0]);
90871 var remainder = value[1];
90872 if (self.sign) remainder = -remainder;
90873 if (typeof quotient === "number") {
90874 if (self.sign !== n.sign) quotient = -quotient;
90875 return [new SmallInteger(quotient), new SmallInteger(remainder)];
90876 }
90877 return [new BigInteger(quotient, self.sign !== n.sign), new SmallInteger(remainder)];
90878 }
90879 b = smallToArray(abs);
90880 }
90881 var comparison = compareAbs(a, b);
90882 if (comparison === -1) return [Integer[0], self];
90883 if (comparison === 0) return [Integer[self.sign === n.sign ? 1 : -1], Integer[0]];
90884
90885 // divMod1 is faster on smaller input sizes
90886 if (a.length + b.length <= 200)
90887 value = divMod1(a, b);
90888 else value = divMod2(a, b);
90889
90890 quotient = value[0];
90891 var qSign = self.sign !== n.sign,
90892 mod = value[1],
90893 mSign = self.sign;
90894 if (typeof quotient === "number") {
90895 if (qSign) quotient = -quotient;
90896 quotient = new SmallInteger(quotient);
90897 } else quotient = new BigInteger(quotient, qSign);
90898 if (typeof mod === "number") {
90899 if (mSign) mod = -mod;
90900 mod = new SmallInteger(mod);
90901 } else mod = new BigInteger(mod, mSign);
90902 return [quotient, mod];
90903 }
90904
90905 BigInteger.prototype.divmod = function (v) {
90906 var result = divModAny(this, v);
90907 return {
90908 quotient: result[0],
90909 remainder: result[1]
90910 };
90911 };
90912 SmallInteger.prototype.divmod = BigInteger.prototype.divmod;
90913
90914 BigInteger.prototype.divide = function (v) {
90915 return divModAny(this, v)[0];
90916 };
90917 SmallInteger.prototype.over = SmallInteger.prototype.divide = BigInteger.prototype.over = BigInteger.prototype.divide;
90918
90919 BigInteger.prototype.mod = function (v) {
90920 return divModAny(this, v)[1];
90921 };
90922 SmallInteger.prototype.remainder = SmallInteger.prototype.mod = BigInteger.prototype.remainder = BigInteger.prototype.mod;
90923
90924 BigInteger.prototype.pow = function (v) {
90925 var n = parseValue(v),
90926 a = this.value,
90927 b = n.value,
90928 value, x, y;
90929 if (b === 0) return Integer[1];
90930 if (a === 0) return Integer[0];
90931 if (a === 1) return Integer[1];
90932 if (a === -1) return n.isEven() ? Integer[1] : Integer[-1];
90933 if (n.sign) {
90934 return Integer[0];
90935 }
90936 if (!n.isSmall) throw new Error("The exponent " + n.toString() + " is too large.");
90937 if (this.isSmall) {
90938 if (isPrecise(value = Math.pow(a, b)))
90939 return new SmallInteger(truncate(value));
90940 }
90941 x = this;
90942 y = Integer[1];
90943 while (true) {
90944 if (b & 1 === 1) {
90945 y = y.times(x);
90946 --b;
90947 }
90948 if (b === 0) break;
90949 b /= 2;
90950 x = x.square();
90951 }
90952 return y;
90953 };
90954 SmallInteger.prototype.pow = BigInteger.prototype.pow;
90955
90956 BigInteger.prototype.modPow = function (exp, mod) {
90957 exp = parseValue(exp);
90958 mod = parseValue(mod);
90959 if (mod.isZero()) throw new Error("Cannot take modPow with modulus 0");
90960 var r = Integer[1],
90961 base = this.mod(mod);
90962 while (exp.isPositive()) {
90963 if (base.isZero()) return Integer[0];
90964 if (exp.isOdd()) r = r.multiply(base).mod(mod);
90965 exp = exp.divide(2);
90966 base = base.square().mod(mod);
90967 }
90968 return r;
90969 };
90970 SmallInteger.prototype.modPow = BigInteger.prototype.modPow;
90971
90972 function compareAbs(a, b) {
90973 if (a.length !== b.length) {
90974 return a.length > b.length ? 1 : -1;
90975 }
90976 for (var i = a.length - 1; i >= 0; i--) {
90977 if (a[i] !== b[i]) return a[i] > b[i] ? 1 : -1;
90978 }
90979 return 0;
90980 }
90981
90982 BigInteger.prototype.compareAbs = function (v) {
90983 var n = parseValue(v),
90984 a = this.value,
90985 b = n.value;
90986 if (n.isSmall) return 1;
90987 return compareAbs(a, b);
90988 };
90989 SmallInteger.prototype.compareAbs = function (v) {
90990 var n = parseValue(v),
90991 a = Math.abs(this.value),
90992 b = n.value;
90993 if (n.isSmall) {
90994 b = Math.abs(b);
90995 return a === b ? 0 : a > b ? 1 : -1;
90996 }
90997 return -1;
90998 };
90999
91000 BigInteger.prototype.compare = function (v) {
91001 // See discussion about comparison with Infinity:
91002 // https://github.com/peterolson/BigInteger.js/issues/61
91003 if (v === Infinity) {
91004 return -1;
91005 }
91006 if (v === -Infinity) {
91007 return 1;
91008 }
91009
91010 var n = parseValue(v),
91011 a = this.value,
91012 b = n.value;
91013 if (this.sign !== n.sign) {
91014 return n.sign ? 1 : -1;
91015 }
91016 if (n.isSmall) {
91017 return this.sign ? -1 : 1;
91018 }
91019 return compareAbs(a, b) * (this.sign ? -1 : 1);
91020 };
91021 BigInteger.prototype.compareTo = BigInteger.prototype.compare;
91022
91023 SmallInteger.prototype.compare = function (v) {
91024 if (v === Infinity) {
91025 return -1;
91026 }
91027 if (v === -Infinity) {
91028 return 1;
91029 }
91030
91031 var n = parseValue(v),
91032 a = this.value,
91033 b = n.value;
91034 if (n.isSmall) {
91035 return a == b ? 0 : a > b ? 1 : -1;
91036 }
91037 if (a < 0 !== n.sign) {
91038 return a < 0 ? -1 : 1;
91039 }
91040 return a < 0 ? 1 : -1;
91041 };
91042 SmallInteger.prototype.compareTo = SmallInteger.prototype.compare;
91043
91044 BigInteger.prototype.equals = function (v) {
91045 return this.compare(v) === 0;
91046 };
91047 SmallInteger.prototype.eq = SmallInteger.prototype.equals = BigInteger.prototype.eq = BigInteger.prototype.equals;
91048
91049 BigInteger.prototype.notEquals = function (v) {
91050 return this.compare(v) !== 0;
91051 };
91052 SmallInteger.prototype.neq = SmallInteger.prototype.notEquals = BigInteger.prototype.neq = BigInteger.prototype.notEquals;
91053
91054 BigInteger.prototype.greater = function (v) {
91055 return this.compare(v) > 0;
91056 };
91057 SmallInteger.prototype.gt = SmallInteger.prototype.greater = BigInteger.prototype.gt = BigInteger.prototype.greater;
91058
91059 BigInteger.prototype.lesser = function (v) {
91060 return this.compare(v) < 0;
91061 };
91062 SmallInteger.prototype.lt = SmallInteger.prototype.lesser = BigInteger.prototype.lt = BigInteger.prototype.lesser;
91063
91064 BigInteger.prototype.greaterOrEquals = function (v) {
91065 return this.compare(v) >= 0;
91066 };
91067 SmallInteger.prototype.geq = SmallInteger.prototype.greaterOrEquals = BigInteger.prototype.geq = BigInteger.prototype.greaterOrEquals;
91068
91069 BigInteger.prototype.lesserOrEquals = function (v) {
91070 return this.compare(v) <= 0;
91071 };
91072 SmallInteger.prototype.leq = SmallInteger.prototype.lesserOrEquals = BigInteger.prototype.leq = BigInteger.prototype.lesserOrEquals;
91073
91074 BigInteger.prototype.isEven = function () {
91075 return (this.value[0] & 1) === 0;
91076 };
91077 SmallInteger.prototype.isEven = function () {
91078 return (this.value & 1) === 0;
91079 };
91080
91081 BigInteger.prototype.isOdd = function () {
91082 return (this.value[0] & 1) === 1;
91083 };
91084 SmallInteger.prototype.isOdd = function () {
91085 return (this.value & 1) === 1;
91086 };
91087
91088 BigInteger.prototype.isPositive = function () {
91089 return !this.sign;
91090 };
91091 SmallInteger.prototype.isPositive = function () {
91092 return this.value > 0;
91093 };
91094
91095 BigInteger.prototype.isNegative = function () {
91096 return this.sign;
91097 };
91098 SmallInteger.prototype.isNegative = function () {
91099 return this.value < 0;
91100 };
91101
91102 BigInteger.prototype.isUnit = function () {
91103 return false;
91104 };
91105 SmallInteger.prototype.isUnit = function () {
91106 return Math.abs(this.value) === 1;
91107 };
91108
91109 BigInteger.prototype.isZero = function () {
91110 return false;
91111 };
91112 SmallInteger.prototype.isZero = function () {
91113 return this.value === 0;
91114 };
91115 BigInteger.prototype.isDivisibleBy = function (v) {
91116 var n = parseValue(v);
91117 var value = n.value;
91118 if (value === 0) return false;
91119 if (value === 1) return true;
91120 if (value === 2) return this.isEven();
91121 return this.mod(n).equals(Integer[0]);
91122 };
91123 SmallInteger.prototype.isDivisibleBy = BigInteger.prototype.isDivisibleBy;
91124
91125 function isBasicPrime(v) {
91126 var n = v.abs();
91127 if (n.isUnit()) return false;
91128 if (n.equals(2) || n.equals(3) || n.equals(5)) return true;
91129 if (n.isEven() || n.isDivisibleBy(3) || n.isDivisibleBy(5)) return false;
91130 if (n.lesser(25)) return true;
91131 // we don't know if it's prime: let the other functions figure it out
91132 }
91133
91134 BigInteger.prototype.isPrime = function () {
91135 var isPrime = isBasicPrime(this);
91136 if (isPrime !== undefined) return isPrime;
91137 var n = this.abs(),
91138 nPrev = n.prev();
91139 var a = [2, 3, 5, 7, 11, 13, 17, 19],
91140 b = nPrev,
91141 d, t, i, x;
91142 while (b.isEven()) b = b.divide(2);
91143 for (i = 0; i < a.length; i++) {
91144 x = bigInt(a[i]).modPow(b, n);
91145 if (x.equals(Integer[1]) || x.equals(nPrev)) continue;
91146 for (t = true, d = b; t && d.lesser(nPrev) ; d = d.multiply(2)) {
91147 x = x.square().mod(n);
91148 if (x.equals(nPrev)) t = false;
91149 }
91150 if (t) return false;
91151 }
91152 return true;
91153 };
91154 SmallInteger.prototype.isPrime = BigInteger.prototype.isPrime;
91155
91156 BigInteger.prototype.isProbablePrime = function (iterations) {
91157 var isPrime = isBasicPrime(this);
91158 if (isPrime !== undefined) return isPrime;
91159 var n = this.abs();
91160 var t = iterations === undefined ? 5 : iterations;
91161 // use the Fermat primality test
91162 for (var i = 0; i < t; i++) {
91163 var a = bigInt.randBetween(2, n.minus(2));
91164 if (!a.modPow(n.prev(), n).isUnit()) return false; // definitely composite
91165 }
91166 return true; // large chance of being prime
91167 };
91168 SmallInteger.prototype.isProbablePrime = BigInteger.prototype.isProbablePrime;
91169
91170 BigInteger.prototype.modInv = function (n) {
91171 var t = bigInt.zero, newT = bigInt.one, r = parseValue(n), newR = this.abs(), q, lastT, lastR;
91172 while (!newR.equals(bigInt.zero)) {
91173 q = r.divide(newR);
91174 lastT = t;
91175 lastR = r;
91176 t = newT;
91177 r = newR;
91178 newT = lastT.subtract(q.multiply(newT));
91179 newR = lastR.subtract(q.multiply(newR));
91180 }
91181 if (!r.equals(1)) throw new Error(this.toString() + " and " + n.toString() + " are not co-prime");
91182 if (t.compare(0) === -1) {
91183 t = t.add(n);
91184 }
91185 if (this.isNegative()) {
91186 return t.negate();
91187 }
91188 return t;
91189 };
91190
91191 SmallInteger.prototype.modInv = BigInteger.prototype.modInv;
91192
91193 BigInteger.prototype.next = function () {
91194 var value = this.value;
91195 if (this.sign) {
91196 return subtractSmall(value, 1, this.sign);
91197 }
91198 return new BigInteger(addSmall(value, 1), this.sign);
91199 };
91200 SmallInteger.prototype.next = function () {
91201 var value = this.value;
91202 if (value + 1 < MAX_INT) return new SmallInteger(value + 1);
91203 return new BigInteger(MAX_INT_ARR, false);
91204 };
91205
91206 BigInteger.prototype.prev = function () {
91207 var value = this.value;
91208 if (this.sign) {
91209 return new BigInteger(addSmall(value, 1), true);
91210 }
91211 return subtractSmall(value, 1, this.sign);
91212 };
91213 SmallInteger.prototype.prev = function () {
91214 var value = this.value;
91215 if (value - 1 > -MAX_INT) return new SmallInteger(value - 1);
91216 return new BigInteger(MAX_INT_ARR, true);
91217 };
91218
91219 var powersOfTwo = [1];
91220 while (2 * powersOfTwo[powersOfTwo.length - 1] <= BASE) powersOfTwo.push(2 * powersOfTwo[powersOfTwo.length - 1]);
91221 var powers2Length = powersOfTwo.length, highestPower2 = powersOfTwo[powers2Length - 1];
91222
91223 function shift_isSmall(n) {
91224 return ((typeof n === "number" || typeof n === "string") && +Math.abs(n) <= BASE) ||
91225 (n instanceof BigInteger && n.value.length <= 1);
91226 }
91227
91228 BigInteger.prototype.shiftLeft = function (n) {
91229 if (!shift_isSmall(n)) {
91230 throw new Error(String(n) + " is too large for shifting.");
91231 }
91232 n = +n;
91233 if (n < 0) return this.shiftRight(-n);
91234 var result = this;
91235 while (n >= powers2Length) {
91236 result = result.multiply(highestPower2);
91237 n -= powers2Length - 1;
91238 }
91239 return result.multiply(powersOfTwo[n]);
91240 };
91241 SmallInteger.prototype.shiftLeft = BigInteger.prototype.shiftLeft;
91242
91243 BigInteger.prototype.shiftRight = function (n) {
91244 var remQuo;
91245 if (!shift_isSmall(n)) {
91246 throw new Error(String(n) + " is too large for shifting.");
91247 }
91248 n = +n;
91249 if (n < 0) return this.shiftLeft(-n);
91250 var result = this;
91251 while (n >= powers2Length) {
91252 if (result.isZero()) return result;
91253 remQuo = divModAny(result, highestPower2);
91254 result = remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
91255 n -= powers2Length - 1;
91256 }
91257 remQuo = divModAny(result, powersOfTwo[n]);
91258 return remQuo[1].isNegative() ? remQuo[0].prev() : remQuo[0];
91259 };
91260 SmallInteger.prototype.shiftRight = BigInteger.prototype.shiftRight;
91261
91262 function bitwise(x, y, fn) {
91263 y = parseValue(y);
91264 var xSign = x.isNegative(), ySign = y.isNegative();
91265 var xRem = xSign ? x.not() : x,
91266 yRem = ySign ? y.not() : y;
91267 var xDigit = 0, yDigit = 0;
91268 var xDivMod = null, yDivMod = null;
91269 var result = [];
91270 while (!xRem.isZero() || !yRem.isZero()) {
91271 xDivMod = divModAny(xRem, highestPower2);
91272 xDigit = xDivMod[1].toJSNumber();
91273 if (xSign) {
91274 xDigit = highestPower2 - 1 - xDigit; // two's complement for negative numbers
91275 }
91276
91277 yDivMod = divModAny(yRem, highestPower2);
91278 yDigit = yDivMod[1].toJSNumber();
91279 if (ySign) {
91280 yDigit = highestPower2 - 1 - yDigit; // two's complement for negative numbers
91281 }
91282
91283 xRem = xDivMod[0];
91284 yRem = yDivMod[0];
91285 result.push(fn(xDigit, yDigit));
91286 }
91287 var sum = fn(xSign ? 1 : 0, ySign ? 1 : 0) !== 0 ? bigInt(-1) : bigInt(0);
91288 for (var i = result.length - 1; i >= 0; i -= 1) {
91289 sum = sum.multiply(highestPower2).add(bigInt(result[i]));
91290 }
91291 return sum;
91292 }
91293
91294 BigInteger.prototype.not = function () {
91295 return this.negate().prev();
91296 };
91297 SmallInteger.prototype.not = BigInteger.prototype.not;
91298
91299 BigInteger.prototype.and = function (n) {
91300 return bitwise(this, n, function (a, b) { return a & b; });
91301 };
91302 SmallInteger.prototype.and = BigInteger.prototype.and;
91303
91304 BigInteger.prototype.or = function (n) {
91305 return bitwise(this, n, function (a, b) { return a | b; });
91306 };
91307 SmallInteger.prototype.or = BigInteger.prototype.or;
91308
91309 BigInteger.prototype.xor = function (n) {
91310 return bitwise(this, n, function (a, b) { return a ^ b; });
91311 };
91312 SmallInteger.prototype.xor = BigInteger.prototype.xor;
91313
91314 var LOBMASK_I = 1 << 30, LOBMASK_BI = (BASE & -BASE) * (BASE & -BASE) | LOBMASK_I;
91315 function roughLOB(n) { // get lowestOneBit (rough)
91316 // SmallInteger: return Min(lowestOneBit(n), 1 << 30)
91317 // BigInteger: return Min(lowestOneBit(n), 1 << 14) [BASE=1e7]
91318 var v = n.value, x = typeof v === "number" ? v | LOBMASK_I : v[0] + v[1] * BASE | LOBMASK_BI;
91319 return x & -x;
91320 }
91321
91322 function max(a, b) {
91323 a = parseValue(a);
91324 b = parseValue(b);
91325 return a.greater(b) ? a : b;
91326 }
91327 function min(a, b) {
91328 a = parseValue(a);
91329 b = parseValue(b);
91330 return a.lesser(b) ? a : b;
91331 }
91332 function gcd(a, b) {
91333 a = parseValue(a).abs();
91334 b = parseValue(b).abs();
91335 if (a.equals(b)) return a;
91336 if (a.isZero()) return b;
91337 if (b.isZero()) return a;
91338 var c = Integer[1], d, t;
91339 while (a.isEven() && b.isEven()) {
91340 d = Math.min(roughLOB(a), roughLOB(b));
91341 a = a.divide(d);
91342 b = b.divide(d);
91343 c = c.multiply(d);
91344 }
91345 while (a.isEven()) {
91346 a = a.divide(roughLOB(a));
91347 }
91348 do {
91349 while (b.isEven()) {
91350 b = b.divide(roughLOB(b));
91351 }
91352 if (a.greater(b)) {
91353 t = b; b = a; a = t;
91354 }
91355 b = b.subtract(a);
91356 } while (!b.isZero());
91357 return c.isUnit() ? a : a.multiply(c);
91358 }
91359 function lcm(a, b) {
91360 a = parseValue(a).abs();
91361 b = parseValue(b).abs();
91362 return a.divide(gcd(a, b)).multiply(b);
91363 }
91364 function randBetween(a, b) {
91365 a = parseValue(a);
91366 b = parseValue(b);
91367 var low = min(a, b), high = max(a, b);
91368 var range = high.subtract(low).add(1);
91369 if (range.isSmall) return low.add(Math.floor(Math.random() * range));
91370 var length = range.value.length - 1;
91371 var result = [], restricted = true;
91372 for (var i = length; i >= 0; i--) {
91373 var top = restricted ? range.value[i] : BASE;
91374 var digit = truncate(Math.random() * top);
91375 result.unshift(digit);
91376 if (digit < top) restricted = false;
91377 }
91378 result = arrayToSmall(result);
91379 return low.add(typeof result === "number" ? new SmallInteger(result) : new BigInteger(result, false));
91380 }
91381 var parseBase = function (text, base) {
91382 var length = text.length;
91383 var i;
91384 var absBase = Math.abs(base);
91385 for(var i = 0; i < length; i++) {
91386 var c = text[i].toLowerCase();
91387 if(c === "-") continue;
91388 if(/[a-z0-9]/.test(c)) {
91389 if(/[0-9]/.test(c) && +c >= absBase) {
91390 if(c === "1" && absBase === 1) continue;
91391 throw new Error(c + " is not a valid digit in base " + base + ".");
91392 } else if(c.charCodeAt(0) - 87 >= absBase) {
91393 throw new Error(c + " is not a valid digit in base " + base + ".");
91394 }
91395 }
91396 }
91397 if (2 <= base && base <= 36) {
91398 if (length <= LOG_MAX_INT / Math.log(base)) {
91399 var result = parseInt(text, base);
91400 if(isNaN(result)) {
91401 throw new Error(c + " is not a valid digit in base " + base + ".");
91402 }
91403 return new SmallInteger(parseInt(text, base));
91404 }
91405 }
91406 base = parseValue(base);
91407 var digits = [];
91408 var isNegative = text[0] === "-";
91409 for (i = isNegative ? 1 : 0; i < text.length; i++) {
91410 var c = text[i].toLowerCase(),
91411 charCode = c.charCodeAt(0);
91412 if (48 <= charCode && charCode <= 57) digits.push(parseValue(c));
91413 else if (97 <= charCode && charCode <= 122) digits.push(parseValue(c.charCodeAt(0) - 87));
91414 else if (c === "<") {
91415 var start = i;
91416 do { i++; } while (text[i] !== ">");
91417 digits.push(parseValue(text.slice(start + 1, i)));
91418 }
91419 else throw new Error(c + " is not a valid character");
91420 }
91421 return parseBaseFromArray(digits, base, isNegative);
91422 };
91423
91424 function parseBaseFromArray(digits, base, isNegative) {
91425 var val = Integer[0], pow = Integer[1], i;
91426 for (i = digits.length - 1; i >= 0; i--) {
91427 val = val.add(digits[i].times(pow));
91428 pow = pow.times(base);
91429 }
91430 return isNegative ? val.negate() : val;
91431 }
91432
91433 function stringify(digit) {
91434 var v = digit.value;
91435 if (typeof v === "number") v = [v];
91436 if (v.length === 1 && v[0] <= 35) {
91437 return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(v[0]);
91438 }
91439 return "<" + v + ">";
91440 }
91441 function toBase(n, base) {
91442 base = bigInt(base);
91443 if (base.isZero()) {
91444 if (n.isZero()) return "0";
91445 throw new Error("Cannot convert nonzero numbers to base 0.");
91446 }
91447 if (base.equals(-1)) {
91448 if (n.isZero()) return "0";
91449 if (n.isNegative()) return new Array(1 - n).join("10");
91450 return "1" + new Array(+n).join("01");
91451 }
91452 var minusSign = "";
91453 if (n.isNegative() && base.isPositive()) {
91454 minusSign = "-";
91455 n = n.abs();
91456 }
91457 if (base.equals(1)) {
91458 if (n.isZero()) return "0";
91459 return minusSign + new Array(+n + 1).join(1);
91460 }
91461 var out = [];
91462 var left = n, divmod;
91463 while (left.isNegative() || left.compareAbs(base) >= 0) {
91464 divmod = left.divmod(base);
91465 left = divmod.quotient;
91466 var digit = divmod.remainder;
91467 if (digit.isNegative()) {
91468 digit = base.minus(digit).abs();
91469 left = left.next();
91470 }
91471 out.push(stringify(digit));
91472 }
91473 out.push(stringify(left));
91474 return minusSign + out.reverse().join("");
91475 }
91476
91477 BigInteger.prototype.toString = function (radix) {
91478 if (radix === undefined) radix = 10;
91479 if (radix !== 10) return toBase(this, radix);
91480 var v = this.value, l = v.length, str = String(v[--l]), zeros = "0000000", digit;
91481 while (--l >= 0) {
91482 digit = String(v[l]);
91483 str += zeros.slice(digit.length) + digit;
91484 }
91485 var sign = this.sign ? "-" : "";
91486 return sign + str;
91487 };
91488
91489 SmallInteger.prototype.toString = function (radix) {
91490 if (radix === undefined) radix = 10;
91491 if (radix != 10) return toBase(this, radix);
91492 return String(this.value);
91493 };
91494 BigInteger.prototype.toJSON = SmallInteger.prototype.toJSON = function() { return this.toString(); }
91495
91496 BigInteger.prototype.valueOf = function () {
91497 return +this.toString();
91498 };
91499 BigInteger.prototype.toJSNumber = BigInteger.prototype.valueOf;
91500
91501 SmallInteger.prototype.valueOf = function () {
91502 return this.value;
91503 };
91504 SmallInteger.prototype.toJSNumber = SmallInteger.prototype.valueOf;
91505
91506 function parseStringValue(v) {
91507 if (isPrecise(+v)) {
91508 var x = +v;
91509 if (x === truncate(x))
91510 return new SmallInteger(x);
91511 throw "Invalid integer: " + v;
91512 }
91513 var sign = v[0] === "-";
91514 if (sign) v = v.slice(1);
91515 var split = v.split(/e/i);
91516 if (split.length > 2) throw new Error("Invalid integer: " + split.join("e"));
91517 if (split.length === 2) {
91518 var exp = split[1];
91519 if (exp[0] === "+") exp = exp.slice(1);
91520 exp = +exp;
91521 if (exp !== truncate(exp) || !isPrecise(exp)) throw new Error("Invalid integer: " + exp + " is not a valid exponent.");
91522 var text = split[0];
91523 var decimalPlace = text.indexOf(".");
91524 if (decimalPlace >= 0) {
91525 exp -= text.length - decimalPlace - 1;
91526 text = text.slice(0, decimalPlace) + text.slice(decimalPlace + 1);
91527 }
91528 if (exp < 0) throw new Error("Cannot include negative exponent part for integers");
91529 text += (new Array(exp + 1)).join("0");
91530 v = text;
91531 }
91532 var isValid = /^([0-9][0-9]*)$/.test(v);
91533 if (!isValid) throw new Error("Invalid integer: " + v);
91534 var r = [], max = v.length, l = LOG_BASE, min = max - l;
91535 while (max > 0) {
91536 r.push(+v.slice(min, max));
91537 min -= l;
91538 if (min < 0) min = 0;
91539 max -= l;
91540 }
91541 trim(r);
91542 return new BigInteger(r, sign);
91543 }
91544
91545 function parseNumberValue(v) {
91546 if (isPrecise(v)) {
91547 if (v !== truncate(v)) throw new Error(v + " is not an integer.");
91548 return new SmallInteger(v);
91549 }
91550 return parseStringValue(v.toString());
91551 }
91552
91553 function parseValue(v) {
91554 if (typeof v === "number") {
91555 return parseNumberValue(v);
91556 }
91557 if (typeof v === "string") {
91558 return parseStringValue(v);
91559 }
91560 return v;
91561 }
91562 // Pre-define numbers in range [-999,999]
91563 for (var i = 0; i < 1000; i++) {
91564 Integer[i] = new SmallInteger(i);
91565 if (i > 0) Integer[-i] = new SmallInteger(-i);
91566 }
91567 // Backwards compatibility
91568 Integer.one = Integer[1];
91569 Integer.zero = Integer[0];
91570 Integer.minusOne = Integer[-1];
91571 Integer.max = max;
91572 Integer.min = min;
91573 Integer.gcd = gcd;
91574 Integer.lcm = lcm;
91575 Integer.isInstance = function (x) { return x instanceof BigInteger || x instanceof SmallInteger; };
91576 Integer.randBetween = randBetween;
91577
91578 Integer.fromArray = function (digits, base, isNegative) {
91579 return parseBaseFromArray(digits.map(parseValue), parseValue(base || 10), isNegative);
91580 };
91581
91582 return Integer;
91583 })();
91584
91585 // Node.js check
91586 if (typeof module !== "undefined" && module.hasOwnProperty("exports")) {
91587 module.exports = bigInt;
91588 }
91589
91590 //amd check
91591 if ( typeof define === "function" && define.amd ) {
91592 define( "big-integer", [], function() {
91593 return bigInt;
91594 });
91595 }
91596
91597 },{}],4:[function(require,module,exports){
91598
91599 },{}],5:[function(require,module,exports){
91600 var basex = require('base-x')
91601 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
91602
91603 module.exports = basex(ALPHABET)
91604
91605 },{"base-x":1}],6:[function(require,module,exports){
91606 'use strict'
91607
91608 var base58 = require('bs58')
91609 var Buffer = require('safe-buffer').Buffer
91610
91611 module.exports = function (checksumFn) {
91612 // Encode a buffer as a base58-check encoded string
91613 function encode (payload) {
91614 var checksum = checksumFn(payload)
91615
91616 return base58.encode(Buffer.concat([
91617 payload,
91618 checksum
91619 ], payload.length + 4))
91620 }
91621
91622 function decodeRaw (buffer) {
91623 var payload = buffer.slice(0, -4)
91624 var checksum = buffer.slice(-4)
91625 var newChecksum = checksumFn(payload)
91626
91627 if (checksum[0] ^ newChecksum[0] |
91628 checksum[1] ^ newChecksum[1] |
91629 checksum[2] ^ newChecksum[2] |
91630 checksum[3] ^ newChecksum[3]) return
91631
91632 return payload
91633 }
91634
91635 // Decode a base58-check encoded string to a buffer, no result if checksum is wrong
91636 function decodeUnsafe (string) {
91637 var buffer = base58.decodeUnsafe(string)
91638 if (!buffer) return
91639
91640 return decodeRaw(buffer)
91641 }
91642
91643 function decode (string) {
91644 var buffer = base58.decode(string)
91645 var payload = decodeRaw(buffer, checksumFn)
91646 if (!payload) throw new Error('Invalid checksum')
91647 return payload
91648 }
91649
91650 return {
91651 encode: encode,
91652 decode: decode,
91653 decodeUnsafe: decodeUnsafe
91654 }
91655 }
91656
91657 },{"bs58":5,"safe-buffer":40}],7:[function(require,module,exports){
91658 'use strict'
91659
91660 var createHash = require('create-hash')
91661 var bs58checkBase = require('./base')
91662
91663 // SHA256(SHA256(buffer))
91664 function sha256x2 (buffer) {
91665 var tmp = createHash('sha256').update(buffer).digest()
91666 return createHash('sha256').update(tmp).digest()
91667 }
91668
91669 module.exports = bs58checkBase(sha256x2)
91670
91671 },{"./base":6,"create-hash":15}],8:[function(require,module,exports){
91672 /*!
91673 * The buffer module from node.js, for the browser.
91674 *
91675 * @author Feross Aboukhadijeh <https://feross.org>
91676 * @license MIT
91677 */
91678 /* eslint-disable no-proto */
91679
91680 'use strict'
91681
91682 var base64 = require('base64-js')
91683 var ieee754 = require('ieee754')
91684
91685 exports.Buffer = Buffer
91686 exports.SlowBuffer = SlowBuffer
91687 exports.INSPECT_MAX_BYTES = 50
91688
91689 var K_MAX_LENGTH = 0x7fffffff
91690 exports.kMaxLength = K_MAX_LENGTH
91691
91692 /**
91693 * If `Buffer.TYPED_ARRAY_SUPPORT`:
91694 * === true Use Uint8Array implementation (fastest)
91695 * === false Print warning and recommend using `buffer` v4.x which has an Object
91696 * implementation (most compatible, even IE6)
91697 *
91698 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
91699 * Opera 11.6+, iOS 4.2+.
91700 *
91701 * We report that the browser does not support typed arrays if the are not subclassable
91702 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
91703 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
91704 * for __proto__ and has a buggy typed array implementation.
91705 */
91706 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
91707
91708 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
91709 typeof console.error === 'function') {
91710 console.error(
91711 'This browser lacks typed array (Uint8Array) support which is required by ' +
91712 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
91713 )
91714 }
91715
91716 function typedArraySupport () {
91717 // Can typed array instances can be augmented?
91718 try {
91719 var arr = new Uint8Array(1)
91720 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
91721 return arr.foo() === 42
91722 } catch (e) {
91723 return false
91724 }
91725 }
91726
91727 function createBuffer (length) {
91728 if (length > K_MAX_LENGTH) {
91729 throw new RangeError('Invalid typed array length')
91730 }
91731 // Return an augmented `Uint8Array` instance
91732 var buf = new Uint8Array(length)
91733 buf.__proto__ = Buffer.prototype
91734 return buf
91735 }
91736
91737 /**
91738 * The Buffer constructor returns instances of `Uint8Array` that have their
91739 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
91740 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
91741 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
91742 * returns a single octet.
91743 *
91744 * The `Uint8Array` prototype remains unmodified.
91745 */
91746
91747 function Buffer (arg, encodingOrOffset, length) {
91748 // Common case.
91749 if (typeof arg === 'number') {
91750 if (typeof encodingOrOffset === 'string') {
91751 throw new Error(
91752 'If encoding is specified then the first argument must be a string'
91753 )
91754 }
91755 return allocUnsafe(arg)
91756 }
91757 return from(arg, encodingOrOffset, length)
91758 }
91759
91760 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
91761 if (typeof Symbol !== 'undefined' && Symbol.species &&
91762 Buffer[Symbol.species] === Buffer) {
91763 Object.defineProperty(Buffer, Symbol.species, {
91764 value: null,
91765 configurable: true,
91766 enumerable: false,
91767 writable: false
91768 })
91769 }
91770
91771 Buffer.poolSize = 8192 // not used by this implementation
91772
91773 function from (value, encodingOrOffset, length) {
91774 if (typeof value === 'number') {
91775 throw new TypeError('"value" argument must not be a number')
91776 }
91777
91778 if (isArrayBuffer(value)) {
91779 return fromArrayBuffer(value, encodingOrOffset, length)
91780 }
91781
91782 if (typeof value === 'string') {
91783 return fromString(value, encodingOrOffset)
91784 }
91785
91786 return fromObject(value)
91787 }
91788
91789 /**
91790 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
91791 * if value is a number.
91792 * Buffer.from(str[, encoding])
91793 * Buffer.from(array)
91794 * Buffer.from(buffer)
91795 * Buffer.from(arrayBuffer[, byteOffset[, length]])
91796 **/
91797 Buffer.from = function (value, encodingOrOffset, length) {
91798 return from(value, encodingOrOffset, length)
91799 }
91800
91801 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
91802 // https://github.com/feross/buffer/pull/148
91803 Buffer.prototype.__proto__ = Uint8Array.prototype
91804 Buffer.__proto__ = Uint8Array
91805
91806 function assertSize (size) {
91807 if (typeof size !== 'number') {
91808 throw new TypeError('"size" argument must be a number')
91809 } else if (size < 0) {
91810 throw new RangeError('"size" argument must not be negative')
91811 }
91812 }
91813
91814 function alloc (size, fill, encoding) {
91815 assertSize(size)
91816 if (size <= 0) {
91817 return createBuffer(size)
91818 }
91819 if (fill !== undefined) {
91820 // Only pay attention to encoding if it's a string. This
91821 // prevents accidentally sending in a number that would
91822 // be interpretted as a start offset.
91823 return typeof encoding === 'string'
91824 ? createBuffer(size).fill(fill, encoding)
91825 : createBuffer(size).fill(fill)
91826 }
91827 return createBuffer(size)
91828 }
91829
91830 /**
91831 * Creates a new filled Buffer instance.
91832 * alloc(size[, fill[, encoding]])
91833 **/
91834 Buffer.alloc = function (size, fill, encoding) {
91835 return alloc(size, fill, encoding)
91836 }
91837
91838 function allocUnsafe (size) {
91839 assertSize(size)
91840 return createBuffer(size < 0 ? 0 : checked(size) | 0)
91841 }
91842
91843 /**
91844 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
91845 * */
91846 Buffer.allocUnsafe = function (size) {
91847 return allocUnsafe(size)
91848 }
91849 /**
91850 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
91851 */
91852 Buffer.allocUnsafeSlow = function (size) {
91853 return allocUnsafe(size)
91854 }
91855
91856 function fromString (string, encoding) {
91857 if (typeof encoding !== 'string' || encoding === '') {
91858 encoding = 'utf8'
91859 }
91860
91861 if (!Buffer.isEncoding(encoding)) {
91862 throw new TypeError('"encoding" must be a valid string encoding')
91863 }
91864
91865 var length = byteLength(string, encoding) | 0
91866 var buf = createBuffer(length)
91867
91868 var actual = buf.write(string, encoding)
91869
91870 if (actual !== length) {
91871 // Writing a hex string, for example, that contains invalid characters will
91872 // cause everything after the first invalid character to be ignored. (e.g.
91873 // 'abxxcd' will be treated as 'ab')
91874 buf = buf.slice(0, actual)
91875 }
91876
91877 return buf
91878 }
91879
91880 function fromArrayLike (array) {
91881 var length = array.length < 0 ? 0 : checked(array.length) | 0
91882 var buf = createBuffer(length)
91883 for (var i = 0; i < length; i += 1) {
91884 buf[i] = array[i] & 255
91885 }
91886 return buf
91887 }
91888
91889 function fromArrayBuffer (array, byteOffset, length) {
91890 if (byteOffset < 0 || array.byteLength < byteOffset) {
91891 throw new RangeError('\'offset\' is out of bounds')
91892 }
91893
91894 if (array.byteLength < byteOffset + (length || 0)) {
91895 throw new RangeError('\'length\' is out of bounds')
91896 }
91897
91898 var buf
91899 if (byteOffset === undefined && length === undefined) {
91900 buf = new Uint8Array(array)
91901 } else if (length === undefined) {
91902 buf = new Uint8Array(array, byteOffset)
91903 } else {
91904 buf = new Uint8Array(array, byteOffset, length)
91905 }
91906
91907 // Return an augmented `Uint8Array` instance
91908 buf.__proto__ = Buffer.prototype
91909 return buf
91910 }
91911
91912 function fromObject (obj) {
91913 if (Buffer.isBuffer(obj)) {
91914 var len = checked(obj.length) | 0
91915 var buf = createBuffer(len)
91916
91917 if (buf.length === 0) {
91918 return buf
91919 }
91920
91921 obj.copy(buf, 0, 0, len)
91922 return buf
91923 }
91924
91925 if (obj) {
91926 if (isArrayBufferView(obj) || 'length' in obj) {
91927 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
91928 return createBuffer(0)
91929 }
91930 return fromArrayLike(obj)
91931 }
91932
91933 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
91934 return fromArrayLike(obj.data)
91935 }
91936 }
91937
91938 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
91939 }
91940
91941 function checked (length) {
91942 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
91943 // length is NaN (which is otherwise coerced to zero.)
91944 if (length >= K_MAX_LENGTH) {
91945 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
91946 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
91947 }
91948 return length | 0
91949 }
91950
91951 function SlowBuffer (length) {
91952 if (+length != length) { // eslint-disable-line eqeqeq
91953 length = 0
91954 }
91955 return Buffer.alloc(+length)
91956 }
91957
91958 Buffer.isBuffer = function isBuffer (b) {
91959 return b != null && b._isBuffer === true
91960 }
91961
91962 Buffer.compare = function compare (a, b) {
91963 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
91964 throw new TypeError('Arguments must be Buffers')
91965 }
91966
91967 if (a === b) return 0
91968
91969 var x = a.length
91970 var y = b.length
91971
91972 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
91973 if (a[i] !== b[i]) {
91974 x = a[i]
91975 y = b[i]
91976 break
91977 }
91978 }
91979
91980 if (x < y) return -1
91981 if (y < x) return 1
91982 return 0
91983 }
91984
91985 Buffer.isEncoding = function isEncoding (encoding) {
91986 switch (String(encoding).toLowerCase()) {
91987 case 'hex':
91988 case 'utf8':
91989 case 'utf-8':
91990 case 'ascii':
91991 case 'latin1':
91992 case 'binary':
91993 case 'base64':
91994 case 'ucs2':
91995 case 'ucs-2':
91996 case 'utf16le':
91997 case 'utf-16le':
91998 return true
91999 default:
92000 return false
92001 }
92002 }
92003
92004 Buffer.concat = function concat (list, length) {
92005 if (!Array.isArray(list)) {
92006 throw new TypeError('"list" argument must be an Array of Buffers')
92007 }
92008
92009 if (list.length === 0) {
92010 return Buffer.alloc(0)
92011 }
92012
92013 var i
92014 if (length === undefined) {
92015 length = 0
92016 for (i = 0; i < list.length; ++i) {
92017 length += list[i].length
92018 }
92019 }
92020
92021 var buffer = Buffer.allocUnsafe(length)
92022 var pos = 0
92023 for (i = 0; i < list.length; ++i) {
92024 var buf = list[i]
92025 if (!Buffer.isBuffer(buf)) {
92026 throw new TypeError('"list" argument must be an Array of Buffers')
92027 }
92028 buf.copy(buffer, pos)
92029 pos += buf.length
92030 }
92031 return buffer
92032 }
92033
92034 function byteLength (string, encoding) {
92035 if (Buffer.isBuffer(string)) {
92036 return string.length
92037 }
92038 if (isArrayBufferView(string) || isArrayBuffer(string)) {
92039 return string.byteLength
92040 }
92041 if (typeof string !== 'string') {
92042 string = '' + string
92043 }
92044
92045 var len = string.length
92046 if (len === 0) return 0
92047
92048 // Use a for loop to avoid recursion
92049 var loweredCase = false
92050 for (;;) {
92051 switch (encoding) {
92052 case 'ascii':
92053 case 'latin1':
92054 case 'binary':
92055 return len
92056 case 'utf8':
92057 case 'utf-8':
92058 case undefined:
92059 return utf8ToBytes(string).length
92060 case 'ucs2':
92061 case 'ucs-2':
92062 case 'utf16le':
92063 case 'utf-16le':
92064 return len * 2
92065 case 'hex':
92066 return len >>> 1
92067 case 'base64':
92068 return base64ToBytes(string).length
92069 default:
92070 if (loweredCase) return utf8ToBytes(string).length // assume utf8
92071 encoding = ('' + encoding).toLowerCase()
92072 loweredCase = true
92073 }
92074 }
92075 }
92076 Buffer.byteLength = byteLength
92077
92078 function slowToString (encoding, start, end) {
92079 var loweredCase = false
92080
92081 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
92082 // property of a typed array.
92083
92084 // This behaves neither like String nor Uint8Array in that we set start/end
92085 // to their upper/lower bounds if the value passed is out of range.
92086 // undefined is handled specially as per ECMA-262 6th Edition,
92087 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
92088 if (start === undefined || start < 0) {
92089 start = 0
92090 }
92091 // Return early if start > this.length. Done here to prevent potential uint32
92092 // coercion fail below.
92093 if (start > this.length) {
92094 return ''
92095 }
92096
92097 if (end === undefined || end > this.length) {
92098 end = this.length
92099 }
92100
92101 if (end <= 0) {
92102 return ''
92103 }
92104
92105 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
92106 end >>>= 0
92107 start >>>= 0
92108
92109 if (end <= start) {
92110 return ''
92111 }
92112
92113 if (!encoding) encoding = 'utf8'
92114
92115 while (true) {
92116 switch (encoding) {
92117 case 'hex':
92118 return hexSlice(this, start, end)
92119
92120 case 'utf8':
92121 case 'utf-8':
92122 return utf8Slice(this, start, end)
92123
92124 case 'ascii':
92125 return asciiSlice(this, start, end)
92126
92127 case 'latin1':
92128 case 'binary':
92129 return latin1Slice(this, start, end)
92130
92131 case 'base64':
92132 return base64Slice(this, start, end)
92133
92134 case 'ucs2':
92135 case 'ucs-2':
92136 case 'utf16le':
92137 case 'utf-16le':
92138 return utf16leSlice(this, start, end)
92139
92140 default:
92141 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
92142 encoding = (encoding + '').toLowerCase()
92143 loweredCase = true
92144 }
92145 }
92146 }
92147
92148 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
92149 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
92150 // reliably in a browserify context because there could be multiple different
92151 // copies of the 'buffer' package in use. This method works even for Buffer
92152 // instances that were created from another copy of the `buffer` package.
92153 // See: https://github.com/feross/buffer/issues/154
92154 Buffer.prototype._isBuffer = true
92155
92156 function swap (b, n, m) {
92157 var i = b[n]
92158 b[n] = b[m]
92159 b[m] = i
92160 }
92161
92162 Buffer.prototype.swap16 = function swap16 () {
92163 var len = this.length
92164 if (len % 2 !== 0) {
92165 throw new RangeError('Buffer size must be a multiple of 16-bits')
92166 }
92167 for (var i = 0; i < len; i += 2) {
92168 swap(this, i, i + 1)
92169 }
92170 return this
92171 }
92172
92173 Buffer.prototype.swap32 = function swap32 () {
92174 var len = this.length
92175 if (len % 4 !== 0) {
92176 throw new RangeError('Buffer size must be a multiple of 32-bits')
92177 }
92178 for (var i = 0; i < len; i += 4) {
92179 swap(this, i, i + 3)
92180 swap(this, i + 1, i + 2)
92181 }
92182 return this
92183 }
92184
92185 Buffer.prototype.swap64 = function swap64 () {
92186 var len = this.length
92187 if (len % 8 !== 0) {
92188 throw new RangeError('Buffer size must be a multiple of 64-bits')
92189 }
92190 for (var i = 0; i < len; i += 8) {
92191 swap(this, i, i + 7)
92192 swap(this, i + 1, i + 6)
92193 swap(this, i + 2, i + 5)
92194 swap(this, i + 3, i + 4)
92195 }
92196 return this
92197 }
92198
92199 Buffer.prototype.toString = function toString () {
92200 var length = this.length
92201 if (length === 0) return ''
92202 if (arguments.length === 0) return utf8Slice(this, 0, length)
92203 return slowToString.apply(this, arguments)
92204 }
92205
92206 Buffer.prototype.equals = function equals (b) {
92207 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
92208 if (this === b) return true
92209 return Buffer.compare(this, b) === 0
92210 }
92211
92212 Buffer.prototype.inspect = function inspect () {
92213 var str = ''
92214 var max = exports.INSPECT_MAX_BYTES
92215 if (this.length > 0) {
92216 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
92217 if (this.length > max) str += ' ... '
92218 }
92219 return '<Buffer ' + str + '>'
92220 }
92221
92222 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
92223 if (!Buffer.isBuffer(target)) {
92224 throw new TypeError('Argument must be a Buffer')
92225 }
92226
92227 if (start === undefined) {
92228 start = 0
92229 }
92230 if (end === undefined) {
92231 end = target ? target.length : 0
92232 }
92233 if (thisStart === undefined) {
92234 thisStart = 0
92235 }
92236 if (thisEnd === undefined) {
92237 thisEnd = this.length
92238 }
92239
92240 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
92241 throw new RangeError('out of range index')
92242 }
92243
92244 if (thisStart >= thisEnd && start >= end) {
92245 return 0
92246 }
92247 if (thisStart >= thisEnd) {
92248 return -1
92249 }
92250 if (start >= end) {
92251 return 1
92252 }
92253
92254 start >>>= 0
92255 end >>>= 0
92256 thisStart >>>= 0
92257 thisEnd >>>= 0
92258
92259 if (this === target) return 0
92260
92261 var x = thisEnd - thisStart
92262 var y = end - start
92263 var len = Math.min(x, y)
92264
92265 var thisCopy = this.slice(thisStart, thisEnd)
92266 var targetCopy = target.slice(start, end)
92267
92268 for (var i = 0; i < len; ++i) {
92269 if (thisCopy[i] !== targetCopy[i]) {
92270 x = thisCopy[i]
92271 y = targetCopy[i]
92272 break
92273 }
92274 }
92275
92276 if (x < y) return -1
92277 if (y < x) return 1
92278 return 0
92279 }
92280
92281 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
92282 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
92283 //
92284 // Arguments:
92285 // - buffer - a Buffer to search
92286 // - val - a string, Buffer, or number
92287 // - byteOffset - an index into `buffer`; will be clamped to an int32
92288 // - encoding - an optional encoding, relevant is val is a string
92289 // - dir - true for indexOf, false for lastIndexOf
92290 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
92291 // Empty buffer means no match
92292 if (buffer.length === 0) return -1
92293
92294 // Normalize byteOffset
92295 if (typeof byteOffset === 'string') {
92296 encoding = byteOffset
92297 byteOffset = 0
92298 } else if (byteOffset > 0x7fffffff) {
92299 byteOffset = 0x7fffffff
92300 } else if (byteOffset < -0x80000000) {
92301 byteOffset = -0x80000000
92302 }
92303 byteOffset = +byteOffset // Coerce to Number.
92304 if (numberIsNaN(byteOffset)) {
92305 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
92306 byteOffset = dir ? 0 : (buffer.length - 1)
92307 }
92308
92309 // Normalize byteOffset: negative offsets start from the end of the buffer
92310 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
92311 if (byteOffset >= buffer.length) {
92312 if (dir) return -1
92313 else byteOffset = buffer.length - 1
92314 } else if (byteOffset < 0) {
92315 if (dir) byteOffset = 0
92316 else return -1
92317 }
92318
92319 // Normalize val
92320 if (typeof val === 'string') {
92321 val = Buffer.from(val, encoding)
92322 }
92323
92324 // Finally, search either indexOf (if dir is true) or lastIndexOf
92325 if (Buffer.isBuffer(val)) {
92326 // Special case: looking for empty string/buffer always fails
92327 if (val.length === 0) {
92328 return -1
92329 }
92330 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
92331 } else if (typeof val === 'number') {
92332 val = val & 0xFF // Search for a byte value [0-255]
92333 if (typeof Uint8Array.prototype.indexOf === 'function') {
92334 if (dir) {
92335 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
92336 } else {
92337 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
92338 }
92339 }
92340 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
92341 }
92342
92343 throw new TypeError('val must be string, number or Buffer')
92344 }
92345
92346 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
92347 var indexSize = 1
92348 var arrLength = arr.length
92349 var valLength = val.length
92350
92351 if (encoding !== undefined) {
92352 encoding = String(encoding).toLowerCase()
92353 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
92354 encoding === 'utf16le' || encoding === 'utf-16le') {
92355 if (arr.length < 2 || val.length < 2) {
92356 return -1
92357 }
92358 indexSize = 2
92359 arrLength /= 2
92360 valLength /= 2
92361 byteOffset /= 2
92362 }
92363 }
92364
92365 function read (buf, i) {
92366 if (indexSize === 1) {
92367 return buf[i]
92368 } else {
92369 return buf.readUInt16BE(i * indexSize)
92370 }
92371 }
92372
92373 var i
92374 if (dir) {
92375 var foundIndex = -1
92376 for (i = byteOffset; i < arrLength; i++) {
92377 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
92378 if (foundIndex === -1) foundIndex = i
92379 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
92380 } else {
92381 if (foundIndex !== -1) i -= i - foundIndex
92382 foundIndex = -1
92383 }
92384 }
92385 } else {
92386 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
92387 for (i = byteOffset; i >= 0; i--) {
92388 var found = true
92389 for (var j = 0; j < valLength; j++) {
92390 if (read(arr, i + j) !== read(val, j)) {
92391 found = false
92392 break
92393 }
92394 }
92395 if (found) return i
92396 }
92397 }
92398
92399 return -1
92400 }
92401
92402 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
92403 return this.indexOf(val, byteOffset, encoding) !== -1
92404 }
92405
92406 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
92407 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
92408 }
92409
92410 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
92411 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
92412 }
92413
92414 function hexWrite (buf, string, offset, length) {
92415 offset = Number(offset) || 0
92416 var remaining = buf.length - offset
92417 if (!length) {
92418 length = remaining
92419 } else {
92420 length = Number(length)
92421 if (length > remaining) {
92422 length = remaining
92423 }
92424 }
92425
92426 // must be an even number of digits
92427 var strLen = string.length
92428 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
92429
92430 if (length > strLen / 2) {
92431 length = strLen / 2
92432 }
92433 for (var i = 0; i < length; ++i) {
92434 var parsed = parseInt(string.substr(i * 2, 2), 16)
92435 if (numberIsNaN(parsed)) return i
92436 buf[offset + i] = parsed
92437 }
92438 return i
92439 }
92440
92441 function utf8Write (buf, string, offset, length) {
92442 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
92443 }
92444
92445 function asciiWrite (buf, string, offset, length) {
92446 return blitBuffer(asciiToBytes(string), buf, offset, length)
92447 }
92448
92449 function latin1Write (buf, string, offset, length) {
92450 return asciiWrite(buf, string, offset, length)
92451 }
92452
92453 function base64Write (buf, string, offset, length) {
92454 return blitBuffer(base64ToBytes(string), buf, offset, length)
92455 }
92456
92457 function ucs2Write (buf, string, offset, length) {
92458 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
92459 }
92460
92461 Buffer.prototype.write = function write (string, offset, length, encoding) {
92462 // Buffer#write(string)
92463 if (offset === undefined) {
92464 encoding = 'utf8'
92465 length = this.length
92466 offset = 0
92467 // Buffer#write(string, encoding)
92468 } else if (length === undefined && typeof offset === 'string') {
92469 encoding = offset
92470 length = this.length
92471 offset = 0
92472 // Buffer#write(string, offset[, length][, encoding])
92473 } else if (isFinite(offset)) {
92474 offset = offset >>> 0
92475 if (isFinite(length)) {
92476 length = length >>> 0
92477 if (encoding === undefined) encoding = 'utf8'
92478 } else {
92479 encoding = length
92480 length = undefined
92481 }
92482 } else {
92483 throw new Error(
92484 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
92485 )
92486 }
92487
92488 var remaining = this.length - offset
92489 if (length === undefined || length > remaining) length = remaining
92490
92491 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
92492 throw new RangeError('Attempt to write outside buffer bounds')
92493 }
92494
92495 if (!encoding) encoding = 'utf8'
92496
92497 var loweredCase = false
92498 for (;;) {
92499 switch (encoding) {
92500 case 'hex':
92501 return hexWrite(this, string, offset, length)
92502
92503 case 'utf8':
92504 case 'utf-8':
92505 return utf8Write(this, string, offset, length)
92506
92507 case 'ascii':
92508 return asciiWrite(this, string, offset, length)
92509
92510 case 'latin1':
92511 case 'binary':
92512 return latin1Write(this, string, offset, length)
92513
92514 case 'base64':
92515 // Warning: maxLength not taken into account in base64Write
92516 return base64Write(this, string, offset, length)
92517
92518 case 'ucs2':
92519 case 'ucs-2':
92520 case 'utf16le':
92521 case 'utf-16le':
92522 return ucs2Write(this, string, offset, length)
92523
92524 default:
92525 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
92526 encoding = ('' + encoding).toLowerCase()
92527 loweredCase = true
92528 }
92529 }
92530 }
92531
92532 Buffer.prototype.toJSON = function toJSON () {
92533 return {
92534 type: 'Buffer',
92535 data: Array.prototype.slice.call(this._arr || this, 0)
92536 }
92537 }
92538
92539 function base64Slice (buf, start, end) {
92540 if (start === 0 && end === buf.length) {
92541 return base64.fromByteArray(buf)
92542 } else {
92543 return base64.fromByteArray(buf.slice(start, end))
92544 }
92545 }
92546
92547 function utf8Slice (buf, start, end) {
92548 end = Math.min(buf.length, end)
92549 var res = []
92550
92551 var i = start
92552 while (i < end) {
92553 var firstByte = buf[i]
92554 var codePoint = null
92555 var bytesPerSequence = (firstByte > 0xEF) ? 4
92556 : (firstByte > 0xDF) ? 3
92557 : (firstByte > 0xBF) ? 2
92558 : 1
92559
92560 if (i + bytesPerSequence <= end) {
92561 var secondByte, thirdByte, fourthByte, tempCodePoint
92562
92563 switch (bytesPerSequence) {
92564 case 1:
92565 if (firstByte < 0x80) {
92566 codePoint = firstByte
92567 }
92568 break
92569 case 2:
92570 secondByte = buf[i + 1]
92571 if ((secondByte & 0xC0) === 0x80) {
92572 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
92573 if (tempCodePoint > 0x7F) {
92574 codePoint = tempCodePoint
92575 }
92576 }
92577 break
92578 case 3:
92579 secondByte = buf[i + 1]
92580 thirdByte = buf[i + 2]
92581 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
92582 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
92583 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
92584 codePoint = tempCodePoint
92585 }
92586 }
92587 break
92588 case 4:
92589 secondByte = buf[i + 1]
92590 thirdByte = buf[i + 2]
92591 fourthByte = buf[i + 3]
92592 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
92593 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
92594 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
92595 codePoint = tempCodePoint
92596 }
92597 }
92598 }
92599 }
92600
92601 if (codePoint === null) {
92602 // we did not generate a valid codePoint so insert a
92603 // replacement char (U+FFFD) and advance only 1 byte
92604 codePoint = 0xFFFD
92605 bytesPerSequence = 1
92606 } else if (codePoint > 0xFFFF) {
92607 // encode to utf16 (surrogate pair dance)
92608 codePoint -= 0x10000
92609 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
92610 codePoint = 0xDC00 | codePoint & 0x3FF
92611 }
92612
92613 res.push(codePoint)
92614 i += bytesPerSequence
92615 }
92616
92617 return decodeCodePointsArray(res)
92618 }
92619
92620 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
92621 // the lowest limit is Chrome, with 0x10000 args.
92622 // We go 1 magnitude less, for safety
92623 var MAX_ARGUMENTS_LENGTH = 0x1000
92624
92625 function decodeCodePointsArray (codePoints) {
92626 var len = codePoints.length
92627 if (len <= MAX_ARGUMENTS_LENGTH) {
92628 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
92629 }
92630
92631 // Decode in chunks to avoid "call stack size exceeded".
92632 var res = ''
92633 var i = 0
92634 while (i < len) {
92635 res += String.fromCharCode.apply(
92636 String,
92637 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
92638 )
92639 }
92640 return res
92641 }
92642
92643 function asciiSlice (buf, start, end) {
92644 var ret = ''
92645 end = Math.min(buf.length, end)
92646
92647 for (var i = start; i < end; ++i) {
92648 ret += String.fromCharCode(buf[i] & 0x7F)
92649 }
92650 return ret
92651 }
92652
92653 function latin1Slice (buf, start, end) {
92654 var ret = ''
92655 end = Math.min(buf.length, end)
92656
92657 for (var i = start; i < end; ++i) {
92658 ret += String.fromCharCode(buf[i])
92659 }
92660 return ret
92661 }
92662
92663 function hexSlice (buf, start, end) {
92664 var len = buf.length
92665
92666 if (!start || start < 0) start = 0
92667 if (!end || end < 0 || end > len) end = len
92668
92669 var out = ''
92670 for (var i = start; i < end; ++i) {
92671 out += toHex(buf[i])
92672 }
92673 return out
92674 }
92675
92676 function utf16leSlice (buf, start, end) {
92677 var bytes = buf.slice(start, end)
92678 var res = ''
92679 for (var i = 0; i < bytes.length; i += 2) {
92680 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
92681 }
92682 return res
92683 }
92684
92685 Buffer.prototype.slice = function slice (start, end) {
92686 var len = this.length
92687 start = ~~start
92688 end = end === undefined ? len : ~~end
92689
92690 if (start < 0) {
92691 start += len
92692 if (start < 0) start = 0
92693 } else if (start > len) {
92694 start = len
92695 }
92696
92697 if (end < 0) {
92698 end += len
92699 if (end < 0) end = 0
92700 } else if (end > len) {
92701 end = len
92702 }
92703
92704 if (end < start) end = start
92705
92706 var newBuf = this.subarray(start, end)
92707 // Return an augmented `Uint8Array` instance
92708 newBuf.__proto__ = Buffer.prototype
92709 return newBuf
92710 }
92711
92712 /*
92713 * Need to make sure that buffer isn't trying to write out of bounds.
92714 */
92715 function checkOffset (offset, ext, length) {
92716 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
92717 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
92718 }
92719
92720 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
92721 offset = offset >>> 0
92722 byteLength = byteLength >>> 0
92723 if (!noAssert) checkOffset(offset, byteLength, this.length)
92724
92725 var val = this[offset]
92726 var mul = 1
92727 var i = 0
92728 while (++i < byteLength && (mul *= 0x100)) {
92729 val += this[offset + i] * mul
92730 }
92731
92732 return val
92733 }
92734
92735 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
92736 offset = offset >>> 0
92737 byteLength = byteLength >>> 0
92738 if (!noAssert) {
92739 checkOffset(offset, byteLength, this.length)
92740 }
92741
92742 var val = this[offset + --byteLength]
92743 var mul = 1
92744 while (byteLength > 0 && (mul *= 0x100)) {
92745 val += this[offset + --byteLength] * mul
92746 }
92747
92748 return val
92749 }
92750
92751 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
92752 offset = offset >>> 0
92753 if (!noAssert) checkOffset(offset, 1, this.length)
92754 return this[offset]
92755 }
92756
92757 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
92758 offset = offset >>> 0
92759 if (!noAssert) checkOffset(offset, 2, this.length)
92760 return this[offset] | (this[offset + 1] << 8)
92761 }
92762
92763 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
92764 offset = offset >>> 0
92765 if (!noAssert) checkOffset(offset, 2, this.length)
92766 return (this[offset] << 8) | this[offset + 1]
92767 }
92768
92769 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
92770 offset = offset >>> 0
92771 if (!noAssert) checkOffset(offset, 4, this.length)
92772
92773 return ((this[offset]) |
92774 (this[offset + 1] << 8) |
92775 (this[offset + 2] << 16)) +
92776 (this[offset + 3] * 0x1000000)
92777 }
92778
92779 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
92780 offset = offset >>> 0
92781 if (!noAssert) checkOffset(offset, 4, this.length)
92782
92783 return (this[offset] * 0x1000000) +
92784 ((this[offset + 1] << 16) |
92785 (this[offset + 2] << 8) |
92786 this[offset + 3])
92787 }
92788
92789 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
92790 offset = offset >>> 0
92791 byteLength = byteLength >>> 0
92792 if (!noAssert) checkOffset(offset, byteLength, this.length)
92793
92794 var val = this[offset]
92795 var mul = 1
92796 var i = 0
92797 while (++i < byteLength && (mul *= 0x100)) {
92798 val += this[offset + i] * mul
92799 }
92800 mul *= 0x80
92801
92802 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
92803
92804 return val
92805 }
92806
92807 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
92808 offset = offset >>> 0
92809 byteLength = byteLength >>> 0
92810 if (!noAssert) checkOffset(offset, byteLength, this.length)
92811
92812 var i = byteLength
92813 var mul = 1
92814 var val = this[offset + --i]
92815 while (i > 0 && (mul *= 0x100)) {
92816 val += this[offset + --i] * mul
92817 }
92818 mul *= 0x80
92819
92820 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
92821
92822 return val
92823 }
92824
92825 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
92826 offset = offset >>> 0
92827 if (!noAssert) checkOffset(offset, 1, this.length)
92828 if (!(this[offset] & 0x80)) return (this[offset])
92829 return ((0xff - this[offset] + 1) * -1)
92830 }
92831
92832 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
92833 offset = offset >>> 0
92834 if (!noAssert) checkOffset(offset, 2, this.length)
92835 var val = this[offset] | (this[offset + 1] << 8)
92836 return (val & 0x8000) ? val | 0xFFFF0000 : val
92837 }
92838
92839 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
92840 offset = offset >>> 0
92841 if (!noAssert) checkOffset(offset, 2, this.length)
92842 var val = this[offset + 1] | (this[offset] << 8)
92843 return (val & 0x8000) ? val | 0xFFFF0000 : val
92844 }
92845
92846 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
92847 offset = offset >>> 0
92848 if (!noAssert) checkOffset(offset, 4, this.length)
92849
92850 return (this[offset]) |
92851 (this[offset + 1] << 8) |
92852 (this[offset + 2] << 16) |
92853 (this[offset + 3] << 24)
92854 }
92855
92856 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
92857 offset = offset >>> 0
92858 if (!noAssert) checkOffset(offset, 4, this.length)
92859
92860 return (this[offset] << 24) |
92861 (this[offset + 1] << 16) |
92862 (this[offset + 2] << 8) |
92863 (this[offset + 3])
92864 }
92865
92866 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
92867 offset = offset >>> 0
92868 if (!noAssert) checkOffset(offset, 4, this.length)
92869 return ieee754.read(this, offset, true, 23, 4)
92870 }
92871
92872 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
92873 offset = offset >>> 0
92874 if (!noAssert) checkOffset(offset, 4, this.length)
92875 return ieee754.read(this, offset, false, 23, 4)
92876 }
92877
92878 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
92879 offset = offset >>> 0
92880 if (!noAssert) checkOffset(offset, 8, this.length)
92881 return ieee754.read(this, offset, true, 52, 8)
92882 }
92883
92884 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
92885 offset = offset >>> 0
92886 if (!noAssert) checkOffset(offset, 8, this.length)
92887 return ieee754.read(this, offset, false, 52, 8)
92888 }
92889
92890 function checkInt (buf, value, offset, ext, max, min) {
92891 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
92892 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
92893 if (offset + ext > buf.length) throw new RangeError('Index out of range')
92894 }
92895
92896 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
92897 value = +value
92898 offset = offset >>> 0
92899 byteLength = byteLength >>> 0
92900 if (!noAssert) {
92901 var maxBytes = Math.pow(2, 8 * byteLength) - 1
92902 checkInt(this, value, offset, byteLength, maxBytes, 0)
92903 }
92904
92905 var mul = 1
92906 var i = 0
92907 this[offset] = value & 0xFF
92908 while (++i < byteLength && (mul *= 0x100)) {
92909 this[offset + i] = (value / mul) & 0xFF
92910 }
92911
92912 return offset + byteLength
92913 }
92914
92915 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
92916 value = +value
92917 offset = offset >>> 0
92918 byteLength = byteLength >>> 0
92919 if (!noAssert) {
92920 var maxBytes = Math.pow(2, 8 * byteLength) - 1
92921 checkInt(this, value, offset, byteLength, maxBytes, 0)
92922 }
92923
92924 var i = byteLength - 1
92925 var mul = 1
92926 this[offset + i] = value & 0xFF
92927 while (--i >= 0 && (mul *= 0x100)) {
92928 this[offset + i] = (value / mul) & 0xFF
92929 }
92930
92931 return offset + byteLength
92932 }
92933
92934 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
92935 value = +value
92936 offset = offset >>> 0
92937 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
92938 this[offset] = (value & 0xff)
92939 return offset + 1
92940 }
92941
92942 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
92943 value = +value
92944 offset = offset >>> 0
92945 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
92946 this[offset] = (value & 0xff)
92947 this[offset + 1] = (value >>> 8)
92948 return offset + 2
92949 }
92950
92951 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
92952 value = +value
92953 offset = offset >>> 0
92954 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
92955 this[offset] = (value >>> 8)
92956 this[offset + 1] = (value & 0xff)
92957 return offset + 2
92958 }
92959
92960 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
92961 value = +value
92962 offset = offset >>> 0
92963 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
92964 this[offset + 3] = (value >>> 24)
92965 this[offset + 2] = (value >>> 16)
92966 this[offset + 1] = (value >>> 8)
92967 this[offset] = (value & 0xff)
92968 return offset + 4
92969 }
92970
92971 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
92972 value = +value
92973 offset = offset >>> 0
92974 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
92975 this[offset] = (value >>> 24)
92976 this[offset + 1] = (value >>> 16)
92977 this[offset + 2] = (value >>> 8)
92978 this[offset + 3] = (value & 0xff)
92979 return offset + 4
92980 }
92981
92982 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
92983 value = +value
92984 offset = offset >>> 0
92985 if (!noAssert) {
92986 var limit = Math.pow(2, (8 * byteLength) - 1)
92987
92988 checkInt(this, value, offset, byteLength, limit - 1, -limit)
92989 }
92990
92991 var i = 0
92992 var mul = 1
92993 var sub = 0
92994 this[offset] = value & 0xFF
92995 while (++i < byteLength && (mul *= 0x100)) {
92996 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
92997 sub = 1
92998 }
92999 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
93000 }
93001
93002 return offset + byteLength
93003 }
93004
93005 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
93006 value = +value
93007 offset = offset >>> 0
93008 if (!noAssert) {
93009 var limit = Math.pow(2, (8 * byteLength) - 1)
93010
93011 checkInt(this, value, offset, byteLength, limit - 1, -limit)
93012 }
93013
93014 var i = byteLength - 1
93015 var mul = 1
93016 var sub = 0
93017 this[offset + i] = value & 0xFF
93018 while (--i >= 0 && (mul *= 0x100)) {
93019 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
93020 sub = 1
93021 }
93022 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
93023 }
93024
93025 return offset + byteLength
93026 }
93027
93028 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
93029 value = +value
93030 offset = offset >>> 0
93031 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
93032 if (value < 0) value = 0xff + value + 1
93033 this[offset] = (value & 0xff)
93034 return offset + 1
93035 }
93036
93037 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
93038 value = +value
93039 offset = offset >>> 0
93040 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
93041 this[offset] = (value & 0xff)
93042 this[offset + 1] = (value >>> 8)
93043 return offset + 2
93044 }
93045
93046 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
93047 value = +value
93048 offset = offset >>> 0
93049 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
93050 this[offset] = (value >>> 8)
93051 this[offset + 1] = (value & 0xff)
93052 return offset + 2
93053 }
93054
93055 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
93056 value = +value
93057 offset = offset >>> 0
93058 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
93059 this[offset] = (value & 0xff)
93060 this[offset + 1] = (value >>> 8)
93061 this[offset + 2] = (value >>> 16)
93062 this[offset + 3] = (value >>> 24)
93063 return offset + 4
93064 }
93065
93066 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
93067 value = +value
93068 offset = offset >>> 0
93069 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
93070 if (value < 0) value = 0xffffffff + value + 1
93071 this[offset] = (value >>> 24)
93072 this[offset + 1] = (value >>> 16)
93073 this[offset + 2] = (value >>> 8)
93074 this[offset + 3] = (value & 0xff)
93075 return offset + 4
93076 }
93077
93078 function checkIEEE754 (buf, value, offset, ext, max, min) {
93079 if (offset + ext > buf.length) throw new RangeError('Index out of range')
93080 if (offset < 0) throw new RangeError('Index out of range')
93081 }
93082
93083 function writeFloat (buf, value, offset, littleEndian, noAssert) {
93084 value = +value
93085 offset = offset >>> 0
93086 if (!noAssert) {
93087 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
93088 }
93089 ieee754.write(buf, value, offset, littleEndian, 23, 4)
93090 return offset + 4
93091 }
93092
93093 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
93094 return writeFloat(this, value, offset, true, noAssert)
93095 }
93096
93097 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
93098 return writeFloat(this, value, offset, false, noAssert)
93099 }
93100
93101 function writeDouble (buf, value, offset, littleEndian, noAssert) {
93102 value = +value
93103 offset = offset >>> 0
93104 if (!noAssert) {
93105 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
93106 }
93107 ieee754.write(buf, value, offset, littleEndian, 52, 8)
93108 return offset + 8
93109 }
93110
93111 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
93112 return writeDouble(this, value, offset, true, noAssert)
93113 }
93114
93115 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
93116 return writeDouble(this, value, offset, false, noAssert)
93117 }
93118
93119 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
93120 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
93121 if (!start) start = 0
93122 if (!end && end !== 0) end = this.length
93123 if (targetStart >= target.length) targetStart = target.length
93124 if (!targetStart) targetStart = 0
93125 if (end > 0 && end < start) end = start
93126
93127 // Copy 0 bytes; we're done
93128 if (end === start) return 0
93129 if (target.length === 0 || this.length === 0) return 0
93130
93131 // Fatal error conditions
93132 if (targetStart < 0) {
93133 throw new RangeError('targetStart out of bounds')
93134 }
93135 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
93136 if (end < 0) throw new RangeError('sourceEnd out of bounds')
93137
93138 // Are we oob?
93139 if (end > this.length) end = this.length
93140 if (target.length - targetStart < end - start) {
93141 end = target.length - targetStart + start
93142 }
93143
93144 var len = end - start
93145 var i
93146
93147 if (this === target && start < targetStart && targetStart < end) {
93148 // descending copy from end
93149 for (i = len - 1; i >= 0; --i) {
93150 target[i + targetStart] = this[i + start]
93151 }
93152 } else if (len < 1000) {
93153 // ascending copy from start
93154 for (i = 0; i < len; ++i) {
93155 target[i + targetStart] = this[i + start]
93156 }
93157 } else {
93158 Uint8Array.prototype.set.call(
93159 target,
93160 this.subarray(start, start + len),
93161 targetStart
93162 )
93163 }
93164
93165 return len
93166 }
93167
93168 // Usage:
93169 // buffer.fill(number[, offset[, end]])
93170 // buffer.fill(buffer[, offset[, end]])
93171 // buffer.fill(string[, offset[, end]][, encoding])
93172 Buffer.prototype.fill = function fill (val, start, end, encoding) {
93173 // Handle string cases:
93174 if (typeof val === 'string') {
93175 if (typeof start === 'string') {
93176 encoding = start
93177 start = 0
93178 end = this.length
93179 } else if (typeof end === 'string') {
93180 encoding = end
93181 end = this.length
93182 }
93183 if (val.length === 1) {
93184 var code = val.charCodeAt(0)
93185 if (code < 256) {
93186 val = code
93187 }
93188 }
93189 if (encoding !== undefined && typeof encoding !== 'string') {
93190 throw new TypeError('encoding must be a string')
93191 }
93192 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
93193 throw new TypeError('Unknown encoding: ' + encoding)
93194 }
93195 } else if (typeof val === 'number') {
93196 val = val & 255
93197 }
93198
93199 // Invalid ranges are not set to a default, so can range check early.
93200 if (start < 0 || this.length < start || this.length < end) {
93201 throw new RangeError('Out of range index')
93202 }
93203
93204 if (end <= start) {
93205 return this
93206 }
93207
93208 start = start >>> 0
93209 end = end === undefined ? this.length : end >>> 0
93210
93211 if (!val) val = 0
93212
93213 var i
93214 if (typeof val === 'number') {
93215 for (i = start; i < end; ++i) {
93216 this[i] = val
93217 }
93218 } else {
93219 var bytes = Buffer.isBuffer(val)
93220 ? val
93221 : new Buffer(val, encoding)
93222 var len = bytes.length
93223 for (i = 0; i < end - start; ++i) {
93224 this[i + start] = bytes[i % len]
93225 }
93226 }
93227
93228 return this
93229 }
93230
93231 // HELPER FUNCTIONS
93232 // ================
93233
93234 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
93235
93236 function base64clean (str) {
93237 // Node strips out invalid characters like \n and \t from the string, base64-js does not
93238 str = str.trim().replace(INVALID_BASE64_RE, '')
93239 // Node converts strings with length < 2 to ''
93240 if (str.length < 2) return ''
93241 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
93242 while (str.length % 4 !== 0) {
93243 str = str + '='
93244 }
93245 return str
93246 }
93247
93248 function toHex (n) {
93249 if (n < 16) return '0' + n.toString(16)
93250 return n.toString(16)
93251 }
93252
93253 function utf8ToBytes (string, units) {
93254 units = units || Infinity
93255 var codePoint
93256 var length = string.length
93257 var leadSurrogate = null
93258 var bytes = []
93259
93260 for (var i = 0; i < length; ++i) {
93261 codePoint = string.charCodeAt(i)
93262
93263 // is surrogate component
93264 if (codePoint > 0xD7FF && codePoint < 0xE000) {
93265 // last char was a lead
93266 if (!leadSurrogate) {
93267 // no lead yet
93268 if (codePoint > 0xDBFF) {
93269 // unexpected trail
93270 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93271 continue
93272 } else if (i + 1 === length) {
93273 // unpaired lead
93274 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93275 continue
93276 }
93277
93278 // valid lead
93279 leadSurrogate = codePoint
93280
93281 continue
93282 }
93283
93284 // 2 leads in a row
93285 if (codePoint < 0xDC00) {
93286 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93287 leadSurrogate = codePoint
93288 continue
93289 }
93290
93291 // valid surrogate pair
93292 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
93293 } else if (leadSurrogate) {
93294 // valid bmp char, but last char was a lead
93295 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
93296 }
93297
93298 leadSurrogate = null
93299
93300 // encode utf8
93301 if (codePoint < 0x80) {
93302 if ((units -= 1) < 0) break
93303 bytes.push(codePoint)
93304 } else if (codePoint < 0x800) {
93305 if ((units -= 2) < 0) break
93306 bytes.push(
93307 codePoint >> 0x6 | 0xC0,
93308 codePoint & 0x3F | 0x80
93309 )
93310 } else if (codePoint < 0x10000) {
93311 if ((units -= 3) < 0) break
93312 bytes.push(
93313 codePoint >> 0xC | 0xE0,
93314 codePoint >> 0x6 & 0x3F | 0x80,
93315 codePoint & 0x3F | 0x80
93316 )
93317 } else if (codePoint < 0x110000) {
93318 if ((units -= 4) < 0) break
93319 bytes.push(
93320 codePoint >> 0x12 | 0xF0,
93321 codePoint >> 0xC & 0x3F | 0x80,
93322 codePoint >> 0x6 & 0x3F | 0x80,
93323 codePoint & 0x3F | 0x80
93324 )
93325 } else {
93326 throw new Error('Invalid code point')
93327 }
93328 }
93329
93330 return bytes
93331 }
93332
93333 function asciiToBytes (str) {
93334 var byteArray = []
93335 for (var i = 0; i < str.length; ++i) {
93336 // Node's code seems to be doing this and not & 0x7F..
93337 byteArray.push(str.charCodeAt(i) & 0xFF)
93338 }
93339 return byteArray
93340 }
93341
93342 function utf16leToBytes (str, units) {
93343 var c, hi, lo
93344 var byteArray = []
93345 for (var i = 0; i < str.length; ++i) {
93346 if ((units -= 2) < 0) break
93347
93348 c = str.charCodeAt(i)
93349 hi = c >> 8
93350 lo = c % 256
93351 byteArray.push(lo)
93352 byteArray.push(hi)
93353 }
93354
93355 return byteArray
93356 }
93357
93358 function base64ToBytes (str) {
93359 return base64.toByteArray(base64clean(str))
93360 }
93361
93362 function blitBuffer (src, dst, offset, length) {
93363 for (var i = 0; i < length; ++i) {
93364 if ((i + offset >= dst.length) || (i >= src.length)) break
93365 dst[i + offset] = src[i]
93366 }
93367 return i
93368 }
93369
93370 // ArrayBuffers from another context (i.e. an iframe) do not pass the `instanceof` check
93371 // but they should be treated as valid. See: https://github.com/feross/buffer/issues/166
93372 function isArrayBuffer (obj) {
93373 return obj instanceof ArrayBuffer ||
93374 (obj != null && obj.constructor != null && obj.constructor.name === 'ArrayBuffer' &&
93375 typeof obj.byteLength === 'number')
93376 }
93377
93378 // Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
93379 function isArrayBufferView (obj) {
93380 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
93381 }
93382
93383 function numberIsNaN (obj) {
93384 return obj !== obj // eslint-disable-line no-self-compare
93385 }
93386
93387 },{"base64-js":2,"ieee754":20}],9:[function(require,module,exports){
93388 /**
93389 * @license
93390 * https://github.com/bitcoincashjs/cashaddr
93391 * Copyright (c) 2017-2018 Emilio Almansi
93392 * Distributed under the MIT software license, see the accompanying
93393 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93394 */
93395
93396 'use strict';
93397
93398 var validate = require('./validation').validate;
93399
93400 /**
93401 * Base32 encoding and decoding.
93402 *
93403 * @module base32
93404 */
93405
93406 /**
93407 * Charset containing the 32 symbols used in the base32 encoding.
93408 * @private
93409 */
93410 var CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l';
93411
93412 /**
93413 * Inverted index mapping each symbol into its index within the charset.
93414 * @private
93415 */
93416 var CHARSET_INVERSE_INDEX = {
93417 'q': 0, 'p': 1, 'z': 2, 'r': 3, 'y': 4, '9': 5, 'x': 6, '8': 7,
93418 'g': 8, 'f': 9, '2': 10, 't': 11, 'v': 12, 'd': 13, 'w': 14, '0': 15,
93419 's': 16, '3': 17, 'j': 18, 'n': 19, '5': 20, '4': 21, 'k': 22, 'h': 23,
93420 'c': 24, 'e': 25, '6': 26, 'm': 27, 'u': 28, 'a': 29, '7': 30, 'l': 31,
93421 };
93422
93423 /**
93424 * Encodes the given array of 5-bit integers as a base32-encoded string.
93425 *
93426 * @static
93427 * @param {Uint8Array} data Array of integers between 0 and 31 inclusive.
93428 * @returns {string}
93429 * @throws {ValidationError}
93430 */
93431 function encode(data) {
93432 validate(data instanceof Uint8Array, 'Invalid data: ' + data + '.');
93433 var base32 = '';
93434 for (var i = 0; i < data.length; ++i) {
93435 var value = data[i];
93436 validate(0 <= value && value < 32, 'Invalid value: ' + value + '.');
93437 base32 += CHARSET[value];
93438 }
93439 return base32;
93440 }
93441
93442 /**
93443 * Decodes the given base32-encoded string into an array of 5-bit integers.
93444 *
93445 * @static
93446 * @param {string} string
93447 * @returns {Uint8Array}
93448 * @throws {ValidationError}
93449 */
93450 function decode(string) {
93451 validate(typeof string === 'string', 'Invalid base32-encoded string: ' + string + '.');
93452 var data = new Uint8Array(string.length);
93453 for (var i = 0; i < string.length; ++i) {
93454 var value = string[i];
93455 validate(value in CHARSET_INVERSE_INDEX, 'Invalid value: ' + value + '.');
93456 data[i] = CHARSET_INVERSE_INDEX[value];
93457 }
93458 return data;
93459 }
93460
93461 module.exports = {
93462 encode: encode,
93463 decode: decode,
93464 };
93465
93466 },{"./validation":12}],10:[function(require,module,exports){
93467 /**
93468 * @license
93469 * https://github.com/bitcoincashjs/cashaddr
93470 * Copyright (c) 2017-2018 Emilio Almansi
93471 * Distributed under the MIT software license, see the accompanying
93472 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93473 */
93474
93475 'use strict';
93476
93477 var base32 = require('./base32');
93478 var bigInt = require('big-integer');
93479 var convertBits = require('./convertBits');
93480 var validation = require('./validation');
93481 var validate = validation.validate;
93482
93483 /**
93484 * Encoding and decoding of the new Cash Address format for Bitcoin Cash. <br />
93485 * Compliant with the original cashaddr specification:
93486 * {@link https://github.com/Bitcoin-UAHF/spec/blob/master/cashaddr.md}
93487 * @module cashaddr
93488 */
93489
93490 /**
93491 * Encodes a hash from a given type into a Bitcoin Cash address with the given prefix.
93492 *
93493 * @static
93494 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93495 * @param {string} type Type of address to generate. Either 'P2PKH' or 'P2SH'.
93496 * @param {Uint8Array} hash Hash to encode represented as an array of 8-bit integers.
93497 * @returns {string}
93498 * @throws {ValidationError}
93499 */
93500 function encode(prefix, type, hash) {
93501 validate(typeof prefix === 'string' && isValidPrefix(prefix), 'Invalid prefix: ' + prefix + '.');
93502 validate(typeof type === 'string', 'Invalid type: ' + type + '.');
93503 validate(hash instanceof Uint8Array, 'Invalid hash: ' + hash + '.');
93504 var prefixData = concat(prefixToUint5Array(prefix), new Uint8Array(1));
93505 var versionByte = getTypeBits(type) + getHashSizeBits(hash);
93506 var payloadData = toUint5Array(concat(Uint8Array.of(versionByte), hash));
93507 var checksumData = concat(concat(prefixData, payloadData), new Uint8Array(8));
93508 var payload = concat(payloadData, checksumToUint5Array(polymod(checksumData)));
93509 return prefix + ':' + base32.encode(payload);
93510 }
93511
93512 /**
93513 * Decodes the given address into its constituting prefix, type and hash. See [#encode()]{@link encode}.
93514 *
93515 * @static
93516 * @param {string} address Address to decode. E.g.: 'bitcoincash:qpm2qsznhks23z7629mms6s4cwef74vcwvy22gdx6a'.
93517 * @returns {object}
93518 * @throws {ValidationError}
93519 */
93520 function decode(address) {
93521 validate(typeof address === 'string' && hasSingleCase(address), 'Invalid address: ' + address + '.');
93522 var pieces = address.toLowerCase().split(':');
93523 validate(pieces.length === 2, 'Missing prefix: ' + address + '.');
93524 var prefix = pieces[0];
93525 var payload = base32.decode(pieces[1]);
93526 validate(validChecksum(prefix, payload), 'Invalid checksum: ' + address + '.');
93527 var payloadData = fromUint5Array(payload.slice(0, -8));
93528 var versionByte = payloadData[0];
93529 var hash = payloadData.slice(1);
93530 validate(getHashSize(versionByte) === hash.length * 8, 'Invalid hash size: ' + address + '.');
93531 var type = getType(versionByte);
93532 return {
93533 prefix: prefix,
93534 type: type,
93535 hash: hash,
93536 };
93537 }
93538
93539 /**
93540 * Error thrown when encoding or decoding fail due to invalid input.
93541 *
93542 * @constructor ValidationError
93543 * @param {string} message Error description.
93544 */
93545 var ValidationError = validation.ValidationError;
93546
93547 /**
93548 * Valid address prefixes.
93549 *
93550 * @private
93551 */
93552 var VALID_PREFIXES = ['bitcoincash', 'bchtest', 'bchreg'];
93553
93554 /**
93555 * Checks whether a string is a valid prefix; ie., it has a single letter case
93556 * and is one of 'bitcoincash', 'bchtest', or 'bchreg'.
93557 *
93558 * @private
93559 * @param {string} prefix
93560 * @returns {boolean}
93561 */
93562 function isValidPrefix(prefix) {
93563 return hasSingleCase(prefix) && VALID_PREFIXES.indexOf(prefix.toLowerCase()) !== -1;
93564 }
93565
93566 /**
93567 * Derives an array from the given prefix to be used in the computation
93568 * of the address' checksum.
93569 *
93570 * @private
93571 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93572 * @returns {Uint8Array}
93573 */
93574 function prefixToUint5Array(prefix) {
93575 var result = new Uint8Array(prefix.length);
93576 for (var i = 0; i < prefix.length; ++i) {
93577 result[i] = prefix[i].charCodeAt(0) & 31;
93578 }
93579 return result;
93580 }
93581
93582 /**
93583 * Returns an array representation of the given checksum to be encoded
93584 * within the address' payload.
93585 *
93586 * @private
93587 * @param {BigInteger} checksum Computed checksum.
93588 * @returns {Uint8Array}
93589 */
93590 function checksumToUint5Array(checksum) {
93591 var result = new Uint8Array(8);
93592 for (var i = 0; i < 8; ++i) {
93593 result[7 - i] = checksum.and(31).toJSNumber();
93594 checksum = checksum.shiftRight(5);
93595 }
93596 return result;
93597 }
93598
93599 /**
93600 * Returns the bit representation of the given type within the version
93601 * byte.
93602 *
93603 * @private
93604 * @param {string} type Address type. Either 'P2PKH' or 'P2SH'.
93605 * @returns {number}
93606 * @throws {ValidationError}
93607 */
93608 function getTypeBits(type) {
93609 switch (type) {
93610 case 'P2PKH':
93611 return 0;
93612 case 'P2SH':
93613 return 8;
93614 default:
93615 throw new ValidationError('Invalid type: ' + type + '.');
93616 }
93617 }
93618
93619 /**
93620 * Retrieves the address type from its bit representation within the
93621 * version byte.
93622 *
93623 * @private
93624 * @param {number} versionByte
93625 * @returns {string}
93626 * @throws {ValidationError}
93627 */
93628 function getType(versionByte) {
93629 switch (versionByte & 120) {
93630 case 0:
93631 return 'P2PKH';
93632 case 8:
93633 return 'P2SH';
93634 default:
93635 throw new ValidationError('Invalid address type in version byte: ' + versionByte + '.');
93636 }
93637 }
93638
93639 /**
93640 * Returns the bit representation of the length in bits of the given
93641 * hash within the version byte.
93642 *
93643 * @private
93644 * @param {Uint8Array} hash Hash to encode represented as an array of 8-bit integers.
93645 * @returns {number}
93646 * @throws {ValidationError}
93647 */
93648 function getHashSizeBits(hash) {
93649 switch (hash.length * 8) {
93650 case 160:
93651 return 0;
93652 case 192:
93653 return 1;
93654 case 224:
93655 return 2;
93656 case 256:
93657 return 3;
93658 case 320:
93659 return 4;
93660 case 384:
93661 return 5;
93662 case 448:
93663 return 6;
93664 case 512:
93665 return 7;
93666 default:
93667 throw new ValidationError('Invalid hash size: ' + hash.length + '.');
93668 }
93669 }
93670
93671 /**
93672 * Retrieves the the length in bits of the encoded hash from its bit
93673 * representation within the version byte.
93674 *
93675 * @private
93676 * @param {number} versionByte
93677 * @returns {number}
93678 */
93679 function getHashSize(versionByte) {
93680 switch (versionByte & 7) {
93681 case 0:
93682 return 160;
93683 case 1:
93684 return 192;
93685 case 2:
93686 return 224;
93687 case 3:
93688 return 256;
93689 case 4:
93690 return 320;
93691 case 5:
93692 return 384;
93693 case 6:
93694 return 448;
93695 case 7:
93696 return 512;
93697 }
93698 }
93699
93700 /**
93701 * Converts an array of 8-bit integers into an array of 5-bit integers,
93702 * right-padding with zeroes if necessary.
93703 *
93704 * @private
93705 * @param {Uint8Array} data
93706 * @returns {Uint8Array}
93707 */
93708 function toUint5Array(data) {
93709 return convertBits(data, 8, 5);
93710 }
93711
93712 /**
93713 * Converts an array of 5-bit integers back into an array of 8-bit integers,
93714 * removing extra zeroes left from padding if necessary.
93715 * Throws a {@link ValidationError} if input is not a zero-padded array of 8-bit integers.
93716 *
93717 * @private
93718 * @param {Uint8Array} data
93719 * @returns {Uint8Array}
93720 * @throws {ValidationError}
93721 */
93722 function fromUint5Array(data) {
93723 return convertBits(data, 5, 8, true);
93724 }
93725
93726 /**
93727 * Returns the concatenation a and b.
93728 *
93729 * @private
93730 * @param {Uint8Array} a
93731 * @param {Uint8Array} b
93732 * @returns {Uint8Array}
93733 * @throws {ValidationError}
93734 */
93735 function concat(a, b) {
93736 var ab = new Uint8Array(a.length + b.length);
93737 ab.set(a);
93738 ab.set(b, a.length);
93739 return ab;
93740 }
93741
93742 /**
93743 * Computes a checksum from the given input data as specified for the CashAddr
93744 * format: https://github.com/Bitcoin-UAHF/spec/blob/master/cashaddr.md.
93745 *
93746 * @private
93747 * @param {Uint8Array} data Array of 5-bit integers over which the checksum is to be computed.
93748 * @returns {BigInteger}
93749 */
93750 function polymod(data) {
93751 var GENERATOR = [0x98f2bc8e61, 0x79b76d99e2, 0xf33e5fb3c4, 0xae2eabe2a8, 0x1e4f43e470];
93752 var checksum = bigInt(1);
93753 for (var i = 0; i < data.length; ++i) {
93754 var value = data[i];
93755 var topBits = checksum.shiftRight(35);
93756 checksum = checksum.and(0x07ffffffff).shiftLeft(5).xor(value);
93757 for (var j = 0; j < GENERATOR.length; ++j) {
93758 if (topBits.shiftRight(j).and(1).equals(1)) {
93759 checksum = checksum.xor(GENERATOR[j]);
93760 }
93761 }
93762 }
93763 return checksum.xor(1);
93764 }
93765
93766 /**
93767 * Verify that the payload has not been corrupted by checking that the
93768 * checksum is valid.
93769 *
93770 * @private
93771 * @param {string} prefix Network prefix. E.g.: 'bitcoincash'.
93772 * @param {Uint8Array} payload Array of 5-bit integers containing the address' payload.
93773 * @returns {boolean}
93774 */
93775 function validChecksum(prefix, payload) {
93776 var prefixData = concat(prefixToUint5Array(prefix), new Uint8Array(1));
93777 var checksumData = concat(prefixData, payload);
93778 return polymod(checksumData).equals(0);
93779 }
93780
93781 /**
93782 * Returns true if, and only if, the given string contains either uppercase
93783 * or lowercase letters, but not both.
93784 *
93785 * @private
93786 * @param {string} string Input string.
93787 * @returns {boolean}
93788 */
93789 function hasSingleCase(string) {
93790 return string === string.toLowerCase() || string === string.toUpperCase();
93791 }
93792
93793 module.exports = {
93794 encode: encode,
93795 decode: decode,
93796 ValidationError: ValidationError,
93797 };
93798
93799 },{"./base32":9,"./convertBits":11,"./validation":12,"big-integer":3}],11:[function(require,module,exports){
93800 // Copyright (c) 2017-2018 Emilio Almansi
93801 // Copyright (c) 2017 Pieter Wuille
93802 //
93803 // Permission is hereby granted, free of charge, to any person obtaining a copy
93804 // of this software and associated documentation files (the "Software"), to deal
93805 // in the Software without restriction, including without limitation the rights
93806 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
93807 // copies of the Software, and to permit persons to whom the Software is
93808 // furnished to do so, subject to the following conditions:
93809 //
93810 // The above copyright notice and this permission notice shall be included in
93811 // all copies or substantial portions of the Software.
93812 //
93813 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
93814 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
93815 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
93816 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
93817 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
93818 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
93819 // THE SOFTWARE.
93820
93821 'use strict';
93822
93823 var validate = require('./validation').validate;
93824
93825 /**
93826 * Converts an array of integers made up of 'from' bits into an
93827 * array of integers made up of 'to' bits. The output array is
93828 * zero-padded if necessary, unless strict mode is true.
93829 * Throws a {@link ValidationError} if input is invalid.
93830 * Original by Pieter Wuille: https://github.com/sipa/bech32.
93831 *
93832 * @param {Uint8Array} data Array of integers made up of 'from' bits.
93833 * @param {number} from Length in bits of elements in the input array.
93834 * @param {number} to Length in bits of elements in the output array.
93835 * @param {bool} strictMode Require the conversion to be completed without padding.
93836 * @returns {Uint8Array}
93837 */
93838 module.exports = function(data, from, to, strictMode) {
93839 var length = strictMode
93840 ? Math.floor(data.length * from / to)
93841 : Math.ceil(data.length * from / to);
93842 var mask = (1 << to) - 1;
93843 var result = new Uint8Array(length);
93844 var index = 0;
93845 var accumulator = 0;
93846 var bits = 0;
93847 for (var i = 0; i < data.length; ++i) {
93848 var value = data[i];
93849 validate(0 <= value && (value >> from) === 0, 'Invalid value: ' + value + '.');
93850 accumulator = (accumulator << from) | value;
93851 bits += from;
93852 while (bits >= to) {
93853 bits -= to;
93854 result[index] = (accumulator >> bits) & mask;
93855 ++index;
93856 }
93857 }
93858 if (!strictMode) {
93859 if (bits > 0) {
93860 result[index] = (accumulator << (to - bits)) & mask;
93861 ++index;
93862 }
93863 } else {
93864 validate(
93865 bits < from && ((accumulator << (to - bits)) & mask) === 0,
93866 'Input cannot be converted to ' + to + ' bits without padding, but strict mode was used.'
93867 );
93868 }
93869 return result;
93870 };
93871
93872 },{"./validation":12}],12:[function(require,module,exports){
93873 /**
93874 * @license
93875 * https://github.com/bitcoincashjs/cashaddr
93876 * Copyright (c) 2017-2018 Emilio Almansi
93877 * Distributed under the MIT software license, see the accompanying
93878 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
93879 */
93880
93881 'use strict';
93882
93883 /**
93884 * Validation utility.
93885 *
93886 * @module validation
93887 */
93888
93889 /**
93890 * Error thrown when encoding or decoding fail due to invalid input.
93891 *
93892 * @constructor ValidationError
93893 * @param {string} message Error description.
93894 */
93895 function ValidationError(message) {
93896 var error = new Error();
93897 this.name = error.name = 'ValidationError';
93898 this.message = error.message = message;
93899 this.stack = error.stack;
93900 }
93901
93902 ValidationError.prototype = Object.create(Error.prototype);
93903
93904 /**
93905 * Validates a given condition, throwing a {@link ValidationError} if
93906 * the given condition does not hold.
93907 *
93908 * @static
93909 * @param {boolean} condition Condition to validate.
93910 * @param {string} message Error message in case the condition does not hold.
93911 */
93912 function validate(condition, message) {
93913 if (!condition) {
93914 throw new ValidationError(message);
93915 }
93916 }
93917
93918 module.exports = {
93919 ValidationError: ValidationError,
93920 validate: validate,
93921 };
93922
93923 },{}],13:[function(require,module,exports){
93924 var Buffer = require('safe-buffer').Buffer
93925 var Transform = require('stream').Transform
93926 var StringDecoder = require('string_decoder').StringDecoder
93927 var inherits = require('inherits')
93928
93929 function CipherBase (hashMode) {
93930 Transform.call(this)
93931 this.hashMode = typeof hashMode === 'string'
93932 if (this.hashMode) {
93933 this[hashMode] = this._finalOrDigest
93934 } else {
93935 this.final = this._finalOrDigest
93936 }
93937 if (this._final) {
93938 this.__final = this._final
93939 this._final = null
93940 }
93941 this._decoder = null
93942 this._encoding = null
93943 }
93944 inherits(CipherBase, Transform)
93945
93946 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
93947 if (typeof data === 'string') {
93948 data = Buffer.from(data, inputEnc)
93949 }
93950
93951 var outData = this._update(data)
93952 if (this.hashMode) return this
93953
93954 if (outputEnc) {
93955 outData = this._toString(outData, outputEnc)
93956 }
93957
93958 return outData
93959 }
93960
93961 CipherBase.prototype.setAutoPadding = function () {}
93962 CipherBase.prototype.getAuthTag = function () {
93963 throw new Error('trying to get auth tag in unsupported state')
93964 }
93965
93966 CipherBase.prototype.setAuthTag = function () {
93967 throw new Error('trying to set auth tag in unsupported state')
93968 }
93969
93970 CipherBase.prototype.setAAD = function () {
93971 throw new Error('trying to set aad in unsupported state')
93972 }
93973
93974 CipherBase.prototype._transform = function (data, _, next) {
93975 var err
93976 try {
93977 if (this.hashMode) {
93978 this._update(data)
93979 } else {
93980 this.push(this._update(data))
93981 }
93982 } catch (e) {
93983 err = e
93984 } finally {
93985 next(err)
93986 }
93987 }
93988 CipherBase.prototype._flush = function (done) {
93989 var err
93990 try {
93991 this.push(this.__final())
93992 } catch (e) {
93993 err = e
93994 }
93995
93996 done(err)
93997 }
93998 CipherBase.prototype._finalOrDigest = function (outputEnc) {
93999 var outData = this.__final() || Buffer.alloc(0)
94000 if (outputEnc) {
94001 outData = this._toString(outData, outputEnc, true)
94002 }
94003 return outData
94004 }
94005
94006 CipherBase.prototype._toString = function (value, enc, fin) {
94007 if (!this._decoder) {
94008 this._decoder = new StringDecoder(enc)
94009 this._encoding = enc
94010 }
94011
94012 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
94013
94014 var out = this._decoder.write(value)
94015 if (fin) {
94016 out += this._decoder.end()
94017 }
94018
94019 return out
94020 }
94021
94022 module.exports = CipherBase
94023
94024 },{"inherits":21,"safe-buffer":40,"stream":49,"string_decoder":50}],14:[function(require,module,exports){
94025 (function (Buffer){
94026 // Copyright Joyent, Inc. and other Node contributors.
94027 //
94028 // Permission is hereby granted, free of charge, to any person obtaining a
94029 // copy of this software and associated documentation files (the
94030 // "Software"), to deal in the Software without restriction, including
94031 // without limitation the rights to use, copy, modify, merge, publish,
94032 // distribute, sublicense, and/or sell copies of the Software, and to permit
94033 // persons to whom the Software is furnished to do so, subject to the
94034 // following conditions:
94035 //
94036 // The above copyright notice and this permission notice shall be included
94037 // in all copies or substantial portions of the Software.
94038 //
94039 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
94040 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
94041 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
94042 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
94043 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
94044 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
94045 // USE OR OTHER DEALINGS IN THE SOFTWARE.
94046
94047 // NOTE: These type checking functions intentionally don't use `instanceof`
94048 // because it is fragile and can be easily faked with `Object.create()`.
94049
94050 function isArray(arg) {
94051 if (Array.isArray) {
94052 return Array.isArray(arg);
94053 }
94054 return objectToString(arg) === '[object Array]';
94055 }
94056 exports.isArray = isArray;
94057
94058 function isBoolean(arg) {
94059 return typeof arg === 'boolean';
94060 }
94061 exports.isBoolean = isBoolean;
94062
94063 function isNull(arg) {
94064 return arg === null;
94065 }
94066 exports.isNull = isNull;
94067
94068 function isNullOrUndefined(arg) {
94069 return arg == null;
94070 }
94071 exports.isNullOrUndefined = isNullOrUndefined;
94072
94073 function isNumber(arg) {
94074 return typeof arg === 'number';
94075 }
94076 exports.isNumber = isNumber;
94077
94078 function isString(arg) {
94079 return typeof arg === 'string';
94080 }
94081 exports.isString = isString;
94082
94083 function isSymbol(arg) {
94084 return typeof arg === 'symbol';
94085 }
94086 exports.isSymbol = isSymbol;
94087
94088 function isUndefined(arg) {
94089 return arg === void 0;
94090 }
94091 exports.isUndefined = isUndefined;
94092
94093 function isRegExp(re) {
94094 return objectToString(re) === '[object RegExp]';
94095 }
94096 exports.isRegExp = isRegExp;
94097
94098 function isObject(arg) {
94099 return typeof arg === 'object' && arg !== null;
94100 }
94101 exports.isObject = isObject;
94102
94103 function isDate(d) {
94104 return objectToString(d) === '[object Date]';
94105 }
94106 exports.isDate = isDate;
94107
94108 function isError(e) {
94109 return (objectToString(e) === '[object Error]' || e instanceof Error);
94110 }
94111 exports.isError = isError;
94112
94113 function isFunction(arg) {
94114 return typeof arg === 'function';
94115 }
94116 exports.isFunction = isFunction;
94117
94118 function isPrimitive(arg) {
94119 return arg === null ||
94120 typeof arg === 'boolean' ||
94121 typeof arg === 'number' ||
94122 typeof arg === 'string' ||
94123 typeof arg === 'symbol' || // ES6 symbol
94124 typeof arg === 'undefined';
94125 }
94126 exports.isPrimitive = isPrimitive;
94127
94128 exports.isBuffer = Buffer.isBuffer;
94129
94130 function objectToString(o) {
94131 return Object.prototype.toString.call(o);
94132 }
94133
94134 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
94135 },{"../../is-buffer/index.js":22}],15:[function(require,module,exports){
94136 (function (Buffer){
94137 'use strict'
94138 var inherits = require('inherits')
94139 var md5 = require('./md5')
94140 var RIPEMD160 = require('ripemd160')
94141 var sha = require('sha.js')
94142
94143 var Base = require('cipher-base')
94144
94145 function HashNoConstructor (hash) {
94146 Base.call(this, 'digest')
94147
94148 this._hash = hash
94149 this.buffers = []
94150 }
94151
94152 inherits(HashNoConstructor, Base)
94153
94154 HashNoConstructor.prototype._update = function (data) {
94155 this.buffers.push(data)
94156 }
94157
94158 HashNoConstructor.prototype._final = function () {
94159 var buf = Buffer.concat(this.buffers)
94160 var r = this._hash(buf)
94161 this.buffers = null
94162
94163 return r
94164 }
94165
94166 function Hash (hash) {
94167 Base.call(this, 'digest')
94168
94169 this._hash = hash
94170 }
94171
94172 inherits(Hash, Base)
94173
94174 Hash.prototype._update = function (data) {
94175 this._hash.update(data)
94176 }
94177
94178 Hash.prototype._final = function () {
94179 return this._hash.digest()
94180 }
94181
94182 module.exports = function createHash (alg) {
94183 alg = alg.toLowerCase()
94184 if (alg === 'md5') return new HashNoConstructor(md5)
94185 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
94186
94187 return new Hash(sha(alg))
94188 }
94189
94190 }).call(this,require("buffer").Buffer)
94191 },{"./md5":17,"buffer":8,"cipher-base":13,"inherits":21,"ripemd160":39,"sha.js":42}],16:[function(require,module,exports){
94192 (function (Buffer){
94193 'use strict'
94194 var intSize = 4
94195 var zeroBuffer = new Buffer(intSize)
94196 zeroBuffer.fill(0)
94197
94198 var charSize = 8
94199 var hashSize = 16
94200
94201 function toArray (buf) {
94202 if ((buf.length % intSize) !== 0) {
94203 var len = buf.length + (intSize - (buf.length % intSize))
94204 buf = Buffer.concat([buf, zeroBuffer], len)
94205 }
94206
94207 var arr = new Array(buf.length >>> 2)
94208 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
94209 arr[j] = buf.readInt32LE(i)
94210 }
94211
94212 return arr
94213 }
94214
94215 module.exports = function hash (buf, fn) {
94216 var arr = fn(toArray(buf), buf.length * charSize)
94217 buf = new Buffer(hashSize)
94218 for (var i = 0; i < arr.length; i++) {
94219 buf.writeInt32LE(arr[i], i << 2, true)
94220 }
94221 return buf
94222 }
94223
94224 }).call(this,require("buffer").Buffer)
94225 },{"buffer":8}],17:[function(require,module,exports){
94226 'use strict'
94227 /*
94228 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
94229 * Digest Algorithm, as defined in RFC 1321.
94230 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
94231 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
94232 * Distributed under the BSD License
94233 * See http://pajhome.org.uk/crypt/md5 for more info.
94234 */
94235
94236 var makeHash = require('./make-hash')
94237
94238 /*
94239 * Calculate the MD5 of an array of little-endian words, and a bit length
94240 */
94241 function core_md5 (x, len) {
94242 /* append padding */
94243 x[len >> 5] |= 0x80 << ((len) % 32)
94244 x[(((len + 64) >>> 9) << 4) + 14] = len
94245
94246 var a = 1732584193
94247 var b = -271733879
94248 var c = -1732584194
94249 var d = 271733878
94250
94251 for (var i = 0; i < x.length; i += 16) {
94252 var olda = a
94253 var oldb = b
94254 var oldc = c
94255 var oldd = d
94256
94257 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
94258 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
94259 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
94260 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
94261 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
94262 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
94263 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
94264 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
94265 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
94266 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
94267 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
94268 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
94269 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
94270 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
94271 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
94272 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
94273
94274 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
94275 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
94276 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
94277 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
94278 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
94279 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
94280 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
94281 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
94282 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
94283 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
94284 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
94285 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
94286 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
94287 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
94288 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
94289 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
94290
94291 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
94292 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
94293 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
94294 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
94295 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
94296 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
94297 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
94298 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
94299 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
94300 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
94301 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
94302 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
94303 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
94304 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
94305 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
94306 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
94307
94308 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
94309 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
94310 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
94311 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
94312 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
94313 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
94314 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
94315 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
94316 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
94317 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
94318 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
94319 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
94320 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
94321 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
94322 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
94323 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
94324
94325 a = safe_add(a, olda)
94326 b = safe_add(b, oldb)
94327 c = safe_add(c, oldc)
94328 d = safe_add(d, oldd)
94329 }
94330
94331 return [a, b, c, d]
94332 }
94333
94334 /*
94335 * These functions implement the four basic operations the algorithm uses.
94336 */
94337 function md5_cmn (q, a, b, x, s, t) {
94338 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
94339 }
94340
94341 function md5_ff (a, b, c, d, x, s, t) {
94342 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
94343 }
94344
94345 function md5_gg (a, b, c, d, x, s, t) {
94346 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
94347 }
94348
94349 function md5_hh (a, b, c, d, x, s, t) {
94350 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
94351 }
94352
94353 function md5_ii (a, b, c, d, x, s, t) {
94354 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
94355 }
94356
94357 /*
94358 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
94359 * to work around bugs in some JS interpreters.
94360 */
94361 function safe_add (x, y) {
94362 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
94363 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
94364 return (msw << 16) | (lsw & 0xFFFF)
94365 }
94366
94367 /*
94368 * Bitwise rotate a 32-bit number to the left.
94369 */
94370 function bit_rol (num, cnt) {
94371 return (num << cnt) | (num >>> (32 - cnt))
94372 }
94373
94374 module.exports = function md5 (buf) {
94375 return makeHash(buf, core_md5)
94376 }
94377
94378 },{"./make-hash":16}],18:[function(require,module,exports){
94379 // Copyright Joyent, Inc. and other Node contributors.
94380 //
94381 // Permission is hereby granted, free of charge, to any person obtaining a
94382 // copy of this software and associated documentation files (the
94383 // "Software"), to deal in the Software without restriction, including
94384 // without limitation the rights to use, copy, modify, merge, publish,
94385 // distribute, sublicense, and/or sell copies of the Software, and to permit
94386 // persons to whom the Software is furnished to do so, subject to the
94387 // following conditions:
94388 //
94389 // The above copyright notice and this permission notice shall be included
94390 // in all copies or substantial portions of the Software.
94391 //
94392 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
94393 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
94394 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
94395 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
94396 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
94397 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
94398 // USE OR OTHER DEALINGS IN THE SOFTWARE.
94399
94400 function EventEmitter() {
94401 this._events = this._events || {};
94402 this._maxListeners = this._maxListeners || undefined;
94403 }
94404 module.exports = EventEmitter;
94405
94406 // Backwards-compat with node 0.10.x
94407 EventEmitter.EventEmitter = EventEmitter;
94408
94409 EventEmitter.prototype._events = undefined;
94410 EventEmitter.prototype._maxListeners = undefined;
94411
94412 // By default EventEmitters will print a warning if more than 10 listeners are
94413 // added to it. This is a useful default which helps finding memory leaks.
94414 EventEmitter.defaultMaxListeners = 10;
94415
94416 // Obviously not all Emitters should be limited to 10. This function allows
94417 // that to be increased. Set to zero for unlimited.
94418 EventEmitter.prototype.setMaxListeners = function(n) {
94419 if (!isNumber(n) || n < 0 || isNaN(n))
94420 throw TypeError('n must be a positive number');
94421 this._maxListeners = n;
94422 return this;
94423 };
94424
94425 EventEmitter.prototype.emit = function(type) {
94426 var er, handler, len, args, i, listeners;
94427
94428 if (!this._events)
94429 this._events = {};
94430
94431 // If there is no 'error' event listener then throw.
94432 if (type === 'error') {
94433 if (!this._events.error ||
94434 (isObject(this._events.error) && !this._events.error.length)) {
94435 er = arguments[1];
94436 if (er instanceof Error) {
94437 throw er; // Unhandled 'error' event
94438 } else {
94439 // At least give some kind of context to the user
94440 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
94441 err.context = er;
94442 throw err;
94443 }
94444 }
94445 }
94446
94447 handler = this._events[type];
94448
94449 if (isUndefined(handler))
94450 return false;
94451
94452 if (isFunction(handler)) {
94453 switch (arguments.length) {
94454 // fast cases
94455 case 1:
94456 handler.call(this);
94457 break;
94458 case 2:
94459 handler.call(this, arguments[1]);
94460 break;
94461 case 3:
94462 handler.call(this, arguments[1], arguments[2]);
94463 break;
94464 // slower
94465 default:
94466 args = Array.prototype.slice.call(arguments, 1);
94467 handler.apply(this, args);
94468 }
94469 } else if (isObject(handler)) {
94470 args = Array.prototype.slice.call(arguments, 1);
94471 listeners = handler.slice();
94472 len = listeners.length;
94473 for (i = 0; i < len; i++)
94474 listeners[i].apply(this, args);
94475 }
94476
94477 return true;
94478 };
94479
94480 EventEmitter.prototype.addListener = function(type, listener) {
94481 var m;
94482
94483 if (!isFunction(listener))
94484 throw TypeError('listener must be a function');
94485
94486 if (!this._events)
94487 this._events = {};
94488
94489 // To avoid recursion in the case that type === "newListener"! Before
94490 // adding it to the listeners, first emit "newListener".
94491 if (this._events.newListener)
94492 this.emit('newListener', type,
94493 isFunction(listener.listener) ?
94494 listener.listener : listener);
94495
94496 if (!this._events[type])
94497 // Optimize the case of one listener. Don't need the extra array object.
94498 this._events[type] = listener;
94499 else if (isObject(this._events[type]))
94500 // If we've already got an array, just append.
94501 this._events[type].push(listener);
94502 else
94503 // Adding the second element, need to change to array.
94504 this._events[type] = [this._events[type], listener];
94505
94506 // Check for listener leak
94507 if (isObject(this._events[type]) && !this._events[type].warned) {
94508 if (!isUndefined(this._maxListeners)) {
94509 m = this._maxListeners;
94510 } else {
94511 m = EventEmitter.defaultMaxListeners;
94512 }
94513
94514 if (m && m > 0 && this._events[type].length > m) {
94515 this._events[type].warned = true;
94516 console.error('(node) warning: possible EventEmitter memory ' +
94517 'leak detected. %d listeners added. ' +
94518 'Use emitter.setMaxListeners() to increase limit.',
94519 this._events[type].length);
94520 if (typeof console.trace === 'function') {
94521 // not supported in IE 10
94522 console.trace();
94523 }
94524 }
94525 }
94526
94527 return this;
94528 };
94529
94530 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
94531
94532 EventEmitter.prototype.once = function(type, listener) {
94533 if (!isFunction(listener))
94534 throw TypeError('listener must be a function');
94535
94536 var fired = false;
94537
94538 function g() {
94539 this.removeListener(type, g);
94540
94541 if (!fired) {
94542 fired = true;
94543 listener.apply(this, arguments);
94544 }
94545 }
94546
94547 g.listener = listener;
94548 this.on(type, g);
94549
94550 return this;
94551 };
94552
94553 // emits a 'removeListener' event iff the listener was removed
94554 EventEmitter.prototype.removeListener = function(type, listener) {
94555 var list, position, length, i;
94556
94557 if (!isFunction(listener))
94558 throw TypeError('listener must be a function');
94559
94560 if (!this._events || !this._events[type])
94561 return this;
94562
94563 list = this._events[type];
94564 length = list.length;
94565 position = -1;
94566
94567 if (list === listener ||
94568 (isFunction(list.listener) && list.listener === listener)) {
94569 delete this._events[type];
94570 if (this._events.removeListener)
94571 this.emit('removeListener', type, listener);
94572
94573 } else if (isObject(list)) {
94574 for (i = length; i-- > 0;) {
94575 if (list[i] === listener ||
94576 (list[i].listener && list[i].listener === listener)) {
94577 position = i;
94578 break;
94579 }
94580 }
94581
94582 if (position < 0)
94583 return this;
94584
94585 if (list.length === 1) {
94586 list.length = 0;
94587 delete this._events[type];
94588 } else {
94589 list.splice(position, 1);
94590 }
94591
94592 if (this._events.removeListener)
94593 this.emit('removeListener', type, listener);
94594 }
94595
94596 return this;
94597 };
94598
94599 EventEmitter.prototype.removeAllListeners = function(type) {
94600 var key, listeners;
94601
94602 if (!this._events)
94603 return this;
94604
94605 // not listening for removeListener, no need to emit
94606 if (!this._events.removeListener) {
94607 if (arguments.length === 0)
94608 this._events = {};
94609 else if (this._events[type])
94610 delete this._events[type];
94611 return this;
94612 }
94613
94614 // emit removeListener for all listeners on all events
94615 if (arguments.length === 0) {
94616 for (key in this._events) {
94617 if (key === 'removeListener') continue;
94618 this.removeAllListeners(key);
94619 }
94620 this.removeAllListeners('removeListener');
94621 this._events = {};
94622 return this;
94623 }
94624
94625 listeners = this._events[type];
94626
94627 if (isFunction(listeners)) {
94628 this.removeListener(type, listeners);
94629 } else if (listeners) {
94630 // LIFO order
94631 while (listeners.length)
94632 this.removeListener(type, listeners[listeners.length - 1]);
94633 }
94634 delete this._events[type];
94635
94636 return this;
94637 };
94638
94639 EventEmitter.prototype.listeners = function(type) {
94640 var ret;
94641 if (!this._events || !this._events[type])
94642 ret = [];
94643 else if (isFunction(this._events[type]))
94644 ret = [this._events[type]];
94645 else
94646 ret = this._events[type].slice();
94647 return ret;
94648 };
94649
94650 EventEmitter.prototype.listenerCount = function(type) {
94651 if (this._events) {
94652 var evlistener = this._events[type];
94653
94654 if (isFunction(evlistener))
94655 return 1;
94656 else if (evlistener)
94657 return evlistener.length;
94658 }
94659 return 0;
94660 };
94661
94662 EventEmitter.listenerCount = function(emitter, type) {
94663 return emitter.listenerCount(type);
94664 };
94665
94666 function isFunction(arg) {
94667 return typeof arg === 'function';
94668 }
94669
94670 function isNumber(arg) {
94671 return typeof arg === 'number';
94672 }
94673
94674 function isObject(arg) {
94675 return typeof arg === 'object' && arg !== null;
94676 }
94677
94678 function isUndefined(arg) {
94679 return arg === void 0;
94680 }
94681
94682 },{}],19:[function(require,module,exports){
94683 (function (Buffer){
94684 'use strict'
94685 var Transform = require('stream').Transform
94686 var inherits = require('inherits')
94687
94688 function HashBase (blockSize) {
94689 Transform.call(this)
94690
94691 this._block = new Buffer(blockSize)
94692 this._blockSize = blockSize
94693 this._blockOffset = 0
94694 this._length = [0, 0, 0, 0]
94695
94696 this._finalized = false
94697 }
94698
94699 inherits(HashBase, Transform)
94700
94701 HashBase.prototype._transform = function (chunk, encoding, callback) {
94702 var error = null
94703 try {
94704 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
94705 this.update(chunk)
94706 } catch (err) {
94707 error = err
94708 }
94709
94710 callback(error)
94711 }
94712
94713 HashBase.prototype._flush = function (callback) {
94714 var error = null
94715 try {
94716 this.push(this._digest())
94717 } catch (err) {
94718 error = err
94719 }
94720
94721 callback(error)
94722 }
94723
94724 HashBase.prototype.update = function (data, encoding) {
94725 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
94726 if (this._finalized) throw new Error('Digest already called')
94727 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
94728
94729 // consume data
94730 var block = this._block
94731 var offset = 0
94732 while (this._blockOffset + data.length - offset >= this._blockSize) {
94733 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
94734 this._update()
94735 this._blockOffset = 0
94736 }
94737 while (offset < data.length) block[this._blockOffset++] = data[offset++]
94738
94739 // update length
94740 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
94741 this._length[j] += carry
94742 carry = (this._length[j] / 0x0100000000) | 0
94743 if (carry > 0) this._length[j] -= 0x0100000000 * carry
94744 }
94745
94746 return this
94747 }
94748
94749 HashBase.prototype._update = function (data) {
94750 throw new Error('_update is not implemented')
94751 }
94752
94753 HashBase.prototype.digest = function (encoding) {
94754 if (this._finalized) throw new Error('Digest already called')
94755 this._finalized = true
94756
94757 var digest = this._digest()
94758 if (encoding !== undefined) digest = digest.toString(encoding)
94759 return digest
94760 }
94761
94762 HashBase.prototype._digest = function () {
94763 throw new Error('_digest is not implemented')
94764 }
94765
94766 module.exports = HashBase
94767
94768 }).call(this,require("buffer").Buffer)
94769 },{"buffer":8,"inherits":21,"stream":49}],20:[function(require,module,exports){
94770 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
94771 var e, m
94772 var eLen = nBytes * 8 - mLen - 1
94773 var eMax = (1 << eLen) - 1
94774 var eBias = eMax >> 1
94775 var nBits = -7
94776 var i = isLE ? (nBytes - 1) : 0
94777 var d = isLE ? -1 : 1
94778 var s = buffer[offset + i]
94779
94780 i += d
94781
94782 e = s & ((1 << (-nBits)) - 1)
94783 s >>= (-nBits)
94784 nBits += eLen
94785 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
94786
94787 m = e & ((1 << (-nBits)) - 1)
94788 e >>= (-nBits)
94789 nBits += mLen
94790 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
94791
94792 if (e === 0) {
94793 e = 1 - eBias
94794 } else if (e === eMax) {
94795 return m ? NaN : ((s ? -1 : 1) * Infinity)
94796 } else {
94797 m = m + Math.pow(2, mLen)
94798 e = e - eBias
94799 }
94800 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
94801 }
94802
94803 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
94804 var e, m, c
94805 var eLen = nBytes * 8 - mLen - 1
94806 var eMax = (1 << eLen) - 1
94807 var eBias = eMax >> 1
94808 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
94809 var i = isLE ? 0 : (nBytes - 1)
94810 var d = isLE ? 1 : -1
94811 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
94812
94813 value = Math.abs(value)
94814
94815 if (isNaN(value) || value === Infinity) {
94816 m = isNaN(value) ? 1 : 0
94817 e = eMax
94818 } else {
94819 e = Math.floor(Math.log(value) / Math.LN2)
94820 if (value * (c = Math.pow(2, -e)) < 1) {
94821 e--
94822 c *= 2
94823 }
94824 if (e + eBias >= 1) {
94825 value += rt / c
94826 } else {
94827 value += rt * Math.pow(2, 1 - eBias)
94828 }
94829 if (value * c >= 2) {
94830 e++
94831 c /= 2
94832 }
94833
94834 if (e + eBias >= eMax) {
94835 m = 0
94836 e = eMax
94837 } else if (e + eBias >= 1) {
94838 m = (value * c - 1) * Math.pow(2, mLen)
94839 e = e + eBias
94840 } else {
94841 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
94842 e = 0
94843 }
94844 }
94845
94846 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
94847
94848 e = (e << mLen) | m
94849 eLen += mLen
94850 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
94851
94852 buffer[offset + i - d] |= s * 128
94853 }
94854
94855 },{}],21:[function(require,module,exports){
94856 if (typeof Object.create === 'function') {
94857 // implementation from standard node.js 'util' module
94858 module.exports = function inherits(ctor, superCtor) {
94859 ctor.super_ = superCtor
94860 ctor.prototype = Object.create(superCtor.prototype, {
94861 constructor: {
94862 value: ctor,
94863 enumerable: false,
94864 writable: true,
94865 configurable: true
94866 }
94867 });
94868 };
94869 } else {
94870 // old school shim for old browsers
94871 module.exports = function inherits(ctor, superCtor) {
94872 ctor.super_ = superCtor
94873 var TempCtor = function () {}
94874 TempCtor.prototype = superCtor.prototype
94875 ctor.prototype = new TempCtor()
94876 ctor.prototype.constructor = ctor
94877 }
94878 }
94879
94880 },{}],22:[function(require,module,exports){
94881 /*!
94882 * Determine if an object is a Buffer
94883 *
94884 * @author Feross Aboukhadijeh <https://feross.org>
94885 * @license MIT
94886 */
94887
94888 // The _isBuffer check is for Safari 5-7 support, because it's missing
94889 // Object.prototype.constructor. Remove this eventually
94890 module.exports = function (obj) {
94891 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
94892 }
94893
94894 function isBuffer (obj) {
94895 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
94896 }
94897
94898 // For Node v0.10 support. Remove this eventually.
94899 function isSlowBuffer (obj) {
94900 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
94901 }
94902
94903 },{}],23:[function(require,module,exports){
94904 var toString = {}.toString;
94905
94906 module.exports = Array.isArray || function (arr) {
94907 return toString.call(arr) == '[object Array]';
94908 };
94909
94910 },{}],24:[function(require,module,exports){
94911 (function (process){
94912 'use strict';
94913
94914 if (!process.version ||
94915 process.version.indexOf('v0.') === 0 ||
94916 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
94917 module.exports = nextTick;
94918 } else {
94919 module.exports = process.nextTick;
94920 }
94921
94922 function nextTick(fn, arg1, arg2, arg3) {
94923 if (typeof fn !== 'function') {
94924 throw new TypeError('"callback" argument must be a function');
94925 }
94926 var len = arguments.length;
94927 var args, i;
94928 switch (len) {
94929 case 0:
94930 case 1:
94931 return process.nextTick(fn);
94932 case 2:
94933 return process.nextTick(function afterTickOne() {
94934 fn.call(null, arg1);
94935 });
94936 case 3:
94937 return process.nextTick(function afterTickTwo() {
94938 fn.call(null, arg1, arg2);
94939 });
94940 case 4:
94941 return process.nextTick(function afterTickThree() {
94942 fn.call(null, arg1, arg2, arg3);
94943 });
94944 default:
94945 args = new Array(len - 1);
94946 i = 0;
94947 while (i < args.length) {
94948 args[i++] = arguments[i];
94949 }
94950 return process.nextTick(function afterTick() {
94951 fn.apply(null, args);
94952 });
94953 }
94954 }
94955
94956 }).call(this,require('_process'))
94957 },{"_process":25}],25:[function(require,module,exports){
94958 // shim for using process in browser
94959 var process = module.exports = {};
94960
94961 // cached from whatever global is present so that test runners that stub it
94962 // don't break things. But we need to wrap it in a try catch in case it is
94963 // wrapped in strict mode code which doesn't define any globals. It's inside a
94964 // function because try/catches deoptimize in certain engines.
94965
94966 var cachedSetTimeout;
94967 var cachedClearTimeout;
94968
94969 function defaultSetTimout() {
94970 throw new Error('setTimeout has not been defined');
94971 }
94972 function defaultClearTimeout () {
94973 throw new Error('clearTimeout has not been defined');
94974 }
94975 (function () {
94976 try {
94977 if (typeof setTimeout === 'function') {
94978 cachedSetTimeout = setTimeout;
94979 } else {
94980 cachedSetTimeout = defaultSetTimout;
94981 }
94982 } catch (e) {
94983 cachedSetTimeout = defaultSetTimout;
94984 }
94985 try {
94986 if (typeof clearTimeout === 'function') {
94987 cachedClearTimeout = clearTimeout;
94988 } else {
94989 cachedClearTimeout = defaultClearTimeout;
94990 }
94991 } catch (e) {
94992 cachedClearTimeout = defaultClearTimeout;
94993 }
94994 } ())
94995 function runTimeout(fun) {
94996 if (cachedSetTimeout === setTimeout) {
94997 //normal enviroments in sane situations
94998 return setTimeout(fun, 0);
94999 }
95000 // if setTimeout wasn't available but was latter defined
95001 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
95002 cachedSetTimeout = setTimeout;
95003 return setTimeout(fun, 0);
95004 }
95005 try {
95006 // when when somebody has screwed with setTimeout but no I.E. maddness
95007 return cachedSetTimeout(fun, 0);
95008 } catch(e){
95009 try {
95010 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
95011 return cachedSetTimeout.call(null, fun, 0);
95012 } catch(e){
95013 // 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
95014 return cachedSetTimeout.call(this, fun, 0);
95015 }
95016 }
95017
95018
95019 }
95020 function runClearTimeout(marker) {
95021 if (cachedClearTimeout === clearTimeout) {
95022 //normal enviroments in sane situations
95023 return clearTimeout(marker);
95024 }
95025 // if clearTimeout wasn't available but was latter defined
95026 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
95027 cachedClearTimeout = clearTimeout;
95028 return clearTimeout(marker);
95029 }
95030 try {
95031 // when when somebody has screwed with setTimeout but no I.E. maddness
95032 return cachedClearTimeout(marker);
95033 } catch (e){
95034 try {
95035 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
95036 return cachedClearTimeout.call(null, marker);
95037 } catch (e){
95038 // 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.
95039 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
95040 return cachedClearTimeout.call(this, marker);
95041 }
95042 }
95043
95044
95045
95046 }
95047 var queue = [];
95048 var draining = false;
95049 var currentQueue;
95050 var queueIndex = -1;
95051
95052 function cleanUpNextTick() {
95053 if (!draining || !currentQueue) {
95054 return;
95055 }
95056 draining = false;
95057 if (currentQueue.length) {
95058 queue = currentQueue.concat(queue);
95059 } else {
95060 queueIndex = -1;
95061 }
95062 if (queue.length) {
95063 drainQueue();
95064 }
95065 }
95066
95067 function drainQueue() {
95068 if (draining) {
95069 return;
95070 }
95071 var timeout = runTimeout(cleanUpNextTick);
95072 draining = true;
95073
95074 var len = queue.length;
95075 while(len) {
95076 currentQueue = queue;
95077 queue = [];
95078 while (++queueIndex < len) {
95079 if (currentQueue) {
95080 currentQueue[queueIndex].run();
95081 }
95082 }
95083 queueIndex = -1;
95084 len = queue.length;
95085 }
95086 currentQueue = null;
95087 draining = false;
95088 runClearTimeout(timeout);
95089 }
95090
95091 process.nextTick = function (fun) {
95092 var args = new Array(arguments.length - 1);
95093 if (arguments.length > 1) {
95094 for (var i = 1; i < arguments.length; i++) {
95095 args[i - 1] = arguments[i];
95096 }
95097 }
95098 queue.push(new Item(fun, args));
95099 if (queue.length === 1 && !draining) {
95100 runTimeout(drainQueue);
95101 }
95102 };
95103
95104 // v8 likes predictible objects
95105 function Item(fun, array) {
95106 this.fun = fun;
95107 this.array = array;
95108 }
95109 Item.prototype.run = function () {
95110 this.fun.apply(null, this.array);
95111 };
95112 process.title = 'browser';
95113 process.browser = true;
95114 process.env = {};
95115 process.argv = [];
95116 process.version = ''; // empty string to avoid regexp issues
95117 process.versions = {};
95118
95119 function noop() {}
95120
95121 process.on = noop;
95122 process.addListener = noop;
95123 process.once = noop;
95124 process.off = noop;
95125 process.removeListener = noop;
95126 process.removeAllListeners = noop;
95127 process.emit = noop;
95128 process.prependListener = noop;
95129 process.prependOnceListener = noop;
95130
95131 process.listeners = function (name) { return [] }
95132
95133 process.binding = function (name) {
95134 throw new Error('process.binding is not supported');
95135 };
95136
95137 process.cwd = function () { return '/' };
95138 process.chdir = function (dir) {
95139 throw new Error('process.chdir is not supported');
95140 };
95141 process.umask = function() { return 0; };
95142
95143 },{}],26:[function(require,module,exports){
95144 module.exports = require('./lib/_stream_duplex.js');
95145
95146 },{"./lib/_stream_duplex.js":27}],27:[function(require,module,exports){
95147 // Copyright Joyent, Inc. and other Node contributors.
95148 //
95149 // Permission is hereby granted, free of charge, to any person obtaining a
95150 // copy of this software and associated documentation files (the
95151 // "Software"), to deal in the Software without restriction, including
95152 // without limitation the rights to use, copy, modify, merge, publish,
95153 // distribute, sublicense, and/or sell copies of the Software, and to permit
95154 // persons to whom the Software is furnished to do so, subject to the
95155 // following conditions:
95156 //
95157 // The above copyright notice and this permission notice shall be included
95158 // in all copies or substantial portions of the Software.
95159 //
95160 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95161 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95162 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95163 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95164 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95165 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95166 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95167
95168 // a duplex stream is just a stream that is both readable and writable.
95169 // Since JS doesn't have multiple prototypal inheritance, this class
95170 // prototypally inherits from Readable, and then parasitically from
95171 // Writable.
95172
95173 'use strict';
95174
95175 /*<replacement>*/
95176
95177 var processNextTick = require('process-nextick-args');
95178 /*</replacement>*/
95179
95180 /*<replacement>*/
95181 var objectKeys = Object.keys || function (obj) {
95182 var keys = [];
95183 for (var key in obj) {
95184 keys.push(key);
95185 }return keys;
95186 };
95187 /*</replacement>*/
95188
95189 module.exports = Duplex;
95190
95191 /*<replacement>*/
95192 var util = require('core-util-is');
95193 util.inherits = require('inherits');
95194 /*</replacement>*/
95195
95196 var Readable = require('./_stream_readable');
95197 var Writable = require('./_stream_writable');
95198
95199 util.inherits(Duplex, Readable);
95200
95201 var keys = objectKeys(Writable.prototype);
95202 for (var v = 0; v < keys.length; v++) {
95203 var method = keys[v];
95204 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
95205 }
95206
95207 function Duplex(options) {
95208 if (!(this instanceof Duplex)) return new Duplex(options);
95209
95210 Readable.call(this, options);
95211 Writable.call(this, options);
95212
95213 if (options && options.readable === false) this.readable = false;
95214
95215 if (options && options.writable === false) this.writable = false;
95216
95217 this.allowHalfOpen = true;
95218 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
95219
95220 this.once('end', onend);
95221 }
95222
95223 // the no-half-open enforcer
95224 function onend() {
95225 // if we allow half-open state, or if the writable side ended,
95226 // then we're ok.
95227 if (this.allowHalfOpen || this._writableState.ended) return;
95228
95229 // no more data can be written.
95230 // But allow more writes to happen in this tick.
95231 processNextTick(onEndNT, this);
95232 }
95233
95234 function onEndNT(self) {
95235 self.end();
95236 }
95237
95238 Object.defineProperty(Duplex.prototype, 'destroyed', {
95239 get: function () {
95240 if (this._readableState === undefined || this._writableState === undefined) {
95241 return false;
95242 }
95243 return this._readableState.destroyed && this._writableState.destroyed;
95244 },
95245 set: function (value) {
95246 // we ignore the value if the stream
95247 // has not been initialized yet
95248 if (this._readableState === undefined || this._writableState === undefined) {
95249 return;
95250 }
95251
95252 // backward compatibility, the user is explicitly
95253 // managing destroyed
95254 this._readableState.destroyed = value;
95255 this._writableState.destroyed = value;
95256 }
95257 });
95258
95259 Duplex.prototype._destroy = function (err, cb) {
95260 this.push(null);
95261 this.end();
95262
95263 processNextTick(cb, err);
95264 };
95265
95266 function forEach(xs, f) {
95267 for (var i = 0, l = xs.length; i < l; i++) {
95268 f(xs[i], i);
95269 }
95270 }
95271 },{"./_stream_readable":29,"./_stream_writable":31,"core-util-is":14,"inherits":21,"process-nextick-args":24}],28:[function(require,module,exports){
95272 // Copyright Joyent, Inc. and other Node contributors.
95273 //
95274 // Permission is hereby granted, free of charge, to any person obtaining a
95275 // copy of this software and associated documentation files (the
95276 // "Software"), to deal in the Software without restriction, including
95277 // without limitation the rights to use, copy, modify, merge, publish,
95278 // distribute, sublicense, and/or sell copies of the Software, and to permit
95279 // persons to whom the Software is furnished to do so, subject to the
95280 // following conditions:
95281 //
95282 // The above copyright notice and this permission notice shall be included
95283 // in all copies or substantial portions of the Software.
95284 //
95285 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95286 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95287 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95288 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95289 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95290 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95291 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95292
95293 // a passthrough stream.
95294 // basically just the most minimal sort of Transform stream.
95295 // Every written chunk gets output as-is.
95296
95297 'use strict';
95298
95299 module.exports = PassThrough;
95300
95301 var Transform = require('./_stream_transform');
95302
95303 /*<replacement>*/
95304 var util = require('core-util-is');
95305 util.inherits = require('inherits');
95306 /*</replacement>*/
95307
95308 util.inherits(PassThrough, Transform);
95309
95310 function PassThrough(options) {
95311 if (!(this instanceof PassThrough)) return new PassThrough(options);
95312
95313 Transform.call(this, options);
95314 }
95315
95316 PassThrough.prototype._transform = function (chunk, encoding, cb) {
95317 cb(null, chunk);
95318 };
95319 },{"./_stream_transform":30,"core-util-is":14,"inherits":21}],29:[function(require,module,exports){
95320 (function (process,global){
95321 // Copyright Joyent, Inc. and other Node contributors.
95322 //
95323 // Permission is hereby granted, free of charge, to any person obtaining a
95324 // copy of this software and associated documentation files (the
95325 // "Software"), to deal in the Software without restriction, including
95326 // without limitation the rights to use, copy, modify, merge, publish,
95327 // distribute, sublicense, and/or sell copies of the Software, and to permit
95328 // persons to whom the Software is furnished to do so, subject to the
95329 // following conditions:
95330 //
95331 // The above copyright notice and this permission notice shall be included
95332 // in all copies or substantial portions of the Software.
95333 //
95334 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
95335 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
95336 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
95337 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
95338 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
95339 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
95340 // USE OR OTHER DEALINGS IN THE SOFTWARE.
95341
95342 'use strict';
95343
95344 /*<replacement>*/
95345
95346 var processNextTick = require('process-nextick-args');
95347 /*</replacement>*/
95348
95349 module.exports = Readable;
95350
95351 /*<replacement>*/
95352 var isArray = require('isarray');
95353 /*</replacement>*/
95354
95355 /*<replacement>*/
95356 var Duplex;
95357 /*</replacement>*/
95358
95359 Readable.ReadableState = ReadableState;
95360
95361 /*<replacement>*/
95362 var EE = require('events').EventEmitter;
95363
95364 var EElistenerCount = function (emitter, type) {
95365 return emitter.listeners(type).length;
95366 };
95367 /*</replacement>*/
95368
95369 /*<replacement>*/
95370 var Stream = require('./internal/streams/stream');
95371 /*</replacement>*/
95372
95373 // TODO(bmeurer): Change this back to const once hole checks are
95374 // properly optimized away early in Ignition+TurboFan.
95375 /*<replacement>*/
95376 var Buffer = require('safe-buffer').Buffer;
95377 var OurUint8Array = global.Uint8Array || function () {};
95378 function _uint8ArrayToBuffer(chunk) {
95379 return Buffer.from(chunk);
95380 }
95381 function _isUint8Array(obj) {
95382 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
95383 }
95384 /*</replacement>*/
95385
95386 /*<replacement>*/
95387 var util = require('core-util-is');
95388 util.inherits = require('inherits');
95389 /*</replacement>*/
95390
95391 /*<replacement>*/
95392 var debugUtil = require('util');
95393 var debug = void 0;
95394 if (debugUtil && debugUtil.debuglog) {
95395 debug = debugUtil.debuglog('stream');
95396 } else {
95397 debug = function () {};
95398 }
95399 /*</replacement>*/
95400
95401 var BufferList = require('./internal/streams/BufferList');
95402 var destroyImpl = require('./internal/streams/destroy');
95403 var StringDecoder;
95404
95405 util.inherits(Readable, Stream);
95406
95407 var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
95408
95409 function prependListener(emitter, event, fn) {
95410 // Sadly this is not cacheable as some libraries bundle their own
95411 // event emitter implementation with them.
95412 if (typeof emitter.prependListener === 'function') {
95413 return emitter.prependListener(event, fn);
95414 } else {
95415 // This is a hack to make sure that our error handler is attached before any
95416 // userland ones. NEVER DO THIS. This is here only because this code needs
95417 // to continue to work with older versions of Node.js that do not include
95418 // the prependListener() method. The goal is to eventually remove this hack.
95419 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]];
95420 }
95421 }
95422
95423 function ReadableState(options, stream) {
95424 Duplex = Duplex || require('./_stream_duplex');
95425
95426 options = options || {};
95427
95428 // object stream flag. Used to make read(n) ignore n and to
95429 // make all the buffer merging and length checks go away
95430 this.objectMode = !!options.objectMode;
95431
95432 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
95433
95434 // the point at which it stops calling _read() to fill the buffer
95435 // Note: 0 is a valid value, means "don't call _read preemptively ever"
95436 var hwm = options.highWaterMark;
95437 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
95438 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
95439
95440 // cast to ints.
95441 this.highWaterMark = Math.floor(this.highWaterMark);
95442
95443 // A linked list is used to store data chunks instead of an array because the
95444 // linked list can remove elements from the beginning faster than
95445 // array.shift()
95446 this.buffer = new BufferList();
95447 this.length = 0;
95448 this.pipes = null;
95449 this.pipesCount = 0;
95450 this.flowing = null;
95451 this.ended = false;
95452 this.endEmitted = false;
95453 this.reading = false;
95454
95455 // a flag to be able to tell if the event 'readable'/'data' is emitted
95456 // immediately, or on a later tick. We set this to true at first, because
95457 // any actions that shouldn't happen until "later" should generally also
95458 // not happen before the first read call.
95459 this.sync = true;
95460
95461 // whenever we return null, then we set a flag to say
95462 // that we're awaiting a 'readable' event emission.
95463 this.needReadable = false;
95464 this.emittedReadable = false;
95465 this.readableListening = false;
95466 this.resumeScheduled = false;
95467
95468 // has it been destroyed
95469 this.destroyed = false;
95470
95471 // Crypto is kind of old and crusty. Historically, its default string
95472 // encoding is 'binary' so we have to make this configurable.
95473 // Everything else in the universe uses 'utf8', though.
95474 this.defaultEncoding = options.defaultEncoding || 'utf8';
95475
95476 // the number of writers that are awaiting a drain event in .pipe()s
95477 this.awaitDrain = 0;
95478
95479 // if true, a maybeReadMore has been scheduled
95480 this.readingMore = false;
95481
95482 this.decoder = null;
95483 this.encoding = null;
95484 if (options.encoding) {
95485 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
95486 this.decoder = new StringDecoder(options.encoding);
95487 this.encoding = options.encoding;
95488 }
95489 }
95490
95491 function Readable(options) {
95492 Duplex = Duplex || require('./_stream_duplex');
95493
95494 if (!(this instanceof Readable)) return new Readable(options);
95495
95496 this._readableState = new ReadableState(options, this);
95497
95498 // legacy
95499 this.readable = true;
95500
95501 if (options) {
95502 if (typeof options.read === 'function') this._read = options.read;
95503
95504 if (typeof options.destroy === 'function') this._destroy = options.destroy;
95505 }
95506
95507 Stream.call(this);
95508 }
95509
95510 Object.defineProperty(Readable.prototype, 'destroyed', {
95511 get: function () {
95512 if (this._readableState === undefined) {
95513 return false;
95514 }
95515 return this._readableState.destroyed;
95516 },
95517 set: function (value) {
95518 // we ignore the value if the stream
95519 // has not been initialized yet
95520 if (!this._readableState) {
95521 return;
95522 }
95523
95524 // backward compatibility, the user is explicitly
95525 // managing destroyed
95526 this._readableState.destroyed = value;
95527 }
95528 });
95529
95530 Readable.prototype.destroy = destroyImpl.destroy;
95531 Readable.prototype._undestroy = destroyImpl.undestroy;
95532 Readable.prototype._destroy = function (err, cb) {
95533 this.push(null);
95534 cb(err);
95535 };
95536
95537 // Manually shove something into the read() buffer.
95538 // This returns true if the highWaterMark has not been hit yet,
95539 // similar to how Writable.write() returns true if you should
95540 // write() some more.
95541 Readable.prototype.push = function (chunk, encoding) {
95542 var state = this._readableState;
95543 var skipChunkCheck;
95544
95545 if (!state.objectMode) {
95546 if (typeof chunk === 'string') {
95547 encoding = encoding || state.defaultEncoding;
95548 if (encoding !== state.encoding) {
95549 chunk = Buffer.from(chunk, encoding);
95550 encoding = '';
95551 }
95552 skipChunkCheck = true;
95553 }
95554 } else {
95555 skipChunkCheck = true;
95556 }
95557
95558 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
95559 };
95560
95561 // Unshift should *always* be something directly out of read()
95562 Readable.prototype.unshift = function (chunk) {
95563 return readableAddChunk(this, chunk, null, true, false);
95564 };
95565
95566 function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
95567 var state = stream._readableState;
95568 if (chunk === null) {
95569 state.reading = false;
95570 onEofChunk(stream, state);
95571 } else {
95572 var er;
95573 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
95574 if (er) {
95575 stream.emit('error', er);
95576 } else if (state.objectMode || chunk && chunk.length > 0) {
95577 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
95578 chunk = _uint8ArrayToBuffer(chunk);
95579 }
95580
95581 if (addToFront) {
95582 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
95583 } else if (state.ended) {
95584 stream.emit('error', new Error('stream.push() after EOF'));
95585 } else {
95586 state.reading = false;
95587 if (state.decoder && !encoding) {
95588 chunk = state.decoder.write(chunk);
95589 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
95590 } else {
95591 addChunk(stream, state, chunk, false);
95592 }
95593 }
95594 } else if (!addToFront) {
95595 state.reading = false;
95596 }
95597 }
95598
95599 return needMoreData(state);
95600 }
95601
95602 function addChunk(stream, state, chunk, addToFront) {
95603 if (state.flowing && state.length === 0 && !state.sync) {
95604 stream.emit('data', chunk);
95605 stream.read(0);
95606 } else {
95607 // update the buffer info.
95608 state.length += state.objectMode ? 1 : chunk.length;
95609 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
95610
95611 if (state.needReadable) emitReadable(stream);
95612 }
95613 maybeReadMore(stream, state);
95614 }
95615
95616 function chunkInvalid(state, chunk) {
95617 var er;
95618 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
95619 er = new TypeError('Invalid non-string/buffer chunk');
95620 }
95621 return er;
95622 }
95623
95624 // if it's past the high water mark, we can push in some more.
95625 // Also, if we have no data yet, we can stand some
95626 // more bytes. This is to work around cases where hwm=0,
95627 // such as the repl. Also, if the push() triggered a
95628 // readable event, and the user called read(largeNumber) such that
95629 // needReadable was set, then we ought to push more, so that another
95630 // 'readable' event will be triggered.
95631 function needMoreData(state) {
95632 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
95633 }
95634
95635 Readable.prototype.isPaused = function () {
95636 return this._readableState.flowing === false;
95637 };
95638
95639 // backwards compatibility.
95640 Readable.prototype.setEncoding = function (enc) {
95641 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
95642 this._readableState.decoder = new StringDecoder(enc);
95643 this._readableState.encoding = enc;
95644 return this;
95645 };
95646
95647 // Don't raise the hwm > 8MB
95648 var MAX_HWM = 0x800000;
95649 function computeNewHighWaterMark(n) {
95650 if (n >= MAX_HWM) {
95651 n = MAX_HWM;
95652 } else {
95653 // Get the next highest power of 2 to prevent increasing hwm excessively in
95654 // tiny amounts
95655 n--;
95656 n |= n >>> 1;
95657 n |= n >>> 2;
95658 n |= n >>> 4;
95659 n |= n >>> 8;
95660 n |= n >>> 16;
95661 n++;
95662 }
95663 return n;
95664 }
95665
95666 // This function is designed to be inlinable, so please take care when making
95667 // changes to the function body.
95668 function howMuchToRead(n, state) {
95669 if (n <= 0 || state.length === 0 && state.ended) return 0;
95670 if (state.objectMode) return 1;
95671 if (n !== n) {
95672 // Only flow one buffer at a time
95673 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
95674 }
95675 // If we're asking for more than the current hwm, then raise the hwm.
95676 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
95677 if (n <= state.length) return n;
95678 // Don't have enough
95679 if (!state.ended) {
95680 state.needReadable = true;
95681 return 0;
95682 }
95683 return state.length;
95684 }
95685
95686 // you can override either this method, or the async _read(n) below.
95687 Readable.prototype.read = function (n) {
95688 debug('read', n);
95689 n = parseInt(n, 10);
95690 var state = this._readableState;
95691 var nOrig = n;
95692
95693 if (n !== 0) state.emittedReadable = false;
95694
95695 // if we're doing read(0) to trigger a readable event, but we
95696 // already have a bunch of data in the buffer, then just trigger
95697 // the 'readable' event and move on.
95698 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
95699 debug('read: emitReadable', state.length, state.ended);
95700 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
95701 return null;
95702 }
95703
95704 n = howMuchToRead(n, state);
95705
95706 // if we've ended, and we're now clear, then finish it up.
95707 if (n === 0 && state.ended) {
95708 if (state.length === 0) endReadable(this);
95709 return null;
95710 }
95711
95712 // All the actual chunk generation logic needs to be
95713 // *below* the call to _read. The reason is that in certain
95714 // synthetic stream cases, such as passthrough streams, _read
95715 // may be a completely synchronous operation which may change
95716 // the state of the read buffer, providing enough data when
95717 // before there was *not* enough.
95718 //
95719 // So, the steps are:
95720 // 1. Figure out what the state of things will be after we do
95721 // a read from the buffer.
95722 //
95723 // 2. If that resulting state will trigger a _read, then call _read.
95724 // Note that this may be asynchronous, or synchronous. Yes, it is
95725 // deeply ugly to write APIs this way, but that still doesn't mean
95726 // that the Readable class should behave improperly, as streams are
95727 // designed to be sync/async agnostic.
95728 // Take note if the _read call is sync or async (ie, if the read call
95729 // has returned yet), so that we know whether or not it's safe to emit
95730 // 'readable' etc.
95731 //
95732 // 3. Actually pull the requested chunks out of the buffer and return.
95733
95734 // if we need a readable event, then we need to do some reading.
95735 var doRead = state.needReadable;
95736 debug('need readable', doRead);
95737
95738 // if we currently have less than the highWaterMark, then also read some
95739 if (state.length === 0 || state.length - n < state.highWaterMark) {
95740 doRead = true;
95741 debug('length less than watermark', doRead);
95742 }
95743
95744 // however, if we've ended, then there's no point, and if we're already
95745 // reading, then it's unnecessary.
95746 if (state.ended || state.reading) {
95747 doRead = false;
95748 debug('reading or ended', doRead);
95749 } else if (doRead) {
95750 debug('do read');
95751 state.reading = true;
95752 state.sync = true;
95753 // if the length is currently zero, then we *need* a readable event.
95754 if (state.length === 0) state.needReadable = true;
95755 // call internal read method
95756 this._read(state.highWaterMark);
95757 state.sync = false;
95758 // If _read pushed data synchronously, then `reading` will be false,
95759 // and we need to re-evaluate how much data we can return to the user.
95760 if (!state.reading) n = howMuchToRead(nOrig, state);
95761 }
95762
95763 var ret;
95764 if (n > 0) ret = fromList(n, state);else ret = null;
95765
95766 if (ret === null) {
95767 state.needReadable = true;
95768 n = 0;
95769 } else {
95770 state.length -= n;
95771 }
95772
95773 if (state.length === 0) {
95774 // If we have nothing in the buffer, then we want to know
95775 // as soon as we *do* get something into the buffer.
95776 if (!state.ended) state.needReadable = true;
95777
95778 // If we tried to read() past the EOF, then emit end on the next tick.
95779 if (nOrig !== n && state.ended) endReadable(this);
95780 }
95781
95782 if (ret !== null) this.emit('data', ret);
95783
95784 return ret;
95785 };
95786
95787 function onEofChunk(stream, state) {
95788 if (state.ended) return;
95789 if (state.decoder) {
95790 var chunk = state.decoder.end();
95791 if (chunk && chunk.length) {
95792 state.buffer.push(chunk);
95793 state.length += state.objectMode ? 1 : chunk.length;
95794 }
95795 }
95796 state.ended = true;
95797
95798 // emit 'readable' now to make sure it gets picked up.
95799 emitReadable(stream);
95800 }
95801
95802 // Don't emit readable right away in sync mode, because this can trigger
95803 // another read() call => stack overflow. This way, it might trigger
95804 // a nextTick recursion warning, but that's not so bad.
95805 function emitReadable(stream) {
95806 var state = stream._readableState;
95807 state.needReadable = false;
95808 if (!state.emittedReadable) {
95809 debug('emitReadable', state.flowing);
95810 state.emittedReadable = true;
95811 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
95812 }
95813 }
95814
95815 function emitReadable_(stream) {
95816 debug('emit readable');
95817 stream.emit('readable');
95818 flow(stream);
95819 }
95820
95821 // at this point, the user has presumably seen the 'readable' event,
95822 // and called read() to consume some data. that may have triggered
95823 // in turn another _read(n) call, in which case reading = true if
95824 // it's in progress.
95825 // However, if we're not ended, or reading, and the length < hwm,
95826 // then go ahead and try to read some more preemptively.
95827 function maybeReadMore(stream, state) {
95828 if (!state.readingMore) {
95829 state.readingMore = true;
95830 processNextTick(maybeReadMore_, stream, state);
95831 }
95832 }
95833
95834 function maybeReadMore_(stream, state) {
95835 var len = state.length;
95836 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
95837 debug('maybeReadMore read 0');
95838 stream.read(0);
95839 if (len === state.length)
95840 // didn't get any data, stop spinning.
95841 break;else len = state.length;
95842 }
95843 state.readingMore = false;
95844 }
95845
95846 // abstract method. to be overridden in specific implementation classes.
95847 // call cb(er, data) where data is <= n in length.
95848 // for virtual (non-string, non-buffer) streams, "length" is somewhat
95849 // arbitrary, and perhaps not very meaningful.
95850 Readable.prototype._read = function (n) {
95851 this.emit('error', new Error('_read() is not implemented'));
95852 };
95853
95854 Readable.prototype.pipe = function (dest, pipeOpts) {
95855 var src = this;
95856 var state = this._readableState;
95857
95858 switch (state.pipesCount) {
95859 case 0:
95860 state.pipes = dest;
95861 break;
95862 case 1:
95863 state.pipes = [state.pipes, dest];
95864 break;
95865 default:
95866 state.pipes.push(dest);
95867 break;
95868 }
95869 state.pipesCount += 1;
95870 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
95871
95872 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
95873
95874 var endFn = doEnd ? onend : unpipe;
95875 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
95876
95877 dest.on('unpipe', onunpipe);
95878 function onunpipe(readable, unpipeInfo) {
95879 debug('onunpipe');
95880 if (readable === src) {
95881 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
95882 unpipeInfo.hasUnpiped = true;
95883 cleanup();
95884 }
95885 }
95886 }
95887
95888 function onend() {
95889 debug('onend');
95890 dest.end();
95891 }
95892
95893 // when the dest drains, it reduces the awaitDrain counter
95894 // on the source. This would be more elegant with a .once()
95895 // handler in flow(), but adding and removing repeatedly is
95896 // too slow.
95897 var ondrain = pipeOnDrain(src);
95898 dest.on('drain', ondrain);
95899
95900 var cleanedUp = false;
95901 function cleanup() {
95902 debug('cleanup');
95903 // cleanup event handlers once the pipe is broken
95904 dest.removeListener('close', onclose);
95905 dest.removeListener('finish', onfinish);
95906 dest.removeListener('drain', ondrain);
95907 dest.removeListener('error', onerror);
95908 dest.removeListener('unpipe', onunpipe);
95909 src.removeListener('end', onend);
95910 src.removeListener('end', unpipe);
95911 src.removeListener('data', ondata);
95912
95913 cleanedUp = true;
95914
95915 // if the reader is waiting for a drain event from this
95916 // specific writer, then it would cause it to never start
95917 // flowing again.
95918 // So, if this is awaiting a drain, then we just call it now.
95919 // If we don't know, then assume that we are waiting for one.
95920 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
95921 }
95922
95923 // If the user pushes more data while we're writing to dest then we'll end up
95924 // in ondata again. However, we only want to increase awaitDrain once because
95925 // dest will only emit one 'drain' event for the multiple writes.
95926 // => Introduce a guard on increasing awaitDrain.
95927 var increasedAwaitDrain = false;
95928 src.on('data', ondata);
95929 function ondata(chunk) {
95930 debug('ondata');
95931 increasedAwaitDrain = false;
95932 var ret = dest.write(chunk);
95933 if (false === ret && !increasedAwaitDrain) {
95934 // If the user unpiped during `dest.write()`, it is possible
95935 // to get stuck in a permanently paused state if that write
95936 // also returned false.
95937 // => Check whether `dest` is still a piping destination.
95938 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
95939 debug('false write response, pause', src._readableState.awaitDrain);
95940 src._readableState.awaitDrain++;
95941 increasedAwaitDrain = true;
95942 }
95943 src.pause();
95944 }
95945 }
95946
95947 // if the dest has an error, then stop piping into it.
95948 // however, don't suppress the throwing behavior for this.
95949 function onerror(er) {
95950 debug('onerror', er);
95951 unpipe();
95952 dest.removeListener('error', onerror);
95953 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
95954 }
95955
95956 // Make sure our error handler is attached before userland ones.
95957 prependListener(dest, 'error', onerror);
95958
95959 // Both close and finish should trigger unpipe, but only once.
95960 function onclose() {
95961 dest.removeListener('finish', onfinish);
95962 unpipe();
95963 }
95964 dest.once('close', onclose);
95965 function onfinish() {
95966 debug('onfinish');
95967 dest.removeListener('close', onclose);
95968 unpipe();
95969 }
95970 dest.once('finish', onfinish);
95971
95972 function unpipe() {
95973 debug('unpipe');
95974 src.unpipe(dest);
95975 }
95976
95977 // tell the dest that it's being piped to
95978 dest.emit('pipe', src);
95979
95980 // start the flow if it hasn't been started already.
95981 if (!state.flowing) {
95982 debug('pipe resume');
95983 src.resume();
95984 }
95985
95986 return dest;
95987 };
95988
95989 function pipeOnDrain(src) {
95990 return function () {
95991 var state = src._readableState;
95992 debug('pipeOnDrain', state.awaitDrain);
95993 if (state.awaitDrain) state.awaitDrain--;
95994 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
95995 state.flowing = true;
95996 flow(src);
95997 }
95998 };
95999 }
96000
96001 Readable.prototype.unpipe = function (dest) {
96002 var state = this._readableState;
96003 var unpipeInfo = { hasUnpiped: false };
96004
96005 // if we're not piping anywhere, then do nothing.
96006 if (state.pipesCount === 0) return this;
96007
96008 // just one destination. most common case.
96009 if (state.pipesCount === 1) {
96010 // passed in one, but it's not the right one.
96011 if (dest && dest !== state.pipes) return this;
96012
96013 if (!dest) dest = state.pipes;
96014
96015 // got a match.
96016 state.pipes = null;
96017 state.pipesCount = 0;
96018 state.flowing = false;
96019 if (dest) dest.emit('unpipe', this, unpipeInfo);
96020 return this;
96021 }
96022
96023 // slow case. multiple pipe destinations.
96024
96025 if (!dest) {
96026 // remove all.
96027 var dests = state.pipes;
96028 var len = state.pipesCount;
96029 state.pipes = null;
96030 state.pipesCount = 0;
96031 state.flowing = false;
96032
96033 for (var i = 0; i < len; i++) {
96034 dests[i].emit('unpipe', this, unpipeInfo);
96035 }return this;
96036 }
96037
96038 // try to find the right one.
96039 var index = indexOf(state.pipes, dest);
96040 if (index === -1) return this;
96041
96042 state.pipes.splice(index, 1);
96043 state.pipesCount -= 1;
96044 if (state.pipesCount === 1) state.pipes = state.pipes[0];
96045
96046 dest.emit('unpipe', this, unpipeInfo);
96047
96048 return this;
96049 };
96050
96051 // set up data events if they are asked for
96052 // Ensure readable listeners eventually get something
96053 Readable.prototype.on = function (ev, fn) {
96054 var res = Stream.prototype.on.call(this, ev, fn);
96055
96056 if (ev === 'data') {
96057 // Start flowing on next tick if stream isn't explicitly paused
96058 if (this._readableState.flowing !== false) this.resume();
96059 } else if (ev === 'readable') {
96060 var state = this._readableState;
96061 if (!state.endEmitted && !state.readableListening) {
96062 state.readableListening = state.needReadable = true;
96063 state.emittedReadable = false;
96064 if (!state.reading) {
96065 processNextTick(nReadingNextTick, this);
96066 } else if (state.length) {
96067 emitReadable(this);
96068 }
96069 }
96070 }
96071
96072 return res;
96073 };
96074 Readable.prototype.addListener = Readable.prototype.on;
96075
96076 function nReadingNextTick(self) {
96077 debug('readable nexttick read 0');
96078 self.read(0);
96079 }
96080
96081 // pause() and resume() are remnants of the legacy readable stream API
96082 // If the user uses them, then switch into old mode.
96083 Readable.prototype.resume = function () {
96084 var state = this._readableState;
96085 if (!state.flowing) {
96086 debug('resume');
96087 state.flowing = true;
96088 resume(this, state);
96089 }
96090 return this;
96091 };
96092
96093 function resume(stream, state) {
96094 if (!state.resumeScheduled) {
96095 state.resumeScheduled = true;
96096 processNextTick(resume_, stream, state);
96097 }
96098 }
96099
96100 function resume_(stream, state) {
96101 if (!state.reading) {
96102 debug('resume read 0');
96103 stream.read(0);
96104 }
96105
96106 state.resumeScheduled = false;
96107 state.awaitDrain = 0;
96108 stream.emit('resume');
96109 flow(stream);
96110 if (state.flowing && !state.reading) stream.read(0);
96111 }
96112
96113 Readable.prototype.pause = function () {
96114 debug('call pause flowing=%j', this._readableState.flowing);
96115 if (false !== this._readableState.flowing) {
96116 debug('pause');
96117 this._readableState.flowing = false;
96118 this.emit('pause');
96119 }
96120 return this;
96121 };
96122
96123 function flow(stream) {
96124 var state = stream._readableState;
96125 debug('flow', state.flowing);
96126 while (state.flowing && stream.read() !== null) {}
96127 }
96128
96129 // wrap an old-style stream as the async data source.
96130 // This is *not* part of the readable stream interface.
96131 // It is an ugly unfortunate mess of history.
96132 Readable.prototype.wrap = function (stream) {
96133 var state = this._readableState;
96134 var paused = false;
96135
96136 var self = this;
96137 stream.on('end', function () {
96138 debug('wrapped end');
96139 if (state.decoder && !state.ended) {
96140 var chunk = state.decoder.end();
96141 if (chunk && chunk.length) self.push(chunk);
96142 }
96143
96144 self.push(null);
96145 });
96146
96147 stream.on('data', function (chunk) {
96148 debug('wrapped data');
96149 if (state.decoder) chunk = state.decoder.write(chunk);
96150
96151 // don't skip over falsy values in objectMode
96152 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
96153
96154 var ret = self.push(chunk);
96155 if (!ret) {
96156 paused = true;
96157 stream.pause();
96158 }
96159 });
96160
96161 // proxy all the other methods.
96162 // important when wrapping filters and duplexes.
96163 for (var i in stream) {
96164 if (this[i] === undefined && typeof stream[i] === 'function') {
96165 this[i] = function (method) {
96166 return function () {
96167 return stream[method].apply(stream, arguments);
96168 };
96169 }(i);
96170 }
96171 }
96172
96173 // proxy certain important events.
96174 for (var n = 0; n < kProxyEvents.length; n++) {
96175 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
96176 }
96177
96178 // when we try to consume some more bytes, simply unpause the
96179 // underlying stream.
96180 self._read = function (n) {
96181 debug('wrapped _read', n);
96182 if (paused) {
96183 paused = false;
96184 stream.resume();
96185 }
96186 };
96187
96188 return self;
96189 };
96190
96191 // exposed for testing purposes only.
96192 Readable._fromList = fromList;
96193
96194 // Pluck off n bytes from an array of buffers.
96195 // Length is the combined lengths of all the buffers in the list.
96196 // This function is designed to be inlinable, so please take care when making
96197 // changes to the function body.
96198 function fromList(n, state) {
96199 // nothing buffered
96200 if (state.length === 0) return null;
96201
96202 var ret;
96203 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
96204 // read it all, truncate the list
96205 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);
96206 state.buffer.clear();
96207 } else {
96208 // read part of list
96209 ret = fromListPartial(n, state.buffer, state.decoder);
96210 }
96211
96212 return ret;
96213 }
96214
96215 // Extracts only enough buffered data to satisfy the amount requested.
96216 // This function is designed to be inlinable, so please take care when making
96217 // changes to the function body.
96218 function fromListPartial(n, list, hasStrings) {
96219 var ret;
96220 if (n < list.head.data.length) {
96221 // slice is the same for buffers and strings
96222 ret = list.head.data.slice(0, n);
96223 list.head.data = list.head.data.slice(n);
96224 } else if (n === list.head.data.length) {
96225 // first chunk is a perfect match
96226 ret = list.shift();
96227 } else {
96228 // result spans more than one buffer
96229 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
96230 }
96231 return ret;
96232 }
96233
96234 // Copies a specified amount of characters from the list of buffered data
96235 // chunks.
96236 // This function is designed to be inlinable, so please take care when making
96237 // changes to the function body.
96238 function copyFromBufferString(n, list) {
96239 var p = list.head;
96240 var c = 1;
96241 var ret = p.data;
96242 n -= ret.length;
96243 while (p = p.next) {
96244 var str = p.data;
96245 var nb = n > str.length ? str.length : n;
96246 if (nb === str.length) ret += str;else ret += str.slice(0, n);
96247 n -= nb;
96248 if (n === 0) {
96249 if (nb === str.length) {
96250 ++c;
96251 if (p.next) list.head = p.next;else list.head = list.tail = null;
96252 } else {
96253 list.head = p;
96254 p.data = str.slice(nb);
96255 }
96256 break;
96257 }
96258 ++c;
96259 }
96260 list.length -= c;
96261 return ret;
96262 }
96263
96264 // Copies a specified amount of bytes from the list of buffered data chunks.
96265 // This function is designed to be inlinable, so please take care when making
96266 // changes to the function body.
96267 function copyFromBuffer(n, list) {
96268 var ret = Buffer.allocUnsafe(n);
96269 var p = list.head;
96270 var c = 1;
96271 p.data.copy(ret);
96272 n -= p.data.length;
96273 while (p = p.next) {
96274 var buf = p.data;
96275 var nb = n > buf.length ? buf.length : n;
96276 buf.copy(ret, ret.length - n, 0, nb);
96277 n -= nb;
96278 if (n === 0) {
96279 if (nb === buf.length) {
96280 ++c;
96281 if (p.next) list.head = p.next;else list.head = list.tail = null;
96282 } else {
96283 list.head = p;
96284 p.data = buf.slice(nb);
96285 }
96286 break;
96287 }
96288 ++c;
96289 }
96290 list.length -= c;
96291 return ret;
96292 }
96293
96294 function endReadable(stream) {
96295 var state = stream._readableState;
96296
96297 // If we get here before consuming all the bytes, then that is a
96298 // bug in node. Should never happen.
96299 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
96300
96301 if (!state.endEmitted) {
96302 state.ended = true;
96303 processNextTick(endReadableNT, state, stream);
96304 }
96305 }
96306
96307 function endReadableNT(state, stream) {
96308 // Check that we didn't get one last unshift.
96309 if (!state.endEmitted && state.length === 0) {
96310 state.endEmitted = true;
96311 stream.readable = false;
96312 stream.emit('end');
96313 }
96314 }
96315
96316 function forEach(xs, f) {
96317 for (var i = 0, l = xs.length; i < l; i++) {
96318 f(xs[i], i);
96319 }
96320 }
96321
96322 function indexOf(xs, x) {
96323 for (var i = 0, l = xs.length; i < l; i++) {
96324 if (xs[i] === x) return i;
96325 }
96326 return -1;
96327 }
96328 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
96329 },{"./_stream_duplex":27,"./internal/streams/BufferList":32,"./internal/streams/destroy":33,"./internal/streams/stream":34,"_process":25,"core-util-is":14,"events":18,"inherits":21,"isarray":23,"process-nextick-args":24,"safe-buffer":40,"string_decoder/":50,"util":4}],30:[function(require,module,exports){
96330 // Copyright Joyent, Inc. and other Node contributors.
96331 //
96332 // Permission is hereby granted, free of charge, to any person obtaining a
96333 // copy of this software and associated documentation files (the
96334 // "Software"), to deal in the Software without restriction, including
96335 // without limitation the rights to use, copy, modify, merge, publish,
96336 // distribute, sublicense, and/or sell copies of the Software, and to permit
96337 // persons to whom the Software is furnished to do so, subject to the
96338 // following conditions:
96339 //
96340 // The above copyright notice and this permission notice shall be included
96341 // in all copies or substantial portions of the Software.
96342 //
96343 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
96344 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
96345 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
96346 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
96347 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
96348 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
96349 // USE OR OTHER DEALINGS IN THE SOFTWARE.
96350
96351 // a transform stream is a readable/writable stream where you do
96352 // something with the data. Sometimes it's called a "filter",
96353 // but that's not a great name for it, since that implies a thing where
96354 // some bits pass through, and others are simply ignored. (That would
96355 // be a valid example of a transform, of course.)
96356 //
96357 // While the output is causally related to the input, it's not a
96358 // necessarily symmetric or synchronous transformation. For example,
96359 // a zlib stream might take multiple plain-text writes(), and then
96360 // emit a single compressed chunk some time in the future.
96361 //
96362 // Here's how this works:
96363 //
96364 // The Transform stream has all the aspects of the readable and writable
96365 // stream classes. When you write(chunk), that calls _write(chunk,cb)
96366 // internally, and returns false if there's a lot of pending writes
96367 // buffered up. When you call read(), that calls _read(n) until
96368 // there's enough pending readable data buffered up.
96369 //
96370 // In a transform stream, the written data is placed in a buffer. When
96371 // _read(n) is called, it transforms the queued up data, calling the
96372 // buffered _write cb's as it consumes chunks. If consuming a single
96373 // written chunk would result in multiple output chunks, then the first
96374 // outputted bit calls the readcb, and subsequent chunks just go into
96375 // the read buffer, and will cause it to emit 'readable' if necessary.
96376 //
96377 // This way, back-pressure is actually determined by the reading side,
96378 // since _read has to be called to start processing a new chunk. However,
96379 // a pathological inflate type of transform can cause excessive buffering
96380 // here. For example, imagine a stream where every byte of input is
96381 // interpreted as an integer from 0-255, and then results in that many
96382 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
96383 // 1kb of data being output. In this case, you could write a very small
96384 // amount of input, and end up with a very large amount of output. In
96385 // such a pathological inflating mechanism, there'd be no way to tell
96386 // the system to stop doing the transform. A single 4MB write could
96387 // cause the system to run out of memory.
96388 //
96389 // However, even in such a pathological case, only a single written chunk
96390 // would be consumed, and then the rest would wait (un-transformed) until
96391 // the results of the previous transformed chunk were consumed.
96392
96393 'use strict';
96394
96395 module.exports = Transform;
96396
96397 var Duplex = require('./_stream_duplex');
96398
96399 /*<replacement>*/
96400 var util = require('core-util-is');
96401 util.inherits = require('inherits');
96402 /*</replacement>*/
96403
96404 util.inherits(Transform, Duplex);
96405
96406 function TransformState(stream) {
96407 this.afterTransform = function (er, data) {
96408 return afterTransform(stream, er, data);
96409 };
96410
96411 this.needTransform = false;
96412 this.transforming = false;
96413 this.writecb = null;
96414 this.writechunk = null;
96415 this.writeencoding = null;
96416 }
96417
96418 function afterTransform(stream, er, data) {
96419 var ts = stream._transformState;
96420 ts.transforming = false;
96421
96422 var cb = ts.writecb;
96423
96424 if (!cb) {
96425 return stream.emit('error', new Error('write callback called multiple times'));
96426 }
96427
96428 ts.writechunk = null;
96429 ts.writecb = null;
96430
96431 if (data !== null && data !== undefined) stream.push(data);
96432
96433 cb(er);
96434
96435 var rs = stream._readableState;
96436 rs.reading = false;
96437 if (rs.needReadable || rs.length < rs.highWaterMark) {
96438 stream._read(rs.highWaterMark);
96439 }
96440 }
96441
96442 function Transform(options) {
96443 if (!(this instanceof Transform)) return new Transform(options);
96444
96445 Duplex.call(this, options);
96446
96447 this._transformState = new TransformState(this);
96448
96449 var stream = this;
96450
96451 // start out asking for a readable event once data is transformed.
96452 this._readableState.needReadable = true;
96453
96454 // we have implemented the _read method, and done the other things
96455 // that Readable wants before the first _read call, so unset the
96456 // sync guard flag.
96457 this._readableState.sync = false;
96458
96459 if (options) {
96460 if (typeof options.transform === 'function') this._transform = options.transform;
96461
96462 if (typeof options.flush === 'function') this._flush = options.flush;
96463 }
96464
96465 // When the writable side finishes, then flush out anything remaining.
96466 this.once('prefinish', function () {
96467 if (typeof this._flush === 'function') this._flush(function (er, data) {
96468 done(stream, er, data);
96469 });else done(stream);
96470 });
96471 }
96472
96473 Transform.prototype.push = function (chunk, encoding) {
96474 this._transformState.needTransform = false;
96475 return Duplex.prototype.push.call(this, chunk, encoding);
96476 };
96477
96478 // This is the part where you do stuff!
96479 // override this function in implementation classes.
96480 // 'chunk' is an input chunk.
96481 //
96482 // Call `push(newChunk)` to pass along transformed output
96483 // to the readable side. You may call 'push' zero or more times.
96484 //
96485 // Call `cb(err)` when you are done with this chunk. If you pass
96486 // an error, then that'll put the hurt on the whole operation. If you
96487 // never call cb(), then you'll never get another chunk.
96488 Transform.prototype._transform = function (chunk, encoding, cb) {
96489 throw new Error('_transform() is not implemented');
96490 };
96491
96492 Transform.prototype._write = function (chunk, encoding, cb) {
96493 var ts = this._transformState;
96494 ts.writecb = cb;
96495 ts.writechunk = chunk;
96496 ts.writeencoding = encoding;
96497 if (!ts.transforming) {
96498 var rs = this._readableState;
96499 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
96500 }
96501 };
96502
96503 // Doesn't matter what the args are here.
96504 // _transform does all the work.
96505 // That we got here means that the readable side wants more data.
96506 Transform.prototype._read = function (n) {
96507 var ts = this._transformState;
96508
96509 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
96510 ts.transforming = true;
96511 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
96512 } else {
96513 // mark that we need a transform, so that any data that comes in
96514 // will get processed, now that we've asked for it.
96515 ts.needTransform = true;
96516 }
96517 };
96518
96519 Transform.prototype._destroy = function (err, cb) {
96520 var _this = this;
96521
96522 Duplex.prototype._destroy.call(this, err, function (err2) {
96523 cb(err2);
96524 _this.emit('close');
96525 });
96526 };
96527
96528 function done(stream, er, data) {
96529 if (er) return stream.emit('error', er);
96530
96531 if (data !== null && data !== undefined) stream.push(data);
96532
96533 // if there's nothing in the write buffer, then that means
96534 // that nothing more will ever be provided
96535 var ws = stream._writableState;
96536 var ts = stream._transformState;
96537
96538 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
96539
96540 if (ts.transforming) throw new Error('Calling transform done when still transforming');
96541
96542 return stream.push(null);
96543 }
96544 },{"./_stream_duplex":27,"core-util-is":14,"inherits":21}],31:[function(require,module,exports){
96545 (function (process,global){
96546 // Copyright Joyent, Inc. and other Node contributors.
96547 //
96548 // Permission is hereby granted, free of charge, to any person obtaining a
96549 // copy of this software and associated documentation files (the
96550 // "Software"), to deal in the Software without restriction, including
96551 // without limitation the rights to use, copy, modify, merge, publish,
96552 // distribute, sublicense, and/or sell copies of the Software, and to permit
96553 // persons to whom the Software is furnished to do so, subject to the
96554 // following conditions:
96555 //
96556 // The above copyright notice and this permission notice shall be included
96557 // in all copies or substantial portions of the Software.
96558 //
96559 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
96560 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
96561 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
96562 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
96563 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
96564 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
96565 // USE OR OTHER DEALINGS IN THE SOFTWARE.
96566
96567 // A bit simpler than readable streams.
96568 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
96569 // the drain event emission and buffering.
96570
96571 'use strict';
96572
96573 /*<replacement>*/
96574
96575 var processNextTick = require('process-nextick-args');
96576 /*</replacement>*/
96577
96578 module.exports = Writable;
96579
96580 /* <replacement> */
96581 function WriteReq(chunk, encoding, cb) {
96582 this.chunk = chunk;
96583 this.encoding = encoding;
96584 this.callback = cb;
96585 this.next = null;
96586 }
96587
96588 // It seems a linked list but it is not
96589 // there will be only 2 of these for each stream
96590 function CorkedRequest(state) {
96591 var _this = this;
96592
96593 this.next = null;
96594 this.entry = null;
96595 this.finish = function () {
96596 onCorkedFinish(_this, state);
96597 };
96598 }
96599 /* </replacement> */
96600
96601 /*<replacement>*/
96602 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
96603 /*</replacement>*/
96604
96605 /*<replacement>*/
96606 var Duplex;
96607 /*</replacement>*/
96608
96609 Writable.WritableState = WritableState;
96610
96611 /*<replacement>*/
96612 var util = require('core-util-is');
96613 util.inherits = require('inherits');
96614 /*</replacement>*/
96615
96616 /*<replacement>*/
96617 var internalUtil = {
96618 deprecate: require('util-deprecate')
96619 };
96620 /*</replacement>*/
96621
96622 /*<replacement>*/
96623 var Stream = require('./internal/streams/stream');
96624 /*</replacement>*/
96625
96626 /*<replacement>*/
96627 var Buffer = require('safe-buffer').Buffer;
96628 var OurUint8Array = global.Uint8Array || function () {};
96629 function _uint8ArrayToBuffer(chunk) {
96630 return Buffer.from(chunk);
96631 }
96632 function _isUint8Array(obj) {
96633 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
96634 }
96635 /*</replacement>*/
96636
96637 var destroyImpl = require('./internal/streams/destroy');
96638
96639 util.inherits(Writable, Stream);
96640
96641 function nop() {}
96642
96643 function WritableState(options, stream) {
96644 Duplex = Duplex || require('./_stream_duplex');
96645
96646 options = options || {};
96647
96648 // object stream flag to indicate whether or not this stream
96649 // contains buffers or objects.
96650 this.objectMode = !!options.objectMode;
96651
96652 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
96653
96654 // the point at which write() starts returning false
96655 // Note: 0 is a valid value, means that we always return false if
96656 // the entire buffer is not flushed immediately on write()
96657 var hwm = options.highWaterMark;
96658 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
96659 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
96660
96661 // cast to ints.
96662 this.highWaterMark = Math.floor(this.highWaterMark);
96663
96664 // if _final has been called
96665 this.finalCalled = false;
96666
96667 // drain event flag.
96668 this.needDrain = false;
96669 // at the start of calling end()
96670 this.ending = false;
96671 // when end() has been called, and returned
96672 this.ended = false;
96673 // when 'finish' is emitted
96674 this.finished = false;
96675
96676 // has it been destroyed
96677 this.destroyed = false;
96678
96679 // should we decode strings into buffers before passing to _write?
96680 // this is here so that some node-core streams can optimize string
96681 // handling at a lower level.
96682 var noDecode = options.decodeStrings === false;
96683 this.decodeStrings = !noDecode;
96684
96685 // Crypto is kind of old and crusty. Historically, its default string
96686 // encoding is 'binary' so we have to make this configurable.
96687 // Everything else in the universe uses 'utf8', though.
96688 this.defaultEncoding = options.defaultEncoding || 'utf8';
96689
96690 // not an actual buffer we keep track of, but a measurement
96691 // of how much we're waiting to get pushed to some underlying
96692 // socket or file.
96693 this.length = 0;
96694
96695 // a flag to see when we're in the middle of a write.
96696 this.writing = false;
96697
96698 // when true all writes will be buffered until .uncork() call
96699 this.corked = 0;
96700
96701 // a flag to be able to tell if the onwrite cb is called immediately,
96702 // or on a later tick. We set this to true at first, because any
96703 // actions that shouldn't happen until "later" should generally also
96704 // not happen before the first write call.
96705 this.sync = true;
96706
96707 // a flag to know if we're processing previously buffered items, which
96708 // may call the _write() callback in the same tick, so that we don't
96709 // end up in an overlapped onwrite situation.
96710 this.bufferProcessing = false;
96711
96712 // the callback that's passed to _write(chunk,cb)
96713 this.onwrite = function (er) {
96714 onwrite(stream, er);
96715 };
96716
96717 // the callback that the user supplies to write(chunk,encoding,cb)
96718 this.writecb = null;
96719
96720 // the amount that is being written when _write is called.
96721 this.writelen = 0;
96722
96723 this.bufferedRequest = null;
96724 this.lastBufferedRequest = null;
96725
96726 // number of pending user-supplied write callbacks
96727 // this must be 0 before 'finish' can be emitted
96728 this.pendingcb = 0;
96729
96730 // emit prefinish if the only thing we're waiting for is _write cbs
96731 // This is relevant for synchronous Transform streams
96732 this.prefinished = false;
96733
96734 // True if the error was already emitted and should not be thrown again
96735 this.errorEmitted = false;
96736
96737 // count buffered requests
96738 this.bufferedRequestCount = 0;
96739
96740 // allocate the first CorkedRequest, there is always
96741 // one allocated and free to use, and we maintain at most two
96742 this.corkedRequestsFree = new CorkedRequest(this);
96743 }
96744
96745 WritableState.prototype.getBuffer = function getBuffer() {
96746 var current = this.bufferedRequest;
96747 var out = [];
96748 while (current) {
96749 out.push(current);
96750 current = current.next;
96751 }
96752 return out;
96753 };
96754
96755 (function () {
96756 try {
96757 Object.defineProperty(WritableState.prototype, 'buffer', {
96758 get: internalUtil.deprecate(function () {
96759 return this.getBuffer();
96760 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
96761 });
96762 } catch (_) {}
96763 })();
96764
96765 // Test _writableState for inheritance to account for Duplex streams,
96766 // whose prototype chain only points to Readable.
96767 var realHasInstance;
96768 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
96769 realHasInstance = Function.prototype[Symbol.hasInstance];
96770 Object.defineProperty(Writable, Symbol.hasInstance, {
96771 value: function (object) {
96772 if (realHasInstance.call(this, object)) return true;
96773
96774 return object && object._writableState instanceof WritableState;
96775 }
96776 });
96777 } else {
96778 realHasInstance = function (object) {
96779 return object instanceof this;
96780 };
96781 }
96782
96783 function Writable(options) {
96784 Duplex = Duplex || require('./_stream_duplex');
96785
96786 // Writable ctor is applied to Duplexes, too.
96787 // `realHasInstance` is necessary because using plain `instanceof`
96788 // would return false, as no `_writableState` property is attached.
96789
96790 // Trying to use the custom `instanceof` for Writable here will also break the
96791 // Node.js LazyTransform implementation, which has a non-trivial getter for
96792 // `_writableState` that would lead to infinite recursion.
96793 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
96794 return new Writable(options);
96795 }
96796
96797 this._writableState = new WritableState(options, this);
96798
96799 // legacy.
96800 this.writable = true;
96801
96802 if (options) {
96803 if (typeof options.write === 'function') this._write = options.write;
96804
96805 if (typeof options.writev === 'function') this._writev = options.writev;
96806
96807 if (typeof options.destroy === 'function') this._destroy = options.destroy;
96808
96809 if (typeof options.final === 'function') this._final = options.final;
96810 }
96811
96812 Stream.call(this);
96813 }
96814
96815 // Otherwise people can pipe Writable streams, which is just wrong.
96816 Writable.prototype.pipe = function () {
96817 this.emit('error', new Error('Cannot pipe, not readable'));
96818 };
96819
96820 function writeAfterEnd(stream, cb) {
96821 var er = new Error('write after end');
96822 // TODO: defer error events consistently everywhere, not just the cb
96823 stream.emit('error', er);
96824 processNextTick(cb, er);
96825 }
96826
96827 // Checks that a user-supplied chunk is valid, especially for the particular
96828 // mode the stream is in. Currently this means that `null` is never accepted
96829 // and undefined/non-string values are only allowed in object mode.
96830 function validChunk(stream, state, chunk, cb) {
96831 var valid = true;
96832 var er = false;
96833
96834 if (chunk === null) {
96835 er = new TypeError('May not write null values to stream');
96836 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
96837 er = new TypeError('Invalid non-string/buffer chunk');
96838 }
96839 if (er) {
96840 stream.emit('error', er);
96841 processNextTick(cb, er);
96842 valid = false;
96843 }
96844 return valid;
96845 }
96846
96847 Writable.prototype.write = function (chunk, encoding, cb) {
96848 var state = this._writableState;
96849 var ret = false;
96850 var isBuf = _isUint8Array(chunk) && !state.objectMode;
96851
96852 if (isBuf && !Buffer.isBuffer(chunk)) {
96853 chunk = _uint8ArrayToBuffer(chunk);
96854 }
96855
96856 if (typeof encoding === 'function') {
96857 cb = encoding;
96858 encoding = null;
96859 }
96860
96861 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
96862
96863 if (typeof cb !== 'function') cb = nop;
96864
96865 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
96866 state.pendingcb++;
96867 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
96868 }
96869
96870 return ret;
96871 };
96872
96873 Writable.prototype.cork = function () {
96874 var state = this._writableState;
96875
96876 state.corked++;
96877 };
96878
96879 Writable.prototype.uncork = function () {
96880 var state = this._writableState;
96881
96882 if (state.corked) {
96883 state.corked--;
96884
96885 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
96886 }
96887 };
96888
96889 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
96890 // node::ParseEncoding() requires lower case.
96891 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
96892 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);
96893 this._writableState.defaultEncoding = encoding;
96894 return this;
96895 };
96896
96897 function decodeChunk(state, chunk, encoding) {
96898 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
96899 chunk = Buffer.from(chunk, encoding);
96900 }
96901 return chunk;
96902 }
96903
96904 // if we're already writing something, then just put this
96905 // in the queue, and wait our turn. Otherwise, call _write
96906 // If we return false, then we need a drain event, so set that flag.
96907 function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
96908 if (!isBuf) {
96909 var newChunk = decodeChunk(state, chunk, encoding);
96910 if (chunk !== newChunk) {
96911 isBuf = true;
96912 encoding = 'buffer';
96913 chunk = newChunk;
96914 }
96915 }
96916 var len = state.objectMode ? 1 : chunk.length;
96917
96918 state.length += len;
96919
96920 var ret = state.length < state.highWaterMark;
96921 // we must ensure that previous needDrain will not be reset to false.
96922 if (!ret) state.needDrain = true;
96923
96924 if (state.writing || state.corked) {
96925 var last = state.lastBufferedRequest;
96926 state.lastBufferedRequest = {
96927 chunk: chunk,
96928 encoding: encoding,
96929 isBuf: isBuf,
96930 callback: cb,
96931 next: null
96932 };
96933 if (last) {
96934 last.next = state.lastBufferedRequest;
96935 } else {
96936 state.bufferedRequest = state.lastBufferedRequest;
96937 }
96938 state.bufferedRequestCount += 1;
96939 } else {
96940 doWrite(stream, state, false, len, chunk, encoding, cb);
96941 }
96942
96943 return ret;
96944 }
96945
96946 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
96947 state.writelen = len;
96948 state.writecb = cb;
96949 state.writing = true;
96950 state.sync = true;
96951 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
96952 state.sync = false;
96953 }
96954
96955 function onwriteError(stream, state, sync, er, cb) {
96956 --state.pendingcb;
96957
96958 if (sync) {
96959 // defer the callback if we are being called synchronously
96960 // to avoid piling up things on the stack
96961 processNextTick(cb, er);
96962 // this can emit finish, and it will always happen
96963 // after error
96964 processNextTick(finishMaybe, stream, state);
96965 stream._writableState.errorEmitted = true;
96966 stream.emit('error', er);
96967 } else {
96968 // the caller expect this to happen before if
96969 // it is async
96970 cb(er);
96971 stream._writableState.errorEmitted = true;
96972 stream.emit('error', er);
96973 // this can emit finish, but finish must
96974 // always follow error
96975 finishMaybe(stream, state);
96976 }
96977 }
96978
96979 function onwriteStateUpdate(state) {
96980 state.writing = false;
96981 state.writecb = null;
96982 state.length -= state.writelen;
96983 state.writelen = 0;
96984 }
96985
96986 function onwrite(stream, er) {
96987 var state = stream._writableState;
96988 var sync = state.sync;
96989 var cb = state.writecb;
96990
96991 onwriteStateUpdate(state);
96992
96993 if (er) onwriteError(stream, state, sync, er, cb);else {
96994 // Check if we're actually ready to finish, but don't emit yet
96995 var finished = needFinish(state);
96996
96997 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
96998 clearBuffer(stream, state);
96999 }
97000
97001 if (sync) {
97002 /*<replacement>*/
97003 asyncWrite(afterWrite, stream, state, finished, cb);
97004 /*</replacement>*/
97005 } else {
97006 afterWrite(stream, state, finished, cb);
97007 }
97008 }
97009 }
97010
97011 function afterWrite(stream, state, finished, cb) {
97012 if (!finished) onwriteDrain(stream, state);
97013 state.pendingcb--;
97014 cb();
97015 finishMaybe(stream, state);
97016 }
97017
97018 // Must force callback to be called on nextTick, so that we don't
97019 // emit 'drain' before the write() consumer gets the 'false' return
97020 // value, and has a chance to attach a 'drain' listener.
97021 function onwriteDrain(stream, state) {
97022 if (state.length === 0 && state.needDrain) {
97023 state.needDrain = false;
97024 stream.emit('drain');
97025 }
97026 }
97027
97028 // if there's something in the buffer waiting, then process it
97029 function clearBuffer(stream, state) {
97030 state.bufferProcessing = true;
97031 var entry = state.bufferedRequest;
97032
97033 if (stream._writev && entry && entry.next) {
97034 // Fast case, write everything using _writev()
97035 var l = state.bufferedRequestCount;
97036 var buffer = new Array(l);
97037 var holder = state.corkedRequestsFree;
97038 holder.entry = entry;
97039
97040 var count = 0;
97041 var allBuffers = true;
97042 while (entry) {
97043 buffer[count] = entry;
97044 if (!entry.isBuf) allBuffers = false;
97045 entry = entry.next;
97046 count += 1;
97047 }
97048 buffer.allBuffers = allBuffers;
97049
97050 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
97051
97052 // doWrite is almost always async, defer these to save a bit of time
97053 // as the hot path ends with doWrite
97054 state.pendingcb++;
97055 state.lastBufferedRequest = null;
97056 if (holder.next) {
97057 state.corkedRequestsFree = holder.next;
97058 holder.next = null;
97059 } else {
97060 state.corkedRequestsFree = new CorkedRequest(state);
97061 }
97062 } else {
97063 // Slow case, write chunks one-by-one
97064 while (entry) {
97065 var chunk = entry.chunk;
97066 var encoding = entry.encoding;
97067 var cb = entry.callback;
97068 var len = state.objectMode ? 1 : chunk.length;
97069
97070 doWrite(stream, state, false, len, chunk, encoding, cb);
97071 entry = entry.next;
97072 // if we didn't call the onwrite immediately, then
97073 // it means that we need to wait until it does.
97074 // also, that means that the chunk and cb are currently
97075 // being processed, so move the buffer counter past them.
97076 if (state.writing) {
97077 break;
97078 }
97079 }
97080
97081 if (entry === null) state.lastBufferedRequest = null;
97082 }
97083
97084 state.bufferedRequestCount = 0;
97085 state.bufferedRequest = entry;
97086 state.bufferProcessing = false;
97087 }
97088
97089 Writable.prototype._write = function (chunk, encoding, cb) {
97090 cb(new Error('_write() is not implemented'));
97091 };
97092
97093 Writable.prototype._writev = null;
97094
97095 Writable.prototype.end = function (chunk, encoding, cb) {
97096 var state = this._writableState;
97097
97098 if (typeof chunk === 'function') {
97099 cb = chunk;
97100 chunk = null;
97101 encoding = null;
97102 } else if (typeof encoding === 'function') {
97103 cb = encoding;
97104 encoding = null;
97105 }
97106
97107 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
97108
97109 // .end() fully uncorks
97110 if (state.corked) {
97111 state.corked = 1;
97112 this.uncork();
97113 }
97114
97115 // ignore unnecessary end() calls.
97116 if (!state.ending && !state.finished) endWritable(this, state, cb);
97117 };
97118
97119 function needFinish(state) {
97120 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
97121 }
97122 function callFinal(stream, state) {
97123 stream._final(function (err) {
97124 state.pendingcb--;
97125 if (err) {
97126 stream.emit('error', err);
97127 }
97128 state.prefinished = true;
97129 stream.emit('prefinish');
97130 finishMaybe(stream, state);
97131 });
97132 }
97133 function prefinish(stream, state) {
97134 if (!state.prefinished && !state.finalCalled) {
97135 if (typeof stream._final === 'function') {
97136 state.pendingcb++;
97137 state.finalCalled = true;
97138 processNextTick(callFinal, stream, state);
97139 } else {
97140 state.prefinished = true;
97141 stream.emit('prefinish');
97142 }
97143 }
97144 }
97145
97146 function finishMaybe(stream, state) {
97147 var need = needFinish(state);
97148 if (need) {
97149 prefinish(stream, state);
97150 if (state.pendingcb === 0) {
97151 state.finished = true;
97152 stream.emit('finish');
97153 }
97154 }
97155 return need;
97156 }
97157
97158 function endWritable(stream, state, cb) {
97159 state.ending = true;
97160 finishMaybe(stream, state);
97161 if (cb) {
97162 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
97163 }
97164 state.ended = true;
97165 stream.writable = false;
97166 }
97167
97168 function onCorkedFinish(corkReq, state, err) {
97169 var entry = corkReq.entry;
97170 corkReq.entry = null;
97171 while (entry) {
97172 var cb = entry.callback;
97173 state.pendingcb--;
97174 cb(err);
97175 entry = entry.next;
97176 }
97177 if (state.corkedRequestsFree) {
97178 state.corkedRequestsFree.next = corkReq;
97179 } else {
97180 state.corkedRequestsFree = corkReq;
97181 }
97182 }
97183
97184 Object.defineProperty(Writable.prototype, 'destroyed', {
97185 get: function () {
97186 if (this._writableState === undefined) {
97187 return false;
97188 }
97189 return this._writableState.destroyed;
97190 },
97191 set: function (value) {
97192 // we ignore the value if the stream
97193 // has not been initialized yet
97194 if (!this._writableState) {
97195 return;
97196 }
97197
97198 // backward compatibility, the user is explicitly
97199 // managing destroyed
97200 this._writableState.destroyed = value;
97201 }
97202 });
97203
97204 Writable.prototype.destroy = destroyImpl.destroy;
97205 Writable.prototype._undestroy = destroyImpl.undestroy;
97206 Writable.prototype._destroy = function (err, cb) {
97207 this.end();
97208 cb(err);
97209 };
97210 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
97211 },{"./_stream_duplex":27,"./internal/streams/destroy":33,"./internal/streams/stream":34,"_process":25,"core-util-is":14,"inherits":21,"process-nextick-args":24,"safe-buffer":40,"util-deprecate":51}],32:[function(require,module,exports){
97212 'use strict';
97213
97214 /*<replacement>*/
97215
97216 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
97217
97218 var Buffer = require('safe-buffer').Buffer;
97219 /*</replacement>*/
97220
97221 function copyBuffer(src, target, offset) {
97222 src.copy(target, offset);
97223 }
97224
97225 module.exports = function () {
97226 function BufferList() {
97227 _classCallCheck(this, BufferList);
97228
97229 this.head = null;
97230 this.tail = null;
97231 this.length = 0;
97232 }
97233
97234 BufferList.prototype.push = function push(v) {
97235 var entry = { data: v, next: null };
97236 if (this.length > 0) this.tail.next = entry;else this.head = entry;
97237 this.tail = entry;
97238 ++this.length;
97239 };
97240
97241 BufferList.prototype.unshift = function unshift(v) {
97242 var entry = { data: v, next: this.head };
97243 if (this.length === 0) this.tail = entry;
97244 this.head = entry;
97245 ++this.length;
97246 };
97247
97248 BufferList.prototype.shift = function shift() {
97249 if (this.length === 0) return;
97250 var ret = this.head.data;
97251 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
97252 --this.length;
97253 return ret;
97254 };
97255
97256 BufferList.prototype.clear = function clear() {
97257 this.head = this.tail = null;
97258 this.length = 0;
97259 };
97260
97261 BufferList.prototype.join = function join(s) {
97262 if (this.length === 0) return '';
97263 var p = this.head;
97264 var ret = '' + p.data;
97265 while (p = p.next) {
97266 ret += s + p.data;
97267 }return ret;
97268 };
97269
97270 BufferList.prototype.concat = function concat(n) {
97271 if (this.length === 0) return Buffer.alloc(0);
97272 if (this.length === 1) return this.head.data;
97273 var ret = Buffer.allocUnsafe(n >>> 0);
97274 var p = this.head;
97275 var i = 0;
97276 while (p) {
97277 copyBuffer(p.data, ret, i);
97278 i += p.data.length;
97279 p = p.next;
97280 }
97281 return ret;
97282 };
97283
97284 return BufferList;
97285 }();
97286 },{"safe-buffer":40}],33:[function(require,module,exports){
97287 'use strict';
97288
97289 /*<replacement>*/
97290
97291 var processNextTick = require('process-nextick-args');
97292 /*</replacement>*/
97293
97294 // undocumented cb() API, needed for core, not for public API
97295 function destroy(err, cb) {
97296 var _this = this;
97297
97298 var readableDestroyed = this._readableState && this._readableState.destroyed;
97299 var writableDestroyed = this._writableState && this._writableState.destroyed;
97300
97301 if (readableDestroyed || writableDestroyed) {
97302 if (cb) {
97303 cb(err);
97304 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
97305 processNextTick(emitErrorNT, this, err);
97306 }
97307 return;
97308 }
97309
97310 // we set destroyed to true before firing error callbacks in order
97311 // to make it re-entrance safe in case destroy() is called within callbacks
97312
97313 if (this._readableState) {
97314 this._readableState.destroyed = true;
97315 }
97316
97317 // if this is a duplex stream mark the writable part as destroyed as well
97318 if (this._writableState) {
97319 this._writableState.destroyed = true;
97320 }
97321
97322 this._destroy(err || null, function (err) {
97323 if (!cb && err) {
97324 processNextTick(emitErrorNT, _this, err);
97325 if (_this._writableState) {
97326 _this._writableState.errorEmitted = true;
97327 }
97328 } else if (cb) {
97329 cb(err);
97330 }
97331 });
97332 }
97333
97334 function undestroy() {
97335 if (this._readableState) {
97336 this._readableState.destroyed = false;
97337 this._readableState.reading = false;
97338 this._readableState.ended = false;
97339 this._readableState.endEmitted = false;
97340 }
97341
97342 if (this._writableState) {
97343 this._writableState.destroyed = false;
97344 this._writableState.ended = false;
97345 this._writableState.ending = false;
97346 this._writableState.finished = false;
97347 this._writableState.errorEmitted = false;
97348 }
97349 }
97350
97351 function emitErrorNT(self, err) {
97352 self.emit('error', err);
97353 }
97354
97355 module.exports = {
97356 destroy: destroy,
97357 undestroy: undestroy
97358 };
97359 },{"process-nextick-args":24}],34:[function(require,module,exports){
97360 module.exports = require('events').EventEmitter;
97361
97362 },{"events":18}],35:[function(require,module,exports){
97363 module.exports = require('./readable').PassThrough
97364
97365 },{"./readable":36}],36:[function(require,module,exports){
97366 exports = module.exports = require('./lib/_stream_readable.js');
97367 exports.Stream = exports;
97368 exports.Readable = exports;
97369 exports.Writable = require('./lib/_stream_writable.js');
97370 exports.Duplex = require('./lib/_stream_duplex.js');
97371 exports.Transform = require('./lib/_stream_transform.js');
97372 exports.PassThrough = require('./lib/_stream_passthrough.js');
97373
97374 },{"./lib/_stream_duplex.js":27,"./lib/_stream_passthrough.js":28,"./lib/_stream_readable.js":29,"./lib/_stream_transform.js":30,"./lib/_stream_writable.js":31}],37:[function(require,module,exports){
97375 module.exports = require('./readable').Transform
97376
97377 },{"./readable":36}],38:[function(require,module,exports){
97378 module.exports = require('./lib/_stream_writable.js');
97379
97380 },{"./lib/_stream_writable.js":31}],39:[function(require,module,exports){
97381 (function (Buffer){
97382 'use strict'
97383 var inherits = require('inherits')
97384 var HashBase = require('hash-base')
97385
97386 function RIPEMD160 () {
97387 HashBase.call(this, 64)
97388
97389 // state
97390 this._a = 0x67452301
97391 this._b = 0xefcdab89
97392 this._c = 0x98badcfe
97393 this._d = 0x10325476
97394 this._e = 0xc3d2e1f0
97395 }
97396
97397 inherits(RIPEMD160, HashBase)
97398
97399 RIPEMD160.prototype._update = function () {
97400 var m = new Array(16)
97401 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
97402
97403 var al = this._a
97404 var bl = this._b
97405 var cl = this._c
97406 var dl = this._d
97407 var el = this._e
97408
97409 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
97410 // K = 0x00000000
97411 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
97412 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
97413 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
97414 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
97415 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
97416 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
97417 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
97418 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
97419 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
97420 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
97421 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
97422 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
97423 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
97424 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
97425 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
97426 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
97427 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
97428
97429 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
97430 // K = 0x5a827999
97431 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
97432 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
97433 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
97434 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
97435 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
97436 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
97437 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
97438 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
97439 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
97440 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
97441 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
97442 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
97443 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
97444 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
97445 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
97446 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
97447 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
97448
97449 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
97450 // K = 0x6ed9eba1
97451 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
97452 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
97453 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
97454 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
97455 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
97456 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
97457 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
97458 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
97459 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
97460 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
97461 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
97462 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
97463 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
97464 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
97465 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
97466 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
97467 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
97468
97469 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
97470 // K = 0x8f1bbcdc
97471 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
97472 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
97473 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
97474 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
97475 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
97476 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
97477 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
97478 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
97479 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
97480 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
97481 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
97482 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
97483 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
97484 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
97485 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
97486 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
97487 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
97488
97489 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
97490 // K = 0xa953fd4e
97491 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
97492 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
97493 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
97494 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
97495 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
97496 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
97497 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
97498 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
97499 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
97500 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
97501 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
97502 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
97503 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
97504 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
97505 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
97506 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
97507 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
97508
97509 var ar = this._a
97510 var br = this._b
97511 var cr = this._c
97512 var dr = this._d
97513 var er = this._e
97514
97515 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
97516 // K' = 0x50a28be6
97517 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
97518 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
97519 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
97520 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
97521 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
97522 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
97523 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
97524 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
97525 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
97526 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
97527 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
97528 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
97529 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
97530 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
97531 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
97532 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
97533 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
97534
97535 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
97536 // K' = 0x5c4dd124
97537 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
97538 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
97539 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
97540 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
97541 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
97542 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
97543 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
97544 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
97545 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
97546 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
97547 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
97548 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
97549 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
97550 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
97551 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
97552 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
97553 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
97554
97555 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
97556 // K' = 0x6d703ef3
97557 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
97558 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
97559 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
97560 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
97561 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
97562 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
97563 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
97564 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
97565 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
97566 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
97567 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
97568 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
97569 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
97570 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
97571 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
97572 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
97573 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
97574
97575 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
97576 // K' = 0x7a6d76e9
97577 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
97578 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
97579 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
97580 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
97581 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
97582 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
97583 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
97584 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
97585 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
97586 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
97587 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
97588 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
97589 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
97590 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
97591 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
97592 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
97593 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
97594
97595 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
97596 // K' = 0x00000000
97597 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
97598 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
97599 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
97600 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
97601 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
97602 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
97603 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
97604 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
97605 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
97606 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
97607 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
97608 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
97609 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
97610 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
97611 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
97612 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
97613 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
97614
97615 // change state
97616 var t = (this._b + cl + dr) | 0
97617 this._b = (this._c + dl + er) | 0
97618 this._c = (this._d + el + ar) | 0
97619 this._d = (this._e + al + br) | 0
97620 this._e = (this._a + bl + cr) | 0
97621 this._a = t
97622 }
97623
97624 RIPEMD160.prototype._digest = function () {
97625 // create padding and handle blocks
97626 this._block[this._blockOffset++] = 0x80
97627 if (this._blockOffset > 56) {
97628 this._block.fill(0, this._blockOffset, 64)
97629 this._update()
97630 this._blockOffset = 0
97631 }
97632
97633 this._block.fill(0, this._blockOffset, 56)
97634 this._block.writeUInt32LE(this._length[0], 56)
97635 this._block.writeUInt32LE(this._length[1], 60)
97636 this._update()
97637
97638 // produce result
97639 var buffer = new Buffer(20)
97640 buffer.writeInt32LE(this._a, 0)
97641 buffer.writeInt32LE(this._b, 4)
97642 buffer.writeInt32LE(this._c, 8)
97643 buffer.writeInt32LE(this._d, 12)
97644 buffer.writeInt32LE(this._e, 16)
97645 return buffer
97646 }
97647
97648 function rotl (x, n) {
97649 return (x << n) | (x >>> (32 - n))
97650 }
97651
97652 function fn1 (a, b, c, d, e, m, k, s) {
97653 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
97654 }
97655
97656 function fn2 (a, b, c, d, e, m, k, s) {
97657 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
97658 }
97659
97660 function fn3 (a, b, c, d, e, m, k, s) {
97661 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
97662 }
97663
97664 function fn4 (a, b, c, d, e, m, k, s) {
97665 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
97666 }
97667
97668 function fn5 (a, b, c, d, e, m, k, s) {
97669 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
97670 }
97671
97672 module.exports = RIPEMD160
97673
97674 }).call(this,require("buffer").Buffer)
97675 },{"buffer":8,"hash-base":19,"inherits":21}],40:[function(require,module,exports){
97676 /* eslint-disable node/no-deprecated-api */
97677 var buffer = require('buffer')
97678 var Buffer = buffer.Buffer
97679
97680 // alternative to using Object.keys for old browsers
97681 function copyProps (src, dst) {
97682 for (var key in src) {
97683 dst[key] = src[key]
97684 }
97685 }
97686 if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
97687 module.exports = buffer
97688 } else {
97689 // Copy properties from require('buffer')
97690 copyProps(buffer, exports)
97691 exports.Buffer = SafeBuffer
97692 }
97693
97694 function SafeBuffer (arg, encodingOrOffset, length) {
97695 return Buffer(arg, encodingOrOffset, length)
97696 }
97697
97698 // Copy static methods from Buffer
97699 copyProps(Buffer, SafeBuffer)
97700
97701 SafeBuffer.from = function (arg, encodingOrOffset, length) {
97702 if (typeof arg === 'number') {
97703 throw new TypeError('Argument must not be a number')
97704 }
97705 return Buffer(arg, encodingOrOffset, length)
97706 }
97707
97708 SafeBuffer.alloc = function (size, fill, encoding) {
97709 if (typeof size !== 'number') {
97710 throw new TypeError('Argument must be a number')
97711 }
97712 var buf = Buffer(size)
97713 if (fill !== undefined) {
97714 if (typeof encoding === 'string') {
97715 buf.fill(fill, encoding)
97716 } else {
97717 buf.fill(fill)
97718 }
97719 } else {
97720 buf.fill(0)
97721 }
97722 return buf
97723 }
97724
97725 SafeBuffer.allocUnsafe = function (size) {
97726 if (typeof size !== 'number') {
97727 throw new TypeError('Argument must be a number')
97728 }
97729 return Buffer(size)
97730 }
97731
97732 SafeBuffer.allocUnsafeSlow = function (size) {
97733 if (typeof size !== 'number') {
97734 throw new TypeError('Argument must be a number')
97735 }
97736 return buffer.SlowBuffer(size)
97737 }
97738
97739 },{"buffer":8}],41:[function(require,module,exports){
97740 var Buffer = require('safe-buffer').Buffer
97741
97742 // prototype class for hash functions
97743 function Hash (blockSize, finalSize) {
97744 this._block = Buffer.alloc(blockSize)
97745 this._finalSize = finalSize
97746 this._blockSize = blockSize
97747 this._len = 0
97748 }
97749
97750 Hash.prototype.update = function (data, enc) {
97751 if (typeof data === 'string') {
97752 enc = enc || 'utf8'
97753 data = Buffer.from(data, enc)
97754 }
97755
97756 var block = this._block
97757 var blockSize = this._blockSize
97758 var length = data.length
97759 var accum = this._len
97760
97761 for (var offset = 0; offset < length;) {
97762 var assigned = accum % blockSize
97763 var remainder = Math.min(length - offset, blockSize - assigned)
97764
97765 for (var i = 0; i < remainder; i++) {
97766 block[assigned + i] = data[offset + i]
97767 }
97768
97769 accum += remainder
97770 offset += remainder
97771
97772 if ((accum % blockSize) === 0) {
97773 this._update(block)
97774 }
97775 }
97776
97777 this._len += length
97778 return this
97779 }
97780
97781 Hash.prototype.digest = function (enc) {
97782 var rem = this._len % this._blockSize
97783
97784 this._block[rem] = 0x80
97785
97786 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest
97787 // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize
97788 this._block.fill(0, rem + 1)
97789
97790 if (rem >= this._finalSize) {
97791 this._update(this._block)
97792 this._block.fill(0)
97793 }
97794
97795 var bits = this._len * 8
97796
97797 // uint32
97798 if (bits <= 0xffffffff) {
97799 this._block.writeUInt32BE(bits, this._blockSize - 4)
97800
97801 // uint64
97802 } else {
97803 var lowBits = bits & 0xffffffff
97804 var highBits = (bits - lowBits) / 0x100000000
97805
97806 this._block.writeUInt32BE(highBits, this._blockSize - 8)
97807 this._block.writeUInt32BE(lowBits, this._blockSize - 4)
97808 }
97809
97810 this._update(this._block)
97811 var hash = this._hash()
97812
97813 return enc ? hash.toString(enc) : hash
97814 }
97815
97816 Hash.prototype._update = function () {
97817 throw new Error('_update must be implemented by subclass')
97818 }
97819
97820 module.exports = Hash
97821
97822 },{"safe-buffer":40}],42:[function(require,module,exports){
97823 var exports = module.exports = function SHA (algorithm) {
97824 algorithm = algorithm.toLowerCase()
97825
97826 var Algorithm = exports[algorithm]
97827 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
97828
97829 return new Algorithm()
97830 }
97831
97832 exports.sha = require('./sha')
97833 exports.sha1 = require('./sha1')
97834 exports.sha224 = require('./sha224')
97835 exports.sha256 = require('./sha256')
97836 exports.sha384 = require('./sha384')
97837 exports.sha512 = require('./sha512')
97838
97839 },{"./sha":43,"./sha1":44,"./sha224":45,"./sha256":46,"./sha384":47,"./sha512":48}],43:[function(require,module,exports){
97840 /*
97841 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
97842 * in FIPS PUB 180-1
97843 * This source code is derived from sha1.js of the same repository.
97844 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
97845 * operation was added.
97846 */
97847
97848 var inherits = require('inherits')
97849 var Hash = require('./hash')
97850 var Buffer = require('safe-buffer').Buffer
97851
97852 var K = [
97853 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97854 ]
97855
97856 var W = new Array(80)
97857
97858 function Sha () {
97859 this.init()
97860 this._w = W
97861
97862 Hash.call(this, 64, 56)
97863 }
97864
97865 inherits(Sha, Hash)
97866
97867 Sha.prototype.init = function () {
97868 this._a = 0x67452301
97869 this._b = 0xefcdab89
97870 this._c = 0x98badcfe
97871 this._d = 0x10325476
97872 this._e = 0xc3d2e1f0
97873
97874 return this
97875 }
97876
97877 function rotl5 (num) {
97878 return (num << 5) | (num >>> 27)
97879 }
97880
97881 function rotl30 (num) {
97882 return (num << 30) | (num >>> 2)
97883 }
97884
97885 function ft (s, b, c, d) {
97886 if (s === 0) return (b & c) | ((~b) & d)
97887 if (s === 2) return (b & c) | (b & d) | (c & d)
97888 return b ^ c ^ d
97889 }
97890
97891 Sha.prototype._update = function (M) {
97892 var W = this._w
97893
97894 var a = this._a | 0
97895 var b = this._b | 0
97896 var c = this._c | 0
97897 var d = this._d | 0
97898 var e = this._e | 0
97899
97900 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
97901 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
97902
97903 for (var j = 0; j < 80; ++j) {
97904 var s = ~~(j / 20)
97905 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
97906
97907 e = d
97908 d = c
97909 c = rotl30(b)
97910 b = a
97911 a = t
97912 }
97913
97914 this._a = (a + this._a) | 0
97915 this._b = (b + this._b) | 0
97916 this._c = (c + this._c) | 0
97917 this._d = (d + this._d) | 0
97918 this._e = (e + this._e) | 0
97919 }
97920
97921 Sha.prototype._hash = function () {
97922 var H = Buffer.allocUnsafe(20)
97923
97924 H.writeInt32BE(this._a | 0, 0)
97925 H.writeInt32BE(this._b | 0, 4)
97926 H.writeInt32BE(this._c | 0, 8)
97927 H.writeInt32BE(this._d | 0, 12)
97928 H.writeInt32BE(this._e | 0, 16)
97929
97930 return H
97931 }
97932
97933 module.exports = Sha
97934
97935 },{"./hash":41,"inherits":21,"safe-buffer":40}],44:[function(require,module,exports){
97936 /*
97937 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
97938 * in FIPS PUB 180-1
97939 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
97940 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
97941 * Distributed under the BSD License
97942 * See http://pajhome.org.uk/crypt/md5 for details.
97943 */
97944
97945 var inherits = require('inherits')
97946 var Hash = require('./hash')
97947 var Buffer = require('safe-buffer').Buffer
97948
97949 var K = [
97950 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
97951 ]
97952
97953 var W = new Array(80)
97954
97955 function Sha1 () {
97956 this.init()
97957 this._w = W
97958
97959 Hash.call(this, 64, 56)
97960 }
97961
97962 inherits(Sha1, Hash)
97963
97964 Sha1.prototype.init = function () {
97965 this._a = 0x67452301
97966 this._b = 0xefcdab89
97967 this._c = 0x98badcfe
97968 this._d = 0x10325476
97969 this._e = 0xc3d2e1f0
97970
97971 return this
97972 }
97973
97974 function rotl1 (num) {
97975 return (num << 1) | (num >>> 31)
97976 }
97977
97978 function rotl5 (num) {
97979 return (num << 5) | (num >>> 27)
97980 }
97981
97982 function rotl30 (num) {
97983 return (num << 30) | (num >>> 2)
97984 }
97985
97986 function ft (s, b, c, d) {
97987 if (s === 0) return (b & c) | ((~b) & d)
97988 if (s === 2) return (b & c) | (b & d) | (c & d)
97989 return b ^ c ^ d
97990 }
97991
97992 Sha1.prototype._update = function (M) {
97993 var W = this._w
97994
97995 var a = this._a | 0
97996 var b = this._b | 0
97997 var c = this._c | 0
97998 var d = this._d | 0
97999 var e = this._e | 0
98000
98001 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
98002 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
98003
98004 for (var j = 0; j < 80; ++j) {
98005 var s = ~~(j / 20)
98006 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
98007
98008 e = d
98009 d = c
98010 c = rotl30(b)
98011 b = a
98012 a = t
98013 }
98014
98015 this._a = (a + this._a) | 0
98016 this._b = (b + this._b) | 0
98017 this._c = (c + this._c) | 0
98018 this._d = (d + this._d) | 0
98019 this._e = (e + this._e) | 0
98020 }
98021
98022 Sha1.prototype._hash = function () {
98023 var H = Buffer.allocUnsafe(20)
98024
98025 H.writeInt32BE(this._a | 0, 0)
98026 H.writeInt32BE(this._b | 0, 4)
98027 H.writeInt32BE(this._c | 0, 8)
98028 H.writeInt32BE(this._d | 0, 12)
98029 H.writeInt32BE(this._e | 0, 16)
98030
98031 return H
98032 }
98033
98034 module.exports = Sha1
98035
98036 },{"./hash":41,"inherits":21,"safe-buffer":40}],45:[function(require,module,exports){
98037 /**
98038 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
98039 * in FIPS 180-2
98040 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
98041 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
98042 *
98043 */
98044
98045 var inherits = require('inherits')
98046 var Sha256 = require('./sha256')
98047 var Hash = require('./hash')
98048 var Buffer = require('safe-buffer').Buffer
98049
98050 var W = new Array(64)
98051
98052 function Sha224 () {
98053 this.init()
98054
98055 this._w = W // new Array(64)
98056
98057 Hash.call(this, 64, 56)
98058 }
98059
98060 inherits(Sha224, Sha256)
98061
98062 Sha224.prototype.init = function () {
98063 this._a = 0xc1059ed8
98064 this._b = 0x367cd507
98065 this._c = 0x3070dd17
98066 this._d = 0xf70e5939
98067 this._e = 0xffc00b31
98068 this._f = 0x68581511
98069 this._g = 0x64f98fa7
98070 this._h = 0xbefa4fa4
98071
98072 return this
98073 }
98074
98075 Sha224.prototype._hash = function () {
98076 var H = Buffer.allocUnsafe(28)
98077
98078 H.writeInt32BE(this._a, 0)
98079 H.writeInt32BE(this._b, 4)
98080 H.writeInt32BE(this._c, 8)
98081 H.writeInt32BE(this._d, 12)
98082 H.writeInt32BE(this._e, 16)
98083 H.writeInt32BE(this._f, 20)
98084 H.writeInt32BE(this._g, 24)
98085
98086 return H
98087 }
98088
98089 module.exports = Sha224
98090
98091 },{"./hash":41,"./sha256":46,"inherits":21,"safe-buffer":40}],46:[function(require,module,exports){
98092 /**
98093 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
98094 * in FIPS 180-2
98095 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
98096 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
98097 *
98098 */
98099
98100 var inherits = require('inherits')
98101 var Hash = require('./hash')
98102 var Buffer = require('safe-buffer').Buffer
98103
98104 var K = [
98105 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
98106 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
98107 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
98108 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
98109 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
98110 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
98111 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
98112 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
98113 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
98114 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
98115 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
98116 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
98117 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
98118 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
98119 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
98120 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
98121 ]
98122
98123 var W = new Array(64)
98124
98125 function Sha256 () {
98126 this.init()
98127
98128 this._w = W // new Array(64)
98129
98130 Hash.call(this, 64, 56)
98131 }
98132
98133 inherits(Sha256, Hash)
98134
98135 Sha256.prototype.init = function () {
98136 this._a = 0x6a09e667
98137 this._b = 0xbb67ae85
98138 this._c = 0x3c6ef372
98139 this._d = 0xa54ff53a
98140 this._e = 0x510e527f
98141 this._f = 0x9b05688c
98142 this._g = 0x1f83d9ab
98143 this._h = 0x5be0cd19
98144
98145 return this
98146 }
98147
98148 function ch (x, y, z) {
98149 return z ^ (x & (y ^ z))
98150 }
98151
98152 function maj (x, y, z) {
98153 return (x & y) | (z & (x | y))
98154 }
98155
98156 function sigma0 (x) {
98157 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
98158 }
98159
98160 function sigma1 (x) {
98161 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
98162 }
98163
98164 function gamma0 (x) {
98165 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
98166 }
98167
98168 function gamma1 (x) {
98169 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
98170 }
98171
98172 Sha256.prototype._update = function (M) {
98173 var W = this._w
98174
98175 var a = this._a | 0
98176 var b = this._b | 0
98177 var c = this._c | 0
98178 var d = this._d | 0
98179 var e = this._e | 0
98180 var f = this._f | 0
98181 var g = this._g | 0
98182 var h = this._h | 0
98183
98184 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
98185 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
98186
98187 for (var j = 0; j < 64; ++j) {
98188 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
98189 var T2 = (sigma0(a) + maj(a, b, c)) | 0
98190
98191 h = g
98192 g = f
98193 f = e
98194 e = (d + T1) | 0
98195 d = c
98196 c = b
98197 b = a
98198 a = (T1 + T2) | 0
98199 }
98200
98201 this._a = (a + this._a) | 0
98202 this._b = (b + this._b) | 0
98203 this._c = (c + this._c) | 0
98204 this._d = (d + this._d) | 0
98205 this._e = (e + this._e) | 0
98206 this._f = (f + this._f) | 0
98207 this._g = (g + this._g) | 0
98208 this._h = (h + this._h) | 0
98209 }
98210
98211 Sha256.prototype._hash = function () {
98212 var H = Buffer.allocUnsafe(32)
98213
98214 H.writeInt32BE(this._a, 0)
98215 H.writeInt32BE(this._b, 4)
98216 H.writeInt32BE(this._c, 8)
98217 H.writeInt32BE(this._d, 12)
98218 H.writeInt32BE(this._e, 16)
98219 H.writeInt32BE(this._f, 20)
98220 H.writeInt32BE(this._g, 24)
98221 H.writeInt32BE(this._h, 28)
98222
98223 return H
98224 }
98225
98226 module.exports = Sha256
98227
98228 },{"./hash":41,"inherits":21,"safe-buffer":40}],47:[function(require,module,exports){
98229 var inherits = require('inherits')
98230 var SHA512 = require('./sha512')
98231 var Hash = require('./hash')
98232 var Buffer = require('safe-buffer').Buffer
98233
98234 var W = new Array(160)
98235
98236 function Sha384 () {
98237 this.init()
98238 this._w = W
98239
98240 Hash.call(this, 128, 112)
98241 }
98242
98243 inherits(Sha384, SHA512)
98244
98245 Sha384.prototype.init = function () {
98246 this._ah = 0xcbbb9d5d
98247 this._bh = 0x629a292a
98248 this._ch = 0x9159015a
98249 this._dh = 0x152fecd8
98250 this._eh = 0x67332667
98251 this._fh = 0x8eb44a87
98252 this._gh = 0xdb0c2e0d
98253 this._hh = 0x47b5481d
98254
98255 this._al = 0xc1059ed8
98256 this._bl = 0x367cd507
98257 this._cl = 0x3070dd17
98258 this._dl = 0xf70e5939
98259 this._el = 0xffc00b31
98260 this._fl = 0x68581511
98261 this._gl = 0x64f98fa7
98262 this._hl = 0xbefa4fa4
98263
98264 return this
98265 }
98266
98267 Sha384.prototype._hash = function () {
98268 var H = Buffer.allocUnsafe(48)
98269
98270 function writeInt64BE (h, l, offset) {
98271 H.writeInt32BE(h, offset)
98272 H.writeInt32BE(l, offset + 4)
98273 }
98274
98275 writeInt64BE(this._ah, this._al, 0)
98276 writeInt64BE(this._bh, this._bl, 8)
98277 writeInt64BE(this._ch, this._cl, 16)
98278 writeInt64BE(this._dh, this._dl, 24)
98279 writeInt64BE(this._eh, this._el, 32)
98280 writeInt64BE(this._fh, this._fl, 40)
98281
98282 return H
98283 }
98284
98285 module.exports = Sha384
98286
98287 },{"./hash":41,"./sha512":48,"inherits":21,"safe-buffer":40}],48:[function(require,module,exports){
98288 var inherits = require('inherits')
98289 var Hash = require('./hash')
98290 var Buffer = require('safe-buffer').Buffer
98291
98292 var K = [
98293 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
98294 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
98295 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
98296 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
98297 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
98298 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
98299 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
98300 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
98301 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
98302 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
98303 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
98304 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
98305 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
98306 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
98307 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
98308 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
98309 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
98310 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
98311 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
98312 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
98313 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
98314 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
98315 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
98316 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
98317 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
98318 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
98319 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
98320 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
98321 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
98322 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
98323 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
98324 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
98325 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
98326 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
98327 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
98328 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
98329 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
98330 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
98331 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
98332 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
98333 ]
98334
98335 var W = new Array(160)
98336
98337 function Sha512 () {
98338 this.init()
98339 this._w = W
98340
98341 Hash.call(this, 128, 112)
98342 }
98343
98344 inherits(Sha512, Hash)
98345
98346 Sha512.prototype.init = function () {
98347 this._ah = 0x6a09e667
98348 this._bh = 0xbb67ae85
98349 this._ch = 0x3c6ef372
98350 this._dh = 0xa54ff53a
98351 this._eh = 0x510e527f
98352 this._fh = 0x9b05688c
98353 this._gh = 0x1f83d9ab
98354 this._hh = 0x5be0cd19
98355
98356 this._al = 0xf3bcc908
98357 this._bl = 0x84caa73b
98358 this._cl = 0xfe94f82b
98359 this._dl = 0x5f1d36f1
98360 this._el = 0xade682d1
98361 this._fl = 0x2b3e6c1f
98362 this._gl = 0xfb41bd6b
98363 this._hl = 0x137e2179
98364
98365 return this
98366 }
98367
98368 function Ch (x, y, z) {
98369 return z ^ (x & (y ^ z))
98370 }
98371
98372 function maj (x, y, z) {
98373 return (x & y) | (z & (x | y))
98374 }
98375
98376 function sigma0 (x, xl) {
98377 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
98378 }
98379
98380 function sigma1 (x, xl) {
98381 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
98382 }
98383
98384 function Gamma0 (x, xl) {
98385 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
98386 }
98387
98388 function Gamma0l (x, xl) {
98389 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
98390 }
98391
98392 function Gamma1 (x, xl) {
98393 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
98394 }
98395
98396 function Gamma1l (x, xl) {
98397 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
98398 }
98399
98400 function getCarry (a, b) {
98401 return (a >>> 0) < (b >>> 0) ? 1 : 0
98402 }
98403
98404 Sha512.prototype._update = function (M) {
98405 var W = this._w
98406
98407 var ah = this._ah | 0
98408 var bh = this._bh | 0
98409 var ch = this._ch | 0
98410 var dh = this._dh | 0
98411 var eh = this._eh | 0
98412 var fh = this._fh | 0
98413 var gh = this._gh | 0
98414 var hh = this._hh | 0
98415
98416 var al = this._al | 0
98417 var bl = this._bl | 0
98418 var cl = this._cl | 0
98419 var dl = this._dl | 0
98420 var el = this._el | 0
98421 var fl = this._fl | 0
98422 var gl = this._gl | 0
98423 var hl = this._hl | 0
98424
98425 for (var i = 0; i < 32; i += 2) {
98426 W[i] = M.readInt32BE(i * 4)
98427 W[i + 1] = M.readInt32BE(i * 4 + 4)
98428 }
98429 for (; i < 160; i += 2) {
98430 var xh = W[i - 15 * 2]
98431 var xl = W[i - 15 * 2 + 1]
98432 var gamma0 = Gamma0(xh, xl)
98433 var gamma0l = Gamma0l(xl, xh)
98434
98435 xh = W[i - 2 * 2]
98436 xl = W[i - 2 * 2 + 1]
98437 var gamma1 = Gamma1(xh, xl)
98438 var gamma1l = Gamma1l(xl, xh)
98439
98440 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
98441 var Wi7h = W[i - 7 * 2]
98442 var Wi7l = W[i - 7 * 2 + 1]
98443
98444 var Wi16h = W[i - 16 * 2]
98445 var Wi16l = W[i - 16 * 2 + 1]
98446
98447 var Wil = (gamma0l + Wi7l) | 0
98448 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
98449 Wil = (Wil + gamma1l) | 0
98450 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
98451 Wil = (Wil + Wi16l) | 0
98452 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
98453
98454 W[i] = Wih
98455 W[i + 1] = Wil
98456 }
98457
98458 for (var j = 0; j < 160; j += 2) {
98459 Wih = W[j]
98460 Wil = W[j + 1]
98461
98462 var majh = maj(ah, bh, ch)
98463 var majl = maj(al, bl, cl)
98464
98465 var sigma0h = sigma0(ah, al)
98466 var sigma0l = sigma0(al, ah)
98467 var sigma1h = sigma1(eh, el)
98468 var sigma1l = sigma1(el, eh)
98469
98470 // t1 = h + sigma1 + ch + K[j] + W[j]
98471 var Kih = K[j]
98472 var Kil = K[j + 1]
98473
98474 var chh = Ch(eh, fh, gh)
98475 var chl = Ch(el, fl, gl)
98476
98477 var t1l = (hl + sigma1l) | 0
98478 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
98479 t1l = (t1l + chl) | 0
98480 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
98481 t1l = (t1l + Kil) | 0
98482 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
98483 t1l = (t1l + Wil) | 0
98484 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
98485
98486 // t2 = sigma0 + maj
98487 var t2l = (sigma0l + majl) | 0
98488 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
98489
98490 hh = gh
98491 hl = gl
98492 gh = fh
98493 gl = fl
98494 fh = eh
98495 fl = el
98496 el = (dl + t1l) | 0
98497 eh = (dh + t1h + getCarry(el, dl)) | 0
98498 dh = ch
98499 dl = cl
98500 ch = bh
98501 cl = bl
98502 bh = ah
98503 bl = al
98504 al = (t1l + t2l) | 0
98505 ah = (t1h + t2h + getCarry(al, t1l)) | 0
98506 }
98507
98508 this._al = (this._al + al) | 0
98509 this._bl = (this._bl + bl) | 0
98510 this._cl = (this._cl + cl) | 0
98511 this._dl = (this._dl + dl) | 0
98512 this._el = (this._el + el) | 0
98513 this._fl = (this._fl + fl) | 0
98514 this._gl = (this._gl + gl) | 0
98515 this._hl = (this._hl + hl) | 0
98516
98517 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
98518 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
98519 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
98520 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
98521 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
98522 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
98523 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
98524 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
98525 }
98526
98527 Sha512.prototype._hash = function () {
98528 var H = Buffer.allocUnsafe(64)
98529
98530 function writeInt64BE (h, l, offset) {
98531 H.writeInt32BE(h, offset)
98532 H.writeInt32BE(l, offset + 4)
98533 }
98534
98535 writeInt64BE(this._ah, this._al, 0)
98536 writeInt64BE(this._bh, this._bl, 8)
98537 writeInt64BE(this._ch, this._cl, 16)
98538 writeInt64BE(this._dh, this._dl, 24)
98539 writeInt64BE(this._eh, this._el, 32)
98540 writeInt64BE(this._fh, this._fl, 40)
98541 writeInt64BE(this._gh, this._gl, 48)
98542 writeInt64BE(this._hh, this._hl, 56)
98543
98544 return H
98545 }
98546
98547 module.exports = Sha512
98548
98549 },{"./hash":41,"inherits":21,"safe-buffer":40}],49:[function(require,module,exports){
98550 // Copyright Joyent, Inc. and other Node contributors.
98551 //
98552 // Permission is hereby granted, free of charge, to any person obtaining a
98553 // copy of this software and associated documentation files (the
98554 // "Software"), to deal in the Software without restriction, including
98555 // without limitation the rights to use, copy, modify, merge, publish,
98556 // distribute, sublicense, and/or sell copies of the Software, and to permit
98557 // persons to whom the Software is furnished to do so, subject to the
98558 // following conditions:
98559 //
98560 // The above copyright notice and this permission notice shall be included
98561 // in all copies or substantial portions of the Software.
98562 //
98563 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
98564 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
98565 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
98566 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
98567 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
98568 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
98569 // USE OR OTHER DEALINGS IN THE SOFTWARE.
98570
98571 module.exports = Stream;
98572
98573 var EE = require('events').EventEmitter;
98574 var inherits = require('inherits');
98575
98576 inherits(Stream, EE);
98577 Stream.Readable = require('readable-stream/readable.js');
98578 Stream.Writable = require('readable-stream/writable.js');
98579 Stream.Duplex = require('readable-stream/duplex.js');
98580 Stream.Transform = require('readable-stream/transform.js');
98581 Stream.PassThrough = require('readable-stream/passthrough.js');
98582
98583 // Backwards-compat with node 0.4.x
98584 Stream.Stream = Stream;
98585
98586
98587
98588 // old-style streams. Note that the pipe method (the only relevant
98589 // part of this class) is overridden in the Readable class.
98590
98591 function Stream() {
98592 EE.call(this);
98593 }
98594
98595 Stream.prototype.pipe = function(dest, options) {
98596 var source = this;
98597
98598 function ondata(chunk) {
98599 if (dest.writable) {
98600 if (false === dest.write(chunk) && source.pause) {
98601 source.pause();
98602 }
98603 }
98604 }
98605
98606 source.on('data', ondata);
98607
98608 function ondrain() {
98609 if (source.readable && source.resume) {
98610 source.resume();
98611 }
98612 }
98613
98614 dest.on('drain', ondrain);
98615
98616 // If the 'end' option is not supplied, dest.end() will be called when
98617 // source gets the 'end' or 'close' events. Only dest.end() once.
98618 if (!dest._isStdio && (!options || options.end !== false)) {
98619 source.on('end', onend);
98620 source.on('close', onclose);
98621 }
98622
98623 var didOnEnd = false;
98624 function onend() {
98625 if (didOnEnd) return;
98626 didOnEnd = true;
98627
98628 dest.end();
98629 }
98630
98631
98632 function onclose() {
98633 if (didOnEnd) return;
98634 didOnEnd = true;
98635
98636 if (typeof dest.destroy === 'function') dest.destroy();
98637 }
98638
98639 // don't leave dangling pipes when there are errors.
98640 function onerror(er) {
98641 cleanup();
98642 if (EE.listenerCount(this, 'error') === 0) {
98643 throw er; // Unhandled stream error in pipe.
98644 }
98645 }
98646
98647 source.on('error', onerror);
98648 dest.on('error', onerror);
98649
98650 // remove all the event listeners that were added.
98651 function cleanup() {
98652 source.removeListener('data', ondata);
98653 dest.removeListener('drain', ondrain);
98654
98655 source.removeListener('end', onend);
98656 source.removeListener('close', onclose);
98657
98658 source.removeListener('error', onerror);
98659 dest.removeListener('error', onerror);
98660
98661 source.removeListener('end', cleanup);
98662 source.removeListener('close', cleanup);
98663
98664 dest.removeListener('close', cleanup);
98665 }
98666
98667 source.on('end', cleanup);
98668 source.on('close', cleanup);
98669
98670 dest.on('close', cleanup);
98671
98672 dest.emit('pipe', source);
98673
98674 // Allow for unix-like usage: A.pipe(B).pipe(C)
98675 return dest;
98676 };
98677
98678 },{"events":18,"inherits":21,"readable-stream/duplex.js":26,"readable-stream/passthrough.js":35,"readable-stream/readable.js":36,"readable-stream/transform.js":37,"readable-stream/writable.js":38}],50:[function(require,module,exports){
98679 'use strict';
98680
98681 var Buffer = require('safe-buffer').Buffer;
98682
98683 var isEncoding = Buffer.isEncoding || function (encoding) {
98684 encoding = '' + encoding;
98685 switch (encoding && encoding.toLowerCase()) {
98686 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':
98687 return true;
98688 default:
98689 return false;
98690 }
98691 };
98692
98693 function _normalizeEncoding(enc) {
98694 if (!enc) return 'utf8';
98695 var retried;
98696 while (true) {
98697 switch (enc) {
98698 case 'utf8':
98699 case 'utf-8':
98700 return 'utf8';
98701 case 'ucs2':
98702 case 'ucs-2':
98703 case 'utf16le':
98704 case 'utf-16le':
98705 return 'utf16le';
98706 case 'latin1':
98707 case 'binary':
98708 return 'latin1';
98709 case 'base64':
98710 case 'ascii':
98711 case 'hex':
98712 return enc;
98713 default:
98714 if (retried) return; // undefined
98715 enc = ('' + enc).toLowerCase();
98716 retried = true;
98717 }
98718 }
98719 };
98720
98721 // Do not cache `Buffer.isEncoding` when checking encoding names as some
98722 // modules monkey-patch it to support additional encodings
98723 function normalizeEncoding(enc) {
98724 var nenc = _normalizeEncoding(enc);
98725 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
98726 return nenc || enc;
98727 }
98728
98729 // StringDecoder provides an interface for efficiently splitting a series of
98730 // buffers into a series of JS strings without breaking apart multi-byte
98731 // characters.
98732 exports.StringDecoder = StringDecoder;
98733 function StringDecoder(encoding) {
98734 this.encoding = normalizeEncoding(encoding);
98735 var nb;
98736 switch (this.encoding) {
98737 case 'utf16le':
98738 this.text = utf16Text;
98739 this.end = utf16End;
98740 nb = 4;
98741 break;
98742 case 'utf8':
98743 this.fillLast = utf8FillLast;
98744 nb = 4;
98745 break;
98746 case 'base64':
98747 this.text = base64Text;
98748 this.end = base64End;
98749 nb = 3;
98750 break;
98751 default:
98752 this.write = simpleWrite;
98753 this.end = simpleEnd;
98754 return;
98755 }
98756 this.lastNeed = 0;
98757 this.lastTotal = 0;
98758 this.lastChar = Buffer.allocUnsafe(nb);
98759 }
98760
98761 StringDecoder.prototype.write = function (buf) {
98762 if (buf.length === 0) return '';
98763 var r;
98764 var i;
98765 if (this.lastNeed) {
98766 r = this.fillLast(buf);
98767 if (r === undefined) return '';
98768 i = this.lastNeed;
98769 this.lastNeed = 0;
98770 } else {
98771 i = 0;
98772 }
98773 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
98774 return r || '';
98775 };
98776
98777 StringDecoder.prototype.end = utf8End;
98778
98779 // Returns only complete characters in a Buffer
98780 StringDecoder.prototype.text = utf8Text;
98781
98782 // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
98783 StringDecoder.prototype.fillLast = function (buf) {
98784 if (this.lastNeed <= buf.length) {
98785 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
98786 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
98787 }
98788 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
98789 this.lastNeed -= buf.length;
98790 };
98791
98792 // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
98793 // continuation byte.
98794 function utf8CheckByte(byte) {
98795 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;
98796 return -1;
98797 }
98798
98799 // Checks at most 3 bytes at the end of a Buffer in order to detect an
98800 // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
98801 // needed to complete the UTF-8 character (if applicable) are returned.
98802 function utf8CheckIncomplete(self, buf, i) {
98803 var j = buf.length - 1;
98804 if (j < i) return 0;
98805 var nb = utf8CheckByte(buf[j]);
98806 if (nb >= 0) {
98807 if (nb > 0) self.lastNeed = nb - 1;
98808 return nb;
98809 }
98810 if (--j < i) return 0;
98811 nb = utf8CheckByte(buf[j]);
98812 if (nb >= 0) {
98813 if (nb > 0) self.lastNeed = nb - 2;
98814 return nb;
98815 }
98816 if (--j < i) return 0;
98817 nb = utf8CheckByte(buf[j]);
98818 if (nb >= 0) {
98819 if (nb > 0) {
98820 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
98821 }
98822 return nb;
98823 }
98824 return 0;
98825 }
98826
98827 // Validates as many continuation bytes for a multi-byte UTF-8 character as
98828 // needed or are available. If we see a non-continuation byte where we expect
98829 // one, we "replace" the validated continuation bytes we've seen so far with
98830 // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
98831 // behavior. The continuation byte check is included three times in the case
98832 // where all of the continuation bytes for a character exist in the same buffer.
98833 // It is also done this way as a slight performance increase instead of using a
98834 // loop.
98835 function utf8CheckExtraBytes(self, buf, p) {
98836 if ((buf[0] & 0xC0) !== 0x80) {
98837 self.lastNeed = 0;
98838 return '\ufffd'.repeat(p);
98839 }
98840 if (self.lastNeed > 1 && buf.length > 1) {
98841 if ((buf[1] & 0xC0) !== 0x80) {
98842 self.lastNeed = 1;
98843 return '\ufffd'.repeat(p + 1);
98844 }
98845 if (self.lastNeed > 2 && buf.length > 2) {
98846 if ((buf[2] & 0xC0) !== 0x80) {
98847 self.lastNeed = 2;
98848 return '\ufffd'.repeat(p + 2);
98849 }
98850 }
98851 }
98852 }
98853
98854 // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
98855 function utf8FillLast(buf) {
98856 var p = this.lastTotal - this.lastNeed;
98857 var r = utf8CheckExtraBytes(this, buf, p);
98858 if (r !== undefined) return r;
98859 if (this.lastNeed <= buf.length) {
98860 buf.copy(this.lastChar, p, 0, this.lastNeed);
98861 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
98862 }
98863 buf.copy(this.lastChar, p, 0, buf.length);
98864 this.lastNeed -= buf.length;
98865 }
98866
98867 // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
98868 // partial character, the character's bytes are buffered until the required
98869 // number of bytes are available.
98870 function utf8Text(buf, i) {
98871 var total = utf8CheckIncomplete(this, buf, i);
98872 if (!this.lastNeed) return buf.toString('utf8', i);
98873 this.lastTotal = total;
98874 var end = buf.length - (total - this.lastNeed);
98875 buf.copy(this.lastChar, 0, end);
98876 return buf.toString('utf8', i, end);
98877 }
98878
98879 // For UTF-8, a replacement character for each buffered byte of a (partial)
98880 // character needs to be added to the output.
98881 function utf8End(buf) {
98882 var r = buf && buf.length ? this.write(buf) : '';
98883 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
98884 return r;
98885 }
98886
98887 // UTF-16LE typically needs two bytes per character, but even if we have an even
98888 // number of bytes available, we need to check if we end on a leading/high
98889 // surrogate. In that case, we need to wait for the next two bytes in order to
98890 // decode the last character properly.
98891 function utf16Text(buf, i) {
98892 if ((buf.length - i) % 2 === 0) {
98893 var r = buf.toString('utf16le', i);
98894 if (r) {
98895 var c = r.charCodeAt(r.length - 1);
98896 if (c >= 0xD800 && c <= 0xDBFF) {
98897 this.lastNeed = 2;
98898 this.lastTotal = 4;
98899 this.lastChar[0] = buf[buf.length - 2];
98900 this.lastChar[1] = buf[buf.length - 1];
98901 return r.slice(0, -1);
98902 }
98903 }
98904 return r;
98905 }
98906 this.lastNeed = 1;
98907 this.lastTotal = 2;
98908 this.lastChar[0] = buf[buf.length - 1];
98909 return buf.toString('utf16le', i, buf.length - 1);
98910 }
98911
98912 // For UTF-16LE we do not explicitly append special replacement characters if we
98913 // end on a partial character, we simply let v8 handle that.
98914 function utf16End(buf) {
98915 var r = buf && buf.length ? this.write(buf) : '';
98916 if (this.lastNeed) {
98917 var end = this.lastTotal - this.lastNeed;
98918 return r + this.lastChar.toString('utf16le', 0, end);
98919 }
98920 return r;
98921 }
98922
98923 function base64Text(buf, i) {
98924 var n = (buf.length - i) % 3;
98925 if (n === 0) return buf.toString('base64', i);
98926 this.lastNeed = 3 - n;
98927 this.lastTotal = 3;
98928 if (n === 1) {
98929 this.lastChar[0] = buf[buf.length - 1];
98930 } else {
98931 this.lastChar[0] = buf[buf.length - 2];
98932 this.lastChar[1] = buf[buf.length - 1];
98933 }
98934 return buf.toString('base64', i, buf.length - n);
98935 }
98936
98937 function base64End(buf) {
98938 var r = buf && buf.length ? this.write(buf) : '';
98939 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
98940 return r;
98941 }
98942
98943 // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
98944 function simpleWrite(buf) {
98945 return buf.toString(this.encoding);
98946 }
98947
98948 function simpleEnd(buf) {
98949 return buf && buf.length ? this.write(buf) : '';
98950 }
98951 },{"safe-buffer":40}],51:[function(require,module,exports){
98952 (function (global){
98953
98954 /**
98955 * Module exports.
98956 */
98957
98958 module.exports = deprecate;
98959
98960 /**
98961 * Mark that a method should not be used.
98962 * Returns a modified function which warns once by default.
98963 *
98964 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
98965 *
98966 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
98967 * will throw an Error when invoked.
98968 *
98969 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
98970 * will invoke `console.trace()` instead of `console.error()`.
98971 *
98972 * @param {Function} fn - the function to deprecate
98973 * @param {String} msg - the string to print to the console when `fn` is invoked
98974 * @returns {Function} a new "deprecated" version of `fn`
98975 * @api public
98976 */
98977
98978 function deprecate (fn, msg) {
98979 if (config('noDeprecation')) {
98980 return fn;
98981 }
98982
98983 var warned = false;
98984 function deprecated() {
98985 if (!warned) {
98986 if (config('throwDeprecation')) {
98987 throw new Error(msg);
98988 } else if (config('traceDeprecation')) {
98989 console.trace(msg);
98990 } else {
98991 console.warn(msg);
98992 }
98993 warned = true;
98994 }
98995 return fn.apply(this, arguments);
98996 }
98997
98998 return deprecated;
98999 }
99000
99001 /**
99002 * Checks `localStorage` for boolean values for the given `name`.
99003 *
99004 * @param {String} name
99005 * @returns {Boolean}
99006 * @api private
99007 */
99008
99009 function config (name) {
99010 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
99011 try {
99012 if (!global.localStorage) return false;
99013 } catch (_) {
99014 return false;
99015 }
99016 var val = global.localStorage[name];
99017 if (null == val) return false;
99018 return String(val).toLowerCase() === 'true';
99019 }
99020
99021 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
99022 },{}],52:[function(require,module,exports){
99023 (function (Buffer){
99024 /***
99025 * @license
99026 * https://github.com/bitcoincashjs/bchaddr
99027 * Copyright (c) 2018 Emilio Almansi
99028 * Distributed under the MIT software license, see the accompanying
99029 * file LICENSE or http://www.opensource.org/licenses/mit-license.php.
99030 */
99031
99032 var bs58check = require('bs58check')
99033 var cashaddr = require('cashaddrjs')
99034
99035 /**
99036 * General purpose Bitcoin Cash address detection and translation.<br />
99037 * Supports all major Bitcoin Cash address formats.<br />
99038 * Currently:
99039 * <ul>
99040 * <li> Legacy format </li>
99041 * <li> Bitpay format </li>
99042 * <li> Cashaddr format </li>
99043 * </ul>
99044 * @module bchaddr
99045 */
99046
99047 /**
99048 * @static
99049 * Supported Bitcoin Cash address formats.
99050 */
99051 var Format = {}
99052 Format.Legacy = 'legacy'
99053 Format.Bitpay = 'bitpay'
99054 Format.Cashaddr = 'cashaddr'
99055
99056 /**
99057 * @static
99058 * Supported networks.
99059 */
99060 var Network = {}
99061 Network.Mainnet = 'mainnet'
99062 Network.Testnet = 'testnet'
99063
99064 /**
99065 * @static
99066 * Supported address types.
99067 */
99068 var Type = {}
99069 Type.P2PKH = 'p2pkh'
99070 Type.P2SH = 'p2sh'
99071
99072 /**
99073 * Detects what is the given address' format.
99074 * @static
99075 * @param {string} address - A valid Bitcoin Cash address in any format.
99076 * @return {string}
99077 * @throws {InvalidAddressError}
99078 */
99079 function detectAddressFormat (address) {
99080 return decodeAddress(address).format
99081 }
99082
99083 /**
99084 * Detects what is the given address' network.
99085 * @static
99086 * @param {string} address - A valid Bitcoin Cash address in any format.
99087 * @return {string}
99088 * @throws {InvalidAddressError}
99089 */
99090 function detectAddressNetwork (address) {
99091 return decodeAddress(address).network
99092 }
99093
99094 /**
99095 * Detects what is the given address' type.
99096 * @static
99097 * @param {string} address - A valid Bitcoin Cash address in any format.
99098 * @return {string}
99099 * @throws {InvalidAddressError}
99100 */
99101 function detectAddressType (address) {
99102 return decodeAddress(address).type
99103 }
99104
99105 /**
99106 * Translates the given address into legacy format.
99107 * @static
99108 * @param {string} address - A valid Bitcoin Cash address in any format.
99109 * @return {string}
99110 * @throws {InvalidAddressError}
99111 */
99112 function toLegacyAddress (address) {
99113 var decoded = decodeAddress(address)
99114 if (decoded.format === Format.Legacy) {
99115 return address
99116 }
99117 return encodeAsLegacy(decoded)
99118 }
99119
99120 /**
99121 * Translates the given address into bitpay format.
99122 * @static
99123 * @param {string} address - A valid Bitcoin Cash address in any format.
99124 * @return {string}
99125 * @throws {InvalidAddressError}
99126 */
99127 function toBitpayAddress (address) {
99128 var decoded = decodeAddress(address)
99129 if (decoded.format === Format.Bitpay) {
99130 return address
99131 }
99132 return encodeAsBitpay(decoded)
99133 }
99134
99135 /**
99136 * Translates the given address into cashaddr format.
99137 * @static
99138 * @param {string} address - A valid Bitcoin Cash address in any format.
99139 * @return {string}
99140 * @throws {InvalidAddressError}
99141 */
99142 function toCashAddress (address) {
99143 var decoded = decodeAddress(address)
99144 return encodeAsCashaddr(decoded)
99145 }
99146
99147 /**
99148 * Version byte table for base58 formats.
99149 * @private
99150 */
99151 var VERSION_BYTE = {}
99152 VERSION_BYTE[Format.Legacy] = {}
99153 VERSION_BYTE[Format.Legacy][Network.Mainnet] = {}
99154 VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2PKH] = 0
99155 VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2SH] = 5
99156 VERSION_BYTE[Format.Legacy][Network.Testnet] = {}
99157 VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2PKH] = 111
99158 VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2SH] = 196
99159 VERSION_BYTE[Format.Bitpay] = {}
99160 VERSION_BYTE[Format.Bitpay][Network.Mainnet] = {}
99161 VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2PKH] = 28
99162 VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2SH] = 40
99163 VERSION_BYTE[Format.Bitpay][Network.Testnet] = {}
99164 VERSION_BYTE[Format.Bitpay][Network.Testnet][Type.P2PKH] = 111
99165 VERSION_BYTE[Format.Bitpay][Network.Testnet][Type.P2SH] = 196
99166
99167 /**
99168 * Decodes the given address into its constituting hash, format, network and type.
99169 * @private
99170 * @param {string} address - A valid Bitcoin Cash address in any format.
99171 * @return {object}
99172 * @throws {InvalidAddressError}
99173 */
99174 function decodeAddress (address) {
99175 try {
99176 return decodeBase58Address(address)
99177 } catch (error) {
99178 }
99179 try {
99180 return decodeCashAddress(address)
99181 } catch (error) {
99182 }
99183 throw new InvalidAddressError()
99184 }
99185
99186 /**
99187 * Attempts to decode the given address assuming it is a base58 address.
99188 * @private
99189 * @param {string} address - A valid Bitcoin Cash address in any format.
99190 * @return {object}
99191 * @throws {InvalidAddressError}
99192 */
99193 function decodeBase58Address (address) {
99194 try {
99195 var payload = bs58check.decode(address)
99196 var versionByte = payload[0]
99197 var hash = Array.prototype.slice.call(payload, 1)
99198 switch (versionByte) {
99199 case VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2PKH]:
99200 return {
99201 hash: hash,
99202 format: Format.Legacy,
99203 network: Network.Mainnet,
99204 type: Type.P2PKH
99205 }
99206 case VERSION_BYTE[Format.Legacy][Network.Mainnet][Type.P2SH]:
99207 return {
99208 hash: hash,
99209 format: Format.Legacy,
99210 network: Network.Mainnet,
99211 type: Type.P2SH
99212 }
99213 case VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2PKH]:
99214 return {
99215 hash: hash,
99216 format: Format.Legacy,
99217 network: Network.Testnet,
99218 type: Type.P2PKH
99219 }
99220 case VERSION_BYTE[Format.Legacy][Network.Testnet][Type.P2SH]:
99221 return {
99222 hash: hash,
99223 format: Format.Legacy,
99224 network: Network.Testnet,
99225 type: Type.P2SH
99226 }
99227 case VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2PKH]:
99228 return {
99229 hash: hash,
99230 format: Format.Bitpay,
99231 network: Network.Mainnet,
99232 type: Type.P2PKH
99233 }
99234 case VERSION_BYTE[Format.Bitpay][Network.Mainnet][Type.P2SH]:
99235 return {
99236 hash: hash,
99237 format: Format.Bitpay,
99238 network: Network.Mainnet,
99239 type: Type.P2SH
99240 }
99241 }
99242 } catch (error) {
99243 }
99244 throw new InvalidAddressError()
99245 }
99246
99247 /**
99248 * Attempts to decode the given address assuming it is a cashaddr address.
99249 * @private
99250 * @param {string} address - A valid Bitcoin Cash address in any format.
99251 * @return {object}
99252 * @throws {InvalidAddressError}
99253 */
99254 function decodeCashAddress (address) {
99255 if (address.indexOf(':') !== -1) {
99256 try {
99257 return decodeCashAddressWithPrefix(address)
99258 } catch (error) {
99259 }
99260 } else {
99261 var prefixes = ['bitcoincash', 'bchtest', 'regtest']
99262 for (var i = 0; i < prefixes.length; ++i) {
99263 try {
99264 var prefix = prefixes[i]
99265 return decodeCashAddressWithPrefix(prefix + ':' + address)
99266 } catch (error) {
99267 }
99268 }
99269 }
99270 throw new InvalidAddressError()
99271 }
99272
99273 /**
99274 * Attempts to decode the given address assuming it is a cashaddr address with explicit prefix.
99275 * @private
99276 * @param {string} address - A valid Bitcoin Cash address in any format.
99277 * @return {object}
99278 * @throws {InvalidAddressError}
99279 */
99280 function decodeCashAddressWithPrefix (address) {
99281 try {
99282 var decoded = cashaddr.decode(address)
99283 var hash = Array.prototype.slice.call(decoded.hash, 0)
99284 var type = decoded.type === 'P2PKH' ? Type.P2PKH : Type.P2SH
99285 switch (decoded.prefix) {
99286 case 'bitcoincash':
99287 return {
99288 hash: hash,
99289 format: Format.Cashaddr,
99290 network: Network.Mainnet,
99291 type: type
99292 }
99293 case 'bchtest':
99294 case 'regtest':
99295 return {
99296 hash: hash,
99297 format: Format.Cashaddr,
99298 network: Network.Testnet,
99299 type: type
99300 }
99301 }
99302 } catch (error) {
99303 }
99304 throw new InvalidAddressError()
99305 }
99306
99307 /**
99308 * Encodes the given decoded address into legacy format.
99309 * @private
99310 * @param {object} decoded
99311 * @returns {string}
99312 */
99313 function encodeAsLegacy (decoded) {
99314 var versionByte = VERSION_BYTE[Format.Legacy][decoded.network][decoded.type]
99315 var buffer = Buffer.alloc(1 + decoded.hash.length)
99316 buffer[0] = versionByte
99317 buffer.set(decoded.hash, 1)
99318 return bs58check.encode(buffer)
99319 }
99320
99321 /**
99322 * Encodes the given decoded address into bitpay format.
99323 * @private
99324 * @param {object} decoded
99325 * @returns {string}
99326 */
99327 function encodeAsBitpay (decoded) {
99328 var versionByte = VERSION_BYTE[Format.Bitpay][decoded.network][decoded.type]
99329 var buffer = Buffer.alloc(1 + decoded.hash.length)
99330 buffer[0] = versionByte
99331 buffer.set(decoded.hash, 1)
99332 return bs58check.encode(buffer)
99333 }
99334
99335 /**
99336 * Encodes the given decoded address into cashaddr format.
99337 * @private
99338 * @param {object} decoded
99339 * @returns {string}
99340 */
99341 function encodeAsCashaddr (decoded) {
99342 var prefix = decoded.network === Network.Mainnet ? 'bitcoincash' : 'bchtest'
99343 var type = decoded.type === Type.P2PKH ? 'P2PKH' : 'P2SH'
99344 var hash = Uint8Array.from(decoded.hash)
99345 return cashaddr.encode(prefix, type, hash)
99346 }
99347
99348 /**
99349 * Returns a boolean indicating whether the address is in legacy format.
99350 * @static
99351 * @param {string} address - A valid Bitcoin Cash address in any format.
99352 * @returns {boolean}
99353 * @throws {InvalidAddressError}
99354 */
99355 function isLegacyAddress (address) {
99356 return detectAddressFormat(address) === Format.Legacy
99357 }
99358
99359 /**
99360 * Returns a boolean indicating whether the address is in bitpay format.
99361 * @static
99362 * @param {string} address - A valid Bitcoin Cash address in any format.
99363 * @returns {boolean}
99364 * @throws {InvalidAddressError}
99365 */
99366 function isBitpayAddress (address) {
99367 return detectAddressFormat(address) === Format.Bitpay
99368 }
99369
99370 /**
99371 * Returns a boolean indicating whether the address is in cashaddr format.
99372 * @static
99373 * @param {string} address - A valid Bitcoin Cash address in any format.
99374 * @returns {boolean}
99375 * @throws {InvalidAddressError}
99376 */
99377 function isCashAddress (address) {
99378 return detectAddressFormat(address) === Format.Cashaddr
99379 }
99380
99381 /**
99382 * Returns a boolean indicating whether the address is a mainnet address.
99383 * @static
99384 * @param {string} address - A valid Bitcoin Cash address in any format.
99385 * @returns {boolean}
99386 * @throws {InvalidAddressError}
99387 */
99388 function isMainnetAddress (address) {
99389 return detectAddressNetwork(address) === Network.Mainnet
99390 }
99391
99392 /**
99393 * Returns a boolean indicating whether the address is a testnet address.
99394 * @static
99395 * @param {string} address - A valid Bitcoin Cash address in any format.
99396 * @returns {boolean}
99397 * @throws {InvalidAddressError}
99398 */
99399 function isTestnetAddress (address) {
99400 return detectAddressNetwork(address) === Network.Testnet
99401 }
99402
99403 /**
99404 * Returns a boolean indicating whether the address is a p2pkh address.
99405 * @static
99406 * @param {string} address - A valid Bitcoin Cash address in any format.
99407 * @returns {boolean}
99408 * @throws {InvalidAddressError}
99409 */
99410 function isP2PKHAddress (address) {
99411 return detectAddressType(address) === Type.P2PKH
99412 }
99413
99414 /**
99415 * Returns a boolean indicating whether the address is a p2sh address.
99416 * @static
99417 * @param {string} address - A valid Bitcoin Cash address in any format.
99418 * @returns {boolean}
99419 * @throws {InvalidAddressError}
99420 */
99421 function isP2SHAddress (address) {
99422 return detectAddressType(address) === Type.P2SH
99423 }
99424
99425 /**
99426 * Error thrown when the address given as input is not a valid Bitcoin Cash address.
99427 * @constructor
99428 * InvalidAddressError
99429 */
99430 function InvalidAddressError () {
99431 var error = new Error()
99432 this.name = error.name = 'InvalidAddressError'
99433 this.message = error.message = 'Received an invalid Bitcoin Cash address as input.'
99434 this.stack = error.stack
99435 }
99436
99437 InvalidAddressError.prototype = Object.create(Error.prototype)
99438
99439 module.exports = {
99440 Format: Format,
99441 Network: Network,
99442 Type: Type,
99443 detectAddressFormat: detectAddressFormat,
99444 detectAddressNetwork: detectAddressNetwork,
99445 detectAddressType: detectAddressType,
99446 toLegacyAddress: toLegacyAddress,
99447 toBitpayAddress: toBitpayAddress,
99448 toCashAddress: toCashAddress,
99449 isLegacyAddress: isLegacyAddress,
99450 isBitpayAddress: isBitpayAddress,
99451 isCashAddress: isCashAddress,
99452 isMainnetAddress: isMainnetAddress,
99453 isTestnetAddress: isTestnetAddress,
99454 isP2PKHAddress: isP2PKHAddress,
99455 isP2SHAddress: isP2SHAddress,
99456 InvalidAddressError: InvalidAddressError
99457 }
99458
99459 }).call(this,require("buffer").Buffer)
99460 },{"bs58check":7,"buffer":8,"cashaddrjs":10}]},{},[52])(52)
99461 });</script>
99462 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
99463
99464 //// base.js
99465
99466 /** @fileOverview Javascript cryptography implementation.
99467 *
99468 * Crush to remove comments, shorten variable names and
99469 * generally reduce transmission size.
99470 *
99471 * @author Emily Stark
99472 * @author Mike Hamburg
99473 * @author Dan Boneh
99474 */
99475
99476 "use strict";
99477 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
99478 /*global document, window, escape, unescape, module, require, Uint32Array */
99479
99480 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
99481 var sjcl = {
99482 /** @namespace Symmetric ciphers. */
99483 cipher: {},
99484
99485 /** @namespace Hash functions. Right now only SHA256 is implemented. */
99486 hash: {},
99487
99488 /** @namespace Key exchange functions. Right now only SRP is implemented. */
99489 keyexchange: {},
99490
99491 /** @namespace Block cipher modes of operation. */
99492 mode: {},
99493
99494 /** @namespace Miscellaneous. HMAC and PBKDF2. */
99495 misc: {},
99496
99497 /**
99498 * @namespace Bit array encoders and decoders.
99499 *
99500 * @description
99501 * The members of this namespace are functions which translate between
99502 * SJCL's bitArrays and other objects (usually strings). Because it
99503 * isn't always clear which direction is encoding and which is decoding,
99504 * the method names are "fromBits" and "toBits".
99505 */
99506 codec: {},
99507
99508 /** @namespace Exceptions. */
99509 exception: {
99510 /** @constructor Ciphertext is corrupt. */
99511 corrupt: function(message) {
99512 this.toString = function() { return "CORRUPT: "+this.message; };
99513 this.message = message;
99514 },
99515
99516 /** @constructor Invalid parameter. */
99517 invalid: function(message) {
99518 this.toString = function() { return "INVALID: "+this.message; };
99519 this.message = message;
99520 },
99521
99522 /** @constructor Bug or missing feature in SJCL. @constructor */
99523 bug: function(message) {
99524 this.toString = function() { return "BUG: "+this.message; };
99525 this.message = message;
99526 },
99527
99528 /** @constructor Something isn't ready. */
99529 notReady: function(message) {
99530 this.toString = function() { return "NOT READY: "+this.message; };
99531 this.message = message;
99532 }
99533 }
99534 };
99535
99536 if(typeof module !== 'undefined' && module.exports){
99537 module.exports = sjcl;
99538 }
99539 if (typeof define === "function") {
99540 define([], function () {
99541 return sjcl;
99542 });
99543 }
99544
99545
99546 //// bitArray.js
99547
99548 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
99549 *
99550 * @author Emily Stark
99551 * @author Mike Hamburg
99552 * @author Dan Boneh
99553 */
99554
99555 /** @namespace Arrays of bits, encoded as arrays of Numbers.
99556 *
99557 * @description
99558 * <p>
99559 * These objects are the currency accepted by SJCL's crypto functions.
99560 * </p>
99561 *
99562 * <p>
99563 * Most of our crypto primitives operate on arrays of 4-byte words internally,
99564 * but many of them can take arguments that are not a multiple of 4 bytes.
99565 * This library encodes arrays of bits (whose size need not be a multiple of 8
99566 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
99567 * array of words, 32 bits at a time. Since the words are double-precision
99568 * floating point numbers, they fit some extra data. We use this (in a private,
99569 * possibly-changing manner) to encode the number of bits actually present
99570 * in the last word of the array.
99571 * </p>
99572 *
99573 * <p>
99574 * Because bitwise ops clear this out-of-band data, these arrays can be passed
99575 * to ciphers like AES which want arrays of words.
99576 * </p>
99577 */
99578 sjcl.bitArray = {
99579 /**
99580 * Array slices in units of bits.
99581 * @param {bitArray} a The array to slice.
99582 * @param {Number} bstart The offset to the start of the slice, in bits.
99583 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
99584 * slice until the end of the array.
99585 * @return {bitArray} The requested slice.
99586 */
99587 bitSlice: function (a, bstart, bend) {
99588 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
99589 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
99590 },
99591
99592 /**
99593 * Extract a number packed into a bit array.
99594 * @param {bitArray} a The array to slice.
99595 * @param {Number} bstart The offset to the start of the slice, in bits.
99596 * @param {Number} length The length of the number to extract.
99597 * @return {Number} The requested slice.
99598 */
99599 extract: function(a, bstart, blength) {
99600 // FIXME: this Math.floor is not necessary at all, but for some reason
99601 // seems to suppress a bug in the Chromium JIT.
99602 var x, sh = Math.floor((-bstart-blength) & 31);
99603 if ((bstart + blength - 1 ^ bstart) & -32) {
99604 // it crosses a boundary
99605 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
99606 } else {
99607 // within a single word
99608 x = a[bstart/32|0] >>> sh;
99609 }
99610 return x & ((1<<blength) - 1);
99611 },
99612
99613 /**
99614 * Concatenate two bit arrays.
99615 * @param {bitArray} a1 The first array.
99616 * @param {bitArray} a2 The second array.
99617 * @return {bitArray} The concatenation of a1 and a2.
99618 */
99619 concat: function (a1, a2) {
99620 if (a1.length === 0 || a2.length === 0) {
99621 return a1.concat(a2);
99622 }
99623
99624 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
99625 if (shift === 32) {
99626 return a1.concat(a2);
99627 } else {
99628 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
99629 }
99630 },
99631
99632 /**
99633 * Find the length of an array of bits.
99634 * @param {bitArray} a The array.
99635 * @return {Number} The length of a, in bits.
99636 */
99637 bitLength: function (a) {
99638 var l = a.length, x;
99639 if (l === 0) { return 0; }
99640 x = a[l - 1];
99641 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
99642 },
99643
99644 /**
99645 * Truncate an array.
99646 * @param {bitArray} a The array.
99647 * @param {Number} len The length to truncate to, in bits.
99648 * @return {bitArray} A new array, truncated to len bits.
99649 */
99650 clamp: function (a, len) {
99651 if (a.length * 32 < len) { return a; }
99652 a = a.slice(0, Math.ceil(len / 32));
99653 var l = a.length;
99654 len = len & 31;
99655 if (l > 0 && len) {
99656 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
99657 }
99658 return a;
99659 },
99660
99661 /**
99662 * Make a partial word for a bit array.
99663 * @param {Number} len The number of bits in the word.
99664 * @param {Number} x The bits.
99665 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
99666 * @return {Number} The partial word.
99667 */
99668 partial: function (len, x, _end) {
99669 if (len === 32) { return x; }
99670 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
99671 },
99672
99673 /**
99674 * Get the number of bits used by a partial word.
99675 * @param {Number} x The partial word.
99676 * @return {Number} The number of bits used by the partial word.
99677 */
99678 getPartial: function (x) {
99679 return Math.round(x/0x10000000000) || 32;
99680 },
99681
99682 /**
99683 * Compare two arrays for equality in a predictable amount of time.
99684 * @param {bitArray} a The first array.
99685 * @param {bitArray} b The second array.
99686 * @return {boolean} true if a == b; false otherwise.
99687 */
99688 equal: function (a, b) {
99689 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
99690 return false;
99691 }
99692 var x = 0, i;
99693 for (i=0; i<a.length; i++) {
99694 x |= a[i]^b[i];
99695 }
99696 return (x === 0);
99697 },
99698
99699 /** Shift an array right.
99700 * @param {bitArray} a The array to shift.
99701 * @param {Number} shift The number of bits to shift.
99702 * @param {Number} [carry=0] A byte to carry in
99703 * @param {bitArray} [out=[]] An array to prepend to the output.
99704 * @private
99705 */
99706 _shiftRight: function (a, shift, carry, out) {
99707 var i, last2=0, shift2;
99708 if (out === undefined) { out = []; }
99709
99710 for (; shift >= 32; shift -= 32) {
99711 out.push(carry);
99712 carry = 0;
99713 }
99714 if (shift === 0) {
99715 return out.concat(a);
99716 }
99717
99718 for (i=0; i<a.length; i++) {
99719 out.push(carry | a[i]>>>shift);
99720 carry = a[i] << (32-shift);
99721 }
99722 last2 = a.length ? a[a.length-1] : 0;
99723 shift2 = sjcl.bitArray.getPartial(last2);
99724 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
99725 return out;
99726 },
99727
99728 /** xor a block of 4 words together.
99729 * @private
99730 */
99731 _xor4: function(x,y) {
99732 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
99733 },
99734
99735 /** byteswap a word array inplace.
99736 * (does not handle partial words)
99737 * @param {sjcl.bitArray} a word array
99738 * @return {sjcl.bitArray} byteswapped array
99739 */
99740 byteswapM: function(a) {
99741 var i, v, m = 0xff00;
99742 for (i = 0; i < a.length; ++i) {
99743 v = a[i];
99744 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
99745 }
99746 return a;
99747 }
99748 };
99749
99750
99751 //// codecString.js
99752
99753 /** @fileOverview Bit array codec implementations.
99754 *
99755 * @author Emily Stark
99756 * @author Mike Hamburg
99757 * @author Dan Boneh
99758 */
99759
99760 /** @namespace UTF-8 strings */
99761 sjcl.codec.utf8String = {
99762 /** Convert from a bitArray to a UTF-8 string. */
99763 fromBits: function (arr) {
99764 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
99765 for (i=0; i<bl/8; i++) {
99766 if ((i&3) === 0) {
99767 tmp = arr[i/4];
99768 }
99769 out += String.fromCharCode(tmp >>> 24);
99770 tmp <<= 8;
99771 }
99772 return decodeURIComponent(escape(out));
99773 },
99774
99775 /** Convert from a UTF-8 string to a bitArray. */
99776 toBits: function (str) {
99777 str = unescape(encodeURIComponent(str));
99778 var out = [], i, tmp=0;
99779 for (i=0; i<str.length; i++) {
99780 tmp = tmp << 8 | str.charCodeAt(i);
99781 if ((i&3) === 3) {
99782 out.push(tmp);
99783 tmp = 0;
99784 }
99785 }
99786 if (i&3) {
99787 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
99788 }
99789 return out;
99790 }
99791 };
99792
99793
99794 //// codecHex.js
99795
99796 /** @fileOverview Bit array codec implementations.
99797 *
99798 * @author Emily Stark
99799 * @author Mike Hamburg
99800 * @author Dan Boneh
99801 */
99802
99803 /** @namespace Hexadecimal */
99804 sjcl.codec.hex = {
99805 /** Convert from a bitArray to a hex string. */
99806 fromBits: function (arr) {
99807 var out = "", i;
99808 for (i=0; i<arr.length; i++) {
99809 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
99810 }
99811 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
99812 },
99813 /** Convert from a hex string to a bitArray. */
99814 toBits: function (str) {
99815 var i, out=[], len;
99816 str = str.replace(/\s|0x/g, "");
99817 len = str.length;
99818 str = str + "00000000";
99819 for (i=0; i<str.length; i+=8) {
99820 out.push(parseInt(str.substr(i,8),16)^0);
99821 }
99822 return sjcl.bitArray.clamp(out, len*4);
99823 }
99824 };
99825
99826
99827 //// sha512.js
99828
99829 /** @fileOverview Javascript SHA-512 implementation.
99830 *
99831 * This implementation was written for CryptoJS by Jeff Mott and adapted for
99832 * SJCL by Stefan Thomas.
99833 *
99834 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
99835 * Released with New BSD License
99836 *
99837 * @author Emily Stark
99838 * @author Mike Hamburg
99839 * @author Dan Boneh
99840 * @author Jeff Mott
99841 * @author Stefan Thomas
99842 */
99843
99844 /**
99845 * Context for a SHA-512 operation in progress.
99846 * @constructor
99847 * @class Secure Hash Algorithm, 512 bits.
99848 */
99849 sjcl.hash.sha512 = function (hash) {
99850 if (!this._key[0]) { this._precompute(); }
99851 if (hash) {
99852 this._h = hash._h.slice(0);
99853 this._buffer = hash._buffer.slice(0);
99854 this._length = hash._length;
99855 } else {
99856 this.reset();
99857 }
99858 };
99859
99860 /**
99861 * Hash a string or an array of words.
99862 * @static
99863 * @param {bitArray|String} data the data to hash.
99864 * @return {bitArray} The hash value, an array of 16 big-endian words.
99865 */
99866 sjcl.hash.sha512.hash = function (data) {
99867 return (new sjcl.hash.sha512()).update(data).finalize();
99868 };
99869
99870 sjcl.hash.sha512.prototype = {
99871 /**
99872 * The hash's block size, in bits.
99873 * @constant
99874 */
99875 blockSize: 1024,
99876
99877 /**
99878 * Reset the hash state.
99879 * @return this
99880 */
99881 reset:function () {
99882 this._h = this._init.slice(0);
99883 this._buffer = [];
99884 this._length = 0;
99885 return this;
99886 },
99887
99888 /**
99889 * Input several words to the hash.
99890 * @param {bitArray|String} data the data to hash.
99891 * @return this
99892 */
99893 update: function (data) {
99894 if (typeof data === "string") {
99895 data = sjcl.codec.utf8String.toBits(data);
99896 }
99897 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
99898 ol = this._length,
99899 nl = this._length = ol + sjcl.bitArray.bitLength(data);
99900 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
99901 this._block(b.splice(0,32));
99902 }
99903 return this;
99904 },
99905
99906 /**
99907 * Complete hashing and output the hash value.
99908 * @return {bitArray} The hash value, an array of 16 big-endian words.
99909 */
99910 finalize:function () {
99911 var i, b = this._buffer, h = this._h;
99912
99913 // Round out and push the buffer
99914 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
99915
99916 // Round out the buffer to a multiple of 32 words, less the 4 length words.
99917 for (i = b.length + 4; i & 31; i++) {
99918 b.push(0);
99919 }
99920
99921 // append the length
99922 b.push(0);
99923 b.push(0);
99924 b.push(Math.floor(this._length / 0x100000000));
99925 b.push(this._length | 0);
99926
99927 while (b.length) {
99928 this._block(b.splice(0,32));
99929 }
99930
99931 this.reset();
99932 return h;
99933 },
99934
99935 /**
99936 * The SHA-512 initialization vector, to be precomputed.
99937 * @private
99938 */
99939 _init:[],
99940
99941 /**
99942 * Least significant 24 bits of SHA512 initialization values.
99943 *
99944 * Javascript only has 53 bits of precision, so we compute the 40 most
99945 * significant bits and add the remaining 24 bits as constants.
99946 *
99947 * @private
99948 */
99949 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
99950
99951 /*
99952 _init:
99953 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
99954 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
99955 */
99956
99957 /**
99958 * The SHA-512 hash key, to be precomputed.
99959 * @private
99960 */
99961 _key:[],
99962
99963 /**
99964 * Least significant 24 bits of SHA512 key values.
99965 * @private
99966 */
99967 _keyr:
99968 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
99969 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
99970 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
99971 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
99972 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
99973 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
99974 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
99975 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
99976 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
99977 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
99978
99979 /*
99980 _key:
99981 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
99982 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
99983 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
99984 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
99985 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
99986 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
99987 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
99988 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
99989 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
99990 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
99991 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
99992 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
99993 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
99994 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
99995 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
99996 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
99997 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
99998 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
99999 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
100000 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
100001 */
100002
100003 /**
100004 * Function to precompute _init and _key.
100005 * @private
100006 */
100007 _precompute: function () {
100008 // XXX: This code is for precomputing the SHA256 constants, change for
100009 // SHA512 and re-enable.
100010 var i = 0, prime = 2, factor;
100011
100012 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
100013 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
100014
100015 outer: for (; i<80; prime++) {
100016 for (factor=2; factor*factor <= prime; factor++) {
100017 if (prime % factor === 0) {
100018 // not a prime
100019 continue outer;
100020 }
100021 }
100022
100023 if (i<8) {
100024 this._init[i*2] = frac(Math.pow(prime, 1/2));
100025 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
100026 }
100027 this._key[i*2] = frac(Math.pow(prime, 1/3));
100028 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
100029 i++;
100030 }
100031 },
100032
100033 /**
100034 * Perform one cycle of SHA-512.
100035 * @param {bitArray} words one block of words.
100036 * @private
100037 */
100038 _block:function (words) {
100039 var i, wrh, wrl,
100040 w = words.slice(0),
100041 h = this._h,
100042 k = this._key,
100043 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
100044 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
100045 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
100046 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
100047
100048 // Working variables
100049 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
100050 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
100051 eh = h4h, el = h4l, fh = h5h, fl = h5l,
100052 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
100053
100054 for (i=0; i<80; i++) {
100055 // load up the input word for this round
100056 if (i<16) {
100057 wrh = w[i * 2];
100058 wrl = w[i * 2 + 1];
100059 } else {
100060 // Gamma0
100061 var gamma0xh = w[(i-15) * 2];
100062 var gamma0xl = w[(i-15) * 2 + 1];
100063 var gamma0h =
100064 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
100065 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
100066 (gamma0xh >>> 7);
100067 var gamma0l =
100068 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
100069 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
100070 ((gamma0xh << 25) | (gamma0xl >>> 7));
100071
100072 // Gamma1
100073 var gamma1xh = w[(i-2) * 2];
100074 var gamma1xl = w[(i-2) * 2 + 1];
100075 var gamma1h =
100076 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
100077 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
100078 (gamma1xh >>> 6);
100079 var gamma1l =
100080 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
100081 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
100082 ((gamma1xh << 26) | (gamma1xl >>> 6));
100083
100084 // Shortcuts
100085 var wr7h = w[(i-7) * 2];
100086 var wr7l = w[(i-7) * 2 + 1];
100087
100088 var wr16h = w[(i-16) * 2];
100089 var wr16l = w[(i-16) * 2 + 1];
100090
100091 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
100092 wrl = gamma0l + wr7l;
100093 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
100094 wrl += gamma1l;
100095 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
100096 wrl += wr16l;
100097 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
100098 }
100099
100100 w[i*2] = wrh |= 0;
100101 w[i*2 + 1] = wrl |= 0;
100102
100103 // Ch
100104 var chh = (eh & fh) ^ (~eh & gh);
100105 var chl = (el & fl) ^ (~el & gl);
100106
100107 // Maj
100108 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
100109 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
100110
100111 // Sigma0
100112 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
100113 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
100114
100115 // Sigma1
100116 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
100117 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
100118
100119 // K(round)
100120 var krh = k[i*2];
100121 var krl = k[i*2+1];
100122
100123 // t1 = h + sigma1 + ch + K(round) + W(round)
100124 var t1l = hl + sigma1l;
100125 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
100126 t1l += chl;
100127 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
100128 t1l += krl;
100129 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
100130 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
100131 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
100132
100133 // t2 = sigma0 + maj
100134 var t2l = sigma0l + majl;
100135 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
100136
100137 // Update working variables
100138 hh = gh;
100139 hl = gl;
100140 gh = fh;
100141 gl = fl;
100142 fh = eh;
100143 fl = el;
100144 el = (dl + t1l) | 0;
100145 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
100146 dh = ch;
100147 dl = cl;
100148 ch = bh;
100149 cl = bl;
100150 bh = ah;
100151 bl = al;
100152 al = (t1l + t2l) | 0;
100153 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
100154 }
100155
100156 // Intermediate hash
100157 h0l = h[1] = (h0l + al) | 0;
100158 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
100159 h1l = h[3] = (h1l + bl) | 0;
100160 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
100161 h2l = h[5] = (h2l + cl) | 0;
100162 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
100163 h3l = h[7] = (h3l + dl) | 0;
100164 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
100165 h4l = h[9] = (h4l + el) | 0;
100166 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
100167 h5l = h[11] = (h5l + fl) | 0;
100168 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
100169 h6l = h[13] = (h6l + gl) | 0;
100170 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
100171 h7l = h[15] = (h7l + hl) | 0;
100172 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
100173 }
100174 };
100175
100176
100177 //// hmac.js
100178
100179 /** @fileOverview HMAC implementation.
100180 *
100181 * @author Emily Stark
100182 * @author Mike Hamburg
100183 * @author Dan Boneh
100184 */
100185
100186 /** HMAC with the specified hash function.
100187 * @constructor
100188 * @param {bitArray} key the key for HMAC.
100189 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
100190 */
100191 sjcl.misc.hmac = function (key, Hash) {
100192 this._hash = Hash = Hash || sjcl.hash.sha256;
100193 var exKey = [[],[]], i,
100194 bs = Hash.prototype.blockSize / 32;
100195 this._baseHash = [new Hash(), new Hash()];
100196
100197 if (key.length > bs) {
100198 key = Hash.hash(key);
100199 }
100200
100201 for (i=0; i<bs; i++) {
100202 exKey[0][i] = key[i]^0x36363636;
100203 exKey[1][i] = key[i]^0x5C5C5C5C;
100204 }
100205
100206 this._baseHash[0].update(exKey[0]);
100207 this._baseHash[1].update(exKey[1]);
100208 this._resultHash = new Hash(this._baseHash[0]);
100209 };
100210
100211 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
100212 * @param {bitArray|String} data The data to mac.
100213 */
100214 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
100215 if (!this._updated) {
100216 this.update(data);
100217 return this.digest(data);
100218 } else {
100219 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
100220 }
100221 };
100222
100223 sjcl.misc.hmac.prototype.reset = function () {
100224 this._resultHash = new this._hash(this._baseHash[0]);
100225 this._updated = false;
100226 };
100227
100228 sjcl.misc.hmac.prototype.update = function (data) {
100229 this._updated = true;
100230 this._resultHash.update(data);
100231 };
100232
100233 sjcl.misc.hmac.prototype.digest = function () {
100234 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
100235
100236 this.reset();
100237
100238 return result;
100239 };
100240
100241
100242 //// pbkdf2.js
100243
100244
100245 /** @fileOverview Password-based key-derivation function, version 2.0.
100246 *
100247 * @author Emily Stark
100248 * @author Mike Hamburg
100249 * @author Dan Boneh
100250 */
100251
100252 /** Password-Based Key-Derivation Function, version 2.0.
100253 *
100254 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
100255 *
100256 * This is the method specified by RSA's PKCS #5 standard.
100257 *
100258 * @param {bitArray|String} password The password.
100259 * @param {bitArray|String} salt The salt. Should have lots of entropy.
100260 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
100261 * @param {Number} [length] The length of the derived key. Defaults to the
100262 output size of the hash function.
100263 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
100264 * @return {bitArray} the derived key.
100265 */
100266 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
100267 count = count || 1000;
100268
100269 if (length < 0 || count < 0) {
100270 throw sjcl.exception.invalid("invalid params to pbkdf2");
100271 }
100272
100273 if (typeof password === "string") {
100274 password = sjcl.codec.utf8String.toBits(password);
100275 }
100276
100277 if (typeof salt === "string") {
100278 salt = sjcl.codec.utf8String.toBits(salt);
100279 }
100280
100281 Prff = Prff || sjcl.misc.hmac;
100282
100283 var prf = new Prff(password),
100284 u, ui, i, j, k, out = [], b = sjcl.bitArray;
100285
100286 for (k = 1; 32 * out.length < (length || 1); k++) {
100287 u = ui = prf.encrypt(b.concat(salt,[k]));
100288
100289 for (i=1; i<count; i++) {
100290 ui = prf.encrypt(ui);
100291 for (j=0; j<ui.length; j++) {
100292 u[j] ^= ui[j];
100293 }
100294 }
100295
100296 out = out.concat(u);
100297 }
100298
100299 if (length) { out = b.clamp(out, length); }
100300
100301 return out;
100302 };
100303
100304
100305 //// sha256.js
100306
100307 /** @fileOverview Javascript SHA-256 implementation.
100308 *
100309 * An older version of this implementation is available in the public
100310 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
100311 * Stanford University 2008-2010 and BSD-licensed for liability
100312 * reasons.
100313 *
100314 * Special thanks to Aldo Cortesi for pointing out several bugs in
100315 * this code.
100316 *
100317 * @author Emily Stark
100318 * @author Mike Hamburg
100319 * @author Dan Boneh
100320 */
100321
100322 /**
100323 * Context for a SHA-256 operation in progress.
100324 * @constructor
100325 * @class Secure Hash Algorithm, 256 bits.
100326 */
100327 sjcl.hash.sha256 = function (hash) {
100328 if (!this._key[0]) { this._precompute(); }
100329 if (hash) {
100330 this._h = hash._h.slice(0);
100331 this._buffer = hash._buffer.slice(0);
100332 this._length = hash._length;
100333 } else {
100334 this.reset();
100335 }
100336 };
100337
100338 /**
100339 * Hash a string or an array of words.
100340 * @static
100341 * @param {bitArray|String} data the data to hash.
100342 * @return {bitArray} The hash value, an array of 16 big-endian words.
100343 */
100344 sjcl.hash.sha256.hash = function (data) {
100345 return (new sjcl.hash.sha256()).update(data).finalize();
100346 };
100347
100348 sjcl.hash.sha256.prototype = {
100349 /**
100350 * The hash's block size, in bits.
100351 * @constant
100352 */
100353 blockSize: 512,
100354
100355 /**
100356 * Reset the hash state.
100357 * @return this
100358 */
100359 reset:function () {
100360 this._h = this._init.slice(0);
100361 this._buffer = [];
100362 this._length = 0;
100363 return this;
100364 },
100365
100366 /**
100367 * Input several words to the hash.
100368 * @param {bitArray|String} data the data to hash.
100369 * @return this
100370 */
100371 update: function (data) {
100372 if (typeof data === "string") {
100373 data = sjcl.codec.utf8String.toBits(data);
100374 }
100375 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
100376 ol = this._length,
100377 nl = this._length = ol + sjcl.bitArray.bitLength(data);
100378 for (i = 512+ol & -512; i <= nl; i+= 512) {
100379 this._block(b.splice(0,16));
100380 }
100381 return this;
100382 },
100383
100384 /**
100385 * Complete hashing and output the hash value.
100386 * @return {bitArray} The hash value, an array of 8 big-endian words.
100387 */
100388 finalize:function () {
100389 var i, b = this._buffer, h = this._h;
100390
100391 // Round out and push the buffer
100392 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
100393
100394 // Round out the buffer to a multiple of 16 words, less the 2 length words.
100395 for (i = b.length + 2; i & 15; i++) {
100396 b.push(0);
100397 }
100398
100399 // append the length
100400 b.push(Math.floor(this._length / 0x100000000));
100401 b.push(this._length | 0);
100402
100403 while (b.length) {
100404 this._block(b.splice(0,16));
100405 }
100406
100407 this.reset();
100408 return h;
100409 },
100410
100411 /**
100412 * The SHA-256 initialization vector, to be precomputed.
100413 * @private
100414 */
100415 _init:[],
100416 /*
100417 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
100418 */
100419
100420 /**
100421 * The SHA-256 hash key, to be precomputed.
100422 * @private
100423 */
100424 _key:[],
100425 /*
100426 _key:
100427 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
100428 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
100429 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
100430 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
100431 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
100432 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
100433 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
100434 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
100435 */
100436
100437
100438 /**
100439 * Function to precompute _init and _key.
100440 * @private
100441 */
100442 _precompute: function () {
100443 var i = 0, prime = 2, factor;
100444
100445 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
100446
100447 outer: for (; i<64; prime++) {
100448 for (factor=2; factor*factor <= prime; factor++) {
100449 if (prime % factor === 0) {
100450 // not a prime
100451 continue outer;
100452 }
100453 }
100454
100455 if (i<8) {
100456 this._init[i] = frac(Math.pow(prime, 1/2));
100457 }
100458 this._key[i] = frac(Math.pow(prime, 1/3));
100459 i++;
100460 }
100461 },
100462
100463 /**
100464 * Perform one cycle of SHA-256.
100465 * @param {bitArray} words one block of words.
100466 * @private
100467 */
100468 _block:function (words) {
100469 var i, tmp, a, b,
100470 w = words.slice(0),
100471 h = this._h,
100472 k = this._key,
100473 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
100474 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
100475
100476 /* Rationale for placement of |0 :
100477 * If a value can overflow is original 32 bits by a factor of more than a few
100478 * million (2^23 ish), there is a possibility that it might overflow the
100479 * 53-bit mantissa and lose precision.
100480 *
100481 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
100482 * propagates around the loop, and on the hash state h[]. I don't believe
100483 * that the clamps on h4 and on h0 are strictly necessary, but it's close
100484 * (for h4 anyway), and better safe than sorry.
100485 *
100486 * The clamps on h[] are necessary for the output to be correct even in the
100487 * common case and for short inputs.
100488 */
100489 for (i=0; i<64; i++) {
100490 // load up the input word for this round
100491 if (i<16) {
100492 tmp = w[i];
100493 } else {
100494 a = w[(i+1 ) & 15];
100495 b = w[(i+14) & 15];
100496 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
100497 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
100498 w[i&15] + w[(i+9) & 15]) | 0;
100499 }
100500
100501 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
100502
100503 // shift register
100504 h7 = h6; h6 = h5; h5 = h4;
100505 h4 = h3 + tmp | 0;
100506 h3 = h2; h2 = h1; h1 = h0;
100507
100508 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
100509 }
100510
100511 h[0] = h[0]+h0 | 0;
100512 h[1] = h[1]+h1 | 0;
100513 h[2] = h[2]+h2 | 0;
100514 h[3] = h[3]+h3 | 0;
100515 h[4] = h[4]+h4 | 0;
100516 h[5] = h[5]+h5 | 0;
100517 h[6] = h[6]+h6 | 0;
100518 h[7] = h[7]+h7 | 0;
100519 }
100520 };
100521 </script>
100522 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100523 WORDLISTS["english"] = [
100524 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
100525 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
100526 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
100527 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
100528 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
100529 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
100530 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
100531 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
100532 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
100533 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
100534 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
100535 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
100536 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
100537 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
100538 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
100539 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
100540 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
100541 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
100542 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
100543 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
100544 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
100545 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
100546 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
100547 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
100548 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
100549 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
100550 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
100551 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
100552 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
100553 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
100554 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
100555 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
100556 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
100557 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
100558 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
100559 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
100560 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
100561 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
100562 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
100563 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
100564 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
100565 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
100566 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
100567 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
100568 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
100569 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
100570 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
100571 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
100572 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
100573 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
100574 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
100575 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
100576 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
100577 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
100578 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
100579 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
100580 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
100581 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
100582 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
100583 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
100584 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
100585 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
100586 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
100587 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
100588 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
100589 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
100590 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
100591 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
100592 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
100593 "film","filter","final","find","fine","finger","finish","fire","firm","first",
100594 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
100595 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
100596 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
100597 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
100598 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
100599 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
100600 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
100601 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
100602 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
100603 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
100604 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
100605 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
100606 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
100607 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
100608 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
100609 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
100610 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
100611 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
100612 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
100613 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
100614 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
100615 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
100616 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
100617 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
100618 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
100619 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
100620 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
100621 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
100622 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
100623 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
100624 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
100625 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
100626 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
100627 "liar","liberty","library","license","life","lift","light","like","limb","limit",
100628 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
100629 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
100630 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
100631 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
100632 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
100633 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
100634 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
100635 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
100636 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
100637 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
100638 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
100639 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
100640 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
100641 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
100642 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
100643 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
100644 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
100645 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
100646 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
100647 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
100648 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
100649 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
100650 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
100651 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
100652 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
100653 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
100654 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
100655 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
100656 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
100657 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
100658 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
100659 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
100660 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
100661 "prize","problem","process","produce","profit","program","project","promote","proof","property",
100662 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
100663 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
100664 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
100665 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
100666 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
100667 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
100668 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
100669 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
100670 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
100671 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
100672 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
100673 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
100674 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
100675 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
100676 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
100677 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
100678 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
100679 "scrub","sea","search","season","seat","second","secret","section","security","seed",
100680 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
100681 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
100682 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
100683 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
100684 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
100685 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
100686 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
100687 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
100688 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
100689 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
100690 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
100691 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
100692 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
100693 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
100694 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
100695 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
100696 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
100697 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
100698 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
100699 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
100700 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
100701 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
100702 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
100703 "thank","that","theme","then","theory","there","they","thing","this","thought",
100704 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
100705 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
100706 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
100707 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
100708 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
100709 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
100710 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
100711 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
100712 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
100713 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
100714 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
100715 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
100716 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
100717 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
100718 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
100719 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
100720 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
100721 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
100722 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
100723 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
100724 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
100725 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
100726 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
100727 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
100728 "yellow","you","young","youth","zebra","zero","zone","zoo"]
100729 </script>
100730 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100731 WORDLISTS["japanese"] = [
100732 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
100733 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
100734 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
100735 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
100736 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
100737 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
100738 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
100739 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
100740 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
100741 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
100742 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
100743 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
100744 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
100745 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
100746 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
100747 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
100748 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
100749 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
100750 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
100751 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
100752 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
100753 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
100754 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
100755 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
100756 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
100757 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
100758 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
100759 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
100760 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
100761 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
100762 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
100763 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
100764 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
100765 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
100766 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
100767 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
100768 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
100769 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
100770 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
100771 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
100772 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
100773 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
100774 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
100775 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
100776 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
100777 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
100778 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
100779 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
100780 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
100781 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
100782 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
100783 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
100784 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
100785 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
100786 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
100787 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
100788 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
100789 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
100790 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
100791 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
100792 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
100793 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
100794 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
100795 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
100796 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
100797 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
100798 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
100799 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
100800 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
100801 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
100802 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
100803 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
100804 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
100805 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
100806 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
100807 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
100808 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
100809 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
100810 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
100811 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
100812 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
100813 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
100814 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
100815 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
100816 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
100817 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
100818 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
100819 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
100820 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
100821 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
100822 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
100823 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
100824 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
100825 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
100826 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
100827 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
100828 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
100829 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
100830 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
100831 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
100832 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
100833 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
100834 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
100835 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
100836 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
100837 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
100838 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
100839 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
100840 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
100841 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
100842 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
100843 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
100844 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
100845 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
100846 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
100847 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
100848 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
100849 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
100850 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
100851 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
100852 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
100853 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
100854 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
100855 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
100856 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
100857 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
100858 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
100859 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
100860 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
100861 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
100862 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
100863 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
100864 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
100865 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
100866 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
100867 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
100868 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
100869 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
100870 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
100871 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
100872 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
100873 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
100874 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
100875 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
100876 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
100877 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
100878 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
100879 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
100880 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
100881 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
100882 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
100883 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
100884 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
100885 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
100886 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
100887 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
100888 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
100889 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
100890 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
100891 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
100892 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
100893 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
100894 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
100895 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
100896 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
100897 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
100898 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
100899 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
100900 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
100901 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
100902 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
100903 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
100904 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
100905 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
100906 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
100907 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
100908 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
100909 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
100910 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
100911 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
100912 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
100913 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
100914 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
100915 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
100916 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
100917 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
100918 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
100919 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
100920 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
100921 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
100922 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
100923 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
100924 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
100925 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
100926 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
100927 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
100928 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
100929 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
100930 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
100931 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
100932 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
100933 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
100934 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
100935 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
100936 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
100937 </script>
100938 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
100939 WORDLISTS["spanish"] = [
100940 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
100941 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
100942 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
100943 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
100944 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
100945 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
100946 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
100947 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
100948 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
100949 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
100950 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
100951 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
100952 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
100953 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
100954 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
100955 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
100956 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
100957 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
100958 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
100959 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
100960 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
100961 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
100962 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
100963 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
100964 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
100965 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
100966 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
100967 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
100968 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
100969 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
100970 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
100971 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
100972 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
100973 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
100974 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
100975 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
100976 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
100977 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
100978 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
100979 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
100980 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
100981 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
100982 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
100983 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
100984 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
100985 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
100986 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
100987 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
100988 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
100989 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
100990 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
100991 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
100992 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
100993 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
100994 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
100995 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
100996 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
100997 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
100998 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
100999 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
101000 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
101001 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
101002 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
101003 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
101004 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
101005 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
101006 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
101007 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
101008 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
101009 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
101010 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
101011 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
101012 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
101013 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
101014 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
101015 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
101016 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
101017 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
101018 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
101019 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
101020 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
101021 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
101022 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
101023 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
101024 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
101025 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
101026 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
101027 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
101028 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
101029 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
101030 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
101031 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
101032 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
101033 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
101034 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
101035 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
101036 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
101037 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
101038 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
101039 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
101040 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
101041 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
101042 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
101043 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
101044 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
101045 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
101046 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
101047 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
101048 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
101049 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
101050 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
101051 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
101052 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
101053 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
101054 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
101055 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
101056 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
101057 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
101058 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
101059 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
101060 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
101061 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
101062 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
101063 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
101064 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
101065 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
101066 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
101067 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
101068 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
101069 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
101070 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
101071 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
101072 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
101073 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
101074 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
101075 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
101076 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
101077 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
101078 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
101079 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
101080 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
101081 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
101082 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
101083 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
101084 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
101085 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
101086 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
101087 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
101088 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
101089 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
101090 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
101091 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
101092 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
101093 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
101094 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
101095 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
101096 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
101097 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
101098 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
101099 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
101100 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
101101 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
101102 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
101103 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
101104 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
101105 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
101106 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
101107 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
101108 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
101109 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
101110 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
101111 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
101112 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
101113 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
101114 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
101115 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
101116 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
101117 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
101118 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
101119 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
101120 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
101121 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
101122 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
101123 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
101124 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
101125 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
101126 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
101127 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
101128 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
101129 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
101130 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
101131 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
101132 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
101133 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
101134 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
101135 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
101136 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
101137 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
101138 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
101139 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
101140 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
101141 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
101142 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
101143 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
101144 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
101145 </script>
101146 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101147 WORDLISTS["chinese_simplified"] = [
101148 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
101149 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
101150 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
101151 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
101152 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
101153 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
101154 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
101155 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
101156 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
101157 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
101158 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
101159 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
101160 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
101161 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
101162 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
101163 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
101164 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
101165 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
101166 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
101167 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
101168 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
101169 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
101170 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
101171 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
101172 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
101173 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
101174 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
101175 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
101176 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
101177 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
101178 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
101179 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
101180 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
101181 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
101182 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
101183 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
101184 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
101185 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
101186 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
101187 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
101188 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
101189 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
101190 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
101191 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
101192 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
101193 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
101194 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
101195 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
101196 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
101197 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
101198 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
101199 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
101200 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
101201 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
101202 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
101203 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
101204 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
101205 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
101206 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
101207 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
101208 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
101209 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
101210 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
101211 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
101212 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
101213 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
101214 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
101215 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
101216 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
101217 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
101218 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
101219 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
101220 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
101221 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
101222 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
101223 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
101224 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
101225 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
101226 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
101227 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
101228 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
101229 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
101230 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
101231 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
101232 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
101233 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
101234 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
101235 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
101236 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
101237 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
101238 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
101239 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
101240 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
101241 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
101242 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
101243 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
101244 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
101245 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
101246 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
101247 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
101248 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
101249 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
101250 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
101251 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
101252 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
101253 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
101254 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
101255 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
101256 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
101257 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
101258 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
101259 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
101260 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
101261 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
101262 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
101263 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
101264 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
101265 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
101266 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
101267 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
101268 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
101269 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
101270 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
101271 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
101272 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
101273 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
101274 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
101275 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
101276 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
101277 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
101278 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
101279 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
101280 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
101281 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
101282 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
101283 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
101284 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
101285 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
101286 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
101287 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
101288 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
101289 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
101290 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
101291 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
101292 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
101293 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
101294 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
101295 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
101296 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
101297 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
101298 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
101299 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
101300 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
101301 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
101302 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
101303 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
101304 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
101305 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
101306 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
101307 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
101308 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
101309 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
101310 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
101311 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
101312 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
101313 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
101314 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
101315 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
101316 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
101317 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
101318 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
101319 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
101320 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
101321 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
101322 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
101323 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
101324 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
101325 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
101326 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
101327 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
101328 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
101329 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
101330 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
101331 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
101332 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
101333 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
101334 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
101335 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
101336 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
101337 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
101338 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
101339 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
101340 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
101341 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
101342 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
101343 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
101344 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
101345 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
101346 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
101347 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
101348 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
101349 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
101350 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
101351 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
101352 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
101353 </script>
101354 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101355 WORDLISTS["chinese_traditional"] = [
101356 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
101357 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
101358 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
101359 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
101360 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
101361 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
101362 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
101363 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
101364 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
101365 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
101366 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
101367 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
101368 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
101369 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
101370 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
101371 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
101372 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
101373 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
101374 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
101375 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
101376 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
101377 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
101378 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
101379 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
101380 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
101381 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
101382 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
101383 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
101384 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
101385 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
101386 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
101387 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
101388 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
101389 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
101390 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
101391 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
101392 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
101393 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
101394 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
101395 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
101396 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
101397 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
101398 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
101399 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
101400 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
101401 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
101402 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
101403 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
101404 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
101405 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
101406 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
101407 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
101408 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
101409 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
101410 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
101411 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
101412 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
101413 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
101414 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
101415 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
101416 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
101417 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
101418 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
101419 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
101420 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
101421 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
101422 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
101423 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
101424 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
101425 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
101426 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
101427 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
101428 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
101429 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
101430 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
101431 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
101432 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
101433 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
101434 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
101435 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
101436 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
101437 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
101438 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
101439 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
101440 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
101441 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
101442 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
101443 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
101444 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
101445 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
101446 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
101447 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
101448 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
101449 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
101450 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
101451 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
101452 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
101453 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
101454 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
101455 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
101456 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
101457 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
101458 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
101459 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
101460 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
101461 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
101462 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
101463 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
101464 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
101465 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
101466 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
101467 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
101468 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
101469 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
101470 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
101471 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
101472 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
101473 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
101474 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
101475 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
101476 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
101477 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
101478 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
101479 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
101480 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
101481 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
101482 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
101483 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
101484 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
101485 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
101486 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
101487 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
101488 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
101489 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
101490 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
101491 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
101492 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
101493 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
101494 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
101495 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
101496 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
101497 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
101498 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
101499 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
101500 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
101501 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
101502 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
101503 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
101504 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
101505 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
101506 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
101507 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
101508 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
101509 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
101510 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
101511 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
101512 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
101513 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
101514 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
101515 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
101516 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
101517 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
101518 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
101519 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
101520 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
101521 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
101522 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
101523 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
101524 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
101525 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
101526 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
101527 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
101528 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
101529 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
101530 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
101531 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
101532 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
101533 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
101534 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
101535 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
101536 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
101537 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
101538 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
101539 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
101540 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
101541 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
101542 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
101543 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
101544 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
101545 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
101546 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
101547 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
101548 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
101549 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
101550 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
101551 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
101552 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
101553 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
101554 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
101555 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
101556 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
101557 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
101558 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
101559 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
101560 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
101561 </script>
101562 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101563 WORDLISTS["french"] = [
101564 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
101565 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
101566 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
101567 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
101568 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
101569 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
101570 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
101571 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
101572 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
101573 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
101574 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
101575 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
101576 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
101577 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
101578 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
101579 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
101580 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
101581 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
101582 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
101583 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
101584 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
101585 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
101586 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
101587 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
101588 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
101589 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
101590 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
101591 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
101592 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
101593 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
101594 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
101595 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
101596 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
101597 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
101598 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
101599 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
101600 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
101601 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
101602 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
101603 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
101604 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
101605 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
101606 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
101607 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
101608 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
101609 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
101610 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
101611 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
101612 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
101613 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
101614 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
101615 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
101616 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
101617 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
101618 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
101619 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
101620 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
101621 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
101622 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
101623 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
101624 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
101625 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
101626 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
101627 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
101628 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
101629 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
101630 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
101631 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
101632 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
101633 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
101634 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
101635 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
101636 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
101637 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
101638 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
101639 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
101640 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
101641 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
101642 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
101643 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
101644 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
101645 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
101646 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
101647 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
101648 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
101649 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
101650 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
101651 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
101652 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
101653 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
101654 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
101655 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
101656 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
101657 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
101658 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
101659 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
101660 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
101661 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
101662 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
101663 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
101664 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
101665 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
101666 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
101667 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
101668 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
101669 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
101670 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
101671 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
101672 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
101673 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
101674 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
101675 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
101676 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
101677 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
101678 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
101679 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
101680 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
101681 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
101682 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
101683 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
101684 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
101685 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
101686 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
101687 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
101688 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
101689 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
101690 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
101691 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
101692 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
101693 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
101694 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
101695 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
101696 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
101697 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
101698 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
101699 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
101700 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
101701 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
101702 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
101703 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
101704 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
101705 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
101706 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
101707 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
101708 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
101709 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
101710 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
101711 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
101712 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
101713 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
101714 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
101715 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
101716 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
101717 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
101718 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
101719 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
101720 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
101721 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
101722 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
101723 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
101724 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
101725 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
101726 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
101727 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
101728 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
101729 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
101730 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
101731 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
101732 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
101733 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
101734 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
101735 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
101736 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
101737 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
101738 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
101739 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
101740 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
101741 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
101742 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
101743 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
101744 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
101745 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
101746 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
101747 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
101748 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
101749 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
101750 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
101751 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
101752 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
101753 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
101754 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
101755 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
101756 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
101757 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
101758 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
101759 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
101760 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
101761 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
101762 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
101763 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
101764 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
101765 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
101766 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
101767 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
101768 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
101769 </script>
101770 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101771 WORDLISTS["italian"] = [
101772 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
101773 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
101774 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
101775 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
101776 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
101777 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
101778 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
101779 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
101780 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
101781 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
101782 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
101783 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
101784 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
101785 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
101786 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
101787 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
101788 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
101789 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
101790 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
101791 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
101792 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
101793 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
101794 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
101795 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
101796 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
101797 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
101798 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
101799 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
101800 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
101801 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
101802 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
101803 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
101804 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
101805 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
101806 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
101807 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
101808 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
101809 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
101810 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
101811 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
101812 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
101813 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
101814 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
101815 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
101816 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
101817 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
101818 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
101819 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
101820 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
101821 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
101822 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
101823 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
101824 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
101825 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
101826 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
101827 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
101828 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
101829 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
101830 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
101831 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
101832 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
101833 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
101834 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
101835 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
101836 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
101837 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
101838 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
101839 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
101840 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
101841 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
101842 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
101843 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
101844 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
101845 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
101846 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
101847 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
101848 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
101849 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
101850 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
101851 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
101852 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
101853 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
101854 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
101855 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
101856 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
101857 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
101858 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
101859 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
101860 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
101861 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
101862 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
101863 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
101864 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
101865 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
101866 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
101867 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
101868 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
101869 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
101870 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
101871 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
101872 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
101873 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
101874 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
101875 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
101876 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
101877 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
101878 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
101879 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
101880 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
101881 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
101882 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
101883 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
101884 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
101885 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
101886 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
101887 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
101888 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
101889 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
101890 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
101891 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
101892 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
101893 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
101894 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
101895 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
101896 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
101897 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
101898 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
101899 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
101900 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
101901 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
101902 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
101903 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
101904 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
101905 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
101906 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
101907 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
101908 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
101909 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
101910 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
101911 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
101912 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
101913 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
101914 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
101915 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
101916 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
101917 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
101918 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
101919 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
101920 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
101921 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
101922 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
101923 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
101924 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
101925 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
101926 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
101927 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
101928 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
101929 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
101930 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
101931 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
101932 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
101933 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
101934 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
101935 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
101936 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
101937 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
101938 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
101939 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
101940 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
101941 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
101942 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
101943 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
101944 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
101945 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
101946 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
101947 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
101948 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
101949 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
101950 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
101951 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
101952 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
101953 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
101954 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
101955 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
101956 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
101957 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
101958 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
101959 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
101960 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
101961 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
101962 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
101963 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
101964 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
101965 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
101966 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
101967 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
101968 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
101969 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
101970 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
101971 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
101972 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
101973 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
101974 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
101975 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
101976 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
101977 </script>
101978 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
101979 WORDLISTS["korean"] = [
101980 "가격",
101981 "가끔",
101982 "가난",
101983 "가능",
101984 "가득",
101985 "가르침",
101986 "가뭄",
101987 "가방",
101988 "가상",
101989 "가슴",
101990 "가운데",
101991 "가을",
101992 "가이드",
101993 "가입",
101994 "가장",
101995 "가정",
101996 "가족",
101997 "가죽",
101998 "각오",
101999 "각자",
102000 "간격",
102001 "간부",
102002 "간섭",
102003 "간장",
102004 "간접",
102005 "간판",
102006 "갈등",
102007 "갈비",
102008 "갈색",
102009 "갈증",
102010 "감각",
102011 "감기",
102012 "감소",
102013 "감수성",
102014 "감자",
102015 "감정",
102016 "갑자기",
102017 "강남",
102018 "강당",
102019 "강도",
102020 "강력히",
102021 "강변",
102022 "강북",
102023 "강사",
102024 "강수량",
102025 "강아지",
102026 "강원도",
102027 "강의",
102028 "강제",
102029 "강조",
102030 "같이",
102031 "개구리",
102032 "개나리",
102033 "개방",
102034 "개별",
102035 "개선",
102036 "개성",
102037 "개인",
102038 "객관적",
102039 "거실",
102040 "거액",
102041 "거울",
102042 "거짓",
102043 "거품",
102044 "걱정",
102045 "건강",
102046 "건물",
102047 "건설",
102048 "건조",
102049 "건축",
102050 "걸음",
102051 "검사",
102052 "검토",
102053 "게시판",
102054 "게임",
102055 "겨울",
102056 "견해",
102057 "결과",
102058 "결국",
102059 "결론",
102060 "결석",
102061 "결승",
102062 "결심",
102063 "결정",
102064 "결혼",
102065 "경계",
102066 "경고",
102067 "경기",
102068 "경력",
102069 "경복궁",
102070 "경비",
102071 "경상도",
102072 "경영",
102073 "경우",
102074 "경쟁",
102075 "경제",
102076 "경주",
102077 "경찰",
102078 "경치",
102079 "경향",
102080 "경험",
102081 "계곡",
102082 "계단",
102083 "계란",
102084 "계산",
102085 "계속",
102086 "계약",
102087 "계절",
102088 "계층",
102089 "계획",
102090 "고객",
102091 "고구려",
102092 "고궁",
102093 "고급",
102094 "고등학생",
102095 "고무신",
102096 "고민",
102097 "고양이",
102098 "고장",
102099 "고전",
102100 "고집",
102101 "고춧가루",
102102 "고통",
102103 "고향",
102104 "곡식",
102105 "골목",
102106 "골짜기",
102107 "골프",
102108 "공간",
102109 "공개",
102110 "공격",
102111 "공군",
102112 "공급",
102113 "공기",
102114 "공동",
102115 "공무원",
102116 "공부",
102117 "공사",
102118 "공식",
102119 "공업",
102120 "공연",
102121 "공원",
102122 "공장",
102123 "공짜",
102124 "공책",
102125 "공통",
102126 "공포",
102127 "공항",
102128 "공휴일",
102129 "과목",
102130 "과일",
102131 "과장",
102132 "과정",
102133 "과학",
102134 "관객",
102135 "관계",
102136 "관광",
102137 "관념",
102138 "관람",
102139 "관련",
102140 "관리",
102141 "관습",
102142 "관심",
102143 "관점",
102144 "관찰",
102145 "광경",
102146 "광고",
102147 "광장",
102148 "광주",
102149 "괴로움",
102150 "굉장히",
102151 "교과서",
102152 "교문",
102153 "교복",
102154 "교실",
102155 "교양",
102156 "교육",
102157 "교장",
102158 "교직",
102159 "교통",
102160 "교환",
102161 "교훈",
102162 "구경",
102163 "구름",
102164 "구멍",
102165 "구별",
102166 "구분",
102167 "구석",
102168 "구성",
102169 "구속",
102170 "구역",
102171 "구입",
102172 "구청",
102173 "구체적",
102174 "국가",
102175 "국기",
102176 "국내",
102177 "국립",
102178 "국물",
102179 "국민",
102180 "국수",
102181 "국어",
102182 "국왕",
102183 "국적",
102184 "국제",
102185 "국회",
102186 "군대",
102187 "군사",
102188 "군인",
102189 "궁극적",
102190 "권리",
102191 "권위",
102192 "권투",
102193 "귀국",
102194 "귀신",
102195 "규정",
102196 "규칙",
102197 "균형",
102198 "그날",
102199 "그냥",
102200 "그늘",
102201 "그러나",
102202 "그룹",
102203 "그릇",
102204 "그림",
102205 "그제서야",
102206 "그토록",
102207 "극복",
102208 "극히",
102209 "근거",
102210 "근교",
102211 "근래",
102212 "근로",
102213 "근무",
102214 "근본",
102215 "근원",
102216 "근육",
102217 "근처",
102218 "글씨",
102219 "글자",
102220 "금강산",
102221 "금고",
102222 "금년",
102223 "금메달",
102224 "금액",
102225 "금연",
102226 "금요일",
102227 "금지",
102228 "긍정적",
102229 "기간",
102230 "기관",
102231 "기념",
102232 "기능",
102233 "기독교",
102234 "기둥",
102235 "기록",
102236 "기름",
102237 "기법",
102238 "기본",
102239 "기분",
102240 "기쁨",
102241 "기숙사",
102242 "기술",
102243 "기억",
102244 "기업",
102245 "기온",
102246 "기운",
102247 "기원",
102248 "기적",
102249 "기준",
102250 "기침",
102251 "기혼",
102252 "기획",
102253 "긴급",
102254 "긴장",
102255 "길이",
102256 "김밥",
102257 "김치",
102258 "김포공항",
102259 "깍두기",
102260 "깜빡",
102261 "깨달음",
102262 "깨소금",
102263 "껍질",
102264 "꼭대기",
102265 "꽃잎",
102266 "나들이",
102267 "나란히",
102268 "나머지",
102269 "나물",
102270 "나침반",
102271 "나흘",
102272 "낙엽",
102273 "난방",
102274 "날개",
102275 "날씨",
102276 "날짜",
102277 "남녀",
102278 "남대문",
102279 "남매",
102280 "남산",
102281 "남자",
102282 "남편",
102283 "남학생",
102284 "낭비",
102285 "낱말",
102286 "내년",
102287 "내용",
102288 "내일",
102289 "냄비",
102290 "냄새",
102291 "냇물",
102292 "냉동",
102293 "냉면",
102294 "냉방",
102295 "냉장고",
102296 "넥타이",
102297 "넷째",
102298 "노동",
102299 "노란색",
102300 "노력",
102301 "노인",
102302 "녹음",
102303 "녹차",
102304 "녹화",
102305 "논리",
102306 "논문",
102307 "논쟁",
102308 "놀이",
102309 "농구",
102310 "농담",
102311 "농민",
102312 "농부",
102313 "농업",
102314 "농장",
102315 "농촌",
102316 "높이",
102317 "눈동자",
102318 "눈물",
102319 "눈썹",
102320 "뉴욕",
102321 "느낌",
102322 "늑대",
102323 "능동적",
102324 "능력",
102325 "다방",
102326 "다양성",
102327 "다음",
102328 "다이어트",
102329 "다행",
102330 "단계",
102331 "단골",
102332 "단독",
102333 "단맛",
102334 "단순",
102335 "단어",
102336 "단위",
102337 "단점",
102338 "단체",
102339 "단추",
102340 "단편",
102341 "단풍",
102342 "달걀",
102343 "달러",
102344 "달력",
102345 "달리",
102346 "닭고기",
102347 "담당",
102348 "담배",
102349 "담요",
102350 "담임",
102351 "답변",
102352 "답장",
102353 "당근",
102354 "당분간",
102355 "당연히",
102356 "당장",
102357 "대규모",
102358 "대낮",
102359 "대단히",
102360 "대답",
102361 "대도시",
102362 "대략",
102363 "대량",
102364 "대륙",
102365 "대문",
102366 "대부분",
102367 "대신",
102368 "대응",
102369 "대장",
102370 "대전",
102371 "대접",
102372 "대중",
102373 "대책",
102374 "대출",
102375 "대충",
102376 "대통령",
102377 "대학",
102378 "대한민국",
102379 "대합실",
102380 "대형",
102381 "덩어리",
102382 "데이트",
102383 "도대체",
102384 "도덕",
102385 "도둑",
102386 "도망",
102387 "도서관",
102388 "도심",
102389 "도움",
102390 "도입",
102391 "도자기",
102392 "도저히",
102393 "도전",
102394 "도중",
102395 "도착",
102396 "독감",
102397 "독립",
102398 "독서",
102399 "독일",
102400 "독창적",
102401 "동화책",
102402 "뒷모습",
102403 "뒷산",
102404 "딸아이",
102405 "마누라",
102406 "마늘",
102407 "마당",
102408 "마라톤",
102409 "마련",
102410 "마무리",
102411 "마사지",
102412 "마약",
102413 "마요네즈",
102414 "마을",
102415 "마음",
102416 "마이크",
102417 "마중",
102418 "마지막",
102419 "마찬가지",
102420 "마찰",
102421 "마흔",
102422 "막걸리",
102423 "막내",
102424 "막상",
102425 "만남",
102426 "만두",
102427 "만세",
102428 "만약",
102429 "만일",
102430 "만점",
102431 "만족",
102432 "만화",
102433 "많이",
102434 "말기",
102435 "말씀",
102436 "말투",
102437 "맘대로",
102438 "망원경",
102439 "매년",
102440 "매달",
102441 "매력",
102442 "매번",
102443 "매스컴",
102444 "매일",
102445 "매장",
102446 "맥주",
102447 "먹이",
102448 "먼저",
102449 "먼지",
102450 "멀리",
102451 "메일",
102452 "며느리",
102453 "며칠",
102454 "면담",
102455 "멸치",
102456 "명단",
102457 "명령",
102458 "명예",
102459 "명의",
102460 "명절",
102461 "명칭",
102462 "명함",
102463 "모금",
102464 "모니터",
102465 "모델",
102466 "모든",
102467 "모범",
102468 "모습",
102469 "모양",
102470 "모임",
102471 "모조리",
102472 "모집",
102473 "모퉁이",
102474 "목걸이",
102475 "목록",
102476 "목사",
102477 "목소리",
102478 "목숨",
102479 "목적",
102480 "목표",
102481 "몰래",
102482 "몸매",
102483 "몸무게",
102484 "몸살",
102485 "몸속",
102486 "몸짓",
102487 "몸통",
102488 "몹시",
102489 "무관심",
102490 "무궁화",
102491 "무더위",
102492 "무덤",
102493 "무릎",
102494 "무슨",
102495 "무엇",
102496 "무역",
102497 "무용",
102498 "무조건",
102499 "무지개",
102500 "무척",
102501 "문구",
102502 "문득",
102503 "문법",
102504 "문서",
102505 "문제",
102506 "문학",
102507 "문화",
102508 "물가",
102509 "물건",
102510 "물결",
102511 "물고기",
102512 "물론",
102513 "물리학",
102514 "물음",
102515 "물질",
102516 "물체",
102517 "미국",
102518 "미디어",
102519 "미사일",
102520 "미술",
102521 "미역",
102522 "미용실",
102523 "미움",
102524 "미인",
102525 "미팅",
102526 "미혼",
102527 "민간",
102528 "민족",
102529 "민주",
102530 "믿음",
102531 "밀가루",
102532 "밀리미터",
102533 "밑바닥",
102534 "바가지",
102535 "바구니",
102536 "바나나",
102537 "바늘",
102538 "바닥",
102539 "바닷가",
102540 "바람",
102541 "바이러스",
102542 "바탕",
102543 "박물관",
102544 "박사",
102545 "박수",
102546 "반대",
102547 "반드시",
102548 "반말",
102549 "반발",
102550 "반성",
102551 "반응",
102552 "반장",
102553 "반죽",
102554 "반지",
102555 "반찬",
102556 "받침",
102557 "발가락",
102558 "발걸음",
102559 "발견",
102560 "발달",
102561 "발레",
102562 "발목",
102563 "발바닥",
102564 "발생",
102565 "발음",
102566 "발자국",
102567 "발전",
102568 "발톱",
102569 "발표",
102570 "밤하늘",
102571 "밥그릇",
102572 "밥맛",
102573 "밥상",
102574 "밥솥",
102575 "방금",
102576 "방면",
102577 "방문",
102578 "방바닥",
102579 "방법",
102580 "방송",
102581 "방식",
102582 "방안",
102583 "방울",
102584 "방지",
102585 "방학",
102586 "방해",
102587 "방향",
102588 "배경",
102589 "배꼽",
102590 "배달",
102591 "배드민턴",
102592 "백두산",
102593 "백색",
102594 "백성",
102595 "백인",
102596 "백제",
102597 "백화점",
102598 "버릇",
102599 "버섯",
102600 "버튼",
102601 "번개",
102602 "번역",
102603 "번지",
102604 "번호",
102605 "벌금",
102606 "벌레",
102607 "벌써",
102608 "범위",
102609 "범인",
102610 "범죄",
102611 "법률",
102612 "법원",
102613 "법적",
102614 "법칙",
102615 "베이징",
102616 "벨트",
102617 "변경",
102618 "변동",
102619 "변명",
102620 "변신",
102621 "변호사",
102622 "변화",
102623 "별도",
102624 "별명",
102625 "별일",
102626 "병실",
102627 "병아리",
102628 "병원",
102629 "보관",
102630 "보너스",
102631 "보라색",
102632 "보람",
102633 "보름",
102634 "보상",
102635 "보안",
102636 "보자기",
102637 "보장",
102638 "보전",
102639 "보존",
102640 "보통",
102641 "보편적",
102642 "보험",
102643 "복도",
102644 "복사",
102645 "복숭아",
102646 "복습",
102647 "볶음",
102648 "본격적",
102649 "본래",
102650 "본부",
102651 "본사",
102652 "본성",
102653 "본인",
102654 "본질",
102655 "볼펜",
102656 "봉사",
102657 "봉지",
102658 "봉투",
102659 "부근",
102660 "부끄러움",
102661 "부담",
102662 "부동산",
102663 "부문",
102664 "부분",
102665 "부산",
102666 "부상",
102667 "부엌",
102668 "부인",
102669 "부작용",
102670 "부장",
102671 "부정",
102672 "부족",
102673 "부지런히",
102674 "부친",
102675 "부탁",
102676 "부품",
102677 "부회장",
102678 "북부",
102679 "북한",
102680 "분노",
102681 "분량",
102682 "분리",
102683 "분명",
102684 "분석",
102685 "분야",
102686 "분위기",
102687 "분필",
102688 "분홍색",
102689 "불고기",
102690 "불과",
102691 "불교",
102692 "불꽃",
102693 "불만",
102694 "불법",
102695 "불빛",
102696 "불안",
102697 "불이익",
102698 "불행",
102699 "브랜드",
102700 "비극",
102701 "비난",
102702 "비닐",
102703 "비둘기",
102704 "비디오",
102705 "비로소",
102706 "비만",
102707 "비명",
102708 "비밀",
102709 "비바람",
102710 "비빔밥",
102711 "비상",
102712 "비용",
102713 "비율",
102714 "비중",
102715 "비타민",
102716 "비판",
102717 "빌딩",
102718 "빗물",
102719 "빗방울",
102720 "빗줄기",
102721 "빛깔",
102722 "빨간색",
102723 "빨래",
102724 "빨리",
102725 "사건",
102726 "사계절",
102727 "사나이",
102728 "사냥",
102729 "사람",
102730 "사랑",
102731 "사립",
102732 "사모님",
102733 "사물",
102734 "사방",
102735 "사상",
102736 "사생활",
102737 "사설",
102738 "사슴",
102739 "사실",
102740 "사업",
102741 "사용",
102742 "사월",
102743 "사장",
102744 "사전",
102745 "사진",
102746 "사촌",
102747 "사춘기",
102748 "사탕",
102749 "사투리",
102750 "사흘",
102751 "산길",
102752 "산부인과",
102753 "산업",
102754 "산책",
102755 "살림",
102756 "살인",
102757 "살짝",
102758 "삼계탕",
102759 "삼국",
102760 "삼십",
102761 "삼월",
102762 "삼촌",
102763 "상관",
102764 "상금",
102765 "상대",
102766 "상류",
102767 "상반기",
102768 "상상",
102769 "상식",
102770 "상업",
102771 "상인",
102772 "상자",
102773 "상점",
102774 "상처",
102775 "상추",
102776 "상태",
102777 "상표",
102778 "상품",
102779 "상황",
102780 "새벽",
102781 "색깔",
102782 "색연필",
102783 "생각",
102784 "생명",
102785 "생물",
102786 "생방송",
102787 "생산",
102788 "생선",
102789 "생신",
102790 "생일",
102791 "생활",
102792 "서랍",
102793 "서른",
102794 "서명",
102795 "서민",
102796 "서비스",
102797 "서양",
102798 "서울",
102799 "서적",
102800 "서점",
102801 "서쪽",
102802 "서클",
102803 "석사",
102804 "석유",
102805 "선거",
102806 "선물",
102807 "선배",
102808 "선생",
102809 "선수",
102810 "선원",
102811 "선장",
102812 "선전",
102813 "선택",
102814 "선풍기",
102815 "설거지",
102816 "설날",
102817 "설렁탕",
102818 "설명",
102819 "설문",
102820 "설사",
102821 "설악산",
102822 "설치",
102823 "설탕",
102824 "섭씨",
102825 "성공",
102826 "성당",
102827 "성명",
102828 "성별",
102829 "성인",
102830 "성장",
102831 "성적",
102832 "성질",
102833 "성함",
102834 "세금",
102835 "세미나",
102836 "세상",
102837 "세월",
102838 "세종대왕",
102839 "세탁",
102840 "센터",
102841 "센티미터",
102842 "셋째",
102843 "소규모",
102844 "소극적",
102845 "소금",
102846 "소나기",
102847 "소년",
102848 "소득",
102849 "소망",
102850 "소문",
102851 "소설",
102852 "소속",
102853 "소아과",
102854 "소용",
102855 "소원",
102856 "소음",
102857 "소중히",
102858 "소지품",
102859 "소질",
102860 "소풍",
102861 "소형",
102862 "속담",
102863 "속도",
102864 "속옷",
102865 "손가락",
102866 "손길",
102867 "손녀",
102868 "손님",
102869 "손등",
102870 "손목",
102871 "손뼉",
102872 "손실",
102873 "손질",
102874 "손톱",
102875 "손해",
102876 "솔직히",
102877 "솜씨",
102878 "송아지",
102879 "송이",
102880 "송편",
102881 "쇠고기",
102882 "쇼핑",
102883 "수건",
102884 "수년",
102885 "수단",
102886 "수돗물",
102887 "수동적",
102888 "수면",
102889 "수명",
102890 "수박",
102891 "수상",
102892 "수석",
102893 "수술",
102894 "수시로",
102895 "수업",
102896 "수염",
102897 "수영",
102898 "수입",
102899 "수준",
102900 "수집",
102901 "수출",
102902 "수컷",
102903 "수필",
102904 "수학",
102905 "수험생",
102906 "수화기",
102907 "숙녀",
102908 "숙소",
102909 "숙제",
102910 "순간",
102911 "순서",
102912 "순수",
102913 "순식간",
102914 "순위",
102915 "숟가락",
102916 "술병",
102917 "술집",
102918 "숫자",
102919 "스님",
102920 "스물",
102921 "스스로",
102922 "스승",
102923 "스웨터",
102924 "스위치",
102925 "스케이트",
102926 "스튜디오",
102927 "스트레스",
102928 "스포츠",
102929 "슬쩍",
102930 "슬픔",
102931 "습관",
102932 "습기",
102933 "승객",
102934 "승리",
102935 "승부",
102936 "승용차",
102937 "승진",
102938 "시각",
102939 "시간",
102940 "시골",
102941 "시금치",
102942 "시나리오",
102943 "시댁",
102944 "시리즈",
102945 "시멘트",
102946 "시민",
102947 "시부모",
102948 "시선",
102949 "시설",
102950 "시스템",
102951 "시아버지",
102952 "시어머니",
102953 "시월",
102954 "시인",
102955 "시일",
102956 "시작",
102957 "시장",
102958 "시절",
102959 "시점",
102960 "시중",
102961 "시즌",
102962 "시집",
102963 "시청",
102964 "시합",
102965 "시험",
102966 "식구",
102967 "식기",
102968 "식당",
102969 "식량",
102970 "식료품",
102971 "식물",
102972 "식빵",
102973 "식사",
102974 "식생활",
102975 "식초",
102976 "식탁",
102977 "식품",
102978 "신고",
102979 "신규",
102980 "신념",
102981 "신문",
102982 "신발",
102983 "신비",
102984 "신사",
102985 "신세",
102986 "신용",
102987 "신제품",
102988 "신청",
102989 "신체",
102990 "신화",
102991 "실감",
102992 "실내",
102993 "실력",
102994 "실례",
102995 "실망",
102996 "실수",
102997 "실습",
102998 "실시",
102999 "실장",
103000 "실정",
103001 "실질적",
103002 "실천",
103003 "실체",
103004 "실컷",
103005 "실태",
103006 "실패",
103007 "실험",
103008 "실현",
103009 "심리",
103010 "심부름",
103011 "심사",
103012 "심장",
103013 "심정",
103014 "심판",
103015 "쌍둥이",
103016 "씨름",
103017 "씨앗",
103018 "아가씨",
103019 "아나운서",
103020 "아드님",
103021 "아들",
103022 "아쉬움",
103023 "아스팔트",
103024 "아시아",
103025 "아울러",
103026 "아저씨",
103027 "아줌마",
103028 "아직",
103029 "아침",
103030 "아파트",
103031 "아프리카",
103032 "아픔",
103033 "아홉",
103034 "아흔",
103035 "악기",
103036 "악몽",
103037 "악수",
103038 "안개",
103039 "안경",
103040 "안과",
103041 "안내",
103042 "안녕",
103043 "안동",
103044 "안방",
103045 "안부",
103046 "안주",
103047 "알루미늄",
103048 "알코올",
103049 "암시",
103050 "암컷",
103051 "압력",
103052 "앞날",
103053 "앞문",
103054 "애인",
103055 "애정",
103056 "액수",
103057 "앨범",
103058 "야간",
103059 "야단",
103060 "야옹",
103061 "약간",
103062 "약국",
103063 "약속",
103064 "약수",
103065 "약점",
103066 "약품",
103067 "약혼녀",
103068 "양념",
103069 "양력",
103070 "양말",
103071 "양배추",
103072 "양주",
103073 "양파",
103074 "어둠",
103075 "어려움",
103076 "어른",
103077 "어젯밤",
103078 "어쨌든",
103079 "어쩌다가",
103080 "어쩐지",
103081 "언니",
103082 "언덕",
103083 "언론",
103084 "언어",
103085 "얼굴",
103086 "얼른",
103087 "얼음",
103088 "얼핏",
103089 "엄마",
103090 "업무",
103091 "업종",
103092 "업체",
103093 "엉덩이",
103094 "엉망",
103095 "엉터리",
103096 "엊그제",
103097 "에너지",
103098 "에어컨",
103099 "엔진",
103100 "여건",
103101 "여고생",
103102 "여관",
103103 "여군",
103104 "여권",
103105 "여대생",
103106 "여덟",
103107 "여동생",
103108 "여든",
103109 "여론",
103110 "여름",
103111 "여섯",
103112 "여성",
103113 "여왕",
103114 "여인",
103115 "여전히",
103116 "여직원",
103117 "여학생",
103118 "여행",
103119 "역사",
103120 "역시",
103121 "역할",
103122 "연결",
103123 "연구",
103124 "연극",
103125 "연기",
103126 "연락",
103127 "연설",
103128 "연세",
103129 "연속",
103130 "연습",
103131 "연애",
103132 "연예인",
103133 "연인",
103134 "연장",
103135 "연주",
103136 "연출",
103137 "연필",
103138 "연합",
103139 "연휴",
103140 "열기",
103141 "열매",
103142 "열쇠",
103143 "열심히",
103144 "열정",
103145 "열차",
103146 "열흘",
103147 "염려",
103148 "엽서",
103149 "영국",
103150 "영남",
103151 "영상",
103152 "영양",
103153 "영역",
103154 "영웅",
103155 "영원히",
103156 "영하",
103157 "영향",
103158 "영혼",
103159 "영화",
103160 "옆구리",
103161 "옆방",
103162 "옆집",
103163 "예감",
103164 "예금",
103165 "예방",
103166 "예산",
103167 "예상",
103168 "예선",
103169 "예술",
103170 "예습",
103171 "예식장",
103172 "예약",
103173 "예전",
103174 "예절",
103175 "예정",
103176 "예컨대",
103177 "옛날",
103178 "오늘",
103179 "오락",
103180 "오랫동안",
103181 "오렌지",
103182 "오로지",
103183 "오른발",
103184 "오븐",
103185 "오십",
103186 "오염",
103187 "오월",
103188 "오전",
103189 "오직",
103190 "오징어",
103191 "오페라",
103192 "오피스텔",
103193 "오히려",
103194 "옥상",
103195 "옥수수",
103196 "온갖",
103197 "온라인",
103198 "온몸",
103199 "온종일",
103200 "온통",
103201 "올가을",
103202 "올림픽",
103203 "올해",
103204 "옷차림",
103205 "와이셔츠",
103206 "와인",
103207 "완성",
103208 "완전",
103209 "왕비",
103210 "왕자",
103211 "왜냐하면",
103212 "왠지",
103213 "외갓집",
103214 "외국",
103215 "외로움",
103216 "외삼촌",
103217 "외출",
103218 "외침",
103219 "외할머니",
103220 "왼발",
103221 "왼손",
103222 "왼쪽",
103223 "요금",
103224 "요일",
103225 "요즘",
103226 "요청",
103227 "용기",
103228 "용서",
103229 "용어",
103230 "우산",
103231 "우선",
103232 "우승",
103233 "우연히",
103234 "우정",
103235 "우체국",
103236 "우편",
103237 "운동",
103238 "운명",
103239 "운반",
103240 "운전",
103241 "운행",
103242 "울산",
103243 "울음",
103244 "움직임",
103245 "웃어른",
103246 "웃음",
103247 "워낙",
103248 "원고",
103249 "원래",
103250 "원서",
103251 "원숭이",
103252 "원인",
103253 "원장",
103254 "원피스",
103255 "월급",
103256 "월드컵",
103257 "월세",
103258 "월요일",
103259 "웨이터",
103260 "위반",
103261 "위법",
103262 "위성",
103263 "위원",
103264 "위험",
103265 "위협",
103266 "윗사람",
103267 "유난히",
103268 "유럽",
103269 "유명",
103270 "유물",
103271 "유산",
103272 "유적",
103273 "유치원",
103274 "유학",
103275 "유행",
103276 "유형",
103277 "육군",
103278 "육상",
103279 "육십",
103280 "육체",
103281 "은행",
103282 "음력",
103283 "음료",
103284 "음반",
103285 "음성",
103286 "음식",
103287 "음악",
103288 "음주",
103289 "의견",
103290 "의논",
103291 "의문",
103292 "의복",
103293 "의식",
103294 "의심",
103295 "의외로",
103296 "의욕",
103297 "의원",
103298 "의학",
103299 "이것",
103300 "이곳",
103301 "이념",
103302 "이놈",
103303 "이달",
103304 "이대로",
103305 "이동",
103306 "이렇게",
103307 "이력서",
103308 "이론적",
103309 "이름",
103310 "이민",
103311 "이발소",
103312 "이별",
103313 "이불",
103314 "이빨",
103315 "이상",
103316 "이성",
103317 "이슬",
103318 "이야기",
103319 "이용",
103320 "이웃",
103321 "이월",
103322 "이윽고",
103323 "이익",
103324 "이전",
103325 "이중",
103326 "이튿날",
103327 "이틀",
103328 "이혼",
103329 "인간",
103330 "인격",
103331 "인공",
103332 "인구",
103333 "인근",
103334 "인기",
103335 "인도",
103336 "인류",
103337 "인물",
103338 "인생",
103339 "인쇄",
103340 "인연",
103341 "인원",
103342 "인재",
103343 "인종",
103344 "인천",
103345 "인체",
103346 "인터넷",
103347 "인하",
103348 "인형",
103349 "일곱",
103350 "일기",
103351 "일단",
103352 "일대",
103353 "일등",
103354 "일반",
103355 "일본",
103356 "일부",
103357 "일상",
103358 "일생",
103359 "일손",
103360 "일요일",
103361 "일월",
103362 "일정",
103363 "일종",
103364 "일주일",
103365 "일찍",
103366 "일체",
103367 "일치",
103368 "일행",
103369 "일회용",
103370 "임금",
103371 "임무",
103372 "입대",
103373 "입력",
103374 "입맛",
103375 "입사",
103376 "입술",
103377 "입시",
103378 "입원",
103379 "입장",
103380 "입학",
103381 "자가용",
103382 "자격",
103383 "자극",
103384 "자동",
103385 "자랑",
103386 "자부심",
103387 "자식",
103388 "자신",
103389 "자연",
103390 "자원",
103391 "자율",
103392 "자전거",
103393 "자정",
103394 "자존심",
103395 "자판",
103396 "작가",
103397 "작년",
103398 "작성",
103399 "작업",
103400 "작용",
103401 "작은딸",
103402 "작품",
103403 "잔디",
103404 "잔뜩",
103405 "잔치",
103406 "잘못",
103407 "잠깐",
103408 "잠수함",
103409 "잠시",
103410 "잠옷",
103411 "잠자리",
103412 "잡지",
103413 "장관",
103414 "장군",
103415 "장기간",
103416 "장래",
103417 "장례",
103418 "장르",
103419 "장마",
103420 "장면",
103421 "장모",
103422 "장미",
103423 "장비",
103424 "장사",
103425 "장소",
103426 "장식",
103427 "장애인",
103428 "장인",
103429 "장점",
103430 "장차",
103431 "장학금",
103432 "재능",
103433 "재빨리",
103434 "재산",
103435 "재생",
103436 "재작년",
103437 "재정",
103438 "재채기",
103439 "재판",
103440 "재학",
103441 "재활용",
103442 "저것",
103443 "저고리",
103444 "저곳",
103445 "저녁",
103446 "저런",
103447 "저렇게",
103448 "저번",
103449 "저울",
103450 "저절로",
103451 "저축",
103452 "적극",
103453 "적당히",
103454 "적성",
103455 "적용",
103456 "적응",
103457 "전개",
103458 "전공",
103459 "전기",
103460 "전달",
103461 "전라도",
103462 "전망",
103463 "전문",
103464 "전반",
103465 "전부",
103466 "전세",
103467 "전시",
103468 "전용",
103469 "전자",
103470 "전쟁",
103471 "전주",
103472 "전철",
103473 "전체",
103474 "전통",
103475 "전혀",
103476 "전후",
103477 "절대",
103478 "절망",
103479 "절반",
103480 "절약",
103481 "절차",
103482 "점검",
103483 "점수",
103484 "점심",
103485 "점원",
103486 "점점",
103487 "점차",
103488 "접근",
103489 "접시",
103490 "접촉",
103491 "젓가락",
103492 "정거장",
103493 "정도",
103494 "정류장",
103495 "정리",
103496 "정말",
103497 "정면",
103498 "정문",
103499 "정반대",
103500 "정보",
103501 "정부",
103502 "정비",
103503 "정상",
103504 "정성",
103505 "정오",
103506 "정원",
103507 "정장",
103508 "정지",
103509 "정치",
103510 "정확히",
103511 "제공",
103512 "제과점",
103513 "제대로",
103514 "제목",
103515 "제발",
103516 "제법",
103517 "제삿날",
103518 "제안",
103519 "제일",
103520 "제작",
103521 "제주도",
103522 "제출",
103523 "제품",
103524 "제한",
103525 "조각",
103526 "조건",
103527 "조금",
103528 "조깅",
103529 "조명",
103530 "조미료",
103531 "조상",
103532 "조선",
103533 "조용히",
103534 "조절",
103535 "조정",
103536 "조직",
103537 "존댓말",
103538 "존재",
103539 "졸업",
103540 "졸음",
103541 "종교",
103542 "종로",
103543 "종류",
103544 "종소리",
103545 "종업원",
103546 "종종",
103547 "종합",
103548 "좌석",
103549 "죄인",
103550 "주관적",
103551 "주름",
103552 "주말",
103553 "주머니",
103554 "주먹",
103555 "주문",
103556 "주민",
103557 "주방",
103558 "주변",
103559 "주식",
103560 "주인",
103561 "주일",
103562 "주장",
103563 "주전자",
103564 "주택",
103565 "준비",
103566 "줄거리",
103567 "줄기",
103568 "줄무늬",
103569 "중간",
103570 "중계방송",
103571 "중국",
103572 "중년",
103573 "중단",
103574 "중독",
103575 "중반",
103576 "중부",
103577 "중세",
103578 "중소기업",
103579 "중순",
103580 "중앙",
103581 "중요",
103582 "중학교",
103583 "즉석",
103584 "즉시",
103585 "즐거움",
103586 "증가",
103587 "증거",
103588 "증권",
103589 "증상",
103590 "증세",
103591 "지각",
103592 "지갑",
103593 "지경",
103594 "지극히",
103595 "지금",
103596 "지급",
103597 "지능",
103598 "지름길",
103599 "지리산",
103600 "지방",
103601 "지붕",
103602 "지식",
103603 "지역",
103604 "지우개",
103605 "지원",
103606 "지적",
103607 "지점",
103608 "지진",
103609 "지출",
103610 "직선",
103611 "직업",
103612 "직원",
103613 "직장",
103614 "진급",
103615 "진동",
103616 "진로",
103617 "진료",
103618 "진리",
103619 "진짜",
103620 "진찰",
103621 "진출",
103622 "진통",
103623 "진행",
103624 "질문",
103625 "질병",
103626 "질서",
103627 "짐작",
103628 "집단",
103629 "집안",
103630 "집중",
103631 "짜증",
103632 "찌꺼기",
103633 "차남",
103634 "차라리",
103635 "차량",
103636 "차림",
103637 "차별",
103638 "차선",
103639 "차츰",
103640 "착각",
103641 "찬물",
103642 "찬성",
103643 "참가",
103644 "참기름",
103645 "참새",
103646 "참석",
103647 "참여",
103648 "참외",
103649 "참조",
103650 "찻잔",
103651 "창가",
103652 "창고",
103653 "창구",
103654 "창문",
103655 "창밖",
103656 "창작",
103657 "창조",
103658 "채널",
103659 "채점",
103660 "책가방",
103661 "책방",
103662 "책상",
103663 "책임",
103664 "챔피언",
103665 "처벌",
103666 "처음",
103667 "천국",
103668 "천둥",
103669 "천장",
103670 "천재",
103671 "천천히",
103672 "철도",
103673 "철저히",
103674 "철학",
103675 "첫날",
103676 "첫째",
103677 "청년",
103678 "청바지",
103679 "청소",
103680 "청춘",
103681 "체계",
103682 "체력",
103683 "체온",
103684 "체육",
103685 "체중",
103686 "체험",
103687 "초등학생",
103688 "초반",
103689 "초밥",
103690 "초상화",
103691 "초순",
103692 "초여름",
103693 "초원",
103694 "초저녁",
103695 "초점",
103696 "초청",
103697 "초콜릿",
103698 "촛불",
103699 "총각",
103700 "총리",
103701 "총장",
103702 "촬영",
103703 "최근",
103704 "최상",
103705 "최선",
103706 "최신",
103707 "최악",
103708 "최종",
103709 "추석",
103710 "추억",
103711 "추진",
103712 "추천",
103713 "추측",
103714 "축구",
103715 "축소",
103716 "축제",
103717 "축하",
103718 "출근",
103719 "출발",
103720 "출산",
103721 "출신",
103722 "출연",
103723 "출입",
103724 "출장",
103725 "출판",
103726 "충격",
103727 "충고",
103728 "충돌",
103729 "충분히",
103730 "충청도",
103731 "취업",
103732 "취직",
103733 "취향",
103734 "치약",
103735 "친구",
103736 "친척",
103737 "칠십",
103738 "칠월",
103739 "칠판",
103740 "침대",
103741 "침묵",
103742 "침실",
103743 "칫솔",
103744 "칭찬",
103745 "카메라",
103746 "카운터",
103747 "칼국수",
103748 "캐릭터",
103749 "캠퍼스",
103750 "캠페인",
103751 "커튼",
103752 "컨디션",
103753 "컬러",
103754 "컴퓨터",
103755 "코끼리",
103756 "코미디",
103757 "콘서트",
103758 "콜라",
103759 "콤플렉스",
103760 "콩나물",
103761 "쾌감",
103762 "쿠데타",
103763 "크림",
103764 "큰길",
103765 "큰딸",
103766 "큰소리",
103767 "큰아들",
103768 "큰어머니",
103769 "큰일",
103770 "큰절",
103771 "클래식",
103772 "클럽",
103773 "킬로",
103774 "타입",
103775 "타자기",
103776 "탁구",
103777 "탁자",
103778 "탄생",
103779 "태권도",
103780 "태양",
103781 "태풍",
103782 "택시",
103783 "탤런트",
103784 "터널",
103785 "터미널",
103786 "테니스",
103787 "테스트",
103788 "테이블",
103789 "텔레비전",
103790 "토론",
103791 "토마토",
103792 "토요일",
103793 "통계",
103794 "통과",
103795 "통로",
103796 "통신",
103797 "통역",
103798 "통일",
103799 "통장",
103800 "통제",
103801 "통증",
103802 "통합",
103803 "통화",
103804 "퇴근",
103805 "퇴원",
103806 "퇴직금",
103807 "튀김",
103808 "트럭",
103809 "특급",
103810 "특별",
103811 "특성",
103812 "특수",
103813 "특징",
103814 "특히",
103815 "튼튼히",
103816 "티셔츠",
103817 "파란색",
103818 "파일",
103819 "파출소",
103820 "판결",
103821 "판단",
103822 "판매",
103823 "판사",
103824 "팔십",
103825 "팔월",
103826 "팝송",
103827 "패션",
103828 "팩스",
103829 "팩시밀리",
103830 "팬티",
103831 "퍼센트",
103832 "페인트",
103833 "편견",
103834 "편의",
103835 "편지",
103836 "편히",
103837 "평가",
103838 "평균",
103839 "평생",
103840 "평소",
103841 "평양",
103842 "평일",
103843 "평화",
103844 "포스터",
103845 "포인트",
103846 "포장",
103847 "포함",
103848 "표면",
103849 "표정",
103850 "표준",
103851 "표현",
103852 "품목",
103853 "품질",
103854 "풍경",
103855 "풍속",
103856 "풍습",
103857 "프랑스",
103858 "프린터",
103859 "플라스틱",
103860 "피곤",
103861 "피망",
103862 "피아노",
103863 "필름",
103864 "필수",
103865 "필요",
103866 "필자",
103867 "필통",
103868 "핑계",
103869 "하느님",
103870 "하늘",
103871 "하드웨어",
103872 "하룻밤",
103873 "하반기",
103874 "하숙집",
103875 "하순",
103876 "하여튼",
103877 "하지만",
103878 "하천",
103879 "하품",
103880 "하필",
103881 "학과",
103882 "학교",
103883 "학급",
103884 "학기",
103885 "학년",
103886 "학력",
103887 "학번",
103888 "학부모",
103889 "학비",
103890 "학생",
103891 "학술",
103892 "학습",
103893 "학용품",
103894 "학원",
103895 "학위",
103896 "학자",
103897 "학점",
103898 "한계",
103899 "한글",
103900 "한꺼번에",
103901 "한낮",
103902 "한눈",
103903 "한동안",
103904 "한때",
103905 "한라산",
103906 "한마디",
103907 "한문",
103908 "한번",
103909 "한복",
103910 "한식",
103911 "한여름",
103912 "한쪽",
103913 "할머니",
103914 "할아버지",
103915 "할인",
103916 "함께",
103917 "함부로",
103918 "합격",
103919 "합리적",
103920 "항공",
103921 "항구",
103922 "항상",
103923 "항의",
103924 "해결",
103925 "해군",
103926 "해답",
103927 "해당",
103928 "해물",
103929 "해석",
103930 "해설",
103931 "해수욕장",
103932 "해안",
103933 "핵심",
103934 "핸드백",
103935 "햄버거",
103936 "햇볕",
103937 "햇살",
103938 "행동",
103939 "행복",
103940 "행사",
103941 "행운",
103942 "행위",
103943 "향기",
103944 "향상",
103945 "향수",
103946 "허락",
103947 "허용",
103948 "헬기",
103949 "현관",
103950 "현금",
103951 "현대",
103952 "현상",
103953 "현실",
103954 "현장",
103955 "현재",
103956 "현지",
103957 "혈액",
103958 "협력",
103959 "형부",
103960 "형사",
103961 "형수",
103962 "형식",
103963 "형제",
103964 "형태",
103965 "형편",
103966 "혜택",
103967 "호기심",
103968 "호남",
103969 "호랑이",
103970 "호박",
103971 "호텔",
103972 "호흡",
103973 "혹시",
103974 "홀로",
103975 "홈페이지",
103976 "홍보",
103977 "홍수",
103978 "홍차",
103979 "화면",
103980 "화분",
103981 "화살",
103982 "화요일",
103983 "화장",
103984 "화학",
103985 "확보",
103986 "확인",
103987 "확장",
103988 "확정",
103989 "환갑",
103990 "환경",
103991 "환영",
103992 "환율",
103993 "환자",
103994 "활기",
103995 "활동",
103996 "활발히",
103997 "활용",
103998 "활짝",
103999 "회견",
104000 "회관",
104001 "회복",
104002 "회색",
104003 "회원",
104004 "회장",
104005 "회전",
104006 "횟수",
104007 "횡단보도",
104008 "효율적",
104009 "후반",
104010 "후춧가루",
104011 "훈련",
104012 "훨씬",
104013 "휴식",
104014 "휴일",
104015 "흉내",
104016 "흐름",
104017 "흑백",
104018 "흑인",
104019 "흔적",
104020 "흔히",
104021 "흥미",
104022 "흥분",
104023 "희곡",
104024 "희망",
104025 "희생",
104026 "흰색",
104027 "힘껏"
104028 ]
104029 </script>
104030 <script>/*
104031 * Copyright (c) 2013 Pavol Rusnak
104032 *
104033 * Permission is hereby granted, free of charge, to any person obtaining a copy of
104034 * this software and associated documentation files (the "Software"), to deal in
104035 * the Software without restriction, including without limitation the rights to
104036 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
104037 * of the Software, and to permit persons to whom the Software is furnished to do
104038 * so, subject to the following conditions:
104039 *
104040 * The above copyright notice and this permission notice shall be included in all
104041 * copies or substantial portions of the Software.
104042 *
104043 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
104044 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
104045 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
104046 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
104047 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
104048 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
104049 */
104050
104051 /*
104052 * Javascript port from python by Ian Coleman
104053 *
104054 * Requires code from sjcl
104055 * https://github.com/bitwiseshiftleft/sjcl
104056 */
104057
104058 var Mnemonic = function(language) {
104059
104060 var PBKDF2_ROUNDS = 2048;
104061 var RADIX = 2048;
104062
104063 var self = this;
104064 var wordlist = [];
104065
104066 var hmacSHA512 = function(key) {
104067 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
104068 this.encrypt = function() {
104069 return hasher.encrypt.apply(hasher, arguments);
104070 };
104071 };
104072
104073 function init() {
104074 wordlist = WORDLISTS[language];
104075 if (wordlist.length != RADIX) {
104076 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
104077 throw err;
104078 }
104079 }
104080
104081 self.generate = function(strength) {
104082 strength = strength || 128;
104083 var r = strength % 32;
104084 if (r > 0) {
104085 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
104086 }
104087 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
104088 if (!hasStrongCrypto) {
104089 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
104090 }
104091 var buffer = new Uint8Array(strength / 8);
104092 var data = crypto.getRandomValues(buffer);
104093 return self.toMnemonic(data);
104094 }
104095
104096 self.toMnemonic = function(byteArray) {
104097 if (byteArray.length % 4 > 0) {
104098 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
104099 }
104100
104101 //h = hashlib.sha256(data).hexdigest()
104102 var data = byteArrayToWordArray(byteArray);
104103 var hash = sjcl.hash.sha256.hash(data);
104104 var h = sjcl.codec.hex.fromBits(hash);
104105
104106 // b is a binary string, eg '00111010101100...'
104107 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
104108 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
104109 //
104110 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
104111 // c = bin(int(h, 16))[2:].zfill(256)
104112 // d = c[:len(data) * 8 / 32]
104113 var a = byteArrayToBinaryString(byteArray);
104114 var c = zfill(hexStringToBinaryString(h), 256);
104115 var d = c.substring(0, byteArray.length * 8 / 32);
104116 // b = line1 + line2
104117 var b = a + d;
104118
104119 var result = [];
104120 var blen = b.length / 11;
104121 for (var i=0; i<blen; i++) {
104122 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
104123 result.push(wordlist[idx]);
104124 }
104125 return self.joinWords(result);
104126 }
104127
104128 self.check = function(mnemonic) {
104129 var mnemonic = self.splitWords(mnemonic);
104130 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
104131 return false
104132 }
104133 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
104134 var idx = [];
104135 for (var i=0; i<mnemonic.length; i++) {
104136 var word = mnemonic[i];
104137 var wordIndex = wordlist.indexOf(word);
104138 if (wordIndex == -1) {
104139 return false;
104140 }
104141 var binaryIndex = zfill(wordIndex.toString(2), 11);
104142 idx.push(binaryIndex);
104143 }
104144 var b = idx.join('');
104145 var l = b.length;
104146 //d = b[:l / 33 * 32]
104147 //h = b[-l / 33:]
104148 var d = b.substring(0, l / 33 * 32);
104149 var h = b.substring(l - l / 33, l);
104150 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
104151 var nd = binaryStringToWordArray(d);
104152 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
104153 var ndHash = sjcl.hash.sha256.hash(nd);
104154 var ndHex = sjcl.codec.hex.fromBits(ndHash);
104155 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
104156 var nh = ndBstr.substring(0,l/33);
104157 return h == nh;
104158 }
104159
104160 self.toSeed = function(mnemonic, passphrase) {
104161 passphrase = passphrase || '';
104162 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
104163 var mnemonicNormalized = self.normalizeString(mnemonic);
104164 passphrase = self.normalizeString(passphrase)
104165 passphrase = "mnemonic" + passphrase;
104166 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
104167 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
104168 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
104169 var hashHex = sjcl.codec.hex.fromBits(result);
104170 return hashHex;
104171 }
104172
104173 self.splitWords = function(mnemonic) {
104174 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
104175 }
104176
104177 self.joinWords = function(words) {
104178 // Set space correctly depending on the language
104179 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
104180 var space = " ";
104181 if (language == "japanese") {
104182 space = "\u3000"; // ideographic space
104183 }
104184 return words.join(space);
104185 }
104186
104187 self.normalizeString = function(str) {
104188 return str.normalize("NFKD");
104189 }
104190
104191 function byteArrayToWordArray(data) {
104192 var a = [];
104193 for (var i=0; i<data.length/4; i++) {
104194 v = 0;
104195 v += data[i*4 + 0] << 8 * 3;
104196 v += data[i*4 + 1] << 8 * 2;
104197 v += data[i*4 + 2] << 8 * 1;
104198 v += data[i*4 + 3] << 8 * 0;
104199 a.push(v);
104200 }
104201 return a;
104202 }
104203
104204 function byteArrayToBinaryString(data) {
104205 var bin = "";
104206 for (var i=0; i<data.length; i++) {
104207 bin += zfill(data[i].toString(2), 8);
104208 }
104209 return bin;
104210 }
104211
104212 function hexStringToBinaryString(hexString) {
104213 binaryString = "";
104214 for (var i=0; i<hexString.length; i++) {
104215 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
104216 }
104217 return binaryString;
104218 }
104219
104220 function binaryStringToWordArray(binary) {
104221 var aLen = binary.length / 32;
104222 var a = [];
104223 for (var i=0; i<aLen; i++) {
104224 var valueStr = binary.substring(0,32);
104225 var value = parseInt(valueStr, 2);
104226 a.push(value);
104227 binary = binary.slice(32);
104228 }
104229 return a;
104230 }
104231
104232 // Pad a numeric string on the left with zero digits until the given width
104233 // is reached.
104234 // Note this differs to the python implementation because it does not
104235 // handle numbers starting with a sign.
104236 function zfill(source, length) {
104237 source = source.toString();
104238 while (source.length < length) {
104239 source = '0' + source;
104240 }
104241 return source;
104242 }
104243
104244 init();
104245
104246 }
104247 </script>
104248 <script>/*
104249 JavaScript BigInteger library version 0.9.1
104250 http://silentmatt.com/biginteger/
104251
104252 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
104253 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
104254 Licensed under the MIT license.
104255
104256 Support for arbitrary internal representation base was added by
104257 Vitaly Magerya.
104258 */
104259
104260 /*
104261 File: biginteger.js
104262
104263 Exports:
104264
104265 <BigInteger>
104266 */
104267 (function(exports) {
104268 "use strict";
104269 /*
104270 Class: BigInteger
104271 An arbitrarily-large integer.
104272
104273 <BigInteger> objects should be considered immutable. None of the "built-in"
104274 methods modify *this* or their arguments. All properties should be
104275 considered private.
104276
104277 All the methods of <BigInteger> instances can be called "statically". The
104278 static versions are convenient if you don't already have a <BigInteger>
104279 object.
104280
104281 As an example, these calls are equivalent.
104282
104283 > BigInteger(4).multiply(5); // returns BigInteger(20);
104284 > BigInteger.multiply(4, 5); // returns BigInteger(20);
104285
104286 > var a = 42;
104287 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
104288 */
104289
104290 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
104291
104292 /*
104293 Constructor: BigInteger()
104294 Convert a value to a <BigInteger>.
104295
104296 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
104297 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
104298 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
104299 without a radix argument.
104300
104301 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
104302 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
104303 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
104304 > var n3 = BigInteger(n2); // Return n2, unchanged
104305
104306 The constructor form only takes an array and a sign. *n* must be an
104307 array of numbers in little-endian order, where each digit is between 0
104308 and BigInteger.base. The second parameter sets the sign: -1 for
104309 negative, +1 for positive, or 0 for zero. The array is *not copied and
104310 may be modified*. If the array contains only zeros, the sign parameter
104311 is ignored and is forced to zero.
104312
104313 > new BigInteger([5], -1): create a new BigInteger with value -5
104314
104315 Parameters:
104316
104317 n - Value to convert to a <BigInteger>.
104318
104319 Returns:
104320
104321 A <BigInteger> value.
104322
104323 See Also:
104324
104325 <parse>, <BigInteger>
104326 */
104327 function BigInteger(n, s, token) {
104328 if (token !== CONSTRUCT) {
104329 if (n instanceof BigInteger) {
104330 return n;
104331 }
104332 else if (typeof n === "undefined") {
104333 return ZERO;
104334 }
104335 return BigInteger.parse(n);
104336 }
104337
104338 n = n || []; // Provide the nullary constructor for subclasses.
104339 while (n.length && !n[n.length - 1]) {
104340 --n.length;
104341 }
104342 this._d = n;
104343 this._s = n.length ? (s || 1) : 0;
104344 }
104345
104346 BigInteger._construct = function(n, s) {
104347 return new BigInteger(n, s, CONSTRUCT);
104348 };
104349
104350 // Base-10 speedup hacks in parse, toString, exp10 and log functions
104351 // require base to be a power of 10. 10^7 is the largest such power
104352 // that won't cause a precision loss when digits are multiplied.
104353 var BigInteger_base = 10000000;
104354 var BigInteger_base_log10 = 7;
104355
104356 BigInteger.base = BigInteger_base;
104357 BigInteger.base_log10 = BigInteger_base_log10;
104358
104359 var ZERO = new BigInteger([], 0, CONSTRUCT);
104360 // Constant: ZERO
104361 // <BigInteger> 0.
104362 BigInteger.ZERO = ZERO;
104363
104364 var ONE = new BigInteger([1], 1, CONSTRUCT);
104365 // Constant: ONE
104366 // <BigInteger> 1.
104367 BigInteger.ONE = ONE;
104368
104369 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
104370 // Constant: M_ONE
104371 // <BigInteger> -1.
104372 BigInteger.M_ONE = M_ONE;
104373
104374 // Constant: _0
104375 // Shortcut for <ZERO>.
104376 BigInteger._0 = ZERO;
104377
104378 // Constant: _1
104379 // Shortcut for <ONE>.
104380 BigInteger._1 = ONE;
104381
104382 /*
104383 Constant: small
104384 Array of <BigIntegers> from 0 to 36.
104385
104386 These are used internally for parsing, but useful when you need a "small"
104387 <BigInteger>.
104388
104389 See Also:
104390
104391 <ZERO>, <ONE>, <_0>, <_1>
104392 */
104393 BigInteger.small = [
104394 ZERO,
104395 ONE,
104396 /* Assuming BigInteger_base > 36 */
104397 new BigInteger( [2], 1, CONSTRUCT),
104398 new BigInteger( [3], 1, CONSTRUCT),
104399 new BigInteger( [4], 1, CONSTRUCT),
104400 new BigInteger( [5], 1, CONSTRUCT),
104401 new BigInteger( [6], 1, CONSTRUCT),
104402 new BigInteger( [7], 1, CONSTRUCT),
104403 new BigInteger( [8], 1, CONSTRUCT),
104404 new BigInteger( [9], 1, CONSTRUCT),
104405 new BigInteger([10], 1, CONSTRUCT),
104406 new BigInteger([11], 1, CONSTRUCT),
104407 new BigInteger([12], 1, CONSTRUCT),
104408 new BigInteger([13], 1, CONSTRUCT),
104409 new BigInteger([14], 1, CONSTRUCT),
104410 new BigInteger([15], 1, CONSTRUCT),
104411 new BigInteger([16], 1, CONSTRUCT),
104412 new BigInteger([17], 1, CONSTRUCT),
104413 new BigInteger([18], 1, CONSTRUCT),
104414 new BigInteger([19], 1, CONSTRUCT),
104415 new BigInteger([20], 1, CONSTRUCT),
104416 new BigInteger([21], 1, CONSTRUCT),
104417 new BigInteger([22], 1, CONSTRUCT),
104418 new BigInteger([23], 1, CONSTRUCT),
104419 new BigInteger([24], 1, CONSTRUCT),
104420 new BigInteger([25], 1, CONSTRUCT),
104421 new BigInteger([26], 1, CONSTRUCT),
104422 new BigInteger([27], 1, CONSTRUCT),
104423 new BigInteger([28], 1, CONSTRUCT),
104424 new BigInteger([29], 1, CONSTRUCT),
104425 new BigInteger([30], 1, CONSTRUCT),
104426 new BigInteger([31], 1, CONSTRUCT),
104427 new BigInteger([32], 1, CONSTRUCT),
104428 new BigInteger([33], 1, CONSTRUCT),
104429 new BigInteger([34], 1, CONSTRUCT),
104430 new BigInteger([35], 1, CONSTRUCT),
104431 new BigInteger([36], 1, CONSTRUCT)
104432 ];
104433
104434 // Used for parsing/radix conversion
104435 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
104436
104437 /*
104438 Method: toString
104439 Convert a <BigInteger> to a string.
104440
104441 When *base* is greater than 10, letters are upper case.
104442
104443 Parameters:
104444
104445 base - Optional base to represent the number in (default is base 10).
104446 Must be between 2 and 36 inclusive, or an Error will be thrown.
104447
104448 Returns:
104449
104450 The string representation of the <BigInteger>.
104451 */
104452 BigInteger.prototype.toString = function(base) {
104453 base = +base || 10;
104454 if (base < 2 || base > 36) {
104455 throw new Error("illegal radix " + base + ".");
104456 }
104457 if (this._s === 0) {
104458 return "0";
104459 }
104460 if (base === 10) {
104461 var str = this._s < 0 ? "-" : "";
104462 str += this._d[this._d.length - 1].toString();
104463 for (var i = this._d.length - 2; i >= 0; i--) {
104464 var group = this._d[i].toString();
104465 while (group.length < BigInteger_base_log10) group = '0' + group;
104466 str += group;
104467 }
104468 return str;
104469 }
104470 else {
104471 var numerals = BigInteger.digits;
104472 base = BigInteger.small[base];
104473 var sign = this._s;
104474
104475 var n = this.abs();
104476 var digits = [];
104477 var digit;
104478
104479 while (n._s !== 0) {
104480 var divmod = n.divRem(base);
104481 n = divmod[0];
104482 digit = divmod[1];
104483 // TODO: This could be changed to unshift instead of reversing at the end.
104484 // Benchmark both to compare speeds.
104485 digits.push(numerals[digit.valueOf()]);
104486 }
104487 return (sign < 0 ? "-" : "") + digits.reverse().join("");
104488 }
104489 };
104490
104491 // Verify strings for parsing
104492 BigInteger.radixRegex = [
104493 /^$/,
104494 /^$/,
104495 /^[01]*$/,
104496 /^[012]*$/,
104497 /^[0-3]*$/,
104498 /^[0-4]*$/,
104499 /^[0-5]*$/,
104500 /^[0-6]*$/,
104501 /^[0-7]*$/,
104502 /^[0-8]*$/,
104503 /^[0-9]*$/,
104504 /^[0-9aA]*$/,
104505 /^[0-9abAB]*$/,
104506 /^[0-9abcABC]*$/,
104507 /^[0-9a-dA-D]*$/,
104508 /^[0-9a-eA-E]*$/,
104509 /^[0-9a-fA-F]*$/,
104510 /^[0-9a-gA-G]*$/,
104511 /^[0-9a-hA-H]*$/,
104512 /^[0-9a-iA-I]*$/,
104513 /^[0-9a-jA-J]*$/,
104514 /^[0-9a-kA-K]*$/,
104515 /^[0-9a-lA-L]*$/,
104516 /^[0-9a-mA-M]*$/,
104517 /^[0-9a-nA-N]*$/,
104518 /^[0-9a-oA-O]*$/,
104519 /^[0-9a-pA-P]*$/,
104520 /^[0-9a-qA-Q]*$/,
104521 /^[0-9a-rA-R]*$/,
104522 /^[0-9a-sA-S]*$/,
104523 /^[0-9a-tA-T]*$/,
104524 /^[0-9a-uA-U]*$/,
104525 /^[0-9a-vA-V]*$/,
104526 /^[0-9a-wA-W]*$/,
104527 /^[0-9a-xA-X]*$/,
104528 /^[0-9a-yA-Y]*$/,
104529 /^[0-9a-zA-Z]*$/
104530 ];
104531
104532 /*
104533 Function: parse
104534 Parse a string into a <BigInteger>.
104535
104536 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
104537 *base* is not provided, it will be guessed based on the leading characters
104538 of *s* as follows:
104539
104540 - "0x" or "0X": *base* = 16
104541 - "0c" or "0C": *base* = 8
104542 - "0b" or "0B": *base* = 2
104543 - else: *base* = 10
104544
104545 If no base is provided, or *base* is 10, the number can be in exponential
104546 form. For example, these are all valid:
104547
104548 > BigInteger.parse("1e9"); // Same as "1000000000"
104549 > BigInteger.parse("1.234*10^3"); // Same as 1234
104550 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
104551
104552 If any characters fall outside the range defined by the radix, an exception
104553 will be thrown.
104554
104555 Parameters:
104556
104557 s - The string to parse.
104558 base - Optional radix (default is to guess based on *s*).
104559
104560 Returns:
104561
104562 a <BigInteger> instance.
104563 */
104564 BigInteger.parse = function(s, base) {
104565 // Expands a number in exponential form to decimal form.
104566 // expandExponential("-13.441*10^5") === "1344100";
104567 // expandExponential("1.12300e-1") === "0.112300";
104568 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
104569 function expandExponential(str) {
104570 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
104571
104572 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
104573 c = +c;
104574 var l = c < 0;
104575 var i = n.length + c;
104576 x = (l ? n : f).length;
104577 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
104578 var z = (new Array(c + 1)).join("0");
104579 var r = n + f;
104580 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
104581 });
104582 }
104583
104584 s = s.toString();
104585 if (typeof base === "undefined" || +base === 10) {
104586 s = expandExponential(s);
104587 }
104588
104589 var prefixRE;
104590 if (typeof base === "undefined") {
104591 prefixRE = '0[xcb]';
104592 }
104593 else if (base == 16) {
104594 prefixRE = '0x';
104595 }
104596 else if (base == 8) {
104597 prefixRE = '0c';
104598 }
104599 else if (base == 2) {
104600 prefixRE = '0b';
104601 }
104602 else {
104603 prefixRE = '';
104604 }
104605 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
104606 if (parts) {
104607 var sign = parts[1] || "+";
104608 var baseSection = parts[2] || "";
104609 var digits = parts[3] || "";
104610
104611 if (typeof base === "undefined") {
104612 // Guess base
104613 if (baseSection === "0x" || baseSection === "0X") { // Hex
104614 base = 16;
104615 }
104616 else if (baseSection === "0c" || baseSection === "0C") { // Octal
104617 base = 8;
104618 }
104619 else if (baseSection === "0b" || baseSection === "0B") { // Binary
104620 base = 2;
104621 }
104622 else {
104623 base = 10;
104624 }
104625 }
104626 else if (base < 2 || base > 36) {
104627 throw new Error("Illegal radix " + base + ".");
104628 }
104629
104630 base = +base;
104631
104632 // Check for digits outside the range
104633 if (!(BigInteger.radixRegex[base].test(digits))) {
104634 throw new Error("Bad digit for radix " + base);
104635 }
104636
104637 // Strip leading zeros, and convert to array
104638 digits = digits.replace(/^0+/, "").split("");
104639 if (digits.length === 0) {
104640 return ZERO;
104641 }
104642
104643 // Get the sign (we know it's not zero)
104644 sign = (sign === "-") ? -1 : 1;
104645
104646 // Optimize 10
104647 if (base == 10) {
104648 var d = [];
104649 while (digits.length >= BigInteger_base_log10) {
104650 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
104651 }
104652 d.push(parseInt(digits.join(''), 10));
104653 return new BigInteger(d, sign, CONSTRUCT);
104654 }
104655
104656 // Do the conversion
104657 var d = ZERO;
104658 base = BigInteger.small[base];
104659 var small = BigInteger.small;
104660 for (var i = 0; i < digits.length; i++) {
104661 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
104662 }
104663 return new BigInteger(d._d, sign, CONSTRUCT);
104664 }
104665 else {
104666 throw new Error("Invalid BigInteger format: " + s);
104667 }
104668 };
104669
104670 /*
104671 Function: add
104672 Add two <BigIntegers>.
104673
104674 Parameters:
104675
104676 n - The number to add to *this*. Will be converted to a <BigInteger>.
104677
104678 Returns:
104679
104680 The numbers added together.
104681
104682 See Also:
104683
104684 <subtract>, <multiply>, <quotient>, <next>
104685 */
104686 BigInteger.prototype.add = function(n) {
104687 if (this._s === 0) {
104688 return BigInteger(n);
104689 }
104690
104691 n = BigInteger(n);
104692 if (n._s === 0) {
104693 return this;
104694 }
104695 if (this._s !== n._s) {
104696 n = n.negate();
104697 return this.subtract(n);
104698 }
104699
104700 var a = this._d;
104701 var b = n._d;
104702 var al = a.length;
104703 var bl = b.length;
104704 var sum = new Array(Math.max(al, bl) + 1);
104705 var size = Math.min(al, bl);
104706 var carry = 0;
104707 var digit;
104708
104709 for (var i = 0; i < size; i++) {
104710 digit = a[i] + b[i] + carry;
104711 sum[i] = digit % BigInteger_base;
104712 carry = (digit / BigInteger_base) | 0;
104713 }
104714 if (bl > al) {
104715 a = b;
104716 al = bl;
104717 }
104718 for (i = size; carry && i < al; i++) {
104719 digit = a[i] + carry;
104720 sum[i] = digit % BigInteger_base;
104721 carry = (digit / BigInteger_base) | 0;
104722 }
104723 if (carry) {
104724 sum[i] = carry;
104725 }
104726
104727 for ( ; i < al; i++) {
104728 sum[i] = a[i];
104729 }
104730
104731 return new BigInteger(sum, this._s, CONSTRUCT);
104732 };
104733
104734 /*
104735 Function: negate
104736 Get the additive inverse of a <BigInteger>.
104737
104738 Returns:
104739
104740 A <BigInteger> with the same magnatude, but with the opposite sign.
104741
104742 See Also:
104743
104744 <abs>
104745 */
104746 BigInteger.prototype.negate = function() {
104747 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
104748 };
104749
104750 /*
104751 Function: abs
104752 Get the absolute value of a <BigInteger>.
104753
104754 Returns:
104755
104756 A <BigInteger> with the same magnatude, but always positive (or zero).
104757
104758 See Also:
104759
104760 <negate>
104761 */
104762 BigInteger.prototype.abs = function() {
104763 return (this._s < 0) ? this.negate() : this;
104764 };
104765
104766 /*
104767 Function: subtract
104768 Subtract two <BigIntegers>.
104769
104770 Parameters:
104771
104772 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
104773
104774 Returns:
104775
104776 The *n* subtracted from *this*.
104777
104778 See Also:
104779
104780 <add>, <multiply>, <quotient>, <prev>
104781 */
104782 BigInteger.prototype.subtract = function(n) {
104783 if (this._s === 0) {
104784 return BigInteger(n).negate();
104785 }
104786
104787 n = BigInteger(n);
104788 if (n._s === 0) {
104789 return this;
104790 }
104791 if (this._s !== n._s) {
104792 n = n.negate();
104793 return this.add(n);
104794 }
104795
104796 var m = this;
104797 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
104798 if (this._s < 0) {
104799 m = new BigInteger(n._d, 1, CONSTRUCT);
104800 n = new BigInteger(this._d, 1, CONSTRUCT);
104801 }
104802
104803 // Both are positive => a - b
104804 var sign = m.compareAbs(n);
104805 if (sign === 0) {
104806 return ZERO;
104807 }
104808 else if (sign < 0) {
104809 // swap m and n
104810 var t = n;
104811 n = m;
104812 m = t;
104813 }
104814
104815 // a > b
104816 var a = m._d;
104817 var b = n._d;
104818 var al = a.length;
104819 var bl = b.length;
104820 var diff = new Array(al); // al >= bl since a > b
104821 var borrow = 0;
104822 var i;
104823 var digit;
104824
104825 for (i = 0; i < bl; i++) {
104826 digit = a[i] - borrow - b[i];
104827 if (digit < 0) {
104828 digit += BigInteger_base;
104829 borrow = 1;
104830 }
104831 else {
104832 borrow = 0;
104833 }
104834 diff[i] = digit;
104835 }
104836 for (i = bl; i < al; i++) {
104837 digit = a[i] - borrow;
104838 if (digit < 0) {
104839 digit += BigInteger_base;
104840 }
104841 else {
104842 diff[i++] = digit;
104843 break;
104844 }
104845 diff[i] = digit;
104846 }
104847 for ( ; i < al; i++) {
104848 diff[i] = a[i];
104849 }
104850
104851 return new BigInteger(diff, sign, CONSTRUCT);
104852 };
104853
104854 (function() {
104855 function addOne(n, sign) {
104856 var a = n._d;
104857 var sum = a.slice();
104858 var carry = true;
104859 var i = 0;
104860
104861 while (true) {
104862 var digit = (a[i] || 0) + 1;
104863 sum[i] = digit % BigInteger_base;
104864 if (digit <= BigInteger_base - 1) {
104865 break;
104866 }
104867 ++i;
104868 }
104869
104870 return new BigInteger(sum, sign, CONSTRUCT);
104871 }
104872
104873 function subtractOne(n, sign) {
104874 var a = n._d;
104875 var sum = a.slice();
104876 var borrow = true;
104877 var i = 0;
104878
104879 while (true) {
104880 var digit = (a[i] || 0) - 1;
104881 if (digit < 0) {
104882 sum[i] = digit + BigInteger_base;
104883 }
104884 else {
104885 sum[i] = digit;
104886 break;
104887 }
104888 ++i;
104889 }
104890
104891 return new BigInteger(sum, sign, CONSTRUCT);
104892 }
104893
104894 /*
104895 Function: next
104896 Get the next <BigInteger> (add one).
104897
104898 Returns:
104899
104900 *this* + 1.
104901
104902 See Also:
104903
104904 <add>, <prev>
104905 */
104906 BigInteger.prototype.next = function() {
104907 switch (this._s) {
104908 case 0:
104909 return ONE;
104910 case -1:
104911 return subtractOne(this, -1);
104912 // case 1:
104913 default:
104914 return addOne(this, 1);
104915 }
104916 };
104917
104918 /*
104919 Function: prev
104920 Get the previous <BigInteger> (subtract one).
104921
104922 Returns:
104923
104924 *this* - 1.
104925
104926 See Also:
104927
104928 <next>, <subtract>
104929 */
104930 BigInteger.prototype.prev = function() {
104931 switch (this._s) {
104932 case 0:
104933 return M_ONE;
104934 case -1:
104935 return addOne(this, -1);
104936 // case 1:
104937 default:
104938 return subtractOne(this, 1);
104939 }
104940 };
104941 })();
104942
104943 /*
104944 Function: compareAbs
104945 Compare the absolute value of two <BigIntegers>.
104946
104947 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
104948
104949 Parameters:
104950
104951 n - The number to compare to *this*. Will be converted to a <BigInteger>.
104952
104953 Returns:
104954
104955 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
104956
104957 See Also:
104958
104959 <compare>, <abs>
104960 */
104961 BigInteger.prototype.compareAbs = function(n) {
104962 if (this === n) {
104963 return 0;
104964 }
104965
104966 if (!(n instanceof BigInteger)) {
104967 if (!isFinite(n)) {
104968 return(isNaN(n) ? n : -1);
104969 }
104970 n = BigInteger(n);
104971 }
104972
104973 if (this._s === 0) {
104974 return (n._s !== 0) ? -1 : 0;
104975 }
104976 if (n._s === 0) {
104977 return 1;
104978 }
104979
104980 var l = this._d.length;
104981 var nl = n._d.length;
104982 if (l < nl) {
104983 return -1;
104984 }
104985 else if (l > nl) {
104986 return 1;
104987 }
104988
104989 var a = this._d;
104990 var b = n._d;
104991 for (var i = l-1; i >= 0; i--) {
104992 if (a[i] !== b[i]) {
104993 return a[i] < b[i] ? -1 : 1;
104994 }
104995 }
104996
104997 return 0;
104998 };
104999
105000 /*
105001 Function: compare
105002 Compare two <BigIntegers>.
105003
105004 Parameters:
105005
105006 n - The number to compare to *this*. Will be converted to a <BigInteger>.
105007
105008 Returns:
105009
105010 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
105011
105012 See Also:
105013
105014 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
105015 */
105016 BigInteger.prototype.compare = function(n) {
105017 if (this === n) {
105018 return 0;
105019 }
105020
105021 n = BigInteger(n);
105022
105023 if (this._s === 0) {
105024 return -n._s;
105025 }
105026
105027 if (this._s === n._s) { // both positive or both negative
105028 var cmp = this.compareAbs(n);
105029 return cmp * this._s;
105030 }
105031 else {
105032 return this._s;
105033 }
105034 };
105035
105036 /*
105037 Function: isUnit
105038 Return true iff *this* is either 1 or -1.
105039
105040 Returns:
105041
105042 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
105043
105044 See Also:
105045
105046 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
105047 <BigInteger.ONE>, <BigInteger.M_ONE>
105048 */
105049 BigInteger.prototype.isUnit = function() {
105050 return this === ONE ||
105051 this === M_ONE ||
105052 (this._d.length === 1 && this._d[0] === 1);
105053 };
105054
105055 /*
105056 Function: multiply
105057 Multiply two <BigIntegers>.
105058
105059 Parameters:
105060
105061 n - The number to multiply *this* by. Will be converted to a
105062 <BigInteger>.
105063
105064 Returns:
105065
105066 The numbers multiplied together.
105067
105068 See Also:
105069
105070 <add>, <subtract>, <quotient>, <square>
105071 */
105072 BigInteger.prototype.multiply = function(n) {
105073 // TODO: Consider adding Karatsuba multiplication for large numbers
105074 if (this._s === 0) {
105075 return ZERO;
105076 }
105077
105078 n = BigInteger(n);
105079 if (n._s === 0) {
105080 return ZERO;
105081 }
105082 if (this.isUnit()) {
105083 if (this._s < 0) {
105084 return n.negate();
105085 }
105086 return n;
105087 }
105088 if (n.isUnit()) {
105089 if (n._s < 0) {
105090 return this.negate();
105091 }
105092 return this;
105093 }
105094 if (this === n) {
105095 return this.square();
105096 }
105097
105098 var r = (this._d.length >= n._d.length);
105099 var a = (r ? this : n)._d; // a will be longer than b
105100 var b = (r ? n : this)._d;
105101 var al = a.length;
105102 var bl = b.length;
105103
105104 var pl = al + bl;
105105 var partial = new Array(pl);
105106 var i;
105107 for (i = 0; i < pl; i++) {
105108 partial[i] = 0;
105109 }
105110
105111 for (i = 0; i < bl; i++) {
105112 var carry = 0;
105113 var bi = b[i];
105114 var jlimit = al + i;
105115 var digit;
105116 for (var j = i; j < jlimit; j++) {
105117 digit = partial[j] + bi * a[j - i] + carry;
105118 carry = (digit / BigInteger_base) | 0;
105119 partial[j] = (digit % BigInteger_base) | 0;
105120 }
105121 if (carry) {
105122 digit = partial[j] + carry;
105123 carry = (digit / BigInteger_base) | 0;
105124 partial[j] = digit % BigInteger_base;
105125 }
105126 }
105127 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
105128 };
105129
105130 // Multiply a BigInteger by a single-digit native number
105131 // Assumes that this and n are >= 0
105132 // This is not really intended to be used outside the library itself
105133 BigInteger.prototype.multiplySingleDigit = function(n) {
105134 if (n === 0 || this._s === 0) {
105135 return ZERO;
105136 }
105137 if (n === 1) {
105138 return this;
105139 }
105140
105141 var digit;
105142 if (this._d.length === 1) {
105143 digit = this._d[0] * n;
105144 if (digit >= BigInteger_base) {
105145 return new BigInteger([(digit % BigInteger_base)|0,
105146 (digit / BigInteger_base)|0], 1, CONSTRUCT);
105147 }
105148 return new BigInteger([digit], 1, CONSTRUCT);
105149 }
105150
105151 if (n === 2) {
105152 return this.add(this);
105153 }
105154 if (this.isUnit()) {
105155 return new BigInteger([n], 1, CONSTRUCT);
105156 }
105157
105158 var a = this._d;
105159 var al = a.length;
105160
105161 var pl = al + 1;
105162 var partial = new Array(pl);
105163 for (var i = 0; i < pl; i++) {
105164 partial[i] = 0;
105165 }
105166
105167 var carry = 0;
105168 for (var j = 0; j < al; j++) {
105169 digit = n * a[j] + carry;
105170 carry = (digit / BigInteger_base) | 0;
105171 partial[j] = (digit % BigInteger_base) | 0;
105172 }
105173 if (carry) {
105174 partial[j] = carry;
105175 }
105176
105177 return new BigInteger(partial, 1, CONSTRUCT);
105178 };
105179
105180 /*
105181 Function: square
105182 Multiply a <BigInteger> by itself.
105183
105184 This is slightly faster than regular multiplication, since it removes the
105185 duplicated multiplcations.
105186
105187 Returns:
105188
105189 > this.multiply(this)
105190
105191 See Also:
105192 <multiply>
105193 */
105194 BigInteger.prototype.square = function() {
105195 // Normally, squaring a 10-digit number would take 100 multiplications.
105196 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
105197 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
105198 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
105199
105200 if (this._s === 0) {
105201 return ZERO;
105202 }
105203 if (this.isUnit()) {
105204 return ONE;
105205 }
105206
105207 var digits = this._d;
105208 var length = digits.length;
105209 var imult1 = new Array(length + length + 1);
105210 var product, carry, k;
105211 var i;
105212
105213 // Calculate diagonal
105214 for (i = 0; i < length; i++) {
105215 k = i * 2;
105216 product = digits[i] * digits[i];
105217 carry = (product / BigInteger_base) | 0;
105218 imult1[k] = product % BigInteger_base;
105219 imult1[k + 1] = carry;
105220 }
105221
105222 // Calculate repeating part
105223 for (i = 0; i < length; i++) {
105224 carry = 0;
105225 k = i * 2 + 1;
105226 for (var j = i + 1; j < length; j++, k++) {
105227 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
105228 carry = (product / BigInteger_base) | 0;
105229 imult1[k] = product % BigInteger_base;
105230 }
105231 k = length + i;
105232 var digit = carry + imult1[k];
105233 carry = (digit / BigInteger_base) | 0;
105234 imult1[k] = digit % BigInteger_base;
105235 imult1[k + 1] += carry;
105236 }
105237
105238 return new BigInteger(imult1, 1, CONSTRUCT);
105239 };
105240
105241 /*
105242 Function: quotient
105243 Divide two <BigIntegers> and truncate towards zero.
105244
105245 <quotient> throws an exception if *n* is zero.
105246
105247 Parameters:
105248
105249 n - The number to divide *this* by. Will be converted to a <BigInteger>.
105250
105251 Returns:
105252
105253 The *this* / *n*, truncated to an integer.
105254
105255 See Also:
105256
105257 <add>, <subtract>, <multiply>, <divRem>, <remainder>
105258 */
105259 BigInteger.prototype.quotient = function(n) {
105260 return this.divRem(n)[0];
105261 };
105262
105263 /*
105264 Function: divide
105265 Deprecated synonym for <quotient>.
105266 */
105267 BigInteger.prototype.divide = BigInteger.prototype.quotient;
105268
105269 /*
105270 Function: remainder
105271 Calculate the remainder of two <BigIntegers>.
105272
105273 <remainder> throws an exception if *n* is zero.
105274
105275 Parameters:
105276
105277 n - The remainder after *this* is divided *this* by *n*. Will be
105278 converted to a <BigInteger>.
105279
105280 Returns:
105281
105282 *this* % *n*.
105283
105284 See Also:
105285
105286 <divRem>, <quotient>
105287 */
105288 BigInteger.prototype.remainder = function(n) {
105289 return this.divRem(n)[1];
105290 };
105291
105292 /*
105293 Function: divRem
105294 Calculate the integer quotient and remainder of two <BigIntegers>.
105295
105296 <divRem> throws an exception if *n* is zero.
105297
105298 Parameters:
105299
105300 n - The number to divide *this* by. Will be converted to a <BigInteger>.
105301
105302 Returns:
105303
105304 A two-element array containing the quotient and the remainder.
105305
105306 > a.divRem(b)
105307
105308 is exactly equivalent to
105309
105310 > [a.quotient(b), a.remainder(b)]
105311
105312 except it is faster, because they are calculated at the same time.
105313
105314 See Also:
105315
105316 <quotient>, <remainder>
105317 */
105318 BigInteger.prototype.divRem = function(n) {
105319 n = BigInteger(n);
105320 if (n._s === 0) {
105321 throw new Error("Divide by zero");
105322 }
105323 if (this._s === 0) {
105324 return [ZERO, ZERO];
105325 }
105326 if (n._d.length === 1) {
105327 return this.divRemSmall(n._s * n._d[0]);
105328 }
105329
105330 // Test for easy cases -- |n1| <= |n2|
105331 switch (this.compareAbs(n)) {
105332 case 0: // n1 == n2
105333 return [this._s === n._s ? ONE : M_ONE, ZERO];
105334 case -1: // |n1| < |n2|
105335 return [ZERO, this];
105336 }
105337
105338 var sign = this._s * n._s;
105339 var a = n.abs();
105340 var b_digits = this._d;
105341 var b_index = b_digits.length;
105342 var digits = n._d.length;
105343 var quot = [];
105344 var guess;
105345
105346 var part = new BigInteger([], 0, CONSTRUCT);
105347
105348 while (b_index) {
105349 part._d.unshift(b_digits[--b_index]);
105350 part = new BigInteger(part._d, 1, CONSTRUCT);
105351
105352 if (part.compareAbs(n) < 0) {
105353 quot.push(0);
105354 continue;
105355 }
105356 if (part._s === 0) {
105357 guess = 0;
105358 }
105359 else {
105360 var xlen = part._d.length, ylen = a._d.length;
105361 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
105362 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
105363 if (part._d.length > a._d.length) {
105364 // The length of part._d can either match a._d length,
105365 // or exceed it by one.
105366 highx = (highx+1)*BigInteger_base;
105367 }
105368 guess = Math.ceil(highx/highy);
105369 }
105370 do {
105371 var check = a.multiplySingleDigit(guess);
105372 if (check.compareAbs(part) <= 0) {
105373 break;
105374 }
105375 guess--;
105376 } while (guess);
105377
105378 quot.push(guess);
105379 if (!guess) {
105380 continue;
105381 }
105382 var diff = part.subtract(check);
105383 part._d = diff._d.slice();
105384 }
105385
105386 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
105387 new BigInteger(part._d, this._s, CONSTRUCT)];
105388 };
105389
105390 // Throws an exception if n is outside of (-BigInteger.base, -1] or
105391 // [1, BigInteger.base). It's not necessary to call this, since the
105392 // other division functions will call it if they are able to.
105393 BigInteger.prototype.divRemSmall = function(n) {
105394 var r;
105395 n = +n;
105396 if (n === 0) {
105397 throw new Error("Divide by zero");
105398 }
105399
105400 var n_s = n < 0 ? -1 : 1;
105401 var sign = this._s * n_s;
105402 n = Math.abs(n);
105403
105404 if (n < 1 || n >= BigInteger_base) {
105405 throw new Error("Argument out of range");
105406 }
105407
105408 if (this._s === 0) {
105409 return [ZERO, ZERO];
105410 }
105411
105412 if (n === 1 || n === -1) {
105413 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
105414 }
105415
105416 // 2 <= n < BigInteger_base
105417
105418 // divide a single digit by a single digit
105419 if (this._d.length === 1) {
105420 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
105421 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
105422 if (sign < 0) {
105423 q = q.negate();
105424 }
105425 if (this._s < 0) {
105426 r = r.negate();
105427 }
105428 return [q, r];
105429 }
105430
105431 var digits = this._d.slice();
105432 var quot = new Array(digits.length);
105433 var part = 0;
105434 var diff = 0;
105435 var i = 0;
105436 var guess;
105437
105438 while (digits.length) {
105439 part = part * BigInteger_base + digits[digits.length - 1];
105440 if (part < n) {
105441 quot[i++] = 0;
105442 digits.pop();
105443 diff = BigInteger_base * diff + part;
105444 continue;
105445 }
105446 if (part === 0) {
105447 guess = 0;
105448 }
105449 else {
105450 guess = (part / n) | 0;
105451 }
105452
105453 var check = n * guess;
105454 diff = part - check;
105455 quot[i++] = guess;
105456 if (!guess) {
105457 digits.pop();
105458 continue;
105459 }
105460
105461 digits.pop();
105462 part = diff;
105463 }
105464
105465 r = new BigInteger([diff], 1, CONSTRUCT);
105466 if (this._s < 0) {
105467 r = r.negate();
105468 }
105469 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
105470 };
105471
105472 /*
105473 Function: isEven
105474 Return true iff *this* is divisible by two.
105475
105476 Note that <BigInteger.ZERO> is even.
105477
105478 Returns:
105479
105480 true if *this* is even, false otherwise.
105481
105482 See Also:
105483
105484 <isOdd>
105485 */
105486 BigInteger.prototype.isEven = function() {
105487 var digits = this._d;
105488 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
105489 };
105490
105491 /*
105492 Function: isOdd
105493 Return true iff *this* is not divisible by two.
105494
105495 Returns:
105496
105497 true if *this* is odd, false otherwise.
105498
105499 See Also:
105500
105501 <isEven>
105502 */
105503 BigInteger.prototype.isOdd = function() {
105504 return !this.isEven();
105505 };
105506
105507 /*
105508 Function: sign
105509 Get the sign of a <BigInteger>.
105510
105511 Returns:
105512
105513 * -1 if *this* < 0
105514 * 0 if *this* == 0
105515 * +1 if *this* > 0
105516
105517 See Also:
105518
105519 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
105520 */
105521 BigInteger.prototype.sign = function() {
105522 return this._s;
105523 };
105524
105525 /*
105526 Function: isPositive
105527 Return true iff *this* > 0.
105528
105529 Returns:
105530
105531 true if *this*.compare(<BigInteger.ZERO>) == 1.
105532
105533 See Also:
105534
105535 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
105536 */
105537 BigInteger.prototype.isPositive = function() {
105538 return this._s > 0;
105539 };
105540
105541 /*
105542 Function: isNegative
105543 Return true iff *this* < 0.
105544
105545 Returns:
105546
105547 true if *this*.compare(<BigInteger.ZERO>) == -1.
105548
105549 See Also:
105550
105551 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
105552 */
105553 BigInteger.prototype.isNegative = function() {
105554 return this._s < 0;
105555 };
105556
105557 /*
105558 Function: isZero
105559 Return true iff *this* == 0.
105560
105561 Returns:
105562
105563 true if *this*.compare(<BigInteger.ZERO>) == 0.
105564
105565 See Also:
105566
105567 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
105568 */
105569 BigInteger.prototype.isZero = function() {
105570 return this._s === 0;
105571 };
105572
105573 /*
105574 Function: exp10
105575 Multiply a <BigInteger> by a power of 10.
105576
105577 This is equivalent to, but faster than
105578
105579 > if (n >= 0) {
105580 > return this.multiply(BigInteger("1e" + n));
105581 > }
105582 > else { // n <= 0
105583 > return this.quotient(BigInteger("1e" + -n));
105584 > }
105585
105586 Parameters:
105587
105588 n - The power of 10 to multiply *this* by. *n* is converted to a
105589 javascipt number and must be no greater than <BigInteger.MAX_EXP>
105590 (0x7FFFFFFF), or an exception will be thrown.
105591
105592 Returns:
105593
105594 *this* * (10 ** *n*), truncated to an integer if necessary.
105595
105596 See Also:
105597
105598 <pow>, <multiply>
105599 */
105600 BigInteger.prototype.exp10 = function(n) {
105601 n = +n;
105602 if (n === 0) {
105603 return this;
105604 }
105605 if (Math.abs(n) > Number(MAX_EXP)) {
105606 throw new Error("exponent too large in BigInteger.exp10");
105607 }
105608 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
105609 if (this._s === 0) {
105610 return ZERO;
105611 }
105612 if (n > 0) {
105613 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
105614
105615 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
105616 k._d.unshift(0);
105617 }
105618 if (n == 0)
105619 return k;
105620 k._s = 1;
105621 k = k.multiplySingleDigit(Math.pow(10, n));
105622 return (this._s < 0 ? k.negate() : k);
105623 } else if (-n >= this._d.length*BigInteger_base_log10) {
105624 return ZERO;
105625 } else {
105626 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
105627
105628 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
105629 k._d.shift();
105630 }
105631 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
105632 }
105633 };
105634
105635 /*
105636 Function: pow
105637 Raise a <BigInteger> to a power.
105638
105639 In this implementation, 0**0 is 1.
105640
105641 Parameters:
105642
105643 n - The exponent to raise *this* by. *n* must be no greater than
105644 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
105645
105646 Returns:
105647
105648 *this* raised to the *nth* power.
105649
105650 See Also:
105651
105652 <modPow>
105653 */
105654 BigInteger.prototype.pow = function(n) {
105655 if (this.isUnit()) {
105656 if (this._s > 0) {
105657 return this;
105658 }
105659 else {
105660 return BigInteger(n).isOdd() ? this : this.negate();
105661 }
105662 }
105663
105664 n = BigInteger(n);
105665 if (n._s === 0) {
105666 return ONE;
105667 }
105668 else if (n._s < 0) {
105669 if (this._s === 0) {
105670 throw new Error("Divide by zero");
105671 }
105672 else {
105673 return ZERO;
105674 }
105675 }
105676 if (this._s === 0) {
105677 return ZERO;
105678 }
105679 if (n.isUnit()) {
105680 return this;
105681 }
105682
105683 if (n.compareAbs(MAX_EXP) > 0) {
105684 throw new Error("exponent too large in BigInteger.pow");
105685 }
105686 var x = this;
105687 var aux = ONE;
105688 var two = BigInteger.small[2];
105689
105690 while (n.isPositive()) {
105691 if (n.isOdd()) {
105692 aux = aux.multiply(x);
105693 if (n.isUnit()) {
105694 return aux;
105695 }
105696 }
105697 x = x.square();
105698 n = n.quotient(two);
105699 }
105700
105701 return aux;
105702 };
105703
105704 /*
105705 Function: modPow
105706 Raise a <BigInteger> to a power (mod m).
105707
105708 Because it is reduced by a modulus, <modPow> is not limited by
105709 <BigInteger.MAX_EXP> like <pow>.
105710
105711 Parameters:
105712
105713 exponent - The exponent to raise *this* by. Must be positive.
105714 modulus - The modulus.
105715
105716 Returns:
105717
105718 *this* ^ *exponent* (mod *modulus*).
105719
105720 See Also:
105721
105722 <pow>, <mod>
105723 */
105724 BigInteger.prototype.modPow = function(exponent, modulus) {
105725 var result = ONE;
105726 var base = this;
105727
105728 while (exponent.isPositive()) {
105729 if (exponent.isOdd()) {
105730 result = result.multiply(base).remainder(modulus);
105731 }
105732
105733 exponent = exponent.quotient(BigInteger.small[2]);
105734 if (exponent.isPositive()) {
105735 base = base.square().remainder(modulus);
105736 }
105737 }
105738
105739 return result;
105740 };
105741
105742 /*
105743 Function: log
105744 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
105745
105746 This is equivalent to
105747
105748 > Math.log(this.toJSValue())
105749
105750 but handles values outside of the native number range.
105751
105752 Returns:
105753
105754 log( *this* )
105755
105756 See Also:
105757
105758 <toJSValue>
105759 */
105760 BigInteger.prototype.log = function() {
105761 switch (this._s) {
105762 case 0: return -Infinity;
105763 case -1: return NaN;
105764 default: // Fall through.
105765 }
105766
105767 var l = this._d.length;
105768
105769 if (l*BigInteger_base_log10 < 30) {
105770 return Math.log(this.valueOf());
105771 }
105772
105773 var N = Math.ceil(30/BigInteger_base_log10);
105774 var firstNdigits = this._d.slice(l - N);
105775 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
105776 };
105777
105778 /*
105779 Function: valueOf
105780 Convert a <BigInteger> to a native JavaScript integer.
105781
105782 This is called automatically by JavaScipt to convert a <BigInteger> to a
105783 native value.
105784
105785 Returns:
105786
105787 > parseInt(this.toString(), 10)
105788
105789 See Also:
105790
105791 <toString>, <toJSValue>
105792 */
105793 BigInteger.prototype.valueOf = function() {
105794 return parseInt(this.toString(), 10);
105795 };
105796
105797 /*
105798 Function: toJSValue
105799 Convert a <BigInteger> to a native JavaScript integer.
105800
105801 This is the same as valueOf, but more explicitly named.
105802
105803 Returns:
105804
105805 > parseInt(this.toString(), 10)
105806
105807 See Also:
105808
105809 <toString>, <valueOf>
105810 */
105811 BigInteger.prototype.toJSValue = function() {
105812 return parseInt(this.toString(), 10);
105813 };
105814
105815 var MAX_EXP = BigInteger(0x7FFFFFFF);
105816 // Constant: MAX_EXP
105817 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
105818 BigInteger.MAX_EXP = MAX_EXP;
105819
105820 (function() {
105821 function makeUnary(fn) {
105822 return function(a) {
105823 return fn.call(BigInteger(a));
105824 };
105825 }
105826
105827 function makeBinary(fn) {
105828 return function(a, b) {
105829 return fn.call(BigInteger(a), BigInteger(b));
105830 };
105831 }
105832
105833 function makeTrinary(fn) {
105834 return function(a, b, c) {
105835 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
105836 };
105837 }
105838
105839 (function() {
105840 var i, fn;
105841 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
105842 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
105843 var trinary = ["modPow"];
105844
105845 for (i = 0; i < unary.length; i++) {
105846 fn = unary[i];
105847 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
105848 }
105849
105850 for (i = 0; i < binary.length; i++) {
105851 fn = binary[i];
105852 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
105853 }
105854
105855 for (i = 0; i < trinary.length; i++) {
105856 fn = trinary[i];
105857 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
105858 }
105859
105860 BigInteger.exp10 = function(x, n) {
105861 return BigInteger(x).exp10(n);
105862 };
105863 })();
105864 })();
105865
105866 exports.BigInteger = BigInteger;
105867 })(typeof exports !== 'undefined' ? exports : this);
105868 </script>
105869 <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){
105870 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;
105871
105872 },{}],2:[function(require,module,exports){
105873 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;
105874
105875 },{"./scoring":6}],3:[function(require,module,exports){
105876 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(","),
105877 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(","),
105878 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(","),
105879 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(","),
105880 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;
105881
105882 },{}],4:[function(require,module,exports){
105883 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;
105884
105885 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
105886 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;
105887
105888 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
105889 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;
105890
105891 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
105892 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;
105893
105894 },{}]},{},[4])(4)
105895 });
105896
105897 </script>
105898 <script>/*
105899 * Detects entropy from a string.
105900 *
105901 * Formats include:
105902 * binary [0-1]
105903 * base 6 [0-5]
105904 * dice 6 [1-6]
105905 * decimal [0-9]
105906 * hexadecimal [0-9A-F]
105907 * card [A2-9TJQK][CDHS]
105908 *
105909 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
105910 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
105911 * entropy.
105912 */
105913
105914 window.Entropy = new (function() {
105915
105916 var TWO = new BigInteger(2);
105917
105918 // matchers returns an array of the matched events for each type of entropy.
105919 // eg
105920 // matchers.binary("010") returns ["0", "1", "0"]
105921 // matchers.binary("a10") returns ["1", "0"]
105922 // matchers.hex("a10") returns ["a", "1", "0"]
105923 var matchers = {
105924 binary: function(str) {
105925 return str.match(/[0-1]/gi) || [];
105926 },
105927 base6: function(str) {
105928 return str.match(/[0-5]/gi) || [];
105929 },
105930 dice: function(str) {
105931 return str.match(/[1-6]/gi) || []; // ie dice numbers
105932 },
105933 base10: function(str) {
105934 return str.match(/[0-9]/gi) || [];
105935 },
105936 hex: function(str) {
105937 return str.match(/[0-9A-F]/gi) || [];
105938 },
105939 card: function(str) {
105940 // Format is NumberSuit, eg
105941 // AH ace of hearts
105942 // 8C eight of clubs
105943 // TD ten of diamonds
105944 // JS jack of spades
105945 // QH queen of hearts
105946 // KC king of clubs
105947 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
105948 }
105949 }
105950
105951 // Convert array of cards from ["ac", "4d", "ks"]
105952 // to numbers between 0 and 51 [0, 16, 51]
105953 function convertCardsToInts(cards) {
105954 var ints = [];
105955 var values = "a23456789tjqk";
105956 var suits = "cdhs";
105957 for (var i=0; i<cards.length; i++) {
105958 var card = cards[i].toLowerCase();
105959 var value = card[0];
105960 var suit = card[1];
105961 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
105962 ints.push(asInt);
105963 }
105964 return ints;
105965 }
105966
105967 this.fromString = function(rawEntropyStr) {
105968 // Find type of entropy being used (binary, hex, dice etc)
105969 var base = getBase(rawEntropyStr);
105970 // Convert dice to base6 entropy (ie 1-6 to 0-5)
105971 // This is done by changing all 6s to 0s
105972 if (base.str == "dice") {
105973 var newParts = [];
105974 var newInts = [];
105975 for (var i=0; i<base.parts.length; i++) {
105976 var c = base.parts[i];
105977 if ("12345".indexOf(c) > -1) {
105978 newParts[i] = base.parts[i];
105979 newInts[i] = base.ints[i];
105980 }
105981 else {
105982 newParts[i] = "0";
105983 newInts[i] = 0;
105984 }
105985 }
105986 base.str = "base 6 (dice)";
105987 base.ints = newInts;
105988 base.parts = newParts;
105989 base.matcher = matchers.base6;
105990 }
105991 // Detect empty entropy
105992 if (base.parts.length == 0) {
105993 return {
105994 binaryStr: "",
105995 cleanStr: "",
105996 cleanHtml: "",
105997 base: base,
105998 };
105999 }
106000 // Convert base.ints to BigInteger.
106001 // Due to using unusual bases, eg cards of base52, this is not as simple as
106002 // using BigInteger.parse()
106003 var entropyInt = BigInteger.ZERO;
106004 for (var i=base.ints.length-1; i>=0; i--) {
106005 var thisInt = BigInteger.parse(base.ints[i]);
106006 var power = (base.ints.length - 1) - i;
106007 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
106008 entropyInt = entropyInt.add(additionalEntropy);
106009 }
106010 // Convert entropy to binary
106011 var entropyBin = entropyInt.toString(2);
106012 // If the first integer is small, it must be padded with zeros.
106013 // Otherwise the chance of the first bit being 1 is 100%, which is
106014 // obviously incorrect.
106015 // This is not perfect for non-2^n bases.
106016 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
106017 while (entropyBin.length < expectedBits) {
106018 entropyBin = "0" + entropyBin;
106019 }
106020 // Calculate the number of bits per event
106021 var bitsPerEvent = Math.log2(base.asInt);
106022 // Cards binary must be handled differently, since they're not replaced
106023 if (base.asInt == 52) {
106024 var cardEntropy = processCardEntropy(base.parts);
106025 entropyBin = cardEntropy.binaryStr;
106026 bitsPerEvent = cardEntropy.bitsPerEvent;
106027 }
106028 // Supply a 'filtered' entropy string for display purposes
106029 var entropyClean = base.parts.join("");
106030 var entropyHtml = base.parts.join("");
106031 if (base.asInt == 52) {
106032 entropyClean = base.parts.join(" ").toUpperCase();
106033 entropyClean = entropyClean.replace(/C/g, "\u2663");
106034 entropyClean = entropyClean.replace(/D/g, "\u2666");
106035 entropyClean = entropyClean.replace(/H/g, "\u2665");
106036 entropyClean = entropyClean.replace(/S/g, "\u2660");
106037 entropyHtml = base.parts.join(" ").toUpperCase();
106038 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
106039 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
106040 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
106041 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
106042 }
106043 // Return the result
106044 var e = {
106045 binaryStr: entropyBin,
106046 cleanStr: entropyClean,
106047 cleanHtml: entropyHtml,
106048 bitsPerEvent: bitsPerEvent,
106049 base: base,
106050 }
106051 return e;
106052 }
106053
106054 function getSortedDeck() {
106055 var s = [];
106056 var suits = "CDHS";
106057 var values = "A23456789TJQK";
106058 for (var i=0; i<suits.length; i++) {
106059 for (var j=0; j<values.length; j++) {
106060 s.push(values[j]+suits[i]);
106061 }
106062 }
106063 return s;
106064 }
106065
106066 function getBase(str) {
106067 // Need to get the lowest base for the supplied entropy.
106068 // This prevents interpreting, say, dice rolls as hexadecimal.
106069 var binaryMatches = matchers.binary(str);
106070 var hexMatches = matchers.hex(str);
106071 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
106072 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
106073 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
106074 return {
106075 ints: ints,
106076 parts: binaryMatches,
106077 matcher: matchers.binary,
106078 asInt: 2,
106079 str: "binary",
106080 }
106081 }
106082 var cardMatches = matchers.card(str);
106083 if (cardMatches.length >= hexMatches.length / 2) {
106084 var ints = convertCardsToInts(cardMatches);
106085 return {
106086 ints: ints,
106087 parts: cardMatches,
106088 matcher: matchers.card,
106089 asInt: 52,
106090 str: "card",
106091 }
106092 }
106093 var diceMatches = matchers.dice(str);
106094 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
106095 var ints = diceMatches.map(function(i) { return parseInt(i) });
106096 return {
106097 ints: ints,
106098 parts: diceMatches,
106099 matcher: matchers.dice,
106100 asInt: 6,
106101 str: "dice",
106102 }
106103 }
106104 var base6Matches = matchers.base6(str);
106105 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
106106 var ints = base6Matches.map(function(i) { return parseInt(i) });
106107 return {
106108 ints: ints,
106109 parts: base6Matches,
106110 matcher: matchers.base6,
106111 asInt: 6,
106112 str: "base 6",
106113 }
106114 }
106115 var base10Matches = matchers.base10(str);
106116 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
106117 var ints = base10Matches.map(function(i) { return parseInt(i) });
106118 return {
106119 ints: ints,
106120 parts: base10Matches,
106121 matcher: matchers.base10,
106122 asInt: 10,
106123 str: "base 10",
106124 }
106125 }
106126 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
106127 return {
106128 ints: ints,
106129 parts: hexMatches,
106130 matcher: matchers.hex,
106131 asInt: 16,
106132 str: "hexadecimal",
106133 }
106134 }
106135
106136 // Assume cards are NOT replaced.
106137 // Additional entropy decreases as more cards are used. This means
106138 // total possible entropy is measured using n!, not base^n.
106139 // eg the second last card can be only one of two, not one of fifty two
106140 // so the added entropy for that card is only one bit at most
106141 function processCardEntropy(cards) {
106142 // Track how many instances of each card have been used, and thus
106143 // how many decks are in use.
106144 var cardCounts = {};
106145 var numberOfDecks = 0;
106146 // Work out number of decks by max(duplicates)
106147 for (var i=0; i<cards.length; i++) {
106148 // Get the card that was drawn
106149 var cardLower = cards[i];
106150 var card = cardLower.toUpperCase();
106151 // Initialize the count for this card if needed
106152 if (!(card in cardCounts)) {
106153 cardCounts[card] = 0;
106154 }
106155 cardCounts[card] += 1;
106156 // See if this is max(duplicates)
106157 if (cardCounts[card] > numberOfDecks) {
106158 numberOfDecks = cardCounts[card];
106159 }
106160 }
106161 // Work out the total number of bits for this many decks
106162 // See http://crypto.stackexchange.com/q/41886
106163 var gainedBits = 0;
106164 // Equivalent of Math.log2(factorial(52*numberOfDecks))
106165 // which becomes infinity for numberOfDecks > 4
106166 for (var i=1; i<=52*numberOfDecks; i++) {
106167 gainedBits = gainedBits + Math.log2(i);
106168 }
106169 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
106170 var maxBits = gainedBits - lostBits;
106171 // Convert the drawn cards to a binary representation.
106172 // The exact technique for doing this is unclear.
106173 // See
106174 // http://crypto.stackexchange.com/a/41896
106175 // "I even doubt that this is well defined (only the average entropy
106176 // is, I believe)."
106177 // See
106178 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
106179 // "The binary representation can be the first log(permutations,2) bits
106180 // of the sha-2 hash of the normalized deck string."
106181 //
106182 // In this specific implementation, the first N bits of the hash of the
106183 // normalized cards string is being used. Uppercase, no spaces; eg
106184 // sha256("AH8DQSTC2H")
106185 var totalCards = numberOfDecks * 52;
106186 var percentUsed = cards.length / totalCards;
106187 // Calculate the average number of bits of entropy for the number of
106188 // cards drawn.
106189 var numberOfBits = Math.floor(maxBits * percentUsed);
106190 // Create a normalized string of the selected cards
106191 var normalizedCards = cards.join("").toUpperCase();
106192 // Convert to binary using the SHA256 hash of the normalized cards.
106193 // If the number of bits is more than 256, multiple hashes
106194 // are used until the required number of bits is reached.
106195 var entropyBin = "";
106196 var iterations = 0;
106197 while (entropyBin.length < numberOfBits) {
106198 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
106199 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
106200 for (var i=0; i<hashHex.length; i++) {
106201 var decimal = parseInt(hashHex[i], 16);
106202 var binary = decimal.toString(2);
106203 while (binary.length < 4) {
106204 binary = "0" + binary;
106205 }
106206 entropyBin = entropyBin + binary;
106207 }
106208 iterations = iterations + 1;
106209 }
106210 // Truncate to the appropriate number of bits.
106211 entropyBin = entropyBin.substring(0, numberOfBits);
106212 // Get the number of bits per event
106213 bitsPerEvent = maxBits / totalCards;
106214 return {
106215 binaryStr: entropyBin,
106216 bitsPerEvent: bitsPerEvent,
106217 }
106218 }
106219
106220 // Polyfill for Math.log2
106221 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
106222 Math.log2 = Math.log2 || function(x) {
106223 // The polyfill isn't good enough because of the poor accuracy of
106224 // Math.LOG2E
106225 // log2(8) gave 2.9999999999999996 which when floored causes issues.
106226 // So instead use the BigInteger library to get it right.
106227 return BigInteger.log(x) / BigInteger.log(2);
106228 };
106229
106230 // Depends on BigInteger
106231 function factorial(n) {
106232 if (n == 0) {
106233 return 1;
106234 }
106235 f = BigInteger.ONE;
106236 for (var i=1; i<=n; i++) {
106237 f = f.multiply(new BigInteger(i));
106238 }
106239 return f;
106240 }
106241
106242 })();
106243 </script>
106244 <script>(function() {
106245
106246 // mnemonics is populated as required by getLanguage
106247 var mnemonics = { "english": new Mnemonic("english") };
106248 var mnemonic = mnemonics["english"];
106249 var seed = null;
106250 var bip32RootKey = null;
106251 var bip32ExtendedKey = null;
106252 var network = bitcoinjs.bitcoin.networks.bitcoin;
106253 var addressRowTemplate = $("#address-row-template");
106254
106255 var showIndex = true;
106256 var showAddress = true;
106257 var showPubKey = true;
106258 var showPrivKey = true;
106259 var showQr = false;
106260 var litecoinUseLtub = true;
106261
106262 var entropyChangeTimeoutEvent = null;
106263 var phraseChangeTimeoutEvent = null;
106264 var rootKeyChangedTimeoutEvent = null;
106265
106266 var generationProcesses = [];
106267
106268 var DOM = {};
106269 DOM.privacyScreenToggle = $(".privacy-screen-toggle");
106270 DOM.network = $(".network");
106271 DOM.bip32Client = $("#bip32-client");
106272 DOM.phraseNetwork = $("#network-phrase");
106273 DOM.useEntropy = $(".use-entropy");
106274 DOM.entropyContainer = $(".entropy-container");
106275 DOM.entropy = $(".entropy");
106276 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
106277 DOM.entropyType = DOM.entropyContainer.find(".type");
106278 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
106279 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
106280 DOM.entropyBits = DOM.entropyContainer.find(".bits");
106281 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
106282 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
106283 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
106284 DOM.entropyWordIndexes = DOM.entropyContainer.find(".word-indexes");
106285 DOM.entropyChecksum = DOM.entropyContainer.find(".checksum");
106286 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
106287 DOM.entropyWeakEntropyOverrideWarning = DOM.entropyContainer.find(".weak-entropy-override-warning");
106288 DOM.entropyFilterWarning = DOM.entropyContainer.find(".filter-warning");
106289 DOM.phrase = $(".phrase");
106290 DOM.passphrase = $(".passphrase");
106291 DOM.generateContainer = $(".generate-container");
106292 DOM.generate = $(".generate");
106293 DOM.seed = $(".seed");
106294 DOM.rootKey = $(".root-key");
106295 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
106296 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
106297 DOM.extendedPrivKey = $(".extended-priv-key");
106298 DOM.extendedPubKey = $(".extended-pub-key");
106299 DOM.bip32tab = $("#bip32-tab");
106300 DOM.bip44tab = $("#bip44-tab");
106301 DOM.bip49tab = $("#bip49-tab");
106302 DOM.bip84tab = $("#bip84-tab");
106303 DOM.bip141tab = $("#bip141-tab");
106304 DOM.bip32panel = $("#bip32");
106305 DOM.bip44panel = $("#bip44");
106306 DOM.bip49panel = $("#bip49");
106307 DOM.bip32path = $("#bip32-path");
106308 DOM.bip44path = $("#bip44-path");
106309 DOM.bip44purpose = $("#bip44 .purpose");
106310 DOM.bip44coin = $("#bip44 .coin");
106311 DOM.bip44account = $("#bip44 .account");
106312 DOM.bip44accountXprv = $("#bip44 .account-xprv");
106313 DOM.bip44accountXpub = $("#bip44 .account-xpub");
106314 DOM.bip44change = $("#bip44 .change");
106315 DOM.bip49unavailable = $("#bip49 .unavailable");
106316 DOM.bip49available = $("#bip49 .available");
106317 DOM.bip49path = $("#bip49-path");
106318 DOM.bip49purpose = $("#bip49 .purpose");
106319 DOM.bip49coin = $("#bip49 .coin");
106320 DOM.bip49account = $("#bip49 .account");
106321 DOM.bip49accountXprv = $("#bip49 .account-xprv");
106322 DOM.bip49accountXpub = $("#bip49 .account-xpub");
106323 DOM.bip49change = $("#bip49 .change");
106324 DOM.bip84unavailable = $("#bip84 .unavailable");
106325 DOM.bip84available = $("#bip84 .available");
106326 DOM.bip84path = $("#bip84-path");
106327 DOM.bip84purpose = $("#bip84 .purpose");
106328 DOM.bip84coin = $("#bip84 .coin");
106329 DOM.bip84account = $("#bip84 .account");
106330 DOM.bip84accountXprv = $("#bip84 .account-xprv");
106331 DOM.bip84accountXpub = $("#bip84 .account-xpub");
106332 DOM.bip84change = $("#bip84 .change");
106333 DOM.bip141unavailable = $("#bip141 .unavailable");
106334 DOM.bip141available = $("#bip141 .available");
106335 DOM.bip141path = $("#bip141-path");
106336 DOM.bip141semantics = $(".bip141-semantics");
106337 DOM.generatedStrength = $(".generate-container .strength");
106338 DOM.generatedStrengthWarning = $(".generate-container .warning");
106339 DOM.hardenedAddresses = $(".hardened-addresses");
106340 DOM.bitcoinCashAddressTypeContainer = $(".bch-addr-type-container");
106341 DOM.bitcoinCashAddressType = $("[name=bch-addr-type]")
106342 DOM.useBip38 = $(".use-bip38");
106343 DOM.bip38Password = $(".bip38-password");
106344 DOM.addresses = $(".addresses");
106345 DOM.csvTab = $("#csv-tab a");
106346 DOM.csv = $(".csv");
106347 DOM.rowsToAdd = $(".rows-to-add");
106348 DOM.more = $(".more");
106349 DOM.moreRowsStartIndex = $(".more-rows-start-index");
106350 DOM.feedback = $(".feedback");
106351 DOM.tab = $(".derivation-type a");
106352 DOM.indexToggle = $(".index-toggle");
106353 DOM.addressToggle = $(".address-toggle");
106354 DOM.publicKeyToggle = $(".public-key-toggle");
106355 DOM.privateKeyToggle = $(".private-key-toggle");
106356 DOM.languages = $(".languages a");
106357 DOM.qrContainer = $(".qr-container");
106358 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
106359 DOM.qrImage = DOM.qrContainer.find(".qr-image");
106360 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
106361 DOM.showQrEls = $("[data-show-qr]");
106362
106363 function init() {
106364 // Events
106365 DOM.privacyScreenToggle.on("change", privacyScreenToggled);
106366 DOM.generatedStrength.on("change", generatedStrengthChanged);
106367 DOM.network.on("change", networkChanged);
106368 DOM.bip32Client.on("change", bip32ClientChanged);
106369 DOM.useEntropy.on("change", setEntropyVisibility);
106370 DOM.entropy.on("input", delayedEntropyChanged);
106371 DOM.entropyMnemonicLength.on("change", entropyChanged);
106372 DOM.phrase.on("input", delayedPhraseChanged);
106373 DOM.passphrase.on("input", delayedPhraseChanged);
106374 DOM.generate.on("click", generateClicked);
106375 DOM.more.on("click", showMore);
106376 DOM.rootKey.on("input", delayedRootKeyChanged);
106377 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
106378 DOM.bip32path.on("input", calcForDerivationPath);
106379 DOM.bip44account.on("input", calcForDerivationPath);
106380 DOM.bip44change.on("input", calcForDerivationPath);
106381 DOM.bip49account.on("input", calcForDerivationPath);
106382 DOM.bip49change.on("input", calcForDerivationPath);
106383 DOM.bip84account.on("input", calcForDerivationPath);
106384 DOM.bip84change.on("input", calcForDerivationPath);
106385 DOM.bip141path.on("input", calcForDerivationPath);
106386 DOM.bip141semantics.on("change", tabChanged);
106387 DOM.tab.on("shown.bs.tab", tabChanged);
106388 DOM.hardenedAddresses.on("change", calcForDerivationPath);
106389 DOM.useBip38.on("change", calcForDerivationPath);
106390 DOM.bip38Password.on("change", calcForDerivationPath);
106391 DOM.indexToggle.on("click", toggleIndexes);
106392 DOM.addressToggle.on("click", toggleAddresses);
106393 DOM.publicKeyToggle.on("click", togglePublicKeys);
106394 DOM.privateKeyToggle.on("click", togglePrivateKeys);
106395 DOM.csvTab.on("click", updateCsv);
106396 DOM.languages.on("click", languageChanged);
106397 DOM.bitcoinCashAddressType.on("change", bitcoinCashAddressTypeChange);
106398 setQrEvents(DOM.showQrEls);
106399 disableForms();
106400 hidePending();
106401 hideValidationError();
106402 populateNetworkSelect();
106403 populateClientSelect();
106404 }
106405
106406 // Event handlers
106407
106408 function generatedStrengthChanged() {
106409 var strength = parseInt(DOM.generatedStrength.val());
106410 if (strength < 12) {
106411 DOM.generatedStrengthWarning.removeClass("hidden");
106412 }
106413 else {
106414 DOM.generatedStrengthWarning.addClass("hidden");
106415 }
106416 }
106417
106418 function networkChanged(e) {
106419 clearDerivedKeys();
106420 clearAddressesList();
106421 DOM.litecoinLtubContainer.addClass("hidden");
106422 DOM.bitcoinCashAddressTypeContainer.addClass("hidden");
106423 var networkIndex = e.target.value;
106424 var network = networks[networkIndex];
106425 network.onSelect();
106426 adjustNetworkForSegwit();
106427 if (seed != null) {
106428 phraseChanged();
106429 }
106430 else {
106431 rootKeyChanged();
106432 }
106433 }
106434
106435 function bip32ClientChanged(e) {
106436 var clientIndex = DOM.bip32Client.val();
106437 if (clientIndex == "custom") {
106438 DOM.bip32path.prop("readonly", false);
106439 }
106440 else {
106441 DOM.bip32path.prop("readonly", true);
106442 clients[clientIndex].onSelect();
106443 if (seed != null) {
106444 phraseChanged();
106445 }
106446 else {
106447 rootKeyChanged();
106448 }
106449 }
106450 }
106451
106452 function setEntropyVisibility() {
106453 if (isUsingOwnEntropy()) {
106454 DOM.entropyContainer.removeClass("hidden");
106455 DOM.generateContainer.addClass("hidden");
106456 DOM.phrase.prop("readonly", true);
106457 DOM.entropy.focus();
106458 entropyChanged();
106459 }
106460 else {
106461 DOM.entropyContainer.addClass("hidden");
106462 DOM.generateContainer.removeClass("hidden");
106463 DOM.phrase.prop("readonly", false);
106464 hidePending();
106465 }
106466 }
106467
106468 function delayedPhraseChanged() {
106469 hideValidationError();
106470 seed = null;
106471 bip32RootKey = null;
106472 bip32ExtendedKey = null;
106473 clearAddressesList();
106474 showPending();
106475 if (phraseChangeTimeoutEvent != null) {
106476 clearTimeout(phraseChangeTimeoutEvent);
106477 }
106478 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
106479 }
106480
106481 function phraseChanged() {
106482 showPending();
106483 setMnemonicLanguage();
106484 // Get the mnemonic phrase
106485 var phrase = DOM.phrase.val();
106486 var errorText = findPhraseErrors(phrase);
106487 if (errorText) {
106488 showValidationError(errorText);
106489 return;
106490 }
106491 // Calculate and display
106492 var passphrase = DOM.passphrase.val();
106493 calcBip32RootKeyFromSeed(phrase, passphrase);
106494 calcForDerivationPath();
106495 // Show the word indexes
106496 showWordIndexes();
106497 }
106498
106499 function tabChanged() {
106500 showPending();
106501 adjustNetworkForSegwit();
106502 var phrase = DOM.phrase.val();
106503 if (phrase != "") {
106504 // Calculate and display for mnemonic
106505 var errorText = findPhraseErrors(phrase);
106506 if (errorText) {
106507 showValidationError(errorText);
106508 return;
106509 }
106510 // Calculate and display
106511 var passphrase = DOM.passphrase.val();
106512 calcBip32RootKeyFromSeed(phrase, passphrase);
106513 }
106514 else {
106515 // Calculate and display for root key
106516 var rootKeyBase58 = DOM.rootKey.val();
106517 var errorText = validateRootKey(rootKeyBase58);
106518 if (errorText) {
106519 showValidationError(errorText);
106520 return;
106521 }
106522 // Calculate and display
106523 calcBip32RootKeyFromBase58(rootKeyBase58);
106524 }
106525 calcForDerivationPath();
106526 }
106527
106528 function delayedEntropyChanged() {
106529 hideValidationError();
106530 showPending();
106531 if (entropyChangeTimeoutEvent != null) {
106532 clearTimeout(entropyChangeTimeoutEvent);
106533 }
106534 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
106535 }
106536
106537 function entropyChanged() {
106538 // If blank entropy, clear mnemonic, addresses, errors
106539 if (DOM.entropy.val().trim().length == 0) {
106540 clearDisplay();
106541 clearEntropyFeedback();
106542 DOM.phrase.val("");
106543 showValidationError("Blank entropy");
106544 return;
106545 }
106546 // Get the current phrase to detect changes
106547 var phrase = DOM.phrase.val();
106548 // Set the phrase from the entropy
106549 setMnemonicFromEntropy();
106550 // Recalc addresses if the phrase has changed
106551 var newPhrase = DOM.phrase.val();
106552 if (newPhrase != phrase) {
106553 if (newPhrase.length == 0) {
106554 clearDisplay();
106555 }
106556 else {
106557 phraseChanged();
106558 }
106559 }
106560 else {
106561 hidePending();
106562 }
106563 }
106564
106565 function delayedRootKeyChanged() {
106566 // Warn if there is an existing mnemonic or passphrase.
106567 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
106568 if (!confirm("This will clear existing mnemonic and passphrase")) {
106569 DOM.rootKey.val(bip32RootKey);
106570 return
106571 }
106572 }
106573 hideValidationError();
106574 showPending();
106575 // Clear existing mnemonic and passphrase
106576 DOM.phrase.val("");
106577 DOM.passphrase.val("");
106578 seed = null;
106579 if (rootKeyChangedTimeoutEvent != null) {
106580 clearTimeout(rootKeyChangedTimeoutEvent);
106581 }
106582 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
106583 }
106584
106585 function rootKeyChanged() {
106586 showPending();
106587 hideValidationError();
106588 var rootKeyBase58 = DOM.rootKey.val();
106589 var errorText = validateRootKey(rootKeyBase58);
106590 if (errorText) {
106591 showValidationError(errorText);
106592 return;
106593 }
106594 // Calculate and display
106595 calcBip32RootKeyFromBase58(rootKeyBase58);
106596 calcForDerivationPath();
106597 }
106598
106599 function litecoinUseLtubChanged() {
106600 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
106601 if (litecoinUseLtub) {
106602 network = bitcoinjs.bitcoin.networks.litecoin;
106603 }
106604 else {
106605 network = bitcoinjs.bitcoin.networks.litecoinXprv;
106606 }
106607 phraseChanged();
106608 }
106609
106610 function calcForDerivationPath() {
106611 clearDerivedKeys();
106612 clearAddressesList();
106613 showPending();
106614 // Don't show segwit if it's selected but network doesn't support it
106615 if (segwitSelected() && !networkHasSegwit()) {
106616 showSegwitUnavailable();
106617 hidePending();
106618 return;
106619 }
106620 showSegwitAvailable();
106621 // Get the derivation path
106622 var derivationPath = getDerivationPath();
106623 var errorText = findDerivationPathErrors(derivationPath);
106624 if (errorText) {
106625 showValidationError(errorText);
106626 return;
106627 }
106628 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
106629 if (bip44TabSelected()) {
106630 displayBip44Info();
106631 }
106632 else if (bip49TabSelected()) {
106633 displayBip49Info();
106634 }
106635 else if (bip84TabSelected()) {
106636 displayBip84Info();
106637 }
106638 displayBip32Info();
106639 }
106640
106641 function generateClicked() {
106642 if (isUsingOwnEntropy()) {
106643 return;
106644 }
106645 clearDisplay();
106646 showPending();
106647 setTimeout(function() {
106648 setMnemonicLanguage();
106649 var phrase = generateRandomPhrase();
106650 if (!phrase) {
106651 return;
106652 }
106653 phraseChanged();
106654 }, 50);
106655 }
106656
106657 function languageChanged() {
106658 setTimeout(function() {
106659 setMnemonicLanguage();
106660 if (DOM.phrase.val().length > 0) {
106661 var newPhrase = convertPhraseToNewLanguage();
106662 DOM.phrase.val(newPhrase);
106663 phraseChanged();
106664 }
106665 else {
106666 DOM.generate.trigger("click");
106667 }
106668 }, 50);
106669 }
106670
106671 function bitcoinCashAddressTypeChange() {
106672 phraseChanged();
106673 }
106674
106675 function toggleIndexes() {
106676 showIndex = !showIndex;
106677 $("td.index span").toggleClass("invisible");
106678 }
106679
106680 function toggleAddresses() {
106681 showAddress = !showAddress;
106682 $("td.address span").toggleClass("invisible");
106683 }
106684
106685 function togglePublicKeys() {
106686 showPubKey = !showPubKey;
106687 $("td.pubkey span").toggleClass("invisible");
106688 }
106689
106690 function togglePrivateKeys() {
106691 showPrivKey = !showPrivKey;
106692 $("td.privkey span").toggleClass("invisible");
106693 }
106694
106695 function privacyScreenToggled() {
106696 // private-data contains elements added to DOM at runtime
106697 // so catch all by adding visual privacy class to the root of the DOM
106698 if (DOM.privacyScreenToggle.prop("checked")) {
106699 $("body").addClass("visual-privacy");
106700 }
106701 else {
106702 $("body").removeClass("visual-privacy");
106703 }
106704 }
106705
106706 // Private methods
106707
106708 function generateRandomPhrase() {
106709 if (!hasStrongRandom()) {
106710 var errorText = "This browser does not support strong randomness";
106711 showValidationError(errorText);
106712 return;
106713 }
106714 // get the amount of entropy to use
106715 var numWords = parseInt(DOM.generatedStrength.val());
106716 var strength = numWords / 3 * 32;
106717 var buffer = new Uint8Array(strength / 8);
106718 // create secure entropy
106719 var data = crypto.getRandomValues(buffer);
106720 // show the words
106721 var words = mnemonic.toMnemonic(data);
106722 DOM.phrase.val(words);
106723 // show the entropy
106724 var entropyHex = uint8ArrayToHex(data);
106725 DOM.entropy.val(entropyHex);
106726 // ensure entropy fields are consistent with what is being displayed
106727 DOM.entropyMnemonicLength.val("raw");
106728 return words;
106729 }
106730
106731 function calcBip32RootKeyFromSeed(phrase, passphrase) {
106732 seed = mnemonic.toSeed(phrase, passphrase);
106733 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
106734 }
106735
106736 function calcBip32RootKeyFromBase58(rootKeyBase58) {
106737 // try parsing with various segwit network params since this extended
106738 // key may be from any one of them.
106739 if (networkHasSegwit()) {
106740 var n = network;
106741 if ("baseNetwork" in n) {
106742 n = bitcoinjs.bitcoin.networks[n.baseNetwork];
106743 }
106744 // try parsing using base network params
106745 try {
106746 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
106747 return;
106748 }
106749 catch (e) {}
106750 // try parsing using p2wpkh params
106751 if ("p2wpkh" in n) {
106752 try {
106753 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
106754 return;
106755 }
106756 catch (e) {}
106757 }
106758 // try parsing using p2wpkh-in-p2sh network params
106759 if ("p2wpkhInP2sh" in n) {
106760 try {
106761 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
106762 return;
106763 }
106764 catch (e) {}
106765 }
106766 }
106767 // try the network params as currently specified
106768 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
106769 }
106770
106771 function calcBip32ExtendedKey(path) {
106772 // Check there's a root key to derive from
106773 if (!bip32RootKey) {
106774 return bip32RootKey;
106775 }
106776 var extendedKey = bip32RootKey;
106777 // Derive the key from the path
106778 var pathBits = path.split("/");
106779 for (var i=0; i<pathBits.length; i++) {
106780 var bit = pathBits[i];
106781 var index = parseInt(bit);
106782 if (isNaN(index)) {
106783 continue;
106784 }
106785 var hardened = bit[bit.length-1] == "'";
106786 var isPriv = !(extendedKey.isNeutered());
106787 var invalidDerivationPath = hardened && !isPriv;
106788 if (invalidDerivationPath) {
106789 extendedKey = null;
106790 }
106791 else if (hardened) {
106792 extendedKey = extendedKey.deriveHardened(index);
106793 }
106794 else {
106795 extendedKey = extendedKey.derive(index);
106796 }
106797 }
106798 return extendedKey
106799 }
106800
106801 function showValidationError(errorText) {
106802 DOM.feedback
106803 .text(errorText)
106804 .show();
106805 }
106806
106807 function hideValidationError() {
106808 DOM.feedback
106809 .text("")
106810 .hide();
106811 }
106812
106813 function findPhraseErrors(phrase) {
106814 // Preprocess the words
106815 phrase = mnemonic.normalizeString(phrase);
106816 var words = phraseToWordArray(phrase);
106817 // Detect blank phrase
106818 if (words.length == 0) {
106819 return "Blank mnemonic";
106820 }
106821 // Check each word
106822 for (var i=0; i<words.length; i++) {
106823 var word = words[i];
106824 var language = getLanguage();
106825 if (WORDLISTS[language].indexOf(word) == -1) {
106826 console.log("Finding closest match to " + word);
106827 var nearestWord = findNearestWord(word);
106828 return word + " not in wordlist, did you mean " + nearestWord + "?";
106829 }
106830 }
106831 // Check the words are valid
106832 var properPhrase = wordArrayToPhrase(words);
106833 var isValid = mnemonic.check(properPhrase);
106834 if (!isValid) {
106835 return "Invalid mnemonic";
106836 }
106837 return false;
106838 }
106839
106840 function validateRootKey(rootKeyBase58) {
106841 // try various segwit network params since this extended key may be from
106842 // any one of them.
106843 if (networkHasSegwit()) {
106844 var n = network;
106845 if ("baseNetwork" in n) {
106846 n = bitcoinjs.bitcoin.networks[n.baseNetwork];
106847 }
106848 // try parsing using base network params
106849 try {
106850 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n);
106851 return "";
106852 }
106853 catch (e) {}
106854 // try parsing using p2wpkh params
106855 if ("p2wpkh" in n) {
106856 try {
106857 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkh);
106858 return "";
106859 }
106860 catch (e) {}
106861 }
106862 // try parsing using p2wpkh-in-p2sh network params
106863 if ("p2wpkhInP2sh" in n) {
106864 try {
106865 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, n.p2wpkhInP2sh);
106866 return "";
106867 }
106868 catch (e) {}
106869 }
106870 }
106871 // try the network params as currently specified
106872 try {
106873 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
106874 }
106875 catch (e) {
106876 return "Invalid root key";
106877 }
106878 return "";
106879 }
106880
106881 function getDerivationPath() {
106882 if (bip44TabSelected()) {
106883 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
106884 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
106885 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
106886 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
106887 var path = "m/";
106888 path += purpose + "'/";
106889 path += coin + "'/";
106890 path += account + "'/";
106891 path += change;
106892 DOM.bip44path.val(path);
106893 var derivationPath = DOM.bip44path.val();
106894 console.log("Using derivation path from BIP44 tab: " + derivationPath);
106895 return derivationPath;
106896 }
106897 else if (bip49TabSelected()) {
106898 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
106899 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
106900 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
106901 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
106902 var path = "m/";
106903 path += purpose + "'/";
106904 path += coin + "'/";
106905 path += account + "'/";
106906 path += change;
106907 DOM.bip49path.val(path);
106908 var derivationPath = DOM.bip49path.val();
106909 console.log("Using derivation path from BIP49 tab: " + derivationPath);
106910 return derivationPath;
106911 }
106912 else if (bip84TabSelected()) {
106913 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
106914 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
106915 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
106916 var change = parseIntNoNaN(DOM.bip84change.val(), 0);
106917 var path = "m/";
106918 path += purpose + "'/";
106919 path += coin + "'/";
106920 path += account + "'/";
106921 path += change;
106922 DOM.bip84path.val(path);
106923 var derivationPath = DOM.bip84path.val();
106924 console.log("Using derivation path from BIP84 tab: " + derivationPath);
106925 return derivationPath;
106926 }
106927 else if (bip32TabSelected()) {
106928 var derivationPath = DOM.bip32path.val();
106929 console.log("Using derivation path from BIP32 tab: " + derivationPath);
106930 return derivationPath;
106931 }
106932 else if (bip141TabSelected()) {
106933 var derivationPath = DOM.bip141path.val();
106934 console.log("Using derivation path from BIP141 tab: " + derivationPath);
106935 return derivationPath;
106936 }
106937 else {
106938 console.log("Unknown derivation path");
106939 }
106940 }
106941
106942 function findDerivationPathErrors(path) {
106943 // TODO is not perfect but is better than nothing
106944 // Inspired by
106945 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
106946 // and
106947 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
106948 var maxDepth = 255; // TODO verify this!!
106949 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
106950 if (path[0] != "m") {
106951 return "First character must be 'm'";
106952 }
106953 if (path.length > 1) {
106954 if (path[1] != "/") {
106955 return "Separator must be '/'";
106956 }
106957 var indexes = path.split("/");
106958 if (indexes.length > maxDepth) {
106959 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
106960 }
106961 for (var depth = 1; depth<indexes.length; depth++) {
106962 var index = indexes[depth];
106963 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
106964 if (invalidChars.length > 0) {
106965 return "Invalid characters " + invalidChars + " found at depth " + depth;
106966 }
106967 var indexValue = parseInt(index.replace("'", ""));
106968 if (isNaN(depth)) {
106969 return "Invalid number at depth " + depth;
106970 }
106971 if (indexValue > maxIndexValue) {
106972 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
106973 }
106974 }
106975 }
106976 // Check root key exists or else derivation path is useless!
106977 if (!bip32RootKey) {
106978 return "No root key";
106979 }
106980 // Check no hardened derivation path when using xpub keys
106981 var hardenedPath = path.indexOf("'") > -1;
106982 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
106983 var hardened = hardenedPath || hardenedAddresses;
106984 var isXpubkey = bip32RootKey.isNeutered();
106985 if (hardened && isXpubkey) {
106986 return "Hardened derivation path is invalid with xpub key";
106987 }
106988 return false;
106989 }
106990
106991 function displayBip44Info() {
106992 // Get the derivation path for the account
106993 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
106994 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
106995 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
106996 var path = "m/";
106997 path += purpose + "'/";
106998 path += coin + "'/";
106999 path += account + "'/";
107000 // Calculate the account extended keys
107001 var accountExtendedKey = calcBip32ExtendedKey(path);
107002 var accountXprv = accountExtendedKey.toBase58();
107003 var accountXpub = accountExtendedKey.neutered().toBase58();
107004 // Display the extended keys
107005 DOM.bip44accountXprv.val(accountXprv);
107006 DOM.bip44accountXpub.val(accountXpub);
107007 }
107008
107009 function displayBip49Info() {
107010 // Get the derivation path for the account
107011 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
107012 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
107013 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
107014 var path = "m/";
107015 path += purpose + "'/";
107016 path += coin + "'/";
107017 path += account + "'/";
107018 // Calculate the account extended keys
107019 var accountExtendedKey = calcBip32ExtendedKey(path);
107020 var accountXprv = accountExtendedKey.toBase58();
107021 var accountXpub = accountExtendedKey.neutered().toBase58();
107022 // Display the extended keys
107023 DOM.bip49accountXprv.val(accountXprv);
107024 DOM.bip49accountXpub.val(accountXpub);
107025 }
107026
107027 function displayBip84Info() {
107028 // Get the derivation path for the account
107029 var purpose = parseIntNoNaN(DOM.bip84purpose.val(), 84);
107030 var coin = parseIntNoNaN(DOM.bip84coin.val(), 0);
107031 var account = parseIntNoNaN(DOM.bip84account.val(), 0);
107032 var path = "m/";
107033 path += purpose + "'/";
107034 path += coin + "'/";
107035 path += account + "'/";
107036 // Calculate the account extended keys
107037 var accountExtendedKey = calcBip32ExtendedKey(path);
107038 var accountXprv = accountExtendedKey.toBase58();
107039 var accountXpub = accountExtendedKey.neutered().toBase58();
107040 // Display the extended keys
107041 DOM.bip84accountXprv.val(accountXprv);
107042 DOM.bip84accountXpub.val(accountXpub);
107043 }
107044
107045 function displayBip32Info() {
107046 // Display the key
107047 DOM.seed.val(seed);
107048 var rootKey = bip32RootKey.toBase58();
107049 DOM.rootKey.val(rootKey);
107050 var xprvkeyB58 = "NA";
107051 if (!bip32ExtendedKey.isNeutered()) {
107052 xprvkeyB58 = bip32ExtendedKey.toBase58();
107053 }
107054 var extendedPrivKey = xprvkeyB58;
107055 DOM.extendedPrivKey.val(extendedPrivKey);
107056 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
107057 DOM.extendedPubKey.val(extendedPubKey);
107058 // Display the addresses and privkeys
107059 clearAddressesList();
107060 var initialAddressCount = parseInt(DOM.rowsToAdd.val());
107061 displayAddresses(0, initialAddressCount);
107062 }
107063
107064 function displayAddresses(start, total) {
107065 generationProcesses.push(new (function() {
107066
107067 var rows = [];
107068
107069 this.stop = function() {
107070 for (var i=0; i<rows.length; i++) {
107071 rows[i].shouldGenerate = false;
107072 }
107073 hidePending();
107074 }
107075
107076 for (var i=0; i<total; i++) {
107077 var index = i + start;
107078 var isLast = i == total - 1;
107079 rows.push(new TableRow(index, isLast));
107080 }
107081
107082 })());
107083 }
107084
107085 function segwitSelected() {
107086 return bip49TabSelected() || bip84TabSelected() || bip141TabSelected();
107087 }
107088
107089 function p2wpkhSelected() {
107090 return bip84TabSelected() ||
107091 bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh";
107092 }
107093
107094 function p2wpkhInP2shSelected() {
107095 return bip49TabSelected() ||
107096 (bip141TabSelected() && DOM.bip141semantics.val() == "p2wpkh-p2sh");
107097 }
107098
107099 function TableRow(index, isLast) {
107100
107101 var self = this;
107102 this.shouldGenerate = true;
107103 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
107104 var useBip38 = DOM.useBip38.prop("checked");
107105 var bip38password = DOM.bip38Password.val();
107106 var isSegwit = segwitSelected();
107107 var segwitAvailable = networkHasSegwit();
107108 var isP2wpkh = p2wpkhSelected();
107109 var isP2wpkhInP2sh = p2wpkhInP2shSelected();
107110
107111 function init() {
107112 calculateValues();
107113 }
107114
107115 function calculateValues() {
107116 setTimeout(function() {
107117 if (!self.shouldGenerate) {
107118 return;
107119 }
107120 // derive HDkey for this row of the table
107121 var key = "NA";
107122 if (useHardenedAddresses) {
107123 key = bip32ExtendedKey.deriveHardened(index);
107124 }
107125 else {
107126 key = bip32ExtendedKey.derive(index);
107127 }
107128 // bip38 requires uncompressed keys
107129 // see https://github.com/iancoleman/bip39/issues/140#issuecomment-352164035
107130 var keyPair = key.keyPair;
107131 var useUncompressed = useBip38;
107132 if (useUncompressed) {
107133 keyPair = new bitcoinjs.bitcoin.ECPair(keyPair.d, null, { network: network, compressed: false });
107134 }
107135 // get address
107136 var address = keyPair.getAddress().toString();
107137 // get privkey
107138 var hasPrivkey = !key.isNeutered();
107139 var privkey = "NA";
107140 if (hasPrivkey) {
107141 privkey = keyPair.toWIF();
107142 // BIP38 encode private key if required
107143 if (useBip38) {
107144 privkey = bitcoinjsBip38.encrypt(keyPair.d.toBuffer(), false, bip38password, function(p) {
107145 console.log("Progressed " + p.percent.toFixed(1) + "% for index " + index);
107146 });
107147 }
107148 }
107149 // get pubkey
107150 var pubkey = keyPair.getPublicKeyBuffer().toString('hex');
107151 var indexText = getDerivationPath() + "/" + index;
107152 if (useHardenedAddresses) {
107153 indexText = indexText + "'";
107154 }
107155 // Ethereum values are different
107156 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
107157 var privKeyBuffer = keyPair.d.toBuffer(32);
107158 privkey = privKeyBuffer.toString('hex');
107159 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
107160 var hexAddress = addressBuffer.toString('hex');
107161 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
107162 address = ethUtil.addHexPrefix(checksumAddress);
107163 privkey = ethUtil.addHexPrefix(privkey);
107164 pubkey = ethUtil.addHexPrefix(pubkey);
107165 }
107166 // Ripple values are different
107167 if (networks[DOM.network.val()].name == "XRP - Ripple") {
107168 privkey = convertRipplePriv(privkey);
107169 address = convertRippleAdrr(address);
107170 }
107171 // Bitcoin Cash address format may vary
107172 if (networks[DOM.network.val()].name == "BCH - Bitcoin Cash") {
107173 var bchAddrType = DOM.bitcoinCashAddressType.filter(":checked").val();
107174 if (bchAddrType == "cashaddr") {
107175 address = bchaddr.toCashAddress(address);
107176 }
107177 else if (bchAddrType == "bitpay") {
107178 address = bchaddr.toBitpayAddress(address);
107179 }
107180 }
107181 // Segwit addresses are different
107182 if (isSegwit) {
107183 if (!segwitAvailable) {
107184 return;
107185 }
107186 if (isP2wpkh) {
107187 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
107188 var scriptpubkey = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
107189 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
107190 }
107191 else if (isP2wpkhInP2sh) {
107192 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
107193 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
107194 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
107195 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
107196 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
107197 }
107198 }
107199 addAddressToList(indexText, address, pubkey, privkey);
107200 if (isLast) {
107201 hidePending();
107202 updateCsv();
107203 }
107204 }, 50)
107205 }
107206
107207 init();
107208
107209 }
107210
107211 function showMore() {
107212 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
107213 if (isNaN(rowsToAdd)) {
107214 rowsToAdd = 20;
107215 DOM.rowsToAdd.val("20");
107216 }
107217 var start = parseInt(DOM.moreRowsStartIndex.val())
107218 if (isNaN(start)) {
107219 start = lastIndexInTable() + 1;
107220 }
107221 else {
107222 var newStart = start + rowsToAdd;
107223 DOM.moreRowsStartIndex.val(newStart);
107224 }
107225 if (rowsToAdd > 200) {
107226 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
107227 msg += "Do you want to continue?";
107228 if (!confirm(msg)) {
107229 return;
107230 }
107231 }
107232 displayAddresses(start, rowsToAdd);
107233 }
107234
107235 function clearDisplay() {
107236 clearAddressesList();
107237 clearKeys();
107238 hideValidationError();
107239 }
107240
107241 function clearAddressesList() {
107242 DOM.addresses.empty();
107243 DOM.csv.val("");
107244 stopGenerating();
107245 }
107246
107247 function stopGenerating() {
107248 while (generationProcesses.length > 0) {
107249 var generation = generationProcesses.shift();
107250 generation.stop();
107251 }
107252 }
107253
107254 function clearKeys() {
107255 clearRootKey();
107256 clearDerivedKeys();
107257 }
107258
107259 function clearRootKey() {
107260 DOM.rootKey.val("");
107261 }
107262
107263 function clearDerivedKeys() {
107264 DOM.extendedPrivKey.val("");
107265 DOM.extendedPubKey.val("");
107266 DOM.bip44accountXprv.val("");
107267 DOM.bip44accountXpub.val("");
107268 }
107269
107270 function addAddressToList(indexText, address, pubkey, privkey) {
107271 var row = $(addressRowTemplate.html());
107272 // Elements
107273 var indexCell = row.find(".index span");
107274 var addressCell = row.find(".address span");
107275 var pubkeyCell = row.find(".pubkey span");
107276 var privkeyCell = row.find(".privkey span");
107277 // Content
107278 indexCell.text(indexText);
107279 addressCell.text(address);
107280 pubkeyCell.text(pubkey);
107281 privkeyCell.text(privkey);
107282 // Visibility
107283 if (!showIndex) {
107284 indexCell.addClass("invisible");
107285 }
107286 if (!showAddress) {
107287 addressCell.addClass("invisible");
107288 }
107289 if (!showPubKey) {
107290 pubkeyCell.addClass("invisible");
107291 }
107292 if (!showPrivKey) {
107293 privkeyCell.addClass("invisible");
107294 }
107295 DOM.addresses.append(row);
107296 var rowShowQrEls = row.find("[data-show-qr]");
107297 setQrEvents(rowShowQrEls);
107298 }
107299
107300 function hasStrongRandom() {
107301 return 'crypto' in window && window['crypto'] !== null;
107302 }
107303
107304 function disableForms() {
107305 $("form").on("submit", function(e) {
107306 e.preventDefault();
107307 });
107308 }
107309
107310 function parseIntNoNaN(val, defaultVal) {
107311 var v = parseInt(val);
107312 if (isNaN(v)) {
107313 return defaultVal;
107314 }
107315 return v;
107316 }
107317
107318 function showPending() {
107319 DOM.feedback
107320 .text("Calculating...")
107321 .show();
107322 }
107323
107324 function findNearestWord(word) {
107325 var language = getLanguage();
107326 var words = WORDLISTS[language];
107327 var minDistance = 99;
107328 var closestWord = words[0];
107329 for (var i=0; i<words.length; i++) {
107330 var comparedTo = words[i];
107331 if (comparedTo.indexOf(word) == 0) {
107332 return comparedTo;
107333 }
107334 var distance = Levenshtein.get(word, comparedTo);
107335 if (distance < minDistance) {
107336 closestWord = comparedTo;
107337 minDistance = distance;
107338 }
107339 }
107340 return closestWord;
107341 }
107342
107343 function hidePending() {
107344 DOM.feedback
107345 .text("")
107346 .hide();
107347 }
107348
107349 function populateNetworkSelect() {
107350 for (var i=0; i<networks.length; i++) {
107351 var network = networks[i];
107352 var option = $("<option>");
107353 option.attr("value", i);
107354 option.text(network.name);
107355 if (network.name == "BTC - Bitcoin") {
107356 option.prop("selected", true);
107357 }
107358 DOM.phraseNetwork.append(option);
107359 }
107360 }
107361
107362 function populateClientSelect() {
107363 for (var i=0; i<clients.length; i++) {
107364 var client = clients[i];
107365 var option = $("<option>");
107366 option.attr("value", i);
107367 option.text(client.name);
107368 DOM.bip32Client.append(option);
107369 }
107370 }
107371
107372 function getLanguage() {
107373 var defaultLanguage = "english";
107374 // Try to get from existing phrase
107375 var language = getLanguageFromPhrase();
107376 // Try to get from url if not from phrase
107377 if (language.length == 0) {
107378 language = getLanguageFromUrl();
107379 }
107380 // Default to English if no other option
107381 if (language.length == 0) {
107382 language = defaultLanguage;
107383 }
107384 return language;
107385 }
107386
107387 function getLanguageFromPhrase(phrase) {
107388 // Check if how many words from existing phrase match a language.
107389 var language = "";
107390 if (!phrase) {
107391 phrase = DOM.phrase.val();
107392 }
107393 if (phrase.length > 0) {
107394 var words = phraseToWordArray(phrase);
107395 var languageMatches = {};
107396 for (l in WORDLISTS) {
107397 // Track how many words match in this language
107398 languageMatches[l] = 0;
107399 for (var i=0; i<words.length; i++) {
107400 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
107401 if (wordInLanguage) {
107402 languageMatches[l]++;
107403 }
107404 }
107405 // Find languages with most word matches.
107406 // This is made difficult due to commonalities between Chinese
107407 // simplified vs traditional.
107408 var mostMatches = 0;
107409 var mostMatchedLanguages = [];
107410 for (var l in languageMatches) {
107411 var numMatches = languageMatches[l];
107412 if (numMatches > mostMatches) {
107413 mostMatches = numMatches;
107414 mostMatchedLanguages = [l];
107415 }
107416 else if (numMatches == mostMatches) {
107417 mostMatchedLanguages.push(l);
107418 }
107419 }
107420 }
107421 if (mostMatchedLanguages.length > 0) {
107422 // Use first language and warn if multiple detected
107423 language = mostMatchedLanguages[0];
107424 if (mostMatchedLanguages.length > 1) {
107425 console.warn("Multiple possible languages");
107426 console.warn(mostMatchedLanguages);
107427 }
107428 }
107429 }
107430 return language;
107431 }
107432
107433 function getLanguageFromUrl() {
107434 for (var language in WORDLISTS) {
107435 if (window.location.hash.indexOf(language) > -1) {
107436 return language;
107437 }
107438 }
107439 return "";
107440 }
107441
107442 function setMnemonicLanguage() {
107443 var language = getLanguage();
107444 // Load the bip39 mnemonic generator for this language if required
107445 if (!(language in mnemonics)) {
107446 mnemonics[language] = new Mnemonic(language);
107447 }
107448 mnemonic = mnemonics[language];
107449 }
107450
107451 function convertPhraseToNewLanguage() {
107452 var oldLanguage = getLanguageFromPhrase();
107453 var newLanguage = getLanguageFromUrl();
107454 var oldPhrase = DOM.phrase.val();
107455 var oldWords = phraseToWordArray(oldPhrase);
107456 var newWords = [];
107457 for (var i=0; i<oldWords.length; i++) {
107458 var oldWord = oldWords[i];
107459 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
107460 var newWord = WORDLISTS[newLanguage][index];
107461 newWords.push(newWord);
107462 }
107463 newPhrase = wordArrayToPhrase(newWords);
107464 return newPhrase;
107465 }
107466
107467 // TODO look at jsbip39 - mnemonic.splitWords
107468 function phraseToWordArray(phrase) {
107469 var words = phrase.split(/\s/g);
107470 var noBlanks = [];
107471 for (var i=0; i<words.length; i++) {
107472 var word = words[i];
107473 if (word.length > 0) {
107474 noBlanks.push(word);
107475 }
107476 }
107477 return noBlanks;
107478 }
107479
107480 // TODO look at jsbip39 - mnemonic.joinWords
107481 function wordArrayToPhrase(words) {
107482 var phrase = words.join(" ");
107483 var language = getLanguageFromPhrase(phrase);
107484 if (language == "japanese") {
107485 phrase = words.join("\u3000");
107486 }
107487 return phrase;
107488 }
107489
107490 function isUsingOwnEntropy() {
107491 return DOM.useEntropy.prop("checked");
107492 }
107493
107494 function setMnemonicFromEntropy() {
107495 clearEntropyFeedback();
107496 // Get entropy value
107497 var entropyStr = DOM.entropy.val();
107498 // Work out minimum base for entropy
107499 var entropy = Entropy.fromString(entropyStr);
107500 if (entropy.binaryStr.length == 0) {
107501 return;
107502 }
107503 // Show entropy details
107504 showEntropyFeedback(entropy);
107505 // Use entropy hash if not using raw entropy
107506 var bits = entropy.binaryStr;
107507 var mnemonicLength = DOM.entropyMnemonicLength.val();
107508 if (mnemonicLength != "raw") {
107509 // Get bits by hashing entropy with SHA256
107510 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
107511 var hex = sjcl.codec.hex.fromBits(hash);
107512 bits = BigInteger.parse(hex, 16).toString(2);
107513 while (bits.length % 256 != 0) {
107514 bits = "0" + bits;
107515 }
107516 // Truncate hash to suit number of words
107517 mnemonicLength = parseInt(mnemonicLength);
107518 var numberOfBits = 32 * mnemonicLength / 3;
107519 bits = bits.substring(0, numberOfBits);
107520 // show warning for weak entropy override
107521 if (mnemonicLength / 3 * 32 > entropy.binaryStr.length) {
107522 DOM.entropyWeakEntropyOverrideWarning.removeClass("hidden");
107523 }
107524 else {
107525 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
107526 }
107527 }
107528 else {
107529 // hide warning for weak entropy override
107530 DOM.entropyWeakEntropyOverrideWarning.addClass("hidden");
107531 }
107532 // Discard trailing entropy
107533 var bitsToUse = Math.floor(bits.length / 32) * 32;
107534 var start = bits.length - bitsToUse;
107535 var binaryStr = bits.substring(start);
107536 // Convert entropy string to numeric array
107537 var entropyArr = [];
107538 for (var i=0; i<binaryStr.length / 8; i++) {
107539 var byteAsBits = binaryStr.substring(i*8, i*8+8);
107540 var entropyByte = parseInt(byteAsBits, 2);
107541 entropyArr.push(entropyByte)
107542 }
107543 // Convert entropy array to mnemonic
107544 var phrase = mnemonic.toMnemonic(entropyArr);
107545 // Set the mnemonic in the UI
107546 DOM.phrase.val(phrase);
107547 // Show the word indexes
107548 showWordIndexes();
107549 // Show the checksum
107550 showChecksum();
107551 }
107552
107553 function clearEntropyFeedback() {
107554 DOM.entropyCrackTime.text("...");
107555 DOM.entropyType.text("");
107556 DOM.entropyWordCount.text("0");
107557 DOM.entropyEventCount.text("0");
107558 DOM.entropyBitsPerEvent.text("0");
107559 DOM.entropyBits.text("0");
107560 DOM.entropyFiltered.html("&nbsp;");
107561 DOM.entropyBinary.html("&nbsp;");
107562 }
107563
107564 function showEntropyFeedback(entropy) {
107565 var numberOfBits = entropy.binaryStr.length;
107566 var timeToCrack = "unknown";
107567 try {
107568 var z = zxcvbn(entropy.base.parts.join(""));
107569 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
107570 if (z.feedback.warning != "") {
107571 timeToCrack = timeToCrack + " - " + z.feedback.warning;
107572 };
107573 }
107574 catch (e) {
107575 console.log("Error detecting entropy strength with zxcvbn:");
107576 console.log(e);
107577 }
107578 var entropyTypeStr = getEntropyTypeStr(entropy);
107579 var wordCount = Math.floor(numberOfBits / 32) * 3;
107580 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
107581 var spacedBinaryStr = addSpacesEveryElevenBits(entropy.binaryStr);
107582 DOM.entropyFiltered.html(entropy.cleanHtml);
107583 DOM.entropyType.text(entropyTypeStr);
107584 DOM.entropyCrackTime.text(timeToCrack);
107585 DOM.entropyEventCount.text(entropy.base.ints.length);
107586 DOM.entropyBits.text(numberOfBits);
107587 DOM.entropyWordCount.text(wordCount);
107588 DOM.entropyBinary.text(spacedBinaryStr);
107589 DOM.entropyBitsPerEvent.text(bitsPerEvent);
107590 // detect and warn of filtering
107591 var rawNoSpaces = DOM.entropy.val().replace(/\s/g, "");
107592 var cleanNoSpaces = entropy.cleanStr.replace(/\s/g, "");
107593 var isFiltered = rawNoSpaces.length != cleanNoSpaces.length;
107594 if (isFiltered) {
107595 DOM.entropyFilterWarning.removeClass('hidden');
107596 }
107597 else {
107598 DOM.entropyFilterWarning.addClass('hidden');
107599 }
107600 }
107601
107602 function getEntropyTypeStr(entropy) {
107603 var typeStr = entropy.base.str;
107604 // Add some detail if these are cards
107605 if (entropy.base.asInt == 52) {
107606 var cardDetail = []; // array of message strings
107607 // Detect duplicates
107608 var dupes = [];
107609 var dupeTracker = {};
107610 for (var i=0; i<entropy.base.parts.length; i++) {
107611 var card = entropy.base.parts[i];
107612 var cardUpper = card.toUpperCase();
107613 if (cardUpper in dupeTracker) {
107614 dupes.push(card);
107615 }
107616 dupeTracker[cardUpper] = true;
107617 }
107618 if (dupes.length > 0) {
107619 var dupeWord = "duplicates";
107620 if (dupes.length == 1) {
107621 dupeWord = "duplicate";
107622 }
107623 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
107624 if (dupes.length > 3) {
107625 msg += "...";
107626 }
107627 cardDetail.push(msg);
107628 }
107629 // Detect full deck
107630 var uniqueCards = [];
107631 for (var uniqueCard in dupeTracker) {
107632 uniqueCards.push(uniqueCard);
107633 }
107634 if (uniqueCards.length == 52) {
107635 cardDetail.unshift("full deck");
107636 }
107637 // Detect missing cards
107638 var values = "A23456789TJQK";
107639 var suits = "CDHS";
107640 var missingCards = [];
107641 for (var i=0; i<suits.length; i++) {
107642 for (var j=0; j<values.length; j++) {
107643 var card = values[j] + suits[i];
107644 if (!(card in dupeTracker)) {
107645 missingCards.push(card);
107646 }
107647 }
107648 }
107649 // Display missing cards if six or less, ie clearly going for full deck
107650 if (missingCards.length > 0 && missingCards.length <= 6) {
107651 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
107652 if (missingCards.length > 3) {
107653 msg += "...";
107654 }
107655 cardDetail.push(msg);
107656 }
107657 // Add card details to typeStr
107658 if (cardDetail.length > 0) {
107659 typeStr += " (" + cardDetail.join(", ") + ")";
107660 }
107661 }
107662 return typeStr;
107663 }
107664
107665 function setQrEvents(els) {
107666 els.on("mouseenter", createQr);
107667 els.on("mouseleave", destroyQr);
107668 els.on("click", toggleQr);
107669 }
107670
107671 function createQr(e) {
107672 var content = e.target.textContent || e.target.value;
107673 if (content) {
107674 var qrEl = kjua({
107675 text: content,
107676 render: "canvas",
107677 size: 310,
107678 ecLevel: 'H',
107679 });
107680 DOM.qrImage.append(qrEl);
107681 if (!showQr) {
107682 DOM.qrHider.addClass("hidden");
107683 }
107684 else {
107685 DOM.qrHider.removeClass("hidden");
107686 }
107687 DOM.qrContainer.removeClass("hidden");
107688 }
107689 }
107690
107691 function destroyQr() {
107692 DOM.qrImage.text("");
107693 DOM.qrContainer.addClass("hidden");
107694 }
107695
107696 function toggleQr() {
107697 showQr = !showQr;
107698 DOM.qrHider.toggleClass("hidden");
107699 DOM.qrHint.toggleClass("hidden");
107700 }
107701
107702 function bip44TabSelected() {
107703 return DOM.bip44tab.hasClass("active");
107704 }
107705
107706 function bip32TabSelected() {
107707 return DOM.bip32tab.hasClass("active");
107708 }
107709
107710 function networkHasSegwit() {
107711 var n = network;
107712 if ("baseNetwork" in network) {
107713 n = bitcoinjs.bitcoin.networks[network.baseNetwork];
107714 }
107715 // check if only p2wpkh params are required
107716 if (p2wpkhSelected()) {
107717 return "p2wpkh" in n;
107718 }
107719 // check if only p2wpkh-in-p2sh params are required
107720 else if (p2wpkhInP2shSelected()) {
107721 return "p2wpkhInP2sh" in n;
107722 }
107723 // require both if it's unclear which params are required
107724 return "p2wpkh" in n && "p2wpkhInP2sh" in n;
107725 }
107726
107727 function bip49TabSelected() {
107728 return DOM.bip49tab.hasClass("active");
107729 }
107730
107731 function bip84TabSelected() {
107732 return DOM.bip84tab.hasClass("active");
107733 }
107734
107735 function bip141TabSelected() {
107736 return DOM.bip141tab.hasClass("active");
107737 }
107738
107739 function setHdCoin(coinValue) {
107740 DOM.bip44coin.val(coinValue);
107741 DOM.bip49coin.val(coinValue);
107742 DOM.bip84coin.val(coinValue);
107743 }
107744
107745 function showSegwitAvailable() {
107746 DOM.bip49unavailable.addClass("hidden");
107747 DOM.bip49available.removeClass("hidden");
107748 DOM.bip84unavailable.addClass("hidden");
107749 DOM.bip84available.removeClass("hidden");
107750 DOM.bip141unavailable.addClass("hidden");
107751 DOM.bip141available.removeClass("hidden");
107752 }
107753
107754 function showSegwitUnavailable() {
107755 DOM.bip49available.addClass("hidden");
107756 DOM.bip49unavailable.removeClass("hidden");
107757 DOM.bip84available.addClass("hidden");
107758 DOM.bip84unavailable.removeClass("hidden");
107759 DOM.bip141available.addClass("hidden");
107760 DOM.bip141unavailable.removeClass("hidden");
107761 }
107762
107763 function adjustNetworkForSegwit() {
107764 // If segwit is selected the xpub/xprv prefixes need to be adjusted
107765 // to avoid accidentally importing BIP49 xpub to BIP44 watch only
107766 // wallet.
107767 // See https://github.com/iancoleman/bip39/issues/125
107768 var segwitNetworks = null;
107769 // if a segwit network is alread selected, need to use base network to
107770 // look up new parameters
107771 if ("baseNetwork" in network) {
107772 network = bitcoinjs.bitcoin.networks[network.baseNetwork];
107773 }
107774 // choose the right segwit params
107775 if (p2wpkhSelected() && "p2wpkh" in network) {
107776 network = network.p2wpkh;
107777 }
107778 else if (p2wpkhInP2shSelected() && "p2wpkhInP2sh" in network) {
107779 network = network.p2wpkhInP2sh;
107780 }
107781 }
107782
107783 function lastIndexInTable() {
107784 var pathText = DOM.addresses.find(".index").last().text();
107785 var pathBits = pathText.split("/");
107786 var lastBit = pathBits[pathBits.length-1];
107787 var lastBitClean = lastBit.replace("'", "");
107788 return parseInt(lastBitClean);
107789 }
107790
107791 function uint8ArrayToHex(a) {
107792 var s = ""
107793 for (var i=0; i<a.length; i++) {
107794 var h = a[i].toString(16);
107795 while (h.length < 2) {
107796 h = "0" + h;
107797 }
107798 s = s + h;
107799 }
107800 return s;
107801 }
107802
107803 function showWordIndexes() {
107804 var phrase = DOM.phrase.val();
107805 var words = phraseToWordArray(phrase);
107806 var wordIndexes = [];
107807 var language = getLanguage();
107808 for (var i=0; i<words.length; i++) {
107809 var word = words[i];
107810 var wordIndex = WORDLISTS[language].indexOf(word);
107811 wordIndexes.push(wordIndex);
107812 }
107813 var wordIndexesStr = wordIndexes.join(", ");
107814 DOM.entropyWordIndexes.text(wordIndexesStr);
107815 }
107816
107817 function showChecksum() {
107818 var phrase = DOM.phrase.val();
107819 var words = phraseToWordArray(phrase);
107820 var checksumBitlength = words.length / 3;
107821 var checksum = "";
107822 var binaryStr = "";
107823 var language = getLanguage();
107824 for (var i=words.length-1; i>=0; i--) {
107825 var word = words[i];
107826 var wordIndex = WORDLISTS[language].indexOf(word);
107827 var wordBinary = wordIndex.toString(2);
107828 while (wordBinary.length < 11) {
107829 wordBinary = "0" + wordBinary;
107830 }
107831 var binaryStr = wordBinary + binaryStr;
107832 if (binaryStr.length >= checksumBitlength) {
107833 var start = binaryStr.length - checksumBitlength;
107834 var end = binaryStr.length;
107835 checksum = binaryStr.substring(start, end);
107836 // add spaces so the last group is 11 bits, not the first
107837 checksum = checksum.split("").reverse().join("")
107838 checksum = addSpacesEveryElevenBits(checksum);
107839 checksum = checksum.split("").reverse().join("")
107840 break;
107841 }
107842 }
107843 DOM.entropyChecksum.text(checksum);
107844 }
107845
107846 function updateCsv() {
107847 var tableCsv = "path,address,public key,private key\n";
107848 var rows = DOM.addresses.find("tr");
107849 for (var i=0; i<rows.length; i++) {
107850 var row = $(rows[i]);
107851 var cells = row.find("td");
107852 for (var j=0; j<cells.length; j++) {
107853 var cell = $(cells[j]);
107854 if (!cell.children().hasClass("invisible")) {
107855 tableCsv = tableCsv + cell.text();
107856 }
107857 if (j != cells.length - 1) {
107858 tableCsv = tableCsv + ",";
107859 }
107860 }
107861 tableCsv = tableCsv + "\n";
107862 }
107863 DOM.csv.val(tableCsv);
107864 }
107865
107866 function addSpacesEveryElevenBits(binaryStr) {
107867 return binaryStr.match(/.{1,11}/g).join(" ");
107868 }
107869
107870 var networks = [
107871 {
107872 name: "AC - Asiacoin",
107873 onSelect: function() {
107874 network = bitcoinjs.bitcoin.networks.asiacoin;
107875 setHdCoin(51);
107876 },
107877 },
107878 {
107879 name: "ACC - Adcoin",
107880 onSelect: function() {
107881 network = bitcoinjs.bitcoin.networks.adcoin;
107882 setHdCoin(161);
107883 },
107884 },
107885 {
107886 name: "AUR - Auroracoin",
107887 onSelect: function() {
107888 network = bitcoinjs.bitcoin.networks.auroracoin;
107889 setHdCoin(85);
107890 },
107891 },
107892 {
107893 name: "AXE - Axe",
107894 onSelect: function() {
107895 network = bitcoinjs.bitcoin.networks.axe;
107896 setHdCoin(4242);
107897 },
107898 },
107899 {
107900 name: "BCA - Bitcoin Atom",
107901 onSelect: function() {
107902 network = bitcoinjs.bitcoin.networks.atom;
107903 setHdCoin(185);
107904 },
107905 },
107906 {
107907 name: "BCH - Bitcoin Cash",
107908 onSelect: function() {
107909 DOM.bitcoinCashAddressTypeContainer.removeClass("hidden");
107910 setHdCoin(145);
107911 },
107912 },
107913 {
107914 name: "BEET - Beetlecoin",
107915 onSelect: function() {
107916 network = bitcoinjs.bitcoin.networks.beetlecoin;
107917 setHdCoin(800);
107918 },
107919 },
107920 {
107921 name: "BELA - Belacoin",
107922 onSelect: function() {
107923 network = bitcoinjs.bitcoin.networks.belacoin;
107924 setHdCoin(73);
107925 },
107926 },
107927 {
107928 name: "BLK - BlackCoin",
107929 onSelect: function() {
107930 network = bitcoinjs.bitcoin.networks.blackcoin;
107931 setHdCoin(10);
107932 },
107933 },
107934 {
107935 name: "BRIT - Britcoin",
107936 onSelect: function() {
107937 network = bitcoinjs.bitcoin.networks.britcoin;
107938 setHdCoin(70);
107939 },
107940 },
107941 {
107942 name: "BSD - Bitsend",
107943 onSelect: function() {
107944 network = bitcoinjs.bitcoin.networks.bitsend;
107945 setHdCoin(91);
107946 },
107947 },
107948 {
107949 name: "BTA - Bata",
107950 onSelect: function() {
107951 network = bitcoinjs.bitcoin.networks.bata;
107952 setHdCoin(89);
107953 },
107954 },
107955 {
107956 name: "BTC - Bitcoin",
107957 onSelect: function() {
107958 network = bitcoinjs.bitcoin.networks.bitcoin;
107959 setHdCoin(0);
107960 },
107961 },
107962 {
107963 name: "BTC - Bitcoin Testnet",
107964 onSelect: function() {
107965 network = bitcoinjs.bitcoin.networks.testnet;
107966 setHdCoin(1);
107967 },
107968 },
107969 {
107970 name: "BTCP - Bitcoin Private",
107971 onSelect: function() {
107972 network = bitcoinjs.bitcoin.networks.bitcoinprivate;
107973 setHdCoin(183);
107974 },
107975 },
107976 {
107977 name: "BTCZ - Bitcoinz",
107978 onSelect: function() {
107979 network = bitcoinjs.bitcoin.networks.bitcoinz;
107980 setHdCoin(177);
107981 },
107982 },
107983 {
107984 name: "BTG - Bitcoin Gold",
107985 onSelect: function() {
107986 network = bitcoinjs.bitcoin.networks.bgold;
107987 setHdCoin(156);
107988 },
107989 },
107990 {
107991 name: "BTX - Bitcore",
107992 onSelect: function() {
107993 network = bitcoinjs.bitcoin.networks.bitcore;
107994 setHdCoin(160);
107995 },
107996 },
107997 {
107998 name: "CCN - Cannacoin",
107999 onSelect: function() {
108000 network = bitcoinjs.bitcoin.networks.cannacoin;
108001 setHdCoin(19);
108002 },
108003 },
108004 {
108005 name: "CDN - Canadaecoin",
108006 onSelect: function() {
108007 network = bitcoinjs.bitcoin.networks.canadaecoin;
108008 setHdCoin(34);
108009 },
108010 },
108011 {
108012 name: "CLAM - Clams",
108013 onSelect: function() {
108014 network = bitcoinjs.bitcoin.networks.clam;
108015 setHdCoin(23);
108016 },
108017 },
108018 {
108019 name: "CLUB - Clubcoin",
108020 onSelect: function() {
108021 network = bitcoinjs.bitcoin.networks.clubcoin;
108022 setHdCoin(79);
108023 },
108024 },
108025 {
108026 name: "CMP - Compcoin",
108027 onSelect: function() {
108028 network = bitcoinjs.bitcoin.networks.compcoin;
108029 setHdCoin(71);
108030 },
108031 },
108032 {
108033 name: "CRAVE - Crave",
108034 onSelect: function() {
108035 network = bitcoinjs.bitcoin.networks.crave;
108036 setHdCoin(186);
108037 },
108038 },
108039 {
108040 name: "CRW - Crown",
108041 onSelect: function() {
108042 network = bitcoinjs.bitcoin.networks.crown;
108043 setHdCoin(72);
108044 },
108045 },
108046 {
108047 name: "DASH - Dash",
108048 onSelect: function() {
108049 network = bitcoinjs.bitcoin.networks.dash;
108050 setHdCoin(5);
108051 },
108052 },
108053 {
108054 name: "DASH - Dash Testnet",
108055 onSelect: function() {
108056 network = bitcoinjs.bitcoin.networks.dashtn;
108057 setHdCoin(1);
108058 },
108059 },
108060 {
108061 name: "DFC - Defcoin",
108062 onSelect: function() {
108063 network = bitcoinjs.bitcoin.networks.defcoin;
108064 setHdCoin(1337);
108065 },
108066 },
108067 {
108068 name: "DGB - Digibyte",
108069 onSelect: function() {
108070 network = bitcoinjs.bitcoin.networks.digibyte;
108071 setHdCoin(20);
108072 },
108073 },
108074 {
108075 name: "DGC - Digitalcoin",
108076 onSelect: function() {
108077 network = bitcoinjs.bitcoin.networks.digitalcoin;
108078 setHdCoin(18);
108079 },
108080 },
108081 {
108082 name: "DMD - Diamond",
108083 onSelect: function() {
108084 network = bitcoinjs.bitcoin.networks.diamond;
108085 setHdCoin(152);
108086 },
108087 },
108088 {
108089 name: "DNR - Denarius",
108090 onSelect: function() {
108091 network = bitcoinjs.bitcoin.networks.denarius;
108092 setHdCoin(116);
108093 },
108094 },
108095 {
108096 name: "DOGE - Dogecoin",
108097 onSelect: function() {
108098 network = bitcoinjs.bitcoin.networks.dogecoin;
108099 setHdCoin(3);
108100 },
108101 },
108102 {
108103 name: "ECN - Ecoin",
108104 onSelect: function() {
108105 network = bitcoinjs.bitcoin.networks.ecoin;
108106 setHdCoin(115);
108107 },
108108 },
108109 {
108110 name: "EDRC - Edrcoin",
108111 onSelect: function() {
108112 network = bitcoinjs.bitcoin.networks.edrcoin;
108113 setHdCoin(56);
108114 },
108115 },
108116 {
108117 name: "EFL - Egulden",
108118 onSelect: function() {
108119 network = bitcoinjs.bitcoin.networks.egulden;
108120 setHdCoin(78);
108121 },
108122 },
108123 {
108124 name: "EMC2 - Einsteinium",
108125 onSelect: function() {
108126 network = bitcoinjs.bitcoin.networks.einsteinium;
108127 setHdCoin(41);
108128 },
108129 },
108130 {
108131 name: "ERC - Europecoin",
108132 onSelect: function() {
108133 network = bitcoinjs.bitcoin.networks.europecoin;
108134 setHdCoin(151);
108135 },
108136 },
108137 {
108138 name: "ETH - Ethereum",
108139 onSelect: function() {
108140 network = bitcoinjs.bitcoin.networks.bitcoin;
108141 setHdCoin(60);
108142 },
108143 },
108144 {
108145 name: "EXCL - Exclusivecoin",
108146 onSelect: function() {
108147 network = bitcoinjs.bitcoin.networks.exclusivecoin;
108148 setHdCoin(190);
108149 },
108150 },
108151 {
108152 name: "FJC - Fujicoin",
108153 onSelect: function() {
108154 network = bitcoinjs.bitcoin.networks.fujicoin;
108155 setHdCoin(75);
108156 },
108157 },
108158 {
108159 name: "FLASH - Flashcoin",
108160 onSelect: function() {
108161 network = bitcoinjs.bitcoin.networks.flashcoin;
108162 setHdCoin(120);
108163 },
108164 },
108165 {
108166 name: "FRST - Firstcoin",
108167 onSelect: function() {
108168 network = bitcoinjs.bitcoin.networks.firstcoin;
108169 setHdCoin(167);
108170 },
108171 },
108172 {
108173 name: "FTC - Feathercoin",
108174 onSelect: function() {
108175 network = bitcoinjs.bitcoin.networks.feathercoin;
108176 setHdCoin(8);
108177 },
108178 },
108179 {
108180 name: "GAME - GameCredits",
108181 onSelect: function() {
108182 network = bitcoinjs.bitcoin.networks.game;
108183 setHdCoin(101);
108184 },
108185 },
108186 {
108187 name: "GBX - Gobyte",
108188 onSelect: function() {
108189 network = bitcoinjs.bitcoin.networks.gobyte;
108190 setHdCoin(176);
108191 },
108192 },
108193 {
108194 name: "GCR - GCRCoin",
108195 onSelect: function() {
108196 network = bitcoinjs.bitcoin.networks.gcr;
108197 setHdCoin(79);
108198 },
108199 },
108200 {
108201 name: "GRC - Gridcoin",
108202 onSelect: function() {
108203 network = bitcoinjs.bitcoin.networks.gridcoin;
108204 setHdCoin(84);
108205 },
108206 },
108207 {
108208 name: "HNC - Helleniccoin",
108209 onSelect: function() {
108210 network = bitcoinjs.bitcoin.networks.helleniccoin;
108211 setHdCoin(168);
108212 },
108213 },
108214 {
108215 name: "INSN - Insane",
108216 onSelect: function() {
108217 network = bitcoinjs.bitcoin.networks.insane;
108218 setHdCoin(68);
108219 },
108220 },
108221 {
108222 name: "IOP - Iop",
108223 onSelect: function() {
108224 network = bitcoinjs.bitcoin.networks.iop;
108225 setHdCoin(66);
108226 },
108227 },
108228 {
108229 name: "IXC - Ixcoin",
108230 onSelect: function() {
108231 network = bitcoinjs.bitcoin.networks.ixcoin;
108232 setHdCoin(86);
108233 },
108234 },
108235 {
108236 name: "JBS - Jumbucks",
108237 onSelect: function() {
108238 network = bitcoinjs.bitcoin.networks.jumbucks;
108239 setHdCoin(26);
108240 },
108241 },
108242 {
108243 name: "KMD - Komodo",
108244 bip49available: false,
108245 onSelect: function() {
108246 network = bitcoinjs.bitcoin.networks.komodo;
108247 setHdCoin(141);
108248 },
108249 },
108250 {
108251 name: "KOBO - Kobocoin",
108252 bip49available: false,
108253 onSelect: function() {
108254 network = bitcoinjs.bitcoin.networks.kobocoin;
108255 setHdCoin(196);
108256 },
108257 },
108258 {
108259 name: "LBC - Library Credits",
108260 onSelect: function() {
108261 network = bitcoinjs.bitcoin.networks.lbry;
108262 setHdCoin(140);
108263 },
108264 },
108265 {
108266 name: "LCC - Litecoincash",
108267 onSelect: function() {
108268 network = bitcoinjs.bitcoin.networks.litecoincash;
108269 setHdCoin(192);
108270 },
108271 },
108272 {
108273 name: "LDCN - Landcoin",
108274 onSelect: function() {
108275 network = bitcoinjs.bitcoin.networks.landcoin;
108276 setHdCoin(63);
108277 },
108278 },
108279 {
108280 name: "LINX - Linx",
108281 onSelect: function() {
108282 network = bitcoinjs.bitcoin.networks.linx;
108283 setHdCoin(114);
108284 },
108285 },
108286 {
108287 name: "LTC - Litecoin",
108288 onSelect: function() {
108289 network = bitcoinjs.bitcoin.networks.litecoin;
108290 setHdCoin(2);
108291 DOM.litecoinLtubContainer.removeClass("hidden");
108292 },
108293 },
108294 {
108295 name: "LYNX - Lynx",
108296 onSelect: function() {
108297 network = bitcoinjs.bitcoin.networks.lynx;
108298 setHdCoin(191);
108299 },
108300 },
108301 {
108302 name: "MAZA - Maza",
108303 onSelect: function() {
108304 network = bitcoinjs.bitcoin.networks.maza;
108305 setHdCoin(13);
108306 },
108307 },
108308 {
108309 name: "MNX - Minexcoin",
108310 onSelect: function() {
108311 network = bitcoinjs.bitcoin.networks.minexcoin;
108312 setHdCoin(182);
108313 },
108314 },
108315 {
108316 name: "MONA - Monacoin",
108317 onSelect: function() {
108318 network = bitcoinjs.bitcoin.networks.monacoin,
108319 setHdCoin(22);
108320 },
108321 },
108322 {
108323 name: "NAV - Navcoin",
108324 onSelect: function() {
108325 network = bitcoinjs.bitcoin.networks.navcoin;
108326 setHdCoin(130);
108327 },
108328 },
108329 {
108330 name: "NEBL - Neblio",
108331 onSelect: function() {
108332 network = bitcoinjs.bitcoin.networks.neblio;
108333 setHdCoin(146);
108334 },
108335 },
108336 {
108337 name: "NEOS - Neoscoin",
108338 onSelect: function() {
108339 network = bitcoinjs.bitcoin.networks.neoscoin;
108340 setHdCoin(25);
108341 },
108342 },
108343 {
108344 name: "NLG - Gulden",
108345 onSelect: function() {
108346 network = bitcoinjs.bitcoin.networks.gulden;
108347 setHdCoin(87);
108348 },
108349 },
108350 {
108351 name: "NMC - Namecoin",
108352 onSelect: function() {
108353 network = bitcoinjs.bitcoin.networks.namecoin;
108354 setHdCoin(7);
108355 },
108356 },
108357 {
108358 name: "NRG - Energi",
108359 onSelect: function() {
108360 network = bitcoinjs.bitcoin.networks.energi;
108361 setHdCoin(204);
108362 },
108363 },
108364 {
108365 name: "NRO - Neurocoin",
108366 onSelect: function() {
108367 network = bitcoinjs.bitcoin.networks.neurocoin;
108368 setHdCoin(110);
108369 },
108370 },
108371 {
108372 name: "NSR - Nushares",
108373 onSelect: function() {
108374 network = bitcoinjs.bitcoin.networks.nushares;
108375 setHdCoin(11);
108376 },
108377 },
108378 {
108379 name: "NYC - Newyorkc",
108380 onSelect: function() {
108381 network = bitcoinjs.bitcoin.networks.newyorkc;
108382 setHdCoin(179);
108383 },
108384 },
108385 {
108386 name: "NVC - Novacoin",
108387 onSelect: function() {
108388 network = bitcoinjs.bitcoin.networks.novacoin;
108389 setHdCoin(50);
108390 },
108391 },
108392 {
108393 name: "OK - Okcash",
108394 onSelect: function() {
108395 network = bitcoinjs.bitcoin.networks.okcash;
108396 setHdCoin(69);
108397 },
108398 },
108399 {
108400 name: "OMNI - Omnicore",
108401 onSelect: function() {
108402 network = bitcoinjs.bitcoin.networks.omnicore;
108403 setHdCoin(200);
108404 },
108405 },
108406 {
108407 name: "ONX - Onixcoin",
108408 onSelect: function() {
108409 network = bitcoinjs.bitcoin.networks.onixcoin;
108410 setHdCoin(174);
108411 },
108412 },
108413 {
108414 name: "PINK - Pinkcoin",
108415 onSelect: function() {
108416 network = bitcoinjs.bitcoin.networks.pinkcoin;
108417 setHdCoin(117);
108418 },
108419 },
108420 {
108421 name: "PIVX - PIVX",
108422 onSelect: function() {
108423 network = bitcoinjs.bitcoin.networks.pivx;
108424 setHdCoin(119);
108425 },
108426 },
108427 {
108428 name: "PIVX - PIVX Testnet",
108429 onSelect: function() {
108430 network = bitcoinjs.bitcoin.networks.pivxtestnet;
108431 setHdCoin(1);
108432 },
108433 },
108434 {
108435 name: "POSW - POSWcoin",
108436 onSelect: function() {
108437 network = bitcoinjs.bitcoin.networks.poswcoin;
108438 setHdCoin(47);
108439 },
108440 },
108441 {
108442 name: "POT - Potcoin",
108443 onSelect: function() {
108444 network = bitcoinjs.bitcoin.networks.potcoin;
108445 setHdCoin(81);
108446 },
108447 },
108448 {
108449 name: "PPC - Peercoin",
108450 onSelect: function() {
108451 network = bitcoinjs.bitcoin.networks.peercoin;
108452 setHdCoin(6);
108453 },
108454 },
108455 {
108456 name: "PSB - Pesobit",
108457 onSelect: function() {
108458 network = bitcoinjs.bitcoin.networks.pesobit;
108459 setHdCoin(62);
108460 },
108461 },
108462 {
108463 name: "PUT - Putincoin",
108464 onSelect: function() {
108465 network = bitcoinjs.bitcoin.networks.putincoin;
108466 setHdCoin(122);
108467 },
108468 },
108469 {
108470 name: "RBY - Rubycoin",
108471 onSelect: function() {
108472 network = bitcoinjs.bitcoin.networks.rubycoin;
108473 setHdCoin(16);
108474 },
108475 },
108476 {
108477 name: "RDD - Reddcoin",
108478 onSelect: function() {
108479 network = bitcoinjs.bitcoin.networks.reddcoin;
108480 setHdCoin(4);
108481 },
108482 },
108483 {
108484 name: "RVR - RevolutionVR",
108485 onSelect: function() {
108486 network = bitcoinjs.bitcoin.networks.revolutionvr;
108487 setHdCoin(129);
108488 },
108489 },
108490 {
108491 name: "SDC - ShadowCash",
108492 onSelect: function() {
108493 network = bitcoinjs.bitcoin.networks.shadow;
108494 setHdCoin(35);
108495 },
108496 },
108497 {
108498 name: "SDC - ShadowCash Testnet",
108499 onSelect: function() {
108500 network = bitcoinjs.bitcoin.networks.shadowtn;
108501 setHdCoin(1);
108502 },
108503 },
108504 {
108505 name: "SLM - Slimcoin",
108506 onSelect: function() {
108507 network = bitcoinjs.bitcoin.networks.slimcoin;
108508 setHdCoin(63);
108509 },
108510 },
108511 {
108512 name: "SLM - Slimcoin Testnet",
108513 onSelect: function() {
108514 network = bitcoinjs.bitcoin.networks.slimcointn;
108515 setHdCoin(111);
108516 },
108517 },
108518 {
108519 name: "SLR - Solarcoin",
108520 onSelect: function() {
108521 network = bitcoinjs.bitcoin.networks.solarcoin;
108522 setHdCoin(58);
108523 },
108524 },
108525 {
108526 name: "SMLY - Smileycoin",
108527 onSelect: function() {
108528 network = bitcoinjs.bitcoin.networks.smileycoin;
108529 setHdCoin(59);
108530 },
108531 },
108532 {
108533 name: "STRAT - Stratis",
108534 onSelect: function() {
108535 network = bitcoinjs.bitcoin.networks.stratis;
108536 setHdCoin(105);
108537 },
108538 },
108539 {
108540 name: "SYS - Syscoin",
108541 onSelect: function() {
108542 network = bitcoinjs.bitcoin.networks.syscoin;
108543 setHdCoin(57);
108544 },
108545 },
108546 {
108547 name: "THC - Hempcoin",
108548 onSelect: function() {
108549 network = bitcoinjs.bitcoin.networks.hempcoin;
108550 setHdCoin(113);
108551 },
108552 },
108553 {
108554 name: "TOA - Toa",
108555 onSelect: function() {
108556 network = bitcoinjs.bitcoin.networks.toa;
108557 setHdCoin(159);
108558 },
108559 },
108560 {
108561 name: "USC - Ultimatesecurecash",
108562 onSelect: function() {
108563 network = bitcoinjs.bitcoin.networks.ultimatesecurecash;
108564 setHdCoin(112);
108565 },
108566 },
108567 {
108568 name: "USNBT - NuBits",
108569 onSelect: function() {
108570 network = bitcoinjs.bitcoin.networks.nubits;
108571 setHdCoin(12);
108572 },
108573 },
108574 {
108575 name: "UNO - Unobtanium",
108576 onSelect: function() {
108577 network = bitcoinjs.bitcoin.networks.unobtanium;
108578 setHdCoin(92);
108579 },
108580 },
108581 {
108582 name: "VASH - Vpncoin",
108583 onSelect: function() {
108584 network = bitcoinjs.bitcoin.networks.vpncoin;
108585 setHdCoin(33);
108586 },
108587 },
108588 {
108589 name: "VIA - Viacoin",
108590 onSelect: function() {
108591 network = bitcoinjs.bitcoin.networks.viacoin;
108592 setHdCoin(14);
108593 },
108594 },
108595 {
108596 name: "VIA - Viacoin Testnet",
108597 onSelect: function() {
108598 network = bitcoinjs.bitcoin.networks.viacointestnet;
108599 setHdCoin(1);
108600 },
108601 },
108602 {
108603 name: "VIVO - Vivo",
108604 onSelect: function() {
108605 network = bitcoinjs.bitcoin.networks.vivo;
108606 setHdCoin(166);
108607 },
108608 },
108609 {
108610 name: "VTC - Vertcoin",
108611 onSelect: function() {
108612 network = bitcoinjs.bitcoin.networks.vertcoin;
108613 setHdCoin(28);
108614 },
108615 },
108616 {
108617 name: "WC - Wincoin",
108618 onSelect: function() {
108619 network = bitcoinjs.bitcoin.networks.wincoin;
108620 setHdCoin(181);
108621 },
108622 },
108623 {
108624 name: "XBC - Bitcoinplus",
108625 onSelect: function() {
108626 network = bitcoinjs.bitcoin.networks.bitcoinplus;
108627 setHdCoin(65);
108628 },
108629 },
108630 {
108631 name: "XMY - Myriadcoin",
108632 onSelect: function() {
108633 network = bitcoinjs.bitcoin.networks.myriadcoin;
108634 setHdCoin(90);
108635 },
108636 },
108637 {
108638 name: "XRP - Ripple",
108639 onSelect: function() {
108640 network = bitcoinjs.bitcoin.networks.bitcoin;
108641 setHdCoin(144);
108642 },
108643 },
108644 {
108645 name: "XVC - Vcash",
108646 onSelect: function() {
108647 network = bitcoinjs.bitcoin.networks.vcash;
108648 setHdCoin(127);
108649 },
108650 },
108651 {
108652 name: "XVG - Verge",
108653 onSelect: function() {
108654 network = bitcoinjs.bitcoin.networks.verge;
108655 setHdCoin(77);
108656 },
108657 },
108658 {
108659 name: "XWC - Whitecoin",
108660 onSelect: function() {
108661 network = bitcoinjs.bitcoin.networks.whitecoin;
108662 setHdCoin(155);
108663 },
108664 },
108665 {
108666 name: "XZC - Zcoin",
108667 onSelect: function() {
108668 network = bitcoinjs.bitcoin.networks.zcoin;
108669 setHdCoin(136);
108670 },
108671 },
108672 {
108673 name: "ZCL - Zclassic",
108674 onSelect: function() {
108675 network = bitcoinjs.bitcoin.networks.zclassic;
108676 setHdCoin(147);
108677 },
108678 },
108679 {
108680 name: "ZEC - Zcash",
108681 onSelect: function() {
108682 network = bitcoinjs.bitcoin.networks.zcash;
108683 setHdCoin(133);
108684 },
108685 },
108686 {
108687 name: "XUEZ - Xuez",
108688 onSelect: function() {
108689 network = bitcoinjs.bitcoin.networks.xuez;
108690 setHdCoin(225);
108691 },
108692 },
108693 {
108694 name: "ZEN - Zencash",
108695 onSelect: function() {
108696 network = bitcoinjs.bitcoin.networks.zencash;
108697 setHdCoin(121);
108698 },
108699 },
108700 ]
108701
108702 var clients = [
108703 {
108704 name: "Bitcoin Core",
108705 onSelect: function() {
108706 DOM.bip32path.val("m/0'/0'");
108707 DOM.hardenedAddresses.prop('checked', true);
108708 },
108709 },
108710 {
108711 name: "blockchain.info",
108712 onSelect: function() {
108713 DOM.bip32path.val("m/44'/0'/0'");
108714 DOM.hardenedAddresses.prop('checked', false);
108715 },
108716 },
108717 {
108718 name: "MultiBit HD",
108719 onSelect: function() {
108720 DOM.bip32path.val("m/0'/0");
108721 DOM.hardenedAddresses.prop('checked', false);
108722 },
108723 }
108724 ]
108725
108726 init();
108727
108728 })();
108729 </script>
108730 </body>
108731 </html>