]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Network order is alphabetical.
[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.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),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')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.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{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.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{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.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{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.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{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.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{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{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);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);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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{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);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);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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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);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);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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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);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);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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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);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);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)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" />
15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
16
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
48 .phrase {
49 word-break: keep-all;
50 }
51 .generate-container .strength {
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
56 .languages a {
57 padding-left: 10px;
58 }
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
63 .monospace {
64 font-family: monospace;
65 }
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
100 .qr-hint,
101 .qr-warning {
102 padding: 2px;
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
109 }
110 </style>
111 </head>
112 <body>
113 <div class="container">
114
115 <h1 class="text-center">Mnemonic Code Converter</h1>
116 <hr>
117 <div class="row">
118 <div class="col-md-12">
119 <h2>Mnemonic</h2>
120 <form class="form-horizontal" role="form">
121 <div class="form-group">
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
124 <p data-translate>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>
125 <p data-translate-html>
126 For more info see the
127 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
128 </p>
129 </div>
130 </div>
131 <div class="form-group generate-container">
132 <label class="col-sm-2 control-label"></label>
133 <div class="col-sm-10">
134 <div class="form-inline">
135 <div class="input-group-inline">
136 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
137 <button class="btn generate">Generate</button>
138 <select id="strength" class="strength form-control">
139 <option value="3">3</option>
140 <option value="6">6</option>
141 <option value="9">9</option>
142 <option value="12">12</option>
143 <option value="15" selected>15</option>
144 <option value="18">18</option>
145 <option value="21">21</option>
146 <option value="24">24</option>
147 </select>
148 <span data-translate>words</span>
149 </div>
150 </div>
151 </div>
152 </div>
153 <div class="entropy-container hidden">
154 <div class="form-group text-danger">
155 <label class="col-sm-2 control-label" data-translate>Warning</label>
156 <div class="col-sm-10 form-control-static">
157 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
158 <a href="#entropy-notes" data-translate>Read more</a>
159 </div>
160 </div>
161 <div class="form-group">
162 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
163 <div class="col-sm-7">
164 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
165 <div class="row">
166 <label class="col-sm-3 control-label" data-translate>Strength</label>
167 <div class="strength col-sm-3 form-control-static"></div>
168 <label class="col-sm-3 control-label" data-translate>Event Count</label>
169 <div class="event-count col-sm-3 form-control-static"></div>
170 </div>
171 <div class="row">
172 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
173 <div class="type col-sm-3 form-control-static"></div>
174 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
175 <div class="bits-per-event col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
178 <label class="col-sm-3 control-label" data-translate>Word Count</label>
179 <div class="word-count col-sm-3 form-control-static"></div>
180 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
181 <div class="bits col-sm-3 form-control-static"></div>
182 </div>
183 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
184 <div class="filtered col-sm-9 form-control-static"></div>
185 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
186 <div class="binary col-sm-9 form-control-static"></div>
187 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
188 <div class="col-sm-9">
189 <select class="mnemonic-length form-control">
190 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
191 <option value="12">12 <span data-translate>Words</span></option>
192 <option value="15">15 <span data-translate>Words</option>
193 <option value="18">18 <span data-translate>Words</span></option>
194 <option value="21">21 <span data-translate>Words</span></option>
195 <option value="24">24 <span data-translate>Words</span></option>
196 </select>
197 </div>
198 </div>
199 <div class="col-sm-3">
200 <p data-translate>Valid entropy values include:</p>
201 <ul>
202 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
203 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
204 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
205 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
206 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
207 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
208 </ul>
209 </div>
210 </div>
211 </div>
212 <div class="form-group">
213 <div class="col-sm-2"></div>
214 <div class="col-sm-10 checkbox">
215 <label>
216 <input type="checkbox" class="use-entropy">
217 <span data-translate>Supply my own source of entropy</span>
218 </label>
219 </div>
220 </div>
221 <div class="form-group">
222 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
223 <div class="col-sm-10 languages">
224 <div class="form-control no-border">
225 <a href="#english">English</a>
226 <a href="#japanese" title="Japanese">日本語</a>
227 <a href="#spanish" title="Spanish">Español</a>
228 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
229 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
230 <a href="#french" title="French">Français</a>
231 <a href="#italian" title="Italian">Italiano</a>
232 </div>
233 </div>
234 </div>
235 <div class="form-group">
236 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
237 <div class="col-sm-10">
238 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
239 </div>
240 </div>
241 <div class="form-group">
242 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
243 <div class="col-sm-10">
244 <textarea id="passphrase" class="passphrase form-control"></textarea>
245 </div>
246 </div>
247 <div class="form-group">
248 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
249 <div class="col-sm-10">
250 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
251 </div>
252 </div>
253 <div class="form-group">
254 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
255 <div class="col-sm-10">
256 <select id="network-phrase" class="network form-control">
257 <!-- populated by javascript -->
258 </select>
259 </div>
260 </div>
261 <div class="form-group">
262 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
263 <div class="col-sm-10">
264 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
265 </div>
266 </div>
267 </form>
268 </div>
269 </div>
270
271 <hr>
272
273 <div class="row">
274 <div class="col-md-12">
275 <h2>Derivation Path</h2>
276 <ul class="derivation-type nav nav-tabs" role="tablist">
277 <li id="bip44-tab" class="active">
278 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
279 </li>
280 <li id="bip32-tab">
281 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
282 </li>
283 </ul>
284 <div class="derivation-type tab-content">
285 <div id="bip44" class="tab-pane active">
286 <form class="form-horizontal" role="form">
287 <br>
288 <div class="col-sm-2"></div>
289 <div class="col-sm-10">
290 <p data-translate-html>
291 For more info see the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
293 </p>
294 </div>
295 <div class="form-group">
296 <label for="purpose" class="col-sm-2 control-label">
297 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
298 </label>
299 <div class="col-sm-10">
300 <input id="purpose" type="text" class="purpose form-control" value="44">
301 </div>
302 </div>
303 <div class="form-group">
304 <label for="coin" class="col-sm-2 control-label">
305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
306 </label>
307 <div class="col-sm-10">
308 <input id="coin" type="text" class="coin form-control" value="0">
309 </div>
310 </div>
311 <div class="form-group">
312 <label for="account" class="col-sm-2 control-label">
313 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
314 </label>
315 <div class="col-sm-10">
316 <input id="account" type="text" class="account form-control" value="0">
317 </div>
318 </div>
319 <div class="form-group">
320 <label for="change" class="col-sm-2 control-label">
321 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
322 </label>
323 <div class="col-sm-10">
324 <input id="change" type="text" class="change form-control" value="0">
325 </div>
326 </div>
327 <div class="form-group">
328 <label class="col-sm-2 control-label">
329 </label>
330 <div class="col-sm-10">
331 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
332 </div>
333 </div>
334 <div class="form-group">
335 <label for="account-xprv" class="col-sm-2 control-label">
336 <span data-translate>Account Extended Private Key</span>
337 </label>
338 <div class="col-sm-10">
339 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
340 </div>
341 </div>
342 <div class="form-group">
343 <label for="account-xpub" class="col-sm-2 control-label">
344 <span data-translate>Account Extended Public Key</span>
345 </label>
346 <div class="col-sm-10">
347 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
348 </div>
349 </div>
350 <div class="form-group">
351 <label class="col-sm-2 control-label">
352 </label>
353 <div class="col-sm-10">
354 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
355 </div>
356 </div>
357 <div class="form-group">
358 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
359 <div class="col-sm-10">
360 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
361 </div>
362 </div>
363 </form>
364 </div>
365 <div id="bip32" class="tab-pane">
366 <form class="form-horizontal" role="form">
367 <br>
368 <div class="col-sm-2"></div>
369 <div class="col-sm-10">
370 <p data-translate>
371 For more info see the
372 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
373 </p>
374 </div>
375 <div class="form-group">
376 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
377 <div class="col-sm-10">
378 <select id="bip32-client" class="client form-control">
379 <option value="custom">Custom derivation path</option>
380 <!-- populated by javascript -->
381 </select>
382 </div>
383 </div>
384 <div class="form-group">
385 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
386 <div class="col-sm-10">
387 <input id="bip32-path" type="text" class="path form-control" value="m/0">
388 </div>
389 </div>
390 <div class="form-group">
391 <div class="col-sm-2"></div>
392 <label class="col-sm-10">
393 <input class="hardened-addresses" type="checkbox">
394 <span data-translate>Use hardened addresses</span>
395 </label>
396 </div>
397 <div class="form-group">
398 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
399 <div class="col-sm-10">
400 <p class="form-control no-border" data-translate-html>
401 Use path <code>m/0'/0'</code> with hardened addresses.
402 </p>
403 <p class="form-control no-border" data-translate-html>
404 For more info see the
405 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
406 </p>
407 </div>
408 </div>
409 <div class="form-group">
410 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
411 <div class="col-sm-10">
412 <p class="form-control no-border">
413 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
414 </p>
415 <p class="form-control no-border">
416 <span data-translate>For more info see</span>
417 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
418 </p>
419 </div>
420 </div>
421 <div class="form-group">
422 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
423 <div class="col-sm-10">
424 <p class="form-control no-border">
425 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
426 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
427 </p>
428 <p class="form-control no-border">
429 <span data-translate>Can be used with</span>:
430 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
431 </p>
432 </div>
433 </div>
434 </form>
435 </div>
436 </div>
437 <form class="form-horizontal" role="form">
438 <div class="form-group">
439 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
440 <div class="col-sm-10">
441 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
442 </div>
443 </div>
444 <div class="form-group">
445 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
446 <div class="col-sm-10">
447 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
448 </div>
449 </div>
450 </form>
451 </div>
452 </div>
453
454 <hr>
455
456 <div class="row">
457 <div class="col-md-12">
458 <h2>Derived Addresses</h2>
459 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
460 <table class="table table-striped">
461 <thead>
462 <th>
463 <div class="input-group">
464 <span data-translate>Path</span>&nbsp;&nbsp;
465 <button class="index-toggle" data-translate>Toggle</button>
466 </div>
467 </th>
468 <th>
469 <div class="input-group">
470 <span data-translate>Address</span>&nbsp;&nbsp;
471 <button class="address-toggle" data-translate>Toggle</button>
472 </div>
473 </th>
474 <th>
475 <div class="input-group">
476 <span data-translate>Public Key</span>&nbsp;&nbsp;
477 <button class="public-key-toggle" data-translate>Toggle</button>
478 </div>
479 </th>
480 <th>
481 <div class="input-group">
482 <span data-translate>Private Key</span>&nbsp;&nbsp;
483 <button class="private-key-toggle" data-translate>Toggle</button>
484 </div>
485 </th>
486 </thead>
487 <tbody class="addresses monospace">
488 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
489 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
490 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
491 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
492 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
493 </tbody>
494 </table>
495 </div>
496 </div>
497 <span data-translate>Show more rows</span>:
498 <input type="number" class="rows-to-add" value="20">
499 <button class="more" data-translate>Show</button>
500
501 <hr>
502
503 <div class="row">
504 <div class="col-md-12">
505 <h2 data-translate>More info</h2>
506 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
507 <p data-translate-html>
508 Read more at the
509 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
510 </p>
511 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
512 <p data-translate-html>
513 Read more at the
514 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
515 </p>
516 <p data-translate-html>
517 See the demo at
518 <a href="http://bip32.org/" target="_blank">bip32.org</a>
519 </p>
520 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
521 <p data-translate-html>
522 Read more at the
523 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
524 </p>
525 <h3 data-translate>Private Keys</h3>
526 <p>
527 <span data-translate-html>
528 Use private keys at
529 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
530 </span>
531 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
532 </p>
533 <h3 id="entropy-notes" data-translate>Entropy</h3>
534 <p>
535 <span data-translate-html>
536 Entropy values must be sourced from a
537 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
538 </span>
539 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
540 <span data-translate-html>
541 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
542 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
543 random enough for the needs of this tool.
544 </span>
545 </p>
546 <p>
547 <strong><span data-translate>Do not store entropy.</span></strong>
548 </p>
549 <p>
550 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
551 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
552 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
553 </p>
554 <p>
555 <span data-translate-html>
556 The random mnemonic generator on this page uses a
557 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
558 </span>
559 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
560 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
561 <span data-translate>In that case you might choose to use your own source of entropy.</span>
562 </p>
563 <p>
564 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
565 </p>
566 <h3 data-translate>License</h3>
567 <p>
568 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
569 </span>
570 </p>
571 <p data-translate>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>
572 </div>
573 </div>
574
575 <hr>
576
577 <div class="row">
578 <div class="col-md-12">
579
580 <h2 data-translate>Offline Usage</h2>
581
582 <p data-translate>
583 You can use this tool without having to be online.
584 </p>
585 <p data-translate>
586 In your browser, select file save-as, and save this page
587 as a file.
588 </p>
589 <p data-translate>
590 Double-click that file to open it in a browser
591 on any offline computer.
592 </p>
593 <p>
594 <span data-translate>Alternatively, download the file from the repository</span>
595 -
596 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
597 </p>
598
599 </div>
600 </div>
601
602 <hr>
603
604 <div class="row">
605 <div class="col-md-12">
606
607 <h2 data-translate>This project is 100% open-source code</h2>
608
609 <p>
610 <span data-translate>Get the source code from the repository</span>
611 -
612 <a href="https://github.com/iancoleman/bip39" target="_blank">
613 https://github.com/iancoleman/bip39
614 </a>
615 </p>
616
617 <h3 data-translate>Libraries</h3>
618
619 <p>
620 <span>BitcoinJS - </span>
621 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
622 https://github.com/bitcoinjs/bitcoinjs-lib
623 </a>
624 </p>
625
626 <p>
627 <span>jsBIP39 - </span>
628 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
629 https://github.com/iancoleman/jsbip39
630 </a>
631 </p>
632
633 <p>
634 <span>sjcl - </span>
635 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
636 https://github.com/bitwiseshiftleft/sjcl
637 </a>
638 </p>
639
640 <p>
641 <span>jQuery - </span>
642 <a href="https://jquery.com/" target="_blank">
643 https://jquery.com/
644 </a>
645 </p>
646
647 <p>
648 <span>Twitter Bootstrap - </span>
649 <a href="http://getbootstrap.com/" target="_blank">
650 http://getbootstrap.com/
651 </a>
652 </p>
653
654 </div>
655 </div>
656
657 </div>
658
659 <div class="qr-container hidden">
660 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
661 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
662 <div class="qr-hider hidden">
663 <div class="qr-image"></div>
664 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
665 </div>
666 </div>
667
668 <div class="feedback-container">
669 <div class="feedback">Loading...</div>
670 </div>
671
672 <script type="text/template" id="address-row-template">
673 <tr>
674 <td class="index"><span></span></td>
675 <td class="address"><span data-show-qr></span></td>
676 <td class="pubkey"><span data-show-qr></span></td>
677 <td class="privkey"><span data-show-qr></span></td>
678 </tr>
679 </script>
680 <script>// From
681 // https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
682 // Required for ethereumjs-utils.js when run in phantomjs-2.1.1
683 // but is not required in any modern browsers.
684 // For more information, see
685 // https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
686
687 //----------------------------------------------------------------------
688 //
689 // ECMAScript 2015 Polyfills
690 //
691 //----------------------------------------------------------------------
692
693 (function (global) {
694 "use strict";
695
696 // Set this to always override native implementations, for testing
697 // the polyfill in browsers with partial/full ES2015 support.
698 var OVERRIDE_NATIVE_FOR_TESTING = false;
699
700 var undefined = (void 0); // Paranoia
701
702 // Helpers
703
704 function strict(o) {
705 return o === global ? undefined : o;
706 }
707
708 function hook(o, p, f) {
709 var op = o[p];
710 console.assert(typeof op === 'function', 'Hooking a non-function');
711 o[p] = function() {
712 var o = strict(this);
713 var r = f.apply(o, arguments);
714 return r !== undefined ? r : op.apply(o, arguments);
715 };
716 }
717
718 function isSymbol(s) {
719 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
720 }
721
722 function getPropertyDescriptor(target, name) {
723 var desc = Object.getOwnPropertyDescriptor(target, name);
724 var proto = Object.getPrototypeOf(target);
725 while (!desc && proto) {
726 desc = Object.getOwnPropertyDescriptor(proto, name);
727 proto = Object.getPrototypeOf(proto);
728 }
729 return desc;
730 }
731
732 var enqueue = (function(nativePromise, nativeSetImmediate) {
733 if (nativePromise)
734 return function(job) { nativePromise.resolve().then(function() { job(); }); };
735 if (nativeSetImmediate)
736 return function(job) { nativeSetImmediate(job); };
737 return function(job) { setTimeout(job, 0); };
738 }(global['Promise'], global['setImmediate']));
739
740 function define(o, p, v, override) {
741 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
742 return;
743
744 if (typeof v === 'function') {
745 // Sanity check that functions are appropriately named (where possible)
746 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
747 Object.defineProperty(o, p, {
748 value: v,
749 configurable: true,
750 enumerable: false,
751 writable: true
752 });
753 } else {
754 Object.defineProperty(o, p, {
755 value: v,
756 configurable: false,
757 enumerable: false,
758 writable: false
759 });
760 }
761 }
762
763 function set_internal(o, p, v) {
764 Object.defineProperty(o, p, {
765 value: v,
766 configurable: false,
767 enumerable: false,
768 writable: true
769 });
770 }
771
772 // Snapshot intrinsic functions
773 var $isNaN = global.isNaN,
774 $parseInt = global.parseInt,
775 $parseFloat = global.parseFloat;
776
777 var E = Math.E,
778 LOG10E = Math.LOG10E,
779 LOG2E = Math.LOG2E,
780 abs = Math.abs,
781 ceil = Math.ceil,
782 exp = Math.exp,
783 floor = Math.floor,
784 log = Math.log,
785 max = Math.max,
786 min = Math.min,
787 pow = Math.pow,
788 random = Math.random,
789 sqrt = Math.sqrt;
790
791 var orig_match = String.prototype.match,
792 orig_replace = String.prototype.replace,
793 orig_search = String.prototype.search,
794 orig_split = String.prototype.split;
795
796 // These are used for implementing the polyfills, but not exported.
797
798 // Inspired by https://gist.github.com/1638059
799 /** @constructor */
800 function EphemeronTable() {
801 var secretKey = ObjectCreate(null);
802
803 function conceal(o) {
804 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
805 Object.defineProperty(o, 'valueOf', {
806 value: (function(secretKey) {
807 return function (k) {
808 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
809 };
810 }(secretKey)),
811 configurable: true,
812 writeable: true,
813 enumerable: false
814 });
815 return secrets;
816 }
817
818 function reveal(o) {
819 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
820 return v === o ? null : v;
821 }
822
823 return {
824 clear: function() {
825 secretKey = ObjectCreate(null);
826 },
827 remove: function(key) {
828 var secrets = reveal(key);
829 if (secrets && HasOwnProperty(secrets, 'value')) {
830 delete secrets.value;
831 return true;
832 }
833 return false;
834 },
835 get: function(key, defaultValue) {
836 var secrets = reveal(key);
837 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
838 },
839 has: function(key) {
840 var secrets = reveal(key);
841 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
842 },
843 set: function(key, value) {
844 var secrets = reveal(key) || conceal(key);
845 secrets.value = value;
846 }
847 };
848 }
849
850 var empty = Object.create(null);
851
852 //----------------------------------------------------------------------
853 //
854 // ECMAScript 2015
855 // http://www.ecma-international.org/ecma-262/6.0/
856 //
857 //----------------------------------------------------------------------
858
859 // ---------------------------------------
860 // 19.4 Symbol Objects
861 // ---------------------------------------
862
863 // NOTE: Symbols are defined here - out of spec order - since we need the
864 // properties and prototype to be populated for other polyfills.
865
866 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
867
868 var symbolForKey;
869 (function() {
870 var secret = Object.create(null);
871 var symbolMap = {};
872 symbolForKey = function(k) {
873 return symbolMap[k];
874 };
875
876 var GlobalSymbolRegistry = [];
877
878 function unique(bits) {
879 return Array(bits + 1).join('x').replace(/x/g, function() {
880 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
881 });
882 }
883
884 // 19.4.1 The Symbol Constructor
885 // 19.4.1.1 Symbol ( description=undefined )
886 function Symbol(description) {
887 if (!(this instanceof Symbol)) return new Symbol(description, secret);
888 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
889
890 var descString = description === undefined ? undefined : String(description);
891
892 set_internal(this, '[[SymbolData]]', unique(128));
893 set_internal(this, '[[Description]]', descString);
894
895 symbolMap[this] = this;
896 return this;
897 }
898
899 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
900 global.Symbol = Symbol;
901
902 // 19.4.2 Properties of the Symbol Constructor
903
904 // 19.4.2.1 Symbol.for (key)
905 define(Symbol, 'for', function for_(key) {
906 var stringKey = String(key);
907 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
908 var e = GlobalSymbolRegistry[i];
909 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
910 }
911 var newSymbol = Symbol(key);
912 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
913 return newSymbol;
914 });
915
916 // 19.4.2.2 Symbol.hasInstance
917 // 19.4.2.3 Symbol.isConcatSpreadable
918
919 // 19.4.2.4 Symbol.iterator
920 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
921
922 // 19.4.2.5 Symbol.keyFor (sym)
923 define(Symbol, 'keyFor', function keyFor(sym) {
924 if (!(sym instanceof Symbol)) throw TypeError();
925 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
926 var e = GlobalSymbolRegistry[i];
927 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
928 }
929 return undefined;
930 });
931
932 // 19.4.2.6 Symbol.match
933 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
934
935 // 19.4.2.7 Symbol.prototype
936
937 // 19.4.2.8 Symbol.replace
938 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
939
940 // 19.4.2.9 Symbol.search
941 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
942
943 // 19.4.2.10 Symbol.species
944
945 // 19.4.2.11 Symbol.search
946 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
947
948 // 19.4.2.12 Symbol.toPrimitive
949
950 // 19.4.2.13 Symbol.toStringTag
951 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
952
953 // 19.4.2.14 Symbol.unscopables
954
955 // 19.4.3 Properties of the Symbol Prototype Object
956 // 19.4.3.1 Symbol.prototype.constructor
957
958 // 19.4.3.2 Symbol.prototype.toString ( )
959 Object.defineProperty(Symbol.prototype, 'toString', {
960 value: function toString() {
961 var s = strict(this);
962 var desc = s['[[Description]]'];
963 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
964 },
965 configurable: true, writeable: true, enumerable: false });
966
967 // 19.4.3.3 Symbol.prototype.valueOf ( )
968 Object.defineProperty(Symbol.prototype, 'valueOf', {
969 value: function valueOf() {
970 // To prevent automatic string conversion:
971 throw TypeError();
972
973 // Spec has approximately the following:
974 //var s = strict(this);
975 //if (Type(s) === 'symbol') return s;
976 //if (Type(s) !== 'object') throw TypeError();
977 //if (!('[[SymbolData]]' in s)) throw TypeError();
978 //return s['[[SymbolData]]'];
979 },
980 configurable: true, writeable: true, enumerable: false });
981
982 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
983 // (Done later to polyfill partial implementations)
984
985 // 19.4.4 Properties of Symbol Instances
986 }());
987
988 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
989
990 // Defined here so that other prototypes can reference it
991 // 25.1.2 The %IteratorPrototype% Object
992 var $IteratorPrototype$ = {};
993
994 //----------------------------------------
995 // 6 ECMAScript Data Types and Values
996 //----------------------------------------
997
998 // 6.1 ECMAScript Language Types
999
1000 // "Type(x)" is used as shorthand for "the type of x"...
1001 function Type(v) {
1002 switch (typeof v) {
1003 case 'undefined': return 'undefined';
1004 case 'boolean': return 'boolean';
1005 case 'number': return 'number';
1006 case 'string': return 'string';
1007 case 'symbol': return 'symbol';
1008 default:
1009 if (v === null) return 'null';
1010 if (v instanceof global.Symbol) return 'symbol';
1011 return 'object';
1012 }
1013 }
1014
1015 // 6.1.5.1 Well-Known Symbols
1016 var $$iterator = global.Symbol.iterator,
1017 $$match = global.Symbol.match,
1018 $$replace = global.Symbol.replace,
1019 $$search = global.Symbol.search,
1020 $$split = global.Symbol.split,
1021 $$toStringTag = global.Symbol.toStringTag;
1022
1023 //----------------------------------------
1024 // 7 Abstract Operations
1025 //----------------------------------------
1026
1027 //----------------------------------------
1028 // 7.1 Type Conversion
1029 //----------------------------------------
1030
1031 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1032 // just use valueOf()
1033
1034 // 7.1.2 ToBoolean ( argument )
1035 // just use Boolean()
1036
1037 // 7.1.3 ToNumber ( argument )
1038 // just use Number()
1039
1040 // 7.1.4 ToInteger ( argument )
1041 function ToInteger(n) {
1042 n = Number(n);
1043 if ($isNaN(n)) return 0;
1044 if (n === 0 || n === Infinity || n === -Infinity) return n;
1045 return ((n < 0) ? -1 : 1) * floor(abs(n));
1046 }
1047
1048 // 7.1.5 ToInt32 ( argument )
1049 function ToInt32(v) { return v >> 0; }
1050
1051 // 7.1.6 ToUint32 ( argument )
1052 function ToUint32(v) { return v >>> 0; }
1053
1054 // 7.1.7 ToInt16 ( argument )
1055 function ToInt16(v) { return (v << 16) >> 16; }
1056
1057 // 7.1.8 ToUint16 ( argument )
1058 function ToUint16(v) { return v & 0xFFFF; }
1059
1060 // 7.1.9 ToInt8 ( argument )
1061 function ToInt8(v) { return (v << 24) >> 24; }
1062
1063 // 7.1.10 ToUint8 ( argument )
1064 function ToUint8(v) { return v & 0xFF; }
1065
1066 // 7.1.11 ToUint8Clamp ( argument )
1067 function ToUint8Clamp(argument) {
1068 var number = Number(argument);
1069 if ($isNaN(number)) return 0;
1070 if (number <= 0) return 0;
1071 if (number >= 255) return 255;
1072 var f = floor(number);
1073 if ((f + 0.5) < number) return f + 1;
1074 if (number < (f + 0.5)) return f;
1075 if (f % 2) return f + 1;
1076 return f;
1077 }
1078
1079 // 7.1.12 ToString ( argument )
1080 // just use String()
1081
1082 // 7.1.13 ToObject ( argument )
1083 function ToObject(v) {
1084 if (v === null || v === undefined) throw TypeError();
1085 return Object(v);
1086 }
1087
1088 // 7.1.14 ToPropertyKey ( argument )
1089 function ToPropertyKey(v) {
1090 return String(v);
1091 }
1092
1093 // 7.1.15 ToLength ( argument )
1094 function ToLength(v) {
1095 var len = ToInteger(v);
1096 if (len <= 0) return 0;
1097 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1098 return min(len, 0x20000000000000 - 1); // 2^53-1
1099 }
1100
1101 // 7.1.16 CanonicalNumericIndexString ( argument )
1102
1103 //----------------------------------------
1104 // 7.2 Testing and Comparison Operations
1105 //----------------------------------------
1106
1107 // 7.2.1 RequireObjectCoercible ( argument )
1108 // 7.2.2 IsArray ( argument )
1109
1110 // 7.2.3 IsCallable ( argument )
1111 function IsCallable(o) { return typeof o === 'function'; }
1112
1113 // 7.2.4 IsConstructor ( argument )
1114 function IsConstructor(o) {
1115 // Hacks for Safari 7 TypedArray XXXConstructor objects
1116 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1117 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1118 // TODO: Can this be improved on?
1119 return typeof o === 'function';
1120 }
1121
1122 // 7.2.5 IsExtensible (O)
1123 // 7.2.6 IsInteger ( argument )
1124
1125 // 7.2.7 IsPropertyKey ( argument )
1126 function IsPropertyKey(argument) {
1127 if (Type(argument) === 'string') return true;
1128 if (Type(argument) === 'symbol') return true;
1129 return false;
1130 }
1131
1132 // 7.2.8 IsRegExp ( argument )
1133 // 7.2.5 IsConstructor ( argument )
1134
1135 // 7.2.9 SameValue(x, y)
1136 function SameValue(x, y) {
1137 if (typeof x !== typeof y) return false;
1138 switch (typeof x) {
1139 case 'undefined':
1140 return true;
1141 case 'number':
1142 if (x !== x && y !== y) return true;
1143 if (x === 0 && y === 0) return 1/x === 1/y;
1144 return x === y;
1145 case 'boolean':
1146 case 'string':
1147 case 'object':
1148 default:
1149 return x === y;
1150 }
1151 }
1152
1153 // 7.2.10 SameValueZero(x, y)
1154 function SameValueZero(x, y) {
1155 if (typeof x !== typeof y) return false;
1156 switch (typeof x) {
1157 case 'undefined':
1158 return true;
1159 case 'number':
1160 if (x !== x && y !== y) return true;
1161 return x === y;
1162 case 'boolean':
1163 case 'string':
1164 case 'object':
1165 default:
1166 return x === y;
1167 }
1168 }
1169
1170 //----------------------------------------
1171 // 7.3 Operations on Objects
1172 //----------------------------------------
1173
1174 // 7.3.1 Get (O, P)
1175 // - just use o.p or o[p]
1176
1177 // 7.3.2 GetV (V, P)
1178 function GetV(v, p) {
1179 var o = ToObject(v);
1180 return o[p];
1181 }
1182
1183 // 7.3.3 Set (O, P, V, Throw)
1184 // - just use o.p = v or o[p] = v
1185
1186
1187
1188
1189 // 7.3.9 GetMethod (O, P)
1190 function GetMethod(o, p) {
1191 var func = GetV(o, p);
1192 if (func === undefined || func === null) return undefined;
1193 if (!IsCallable(func)) throw TypeError();
1194 return func;
1195 }
1196
1197 // 7.3.10 HasProperty (O, P)
1198 function HasProperty(o, p) {
1199 while (o) {
1200 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1201 if (Type(o) !== 'object') return false;
1202 o = Object.getPrototypeOf(o);
1203 }
1204 return false;
1205 }
1206
1207 // 7.3.11 HasOwnProperty (O, P)
1208 function HasOwnProperty(o, p) {
1209 return Object.prototype.hasOwnProperty.call(o, p);
1210 }
1211
1212 //----------------------------------------
1213 // 7.4 Operations on Iterator Objects
1214 //----------------------------------------
1215
1216 // 7.4.1 GetIterator ( obj, method )
1217 function GetIterator(obj, method) {
1218 if (arguments.length < 2)
1219 method = GetMethod(obj, $$iterator);
1220 var iterator = method.call(obj);
1221 if (Type(iterator) !== 'object') throw TypeError();
1222 return iterator;
1223 }
1224
1225 // 7.4.2 IteratorNext ( iterator, value )
1226 function IteratorNext(iterator, value) {
1227 if (arguments.length < 2)
1228 var result = iterator.next();
1229 else
1230 result = iterator.next(value);
1231 if (Type(result) !== 'object') throw TypeError();
1232 return result;
1233 }
1234
1235 // 7.4.3 IteratorComplete ( iterResult )
1236 function IteratorComplete(iterResult) {
1237 console.assert(Type(iterResult) === 'object');
1238 return Boolean(iterResult.done);
1239 }
1240
1241 // 7.4.4 IteratorValue ( iterResult )
1242 function IteratorValue(iterResult) {
1243 console.assert(Type(iterResult) === 'object');
1244 return iterResult.value;
1245 }
1246
1247 // 7.4.5 IteratorStep ( iterator )
1248 function IteratorStep( iterator, value ) {
1249 var result = IteratorNext(iterator, value);
1250 var done = result['done'];
1251 if (Boolean(done) === true) return false;
1252 return result;
1253 }
1254
1255 // 7.4.6 IteratorClose( iterator, completion )
1256 function IteratorClose( iterator, completion ) {
1257 console.assert(Type(iterator) === 'object');
1258 var _return = GetMethod(iterator, 'return');
1259 if (_return === undefined) return completion;
1260 try {
1261 var innerResult = _return[iterator]();
1262 } catch (result) {
1263 // TODO: If completion.[[type]] is throw, return completion
1264 return result;
1265 }
1266 if (Type(innerResult) !== 'object') throw TypeError();
1267 return completion;
1268 }
1269
1270 // 7.4.7 CreateIterResultObject (value, done)
1271 function CreateIterResultObject(value, done) {
1272 console.assert(Type(done) === 'boolean');
1273 var obj = {};
1274 obj["value"] = value;
1275 obj["done"] = done;
1276 return obj;
1277 }
1278
1279 // 7.4.8 CreateListIterator (list)
1280 // 7.4.8.1 ListIterator next( )
1281 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1282 // 7.4.9.1 CompoundIterator next( )
1283
1284 //----------------------------------------
1285 // 8 Executable Code and Execution Contexts
1286 //----------------------------------------
1287
1288 //----------------------------------------
1289 // 8.4 Jobs and Job Queues
1290 //----------------------------------------
1291
1292 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1293 function EnqueueJob(queueName, job, args) {
1294 var fn = function() { job.apply(undefined, args); };
1295 enqueue(fn);
1296 }
1297
1298 // 8.4.2 NextJob result
1299 function NextJob(result) {
1300 // no-op
1301 }
1302
1303 //----------------------------------------
1304 // 9 Ordinary and Exotic Objects Behaviors
1305 //----------------------------------------
1306
1307 // 9.1.11 [[Enumerate]] ()
1308 function Enumerate(obj) {
1309 var e = [];
1310 if (Object(obj) !== obj) return e;
1311 var visited = new Set;
1312 while (obj !== null) {
1313 Object.getOwnPropertyNames(obj).forEach(function(name) {
1314 if (!visited.has(name)) {
1315 var desc = Object.getOwnPropertyDescriptor(obj, name);
1316 if (desc) {
1317 visited.add(name);
1318 if (desc.enumerable) e.push(name);
1319 }
1320 }
1321 });
1322 obj = Object.getPrototypeOf(obj);
1323 }
1324 return e[$$iterator]();
1325 }
1326
1327 // 9.1.12 [[OwnPropertyKeys]] ( )
1328 function OwnPropertyKeys(o) {
1329 return Object.getOwnPropertyNames(o);
1330 }
1331
1332 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1333 function ObjectCreate(proto, internalSlotsList) {
1334 return Object.create(proto, internalSlotsList);
1335 }
1336
1337 // ---------------------------------------
1338 // 19 Fundamental Objects
1339 // ---------------------------------------
1340
1341 // ---------------------------------------
1342 // 19.1 Object Objects
1343 // ---------------------------------------
1344
1345 // 19.1.1 The Object Constructor
1346 // 19.1.1.1 Object ( [ value ] )
1347 // 19.1.2 Properties of the Object Constructor
1348 // 19.1.2.1 Object.assign ( target, ...sources )
1349 define(
1350 Object, 'assign',
1351 function assign(target, /*...*/sources) {
1352 var to = ToObject(target);
1353 if (arguments.length < 2) return to;
1354
1355 var sourcesIndex = 1;
1356 while (sourcesIndex < arguments.length) {
1357 var nextSource = arguments[sourcesIndex++];
1358 if (nextSource === undefined || nextSource === null) {
1359 var keys = [];
1360 } else {
1361 var from = ToObject(nextSource);
1362 keys = OwnPropertyKeys(from);
1363 }
1364 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1365 var nextKey = keys[keysIndex];
1366 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1367 if (desc !== undefined && desc.enumerable) {
1368 var propValue = from[nextKey];
1369 to[nextKey] = propValue;
1370 }
1371 }
1372 }
1373 return to;
1374 });
1375
1376 // 19.1.2.2 Object.create ( O [ , Properties ] )
1377 // 19.1.2.3 Object.defineProperties ( O, Properties )
1378 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1379 // 19.1.2.5 Object.freeze ( O )
1380 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1381
1382 (function() {
1383 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1384 $getOwnPropertyNames = Object.getOwnPropertyNames,
1385 $keys = Object.keys,
1386 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1387
1388 function isStringKey(k) { return !symbolForKey(k); }
1389
1390 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1391 define(
1392 Object, 'getOwnPropertyNames',
1393 function getOwnPropertyNames(o) {
1394 if (Object.prototype.toString.call(o) === '[object Window]') {
1395 // Workaround for cross-realm calling by IE itself.
1396 // https://github.com/inexorabletash/polyfill/issues/96
1397 try {
1398 return $getOwnPropertyNames(o).filter(isStringKey);
1399 } catch (_) {
1400 return $window_names.slice();
1401 }
1402 }
1403 return $getOwnPropertyNames(o).filter(isStringKey);
1404 }, !nativeSymbols);
1405
1406 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1407 define(
1408 Object, 'getOwnPropertySymbols',
1409 function getOwnPropertySymbols(o) {
1410 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1411 }, !nativeSymbols);
1412
1413 // 19.1.2.14 Object.keys ( O )
1414 define(
1415 Object, 'keys',
1416 function keys(o) {
1417 return $keys(o).filter(isStringKey);
1418 }, !nativeSymbols);
1419 }());
1420
1421 // 19.1.2.9 Object.getPrototypeOf ( O )
1422 // 19.1.2.10 Object.is ( value1, value2 )
1423 define(
1424 Object, 'is',
1425 function is(value1, value2) {
1426 return SameValue(value1, value2);
1427 });
1428
1429 // 19.1.2.11 Object.isExtensible ( O )
1430 // 19.1.2.12 Object.isFrozen ( O )
1431 // 19.1.2.13 Object.isSealed ( O )
1432
1433 // 19.1.2.14 Object.keys ( O )
1434 // see above
1435
1436 // 19.1.2.15 Object.preventExtensions ( O )
1437 // 19.1.2.16 Object.prototype
1438 // 19.1.2.17 Object.seal ( O )
1439
1440 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1441 define(
1442 Object, 'setPrototypeOf',
1443 function setPrototypeOf(o, proto) {
1444 if (Type(o) !== 'object') throw TypeError();
1445 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1446 o.__proto__ = proto;
1447 return o;
1448 }
1449 );
1450
1451 // 19.1.3 Properties of the Object Prototype Object
1452 // 19.1.3.1 Object.prototype.constructor
1453 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1454 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1455 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1456 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1457 // 19.1.3.6 Object.prototype.toString ( )
1458 hook(Object.prototype, 'toString',
1459 function() {
1460 var o = strict(this);
1461 if (o === Object(o) && $$toStringTag in o) {
1462 return '[object ' + o[$$toStringTag] + ']';
1463 }
1464 return undefined;
1465 });
1466
1467 // 19.1.3.7 Object.prototype.valueOf ( )
1468 // 19.1.4 Properties of Object Instances
1469
1470 // ---------------------------------------
1471 // 19.2 Function Objects
1472 // ---------------------------------------
1473
1474 // 19.2.1 The Function Constructor
1475 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1476 // 19.2.2 Properties of the Function Constructor
1477 // 19.2.2.1 Function.length
1478 // 19.2.2.2 Function.prototype
1479 // 19.2.3 Properties of the Function Prototype Object
1480 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1481 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1482 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1483 // 19.2.3.4 Function.prototype.constructor
1484 // 19.2.3.5 Function.prototype.toString ( )
1485 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1486 // 19.2.4 Function Instances
1487 // 19.2.4.1 length
1488 // 19.2.4.2 name
1489 // 19.2.4.3 prototype
1490
1491 // (No polyfillable changes from ES5)
1492
1493 // ---------------------------------------
1494 // 19.3 Boolean Objects
1495 // ---------------------------------------
1496
1497 // 19.3.1 The Boolean Constructor
1498 // 19.3.1.1 Boolean ( value )
1499 // 19.3.2 Properties of the Boolean Constructor
1500 // 19.3.2.1 Boolean.prototype
1501 // 19.3.3 Properties of the Boolean Prototype Object
1502 // 19.3.3.1 Boolean.prototype.constructor
1503 // 19.3.3.2 Boolean.prototype.toString ( )
1504 // 19.3.3.3 Boolean.prototype.valueOf ( )
1505 // 19.3.4 Properties of Boolean Instances
1506
1507 // (No polyfillable changes from ES5)
1508
1509 // ---------------------------------------
1510 // 19.4 Symbol Objects
1511 // ---------------------------------------
1512
1513 // Moved earlier in this script, so that other polyfills can depend on them.
1514
1515 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1516 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1517
1518 // ---------------------------------------
1519 // 19.5 Error Objects
1520 // ---------------------------------------
1521
1522 // 19.5.1 The Error Constructor
1523 // 19.5.1.1 Error ( message )
1524 // 19.5.1.2 new Error( ...argumentsList )
1525 // 19.5.2 Properties of the Error Constructor
1526 // 19.5.2.1 Error.prototype
1527 // 19.5.3 Properties of the Error Prototype Object
1528 // 19.5.3.1 Error.prototype.constructor
1529 // 19.5.3.2 Error.prototype.message
1530 // 19.5.3.3 Error.prototype.name
1531 // 19.5.3.4 Error.prototype.toString ( )
1532 // 19.5.4 Properties of Error Instances
1533 // 19.5.5 Native Error Types Used in This Standard
1534 // 19.5.5.1 EvalError
1535 // 19.5.5.2 RangeError
1536 // 19.5.5.3 ReferenceError
1537 // 19.5.5.4 SyntaxError
1538 // 19.5.5.5 TypeError
1539 // 19.5.5.6 URIError
1540 // 19.5.6 NativeError Object Structure
1541 // 19.5.6.1 NativeError Constructors
1542 // 19.5.6.1.1 NativeError ( message )
1543 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1544 // 19.5.6.2 Properties of the NativeError Constructors
1545 // 19.5.6.2.1 NativeError.prototype
1546 // 19.5.6.3 Properties of the NativeError Prototype Objects
1547 // 19.5.6.4 Properties of NativeError Instances
1548
1549 // (No polyfillable changes from ES5)
1550
1551 // ---------------------------------------
1552 // 20 Numbers and Dates
1553 // ---------------------------------------
1554
1555 // ---------------------------------------
1556 // 20.1 Number Objects
1557 // ---------------------------------------
1558
1559 // 20.1.1 The Number Constructor
1560 // 20.1.1.1 Number ( [ value ] )
1561 // 20.1.1.2 new Number ( ...argumentsList )
1562 // 20.1.2 Properties of the Number Constructor
1563
1564 // 20.1.2.1 Number.EPSILON
1565 define(
1566 Number, 'EPSILON',
1567 (function () {
1568 var next, result;
1569 for (next = 1; 1 + next !== 1; next = next / 2)
1570 result = next;
1571 return result;
1572 }()));
1573
1574 // 20.1.2.2 Number.isFinite ( number )
1575 define(
1576 Number, 'isFinite',
1577 function isFinite(number) {
1578 if (Type(number) !== 'number') return false;
1579 if (number !== number || number === +Infinity || number === -Infinity) return false;
1580 return true;
1581 });
1582
1583 // 20.1.2.3 Number.isInteger ( number )
1584 define(
1585 Number, 'isInteger',
1586 function isInteger(number) {
1587 if (Type(number) !== 'number') return false;
1588 if (number !== number || number === +Infinity || number === -Infinity) return false;
1589 var integer = ToInteger(number);
1590 if (integer !== number) return false;
1591 return true;
1592 });
1593
1594 // 20.1.2.4 Number.isNaN ( number )
1595 define(
1596 Number, 'isNaN',
1597 function isNaN(number) {
1598 if (Type(number) !== 'number') return false;
1599 if (number !== number) return true;
1600 return false;
1601 });
1602
1603 // 20.1.2.5 Number.isSafeInteger ( number )
1604 define(
1605 Number, 'isSafeInteger',
1606 function isSafeInteger(number) {
1607 if (Type(number) !== 'number') return false;
1608 if (number !== number || number === +Infinity || number === -Infinity) return false;
1609 var integer = ToInteger(number);
1610 if (integer !== number) return false;
1611 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1612 return true;
1613 return false;
1614 });
1615
1616 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1617 define(
1618 Number, 'MAX_SAFE_INTEGER',
1619 9007199254740991); // 2^53-1
1620
1621 // 20.1.2.7 Number.MAX_VALUE
1622
1623 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1624 define(
1625 Number, 'MIN_SAFE_INTEGER',
1626 -9007199254740991); // -2^53+1
1627
1628 // 20.1.2.9 Number.MIN_VALUE
1629 // 20.1.2.10 Number.NaN
1630 // 20.1.2.11 Number.NEGATIVE_INFINITY
1631
1632 // 20.1.2.12 Number.parseFloat ( string )
1633 define(Number, 'parseFloat', $parseFloat);
1634
1635 // 20.1.2.13 Number.parseInt ( string, radix )
1636 define(Number, 'parseInt', $parseInt);
1637
1638 // 20.1.2.14 Number.POSITIVE_INFINITY
1639 // 20.1.2.15 Number.prototype
1640
1641 // 20.1.3 Properties of the Number Prototype Object
1642 // 20.1.3.1 Number.prototype.constructor
1643 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1644 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1645 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1646 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1647 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1648 // 20.1.3.7 Number.prototype.valueOf ( )
1649 // 20.1.4 Properties of Number Instances
1650
1651 // ---------------------------------------
1652 // 20.2 The Math Object
1653 // ---------------------------------------
1654
1655 // 20.2.1 Value Properties of the Math Object
1656 // 20.2.1.1 Math.E
1657 // 20.2.1.2 Math.LN10
1658 // 20.2.1.3 Math.LN2
1659 // 20.2.1.4 Math.LOG10E
1660 // 20.2.1.5 Math.LOG2E
1661 // 20.2.1.6 Math.PI
1662 // 20.2.1.7 Math.SQRT1_2
1663 // 20.2.1.8 Math.SQRT2
1664
1665 // 20.2.1.9 Math [ @@toStringTag ]
1666 define(Math, $$toStringTag, 'Math');
1667
1668 // 20.2.2 Function Properties of the Math Object
1669 // 20.2.2.1 Math.abs ( x )
1670 // 20.2.2.2 Math.acos ( x )
1671
1672 // 20.2.2.3 Math.acosh(x)
1673 define(
1674 Math, 'acosh',
1675 function acosh(x) {
1676 x = Number(x);
1677 return log(x + sqrt(x * x - 1));
1678 });
1679
1680 // 20.2.2.4 Math.asin ( x )
1681
1682 // 20.2.2.5 Math.asinh( x )
1683 define(
1684 Math, 'asinh',
1685 function asinh(x) {
1686 x = Number(x);
1687 if (SameValue(x, -0)) {
1688 return x;
1689 }
1690 var s = sqrt(x * x + 1);
1691 return (s === -x) ? log(0) : log(x + s);
1692 });
1693
1694 // 20.2.2.6 Math.atan ( x )
1695
1696 // 20.2.2.7 Math.atanh( x )
1697 define(
1698 Math, 'atanh',
1699 function atanh(x) {
1700 x = Number(x);
1701 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1702 });
1703
1704 // 20.2.2.8 Math.atan2 ( y, x )
1705
1706 // 20.2.2.9 Math.cbrt ( x )
1707 define(
1708 Math, 'cbrt',
1709 function cbrt(x) {
1710 x = Number(x);
1711 if ($isNaN(x/x)) {
1712 return x;
1713 }
1714 var r = pow(abs(x), 1/3);
1715 var t = x/r/r;
1716 return r + (r * (t-r) / (2*r + t));
1717 });
1718
1719 // 20.2.2.10 Math.ceil ( x )
1720
1721 // 20.2.2.11 Math.clz32 ( x )
1722 define(
1723 Math, 'clz32',
1724 function clz32(x) {
1725 function clz8(x) {
1726 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1727 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1728 }
1729 x = ToUint32(x);
1730 return x & 0xff000000 ? clz8(x >> 24) :
1731 x & 0xff0000 ? clz8(x >> 16) + 8 :
1732 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1733 });
1734
1735
1736
1737 // 20.2.2.12 Math.cos ( x )
1738
1739 // 20.2.2.13 Math.cosh ( x )
1740 define(
1741 Math, 'cosh',
1742 function cosh(x) {
1743 x = Number(x);
1744 return (pow(E, x) + pow(E, -x)) / 2;
1745 });
1746
1747 // 20.2.2.14 Math.exp ( x )
1748
1749 // 20.2.2.15 Math.expm1 ( x )
1750 define(
1751 Math, 'expm1',
1752 function expm1(x) {
1753 x = Number(x);
1754 // from: http://www.johndcook.com/cpp_log1p.html
1755 if (SameValue(x, -0)) {
1756 return -0;
1757 } else if (abs(x) < 1e-5) {
1758 return x + 0.5 * x * x; // two terms of Taylor expansion
1759 } else {
1760 return exp(x) - 1;
1761 }
1762 });
1763
1764 // 20.2.2.16 Math.floor ( x )
1765
1766 // 20.2.2.17 Math.fround ( x )
1767 define(
1768 Math, 'fround',
1769 function fround(x) {
1770 if ($isNaN(x)) {
1771 return NaN;
1772 }
1773 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1774 return x;
1775 }
1776 return (new Float32Array([x]))[0];
1777 });
1778
1779 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1780 define(
1781 Math, 'hypot',
1782 function hypot() {
1783 var values = [];
1784 var m = 0, sawNaN = false;
1785 for (var i = 0; i < arguments.length; ++i) {
1786 var n = abs(Number(arguments[i]));
1787 if (n === Infinity) return n;
1788 if (n !== n) sawNaN = true;
1789 if (n > m) m = n;
1790 values[i] = n;
1791 }
1792 if (sawNaN) return NaN;
1793 if (m === 0) return +0;
1794 var sum = +0;
1795 for (i = 0; i < values.length; ++i) {
1796 var r = values[i] / m;
1797 sum = sum + r * r;
1798 }
1799 return m * sqrt(sum);
1800 });
1801
1802 // 20.2.2.19 Math.imul ( x, y )
1803 define(
1804 Math, 'imul',
1805 function imul(x, y) {
1806 var a = ToUint32(x);
1807 var b = ToUint32(y);
1808 // (slow but accurate)
1809 var ah = (a >>> 16) & 0xffff;
1810 var al = a & 0xffff;
1811 var bh = (b >>> 16) & 0xffff;
1812 var bl = b & 0xffff;
1813 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1814 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1815 );
1816
1817 // 20.2.2.20 Math.log ( x )
1818
1819 // 20.2.2.21 Math.log1p ( x )
1820 define(
1821 Math, 'log1p',
1822 function log1p(x) {
1823 x = Number(x);
1824 // from: http://www.johndcook.com/cpp_expm1.html
1825 if (x < -1) {
1826 return NaN;
1827 } else if (SameValue(x, -0)) {
1828 return -0;
1829 } else if (abs(x) > 1e-4) {
1830 return log(1 + x);
1831 } else {
1832 return (-0.5 * x + 1) * x;
1833 }
1834 });
1835
1836 // 20.2.2.22 Math.log10 ( x )
1837 define(
1838 Math, 'log10',
1839 function log10(x) {
1840 x = Number(x);
1841 return log(x) * LOG10E;
1842 });
1843
1844 // 20.2.2.23 Math.log2 ( x )
1845 define(
1846 Math, 'log2',
1847 function log2(x) {
1848 x = Number(x);
1849 return log(x) * LOG2E;
1850 });
1851
1852 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1853 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1854 // 20.2.2.26 Math.pow ( x, y )
1855 // 20.2.2.27 Math.random ( )
1856 // 20.2.2.28 Math.round ( x )
1857
1858 // 20.2.2.29 Math.sign(x)
1859 define(
1860 Math, 'sign',
1861 function sign(x) {
1862 x = Number(x);
1863 return x < 0 ? -1 : x > 0 ? 1 : x;
1864 });
1865
1866 // 20.2.2.30 Math.sin ( x )
1867
1868 // 20.2.2.31 Math.sinh( x )
1869 define(
1870 Math, 'sinh',
1871 function sinh(x) {
1872 x = Number(x);
1873 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1874 });
1875
1876 // 20.2.2.32 Math.sqrt ( x )
1877 // 20.2.2.33 Math.tan ( x )
1878
1879 // 20.2.2.34 Math.tanh ( x )
1880 define(
1881 Math, 'tanh',
1882 function tanh(x) {
1883 x = Number(x);
1884 var n = pow(E, 2 * x) - 1,
1885 d = pow(E, 2 * x) + 1;
1886 if (SameValue(x, -0))
1887 return x;
1888 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1889 });
1890
1891 // 20.2.2.35 Math.trunc ( x )
1892 define(
1893 Math, 'trunc',
1894 function trunc(x) {
1895 x = Number(x);
1896 return $isNaN(x) ? NaN :
1897 x < 0 ? ceil(x) : floor(x);
1898 });
1899
1900 // ---------------------------------------
1901 // 20.3 Date Objects
1902 // ---------------------------------------
1903
1904 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1905 // 20.3.1.1 Time Values and Time Range
1906 // 20.3.1.2 Day Number and Time within Day
1907 // 20.3.1.3 Year Number
1908 // 20.3.1.4 Month Number
1909 // 20.3.1.5 Date Number
1910 // 20.3.1.6 Week Day
1911 // 20.3.1.7 Local Time Zone Adjustment
1912 // 20.3.1.8 Daylight Saving Time Adjustment
1913 // 20.3.1.9 Local Time
1914 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1915 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1916 // 20.3.1.12 MakeDay (year, month, date)
1917 // 20.3.1.13 MakeDate (day, time)
1918 // 20.3.1.14 TimeClip (time)
1919 // 20.3.1.15 Date Time String Format
1920 // 20.3.1.15.1 Extended years
1921 // 20.3.2 The Date Constructor
1922 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1923 // 20.3.2.2 Date ( value )
1924 // 20.3.2.3 Date ( )
1925 // 20.3.3 Properties of the Date Constructor
1926 // 20.3.3.1 Date.now ( )
1927 // 20.3.3.2 Date.parse (string)
1928 // 20.3.3.3 Date.prototype
1929 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1930 // 20.3.4 Properties of the Date Prototype Object
1931 // 20.3.4.1 Date.prototype.constructor
1932 // 20.3.4.2 Date.prototype.getDate ( )
1933 // 20.3.4.3 Date.prototype.getDay ( )
1934 // 20.3.4.4 Date.prototype.getFullYear ( )
1935 // 20.3.4.5 Date.prototype.getHours ( )
1936 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1937 // 20.3.4.7 Date.prototype.getMinutes ( )
1938 // 20.3.4.8 Date.prototype.getMonth ( )
1939 // 20.3.4.9 Date.prototype.getSeconds ( )
1940 // 20.3.4.10 Date.prototype.getTime ( )
1941 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1942 // 20.3.4.12 Date.prototype.getUTCDate ( )
1943 // 20.3.4.13 Date.prototype.getUTCDay ( )
1944 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1945 // 20.3.4.15 Date.prototype.getUTCHours ( )
1946 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1947 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1948 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1949 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1950 // 20.3.4.20 Date.prototype.setDate ( date )
1951 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1952 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1953 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1954 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1955 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1956 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1957 // 20.3.4.27 Date.prototype.setTime ( time )
1958 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1959 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1960 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1961 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1962 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1963 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1964 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1965 // 20.3.4.35 Date.prototype.toDateString ( )
1966 // 20.3.4.36 Date.prototype.toISOString ( )
1967 // 20.3.4.37 Date.prototype.toJSON ( key )
1968 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1969 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1970 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1971 // 20.3.4.41 Date.prototype.toString ( )
1972 // 20.3.4.42 Date.prototype.toTimeString ( )
1973 // 20.3.4.43 Date.prototype.toUTCString ( )
1974 // 20.3.4.44 Date.prototype.valueOf ( )
1975 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1976 // 20.3.5 Properties of Date Instances
1977
1978 // (No polyfillable changes from ES5)
1979
1980 // ---------------------------------------
1981 // 21 Text Processing
1982 // ---------------------------------------
1983
1984 var string_regexp_dispatch = (function() {
1985 var faux = {}, secret = Symbol();
1986 faux[Symbol.match] = function() { return secret; };
1987 return ("").match(faux) === secret;
1988 }());
1989
1990 // 21.1 String Objects
1991 // 21.1.1 The String Constructor
1992 // 21.1.1.1 String ( value )
1993 // 21.1.2 Properties of the String Constructor
1994 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1995
1996 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1997 define(
1998 String, 'fromCodePoint',
1999 function fromCodePoint(/*...codePoints*/) {
2000 var codePoints = arguments,
2001 length = codePoints.length,
2002 elements = [],
2003 nextIndex = 0;
2004 while (nextIndex < length) {
2005 var next = codePoints[nextIndex];
2006 var nextCP = Number(next);
2007 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2008 nextCP < 0 || nextCP > 0x10FFFF) {
2009 throw RangeError('Invalid code point ' + nextCP);
2010 }
2011 if (nextCP < 0x10000) {
2012 elements.push(String.fromCharCode(nextCP));
2013 } else {
2014 nextCP -= 0x10000;
2015 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2016 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2017 }
2018 nextIndex += 1;
2019 }
2020 return elements.join('');
2021 });
2022
2023 // 21.1.2.3 String.prototype
2024
2025 // 21.1.2.4 String.raw ( template , ...substitutions )
2026 define(
2027 String, 'raw',
2028 function raw(template /*, ...substitutions*/) {
2029 var substitutions = [].slice.call(arguments, 1);
2030
2031 var cooked = Object(template);
2032 var rawValue = cooked['raw'];
2033 var raw = Object(rawValue);
2034 var len = raw['length'];
2035 var literalSegments = ToLength(len);
2036 if (literalSegments <= 0) return '';
2037 var stringElements = [];
2038 var nextIndex = 0;
2039 while (true) {
2040 var next = raw[nextIndex];
2041 var nextSeg = String(next);
2042 stringElements.push(nextSeg);
2043 if (nextIndex + 1 === literalSegments)
2044 return stringElements.join('');
2045 next = substitutions[nextIndex];
2046 var nextSub = String(next);
2047 stringElements.push(nextSub);
2048 nextIndex = nextIndex + 1;
2049 }
2050 });
2051
2052 // See https://githib.com/inexorabletash/uate for a more useful version.
2053
2054 // 21.1.3 Properties of the String Prototype Object
2055 // 21.1.3.1 String.prototype.charAt ( pos )
2056 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2057
2058 // 21.1.3.3 String.prototype.codePointAt ( pos )
2059 define(
2060 String.prototype, 'codePointAt',
2061 function codePointAt(pos) {
2062 var o = strict(this);
2063 var s = String(o);
2064 var position = ToInteger(pos);
2065 var size = s.length;
2066 if (position < 0 || position >= size) return undefined;
2067 var first = s.charCodeAt(position);
2068 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2069 var second = s.charCodeAt(position + 1);
2070 if (second < 0xDC00 || second > 0xDFFF) return first;
2071 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2072 });
2073
2074 // 21.1.3.4 String.prototype.concat ( ...args )
2075 // 21.1.3.5 String.prototype.constructor
2076
2077 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2078 define(
2079 String.prototype, 'endsWith',
2080 function endsWith(searchString) {
2081 var endPosition = arguments[1];
2082
2083 var o = strict(this);
2084 var s = String(o);
2085 var searchStr = String(searchString);
2086 var len = s.length;
2087 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2088 var end = min(max(pos, 0), len);
2089 var searchLength = searchStr.length;
2090 var start = end - searchLength;
2091 if (start < 0) return false;
2092 if (s.substring(start, start + searchLength) === searchStr) return true;
2093 return false;
2094 });
2095
2096 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2097 define(
2098 String.prototype, 'includes',
2099 function includes(searchString) {
2100 var position = arguments[1];
2101
2102 var o = strict(this);
2103 var s = String(o);
2104 var searchStr = String(searchString);
2105 var pos = ToInteger(position);
2106 var len = s.length;
2107 var start = min(max(pos, 0), len);
2108 return s.indexOf(searchStr, start) !== -1;
2109 });
2110
2111 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2112 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2113 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2114 // 21.1.3.11 String.prototype.match ( regexp )
2115 define(
2116 String.prototype, 'match',
2117 function match(regexp) {
2118 var o = strict(this);
2119 var s = String(o);
2120 if (HasProperty(regexp, $$match)) var rx = regexp;
2121 else rx = new RegExp(regexp);
2122 return rx[$$match](s);
2123 }, !string_regexp_dispatch);
2124
2125 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2126
2127 // Not practical due to table sizes; if needed, pull in:
2128 // https://github.com/walling/unorm/
2129
2130 // 21.1.3.13 String.prototype.repeat ( count )
2131 define(
2132 String.prototype, 'repeat',
2133 function repeat(count) {
2134 var o = strict(this);
2135 var s = String(o);
2136 var n = ToInteger(count);
2137 if (n < 0) throw RangeError();
2138 if (n === Infinity) throw RangeError();
2139 var t = new Array(n + 1).join(s);
2140 return t;
2141 });
2142
2143 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2144 define(
2145 String.prototype, 'replace',
2146 function replace(searchValue, replaceValue) {
2147 var o = strict(this);
2148 if (HasProperty(searchValue, $$replace))
2149 return searchValue[$$replace](o, replaceValue);
2150 return orig_replace.call(o, searchValue, replaceValue);
2151 }, !string_regexp_dispatch);
2152
2153 // 21.1.3.15 String.prototype.search ( regexp )
2154 define(
2155 String.prototype, 'search',
2156 function search(regexp) {
2157 var o = strict(this);
2158 var string = String(o);
2159 if (HasProperty(regexp, $$search)) var rx = regexp;
2160 else rx = new RegExp(regexp);
2161 return rx[$$search](string);
2162 }, !string_regexp_dispatch);
2163
2164 // 21.1.3.16 String.prototype.slice ( start, end )
2165 // 21.1.3.17 String.prototype.split ( separator, limit )
2166 define(
2167 String.prototype, 'split',
2168 function split(separator, limit) {
2169 var o = strict(this);
2170 if (HasProperty(separator, $$split))
2171 return separator[$$split](o, limit);
2172 return orig_split.call(o, separator, limit);
2173 }, !string_regexp_dispatch);
2174
2175 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2176 define(
2177 String.prototype, 'startsWith',
2178 function startsWith(searchString) {
2179 var position = arguments[1];
2180
2181 var o = strict(this);
2182 var s = String(o);
2183 var searchStr = String(searchString);
2184 var pos = ToInteger(position);
2185 var len = s.length;
2186 var start = min(max(pos, 0), len);
2187 var searchLength = searchStr.length;
2188 if (searchLength + start > len) return false;
2189 if (s.substring(start, start + searchLength) === searchStr) return true;
2190 return false;
2191 });
2192
2193 // 21.1.3.19 String.prototype.substring ( start, end )
2194 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2195 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2196 // 21.1.3.22 String.prototype.toLowerCase ( )
2197 // 21.1.3.23 String.prototype.toString ( )
2198 // 21.1.3.24 String.prototype.toUpperCase ( )
2199 // 21.1.3.25 String.prototype.trim ( )
2200 // 21.1.3.26 String.prototype.valueOf ( )
2201
2202 // 21.1.3.27 String.prototype [ @@iterator ]( )
2203 define(
2204 String.prototype, $$iterator,
2205 function entries() {
2206 return CreateStringIterator(this, 'value');
2207 });
2208
2209 // 21.1.4 Properties of String Instances
2210 // 21.1.4.1 length
2211
2212 // 21.1.5 String Iterator Objects
2213 /** @constructor */
2214 function StringIterator() {}
2215
2216 // 21.1.5.1 CreateStringIterator Abstract Operation
2217 function CreateStringIterator(string, kind) {
2218 var s = String(string);
2219 var iterator = new StringIterator;
2220 set_internal(iterator, '[[IteratedString]]', s);
2221 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2222 set_internal(iterator, '[[StringIterationKind]]', kind);
2223 return iterator;
2224 }
2225
2226 // 21.1.5.2 The %StringIteratorPrototype% Object
2227 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2228 StringIterator.prototype = $StringIteratorPrototype$;
2229
2230 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2231 define(
2232 $StringIteratorPrototype$, 'next',
2233 function next() {
2234 var o = ToObject(this);
2235 var s = String(o['[[IteratedString]]']),
2236 index = o['[[StringIteratorNextIndex]]'],
2237 len = s.length;
2238 if (index >= len) {
2239 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2240 return CreateIterResultObject(undefined, true);
2241 }
2242 var cp = s.codePointAt(index);
2243 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2244 return CreateIterResultObject(String.fromCodePoint(cp), false);
2245 });
2246
2247 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2248 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2249
2250 // 21.1.5.3 Properties of String Iterator Instances
2251
2252 // ---------------------------------------
2253 // 21.2 RegExp (Regular Expression) Objects
2254 // ---------------------------------------
2255
2256 // 21.2.1 Patterns
2257 // 21.2.2 Pattern Semantics
2258 // 21.2.2.1 Notation
2259 // 21.2.2.2 Pattern
2260 // 21.2.2.3 Disjunction
2261 // 21.2.2.4 Alternative
2262 // 21.2.2.5 Term
2263 // 21.2.2.6 Assertion
2264 // 21.2.2.7 Quantifier
2265 // 21.2.2.8 Atom
2266 // 21.2.2.9 AtomEscape
2267 // 21.2.2.10 CharacterEscape
2268 // 21.2.2.11 DecimalEscape
2269 // 21.2.2.12 CharacterClassEscape
2270 // 21.2.2.13 CharacterClass
2271 // 21.2.2.14 ClassRanges
2272 // 21.2.2.15 NonemptyClassRanges
2273 // 21.2.2.16 NonemptyClassRangesNoDash
2274 // 21.2.2.17 ClassAtom
2275 // 21.2.2.18 ClassAtomNoDash
2276 // 21.2.2.19 ClassEscape
2277 // 21.2.3 The RegExp Constructor
2278 // 21.2.3.1 RegExp ( pattern, flags )
2279 // 21.2.3.2 new RegExp( ...argumentsList )
2280 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2281 // 21.2.4 Properties of the RegExp Constructor
2282 // 21.2.4.1 RegExp.prototype
2283 // 21.2.5 Properties of the RegExp Prototype Object
2284 // 21.2.5.1 RegExp.prototype.constructor
2285 // 21.2.5.2 RegExp.prototype.exec ( string )
2286
2287 // 21.2.5.3 get RegExp.prototype.flags
2288 if (!('flags' in RegExp.prototype)) {
2289 Object.defineProperty(
2290 RegExp.prototype, 'flags', {
2291 get: function() {
2292 var s = String(this);
2293 return s.substring(s.lastIndexOf('/') + 1);
2294 }
2295 });
2296 }
2297
2298 // 21.2.5.4 get RegExp.prototype.global
2299 // 21.2.5.5 get RegExp.prototype.ignoreCase
2300
2301 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2302 define(RegExp.prototype, $$match, function(string) {
2303 var o = strict(this);
2304 return orig_match.call(string, o);
2305 });
2306
2307 // 21.2.5.7 get RegExp.prototype.multiline
2308
2309 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2310 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2311 var o = strict(this);
2312 return orig_replace.call(string, o, replaceValue);
2313 });
2314
2315 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2316 define(RegExp.prototype, $$search, function(string) {
2317 var o = strict(this);
2318 return orig_search.call(string, o);
2319 });
2320
2321 // 21.2.5.10 get RegExp.prototype.source
2322
2323 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2324 define(RegExp.prototype, $$split, function(string, limit) {
2325 var o = strict(this);
2326 return orig_split.call(string, o, limit);
2327 });
2328
2329 // 21.2.5.12 get RegExp.prototype.sticky
2330 // 21.2.5.13 RegExp.prototype.test( S )
2331 // 21.2.5.14 RegExp.prototype.toString ( )
2332 // 21.2.5.15 get RegExp.prototype.unicode
2333
2334 // 21.2.6 Properties of RegExp Instances
2335 // 21.2.6.1 lastIndex
2336
2337 // (No polyfillable changes from ES5)
2338
2339 // ---------------------------------------
2340 // 22 Indexed Collections
2341 // ---------------------------------------
2342
2343 // ---------------------------------------
2344 // 22.1 Array Objects
2345 // ---------------------------------------
2346
2347 // 22.1.1 The Array Constructor
2348 // 22.1.1.1 Array ( )
2349 // 22.1.1.2 Array (len)
2350 // 22.1.1.3 Array (...items )
2351
2352 // 22.1.2 Properties of the Array Constructor
2353
2354 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2355 define(
2356 Array, 'from',
2357 function from(items) {
2358 var mapfn = arguments[1];
2359 var thisArg = arguments[2];
2360
2361 var c = strict(this);
2362 if (mapfn === undefined) {
2363 var mapping = false;
2364 } else {
2365 if (!IsCallable(mapfn)) throw TypeError();
2366 var t = thisArg;
2367 mapping = true;
2368 }
2369 var usingIterator = GetMethod(items, $$iterator);
2370 if (usingIterator !== undefined) {
2371 if (IsConstructor(c)) {
2372 var a = new c();
2373 } else {
2374 a = new Array(0);
2375 }
2376 var iterator = GetIterator(items, usingIterator);
2377 var k = 0;
2378 while (true) {
2379 var next = IteratorStep(iterator);
2380 if (next === false) {
2381 a.length = k;
2382 return a;
2383 }
2384 var nextValue = IteratorValue(next);
2385 if (mapping)
2386 var mappedValue = mapfn.call(t, nextValue);
2387 else
2388 mappedValue = nextValue;
2389 a[k] = mappedValue;
2390 k += 1;
2391 }
2392 }
2393 var arrayLike = ToObject(items);
2394 var lenValue = arrayLike.length;
2395 var len = ToLength(lenValue);
2396 if (IsConstructor(c)) {
2397 a = new c(len);
2398 } else {
2399 a = new Array(len);
2400 }
2401 k = 0;
2402 while (k < len) {
2403 var kValue = arrayLike[k];
2404 if (mapping)
2405 mappedValue = mapfn.call(t, kValue, k);
2406 else
2407 mappedValue = kValue;
2408 a[k] = mappedValue;
2409 k += 1;
2410 }
2411 a.length = len;
2412 return a;
2413 });
2414
2415 // 22.1.2.2 Array.isArray ( arg )
2416
2417 // 22.1.2.3 Array.of ( ...items )
2418 define(
2419 Array, 'of',
2420 function of() {
2421 var items = arguments;
2422
2423 var lenValue = items.length;
2424 var len = ToUint32(lenValue);
2425 var c = strict(this), a;
2426 if (IsConstructor(c)) {
2427 a = new c(len);
2428 a = ToObject(a);
2429 } else {
2430 a = new Array(len);
2431 }
2432 var k = 0;
2433 while (k < len) {
2434 a[k] = items[k];
2435 k += 1;
2436 }
2437 a.length = len;
2438 return a;
2439 });
2440
2441 // 22.1.2.4 Array.prototype
2442 // 22.1.2.5 get Array [ @@species ]
2443 // 22.1.3 Properties of the Array Prototype Object
2444 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2445 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2446 // 22.1.3.2 Array.prototype.constructor
2447 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2448 define(
2449 Array.prototype, 'copyWithin',
2450 function copyWithin(target, start/*, end*/) {
2451 var end = arguments[2];
2452
2453 var o = ToObject(this);
2454 var lenVal = o.length;
2455 var len = ToLength(lenVal);
2456 len = max(len, 0);
2457 var relativeTarget = ToInteger(target);
2458 var to;
2459 if (relativeTarget < 0)
2460 to = max(len + relativeTarget, 0);
2461 else
2462 to = min(relativeTarget, len);
2463 var relativeStart = ToInteger(start);
2464 var from;
2465 if (relativeStart < 0)
2466 from = max(len + relativeStart, 0);
2467 else
2468 from = min(relativeStart, len);
2469 var relativeEnd;
2470 if (end === undefined)
2471 relativeEnd = len;
2472 else
2473 relativeEnd = ToInteger(end);
2474 var final;
2475 if (relativeEnd < 0)
2476 final = max(len + relativeEnd, 0);
2477 else
2478 final = min(relativeEnd, len);
2479 var count = min(final - from, len - to);
2480 var direction;
2481 if (from < to && to < from + count) {
2482 direction = -1;
2483 from = from + count - 1;
2484 to = to + count - 1;
2485 } else {
2486 direction = 1;
2487 }
2488 while (count > 0) {
2489 var fromKey = String(from);
2490 var toKey = String(to);
2491 var fromPresent = HasProperty(o, fromKey);
2492 if (fromPresent) {
2493 var fromVal = o[fromKey];
2494 o[toKey] = fromVal;
2495 } else {
2496 delete o[toKey];
2497 }
2498 from = from + direction;
2499 to = to + direction;
2500 count = count - 1;
2501 }
2502 return o;
2503 });
2504
2505 // 22.1.3.4 Array.prototype.entries ( )
2506 var nativeArrayIteratorMethods =
2507 ('entries' in Array.prototype && 'next' in [].entries());
2508
2509 define(
2510 Array.prototype, 'entries',
2511 function entries() {
2512 return CreateArrayIterator(this, 'key+value');
2513 }, !nativeArrayIteratorMethods);
2514
2515 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2516
2517 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2518 define(
2519 Array.prototype, 'fill',
2520 function fill(value/*, start, end*/) {
2521 var start = arguments[1],
2522 end = arguments[2];
2523
2524 var o = ToObject(this);
2525 var lenVal = o.length;
2526 var len = ToLength(lenVal);
2527 len = max(len, 0);
2528 var relativeStart = ToInteger(start);
2529 var k;
2530 if (relativeStart < 0)
2531 k = max((len + relativeStart), 0);
2532 else
2533 k = min(relativeStart, len);
2534 var relativeEnd;
2535 if (end === undefined)
2536 relativeEnd = len;
2537 else
2538 relativeEnd = ToInteger(end);
2539 var final;
2540 if (relativeEnd < 0)
2541 final = max((len + relativeEnd), 0);
2542 else
2543 final = min(relativeEnd, len);
2544 while (k < final) {
2545 var pk = String(k);
2546 o[pk] = value;
2547 k += 1;
2548 }
2549 return o;
2550 });
2551
2552 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2553
2554 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2555 define(
2556 Array.prototype, 'find',
2557 function find(predicate) {
2558 var o = ToObject(this);
2559 var lenValue = o.length;
2560 var len = ToInteger(lenValue);
2561 if (!IsCallable(predicate)) throw TypeError();
2562 var t = arguments.length > 1 ? arguments[1] : undefined;
2563 var k = 0;
2564 while (k < len) {
2565 var pk = String(k);
2566 var kPresent = HasProperty(o, pk);
2567 if (kPresent) {
2568 var kValue = o[pk];
2569 var testResult = predicate.call(t, kValue, k, o);
2570 if (Boolean(testResult)) {
2571 return kValue;
2572 }
2573 }
2574 ++k;
2575 }
2576 return undefined;
2577 });
2578
2579 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2580 define(
2581 Array.prototype, 'findIndex',
2582 function findIndex(predicate) {
2583 var o = ToObject(this);
2584 var lenValue = o.length;
2585 var len = ToLength(lenValue);
2586 if (!IsCallable(predicate)) throw TypeError();
2587 var t = arguments.length > 1 ? arguments[1] : undefined;
2588 var k = 0;
2589 while (k < len) {
2590 var pk = String(k);
2591 var kPresent = HasProperty(o, pk);
2592 if (kPresent) {
2593 var kValue = o[pk];
2594 var testResult = predicate.call(t, kValue, k, o);
2595 if (Boolean(testResult)) {
2596 return k;
2597 }
2598 }
2599 ++k;
2600 }
2601 return -1;
2602 });
2603
2604 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2605 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2606 // 22.1.3.12 Array.prototype.join (separator)
2607
2608 // 22.1.3.13 Array.prototype.keys ( )
2609 define(
2610 Array.prototype, 'keys',
2611 function keys() {
2612 return CreateArrayIterator(this, 'key');
2613 }, !nativeArrayIteratorMethods);
2614
2615 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2616 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2617 // 22.1.3.16 Array.prototype.pop ( )
2618 // 22.1.3.17 Array.prototype.push ( ...items )
2619 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2620 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2621 // 22.1.3.20 Array.prototype.reverse ( )
2622 // 22.1.3.21 Array.prototype.shift ( )
2623 // 22.1.3.22 Array.prototype.slice (start, end)
2624 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2625 // 22.1.3.24 Array.prototype.sort (comparefn)
2626 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2627 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2628 // 22.1.3.27 Array.prototype.toString ( )
2629 // 22.1.3.28 Array.prototype.unshift ( ...items )
2630
2631 // 22.1.3.29 Array.prototype.values ( )
2632 define(
2633 Array.prototype, 'values',
2634 function values() {
2635 return CreateArrayIterator(this, 'value');
2636 }, !nativeArrayIteratorMethods);
2637
2638 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2639 define(
2640 Array.prototype, $$iterator,
2641 Array.prototype.values
2642 );
2643
2644 // 22.1.3.31 Array.prototype [ @@unscopables ]
2645 // 22.1.4 Properties of Array Instances
2646 // 22.1.4.1 length
2647
2648 // 22.1.5 Array Iterator Objects
2649 function ArrayIterator() {}
2650
2651 // 22.1.5.1 CreateArrayIterator Abstract Operation
2652 function CreateArrayIterator(array, kind) {
2653 var o = ToObject(array);
2654 var iterator = new ArrayIterator;
2655 set_internal(iterator, '[[IteratedObject]]', o);
2656 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2657 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2658 return iterator;
2659 }
2660
2661 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2662 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2663 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2664
2665 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2666 define(
2667 $ArrayIteratorPrototype$, 'next',
2668 function next() {
2669 var o = strict(this);
2670 if (Type(o) !== 'object') throw TypeError();
2671 var a = o['[[IteratedObject]]'],
2672 index = o['[[ArrayIteratorNextIndex]]'],
2673 itemKind = o['[[ArrayIterationKind]]'],
2674 lenValue = a.length,
2675 len = ToUint32(lenValue),
2676 elementKey,
2677 elementValue;
2678 if (itemKind.indexOf('sparse') !== -1) {
2679 var found = false;
2680 while (!found && index < len) {
2681 elementKey = String(index);
2682 found = HasProperty(a, elementKey);
2683 if (!found) {
2684 index += 1;
2685 }
2686 }
2687 }
2688 if (index >= len) {
2689 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2690 return CreateIterResultObject(undefined, true);
2691 }
2692 elementKey = index;
2693 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2694 if (itemKind.indexOf('value') !== -1)
2695 elementValue = a[elementKey];
2696 if (itemKind.indexOf('key+value') !== -1)
2697 return CreateIterResultObject([elementKey, elementValue], false);
2698 if (itemKind.indexOf('key') !== -1)
2699 return CreateIterResultObject(elementKey, false);
2700 if (itemKind === 'value')
2701 return CreateIterResultObject(elementValue, false);
2702 throw Error('Internal error');
2703 });
2704
2705 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2706 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2707
2708 // 22.1.5.3 Properties of Array Iterator Instances
2709
2710
2711 // ---------------------------------------
2712 // 22.2 TypedArray Objects
2713 // ---------------------------------------
2714
2715 // See typedarray.js for TypedArray polyfill
2716
2717 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2718 'Int16Array', 'Uint16Array',
2719 'Int32Array', 'Uint32Array',
2720 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2721 if (!($TypedArrayName$ in global))
2722 return;
2723 var $TypedArray$ = global[$TypedArrayName$];
2724
2725 // 22.2.1 The %TypedArray% Intrinsic Object
2726 // 22.2.1.1 %TypedArray% ( length )
2727 // 22.2.1.2 %TypedArray% ( typedArray )
2728 // 22.2.1.3 %TypedArray% ( object )
2729 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2730 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2731 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2732
2733 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2734 define(
2735 $TypedArray$, 'from',
2736 function from(source) {
2737 var mapfn = arguments[1];
2738 var thisArg = arguments[2];
2739
2740 var c = strict(this);
2741 if (!IsConstructor(c)) throw TypeError();
2742 if (mapfn === undefined) {
2743 var mapping = false;
2744 } else {
2745 if (IsCallable(mapfn)) throw TypeError();
2746 var t = thisArg;
2747 mapping = true;
2748 }
2749 var usingIterator = GetMethod(source, $$iterator);
2750 if (usingIterator !== undefined) {
2751 var iterator = GetIterator(source, usingIterator);
2752 var values = [];
2753 var next = true;
2754 while (next !== false) {
2755 next = IteratorStep(iterator);
2756 if (next !== false) {
2757 var nextValue = IteratorValue(next);
2758 values.push(nextValue);
2759 }
2760 }
2761 var len = values.length;
2762 var newObj = new c(len);
2763 var k = 0;
2764 while (k < len) {
2765 var kValue = values.shift();
2766 if (mapping) {
2767 var mappedValue = mapfn.call(t, kValue);
2768 } else {
2769 mappedValue = kValue;
2770 }
2771 newObj[k] = mappedValue;
2772 ++k;
2773 }
2774 console.assert(values.length === 0);
2775 return newObj;
2776 }
2777 var arrayLike = ToObject(source);
2778 var lenValue = arrayLike.length;
2779 len = ToLength(lenValue);
2780 newObj = new c(len);
2781 k = 0;
2782 while (k < len) {
2783 kValue = arrayLike[k];
2784 if (mapping) {
2785 mappedValue = mapfn.call(t, kValue, k);
2786 } else {
2787 mappedValue = kValue;
2788 }
2789 newObj[k] = mappedValue;
2790 ++k;
2791 }
2792 return newObj;
2793 });
2794
2795 // 22.2.2.2 %TypedArray%.of ( ...items )
2796 define(
2797 $TypedArray$, 'of',
2798 function of() {
2799 var items = arguments;
2800
2801 var len = items.length;
2802 var c = strict(this);
2803 var newObj = new c(len);
2804 var k = 0;
2805 while (k < len) {
2806 newObj[k] = items[k];
2807 ++k;
2808 }
2809 return newObj;
2810 });
2811
2812 // 22.2.2.3 %TypedArray%.prototype
2813 // 22.2.2.4 get %TypedArray% [ @@species ]
2814 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2815 // 22.2.3.1 get %TypedArray%.prototype.buffer
2816 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2817 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2818 // 22.2.3.4 %TypedArray%.prototype.constructor
2819
2820 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2821 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2822
2823 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2824 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2825
2826 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2827 define($TypedArray$.prototype, 'every', Array.prototype.every);
2828
2829 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2830 define(
2831 $TypedArray$.prototype, 'fill',
2832 //Array.prototype.fill // Doesn't work in Safari 7
2833 function fill(value/*, start, end*/) {
2834 var start = arguments[1],
2835 end = arguments[2];
2836
2837 var o = ToObject(this);
2838 var lenVal = o.length;
2839 var len = ToLength(lenVal);
2840 len = max(len, 0);
2841 var relativeStart = ToInteger(start);
2842 var k;
2843 if (relativeStart < 0) k = max((len + relativeStart), 0);
2844 else k = min(relativeStart, len);
2845 var relativeEnd;
2846 if (end === undefined) relativeEnd = len;
2847 else relativeEnd = ToInteger(end);
2848 var final;
2849 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2850 else final = min(relativeEnd, len);
2851 while (k < final) {
2852 var pk = String(k);
2853 o[pk] = value;
2854 k += 1;
2855 }
2856 return o;
2857 });
2858
2859 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2860 define(
2861 $TypedArray$.prototype, 'filter',
2862 function filter(callbackfn) {
2863 var thisArg = arguments[1];
2864
2865 var o = ToObject(this);
2866 var lenVal = o.length;
2867 var len = ToLength(lenVal);
2868 if (!IsCallable(callbackfn)) throw TypeError();
2869 var t = thisArg;
2870 var c = o.constructor;
2871 var kept = [];
2872 var k = 0;
2873 var captured = 0;
2874 while (k < len) {
2875 var kValue = o[k];
2876 var selected = callbackfn.call(t, kValue, k, o);
2877 if (selected) {
2878 kept.push(kValue);
2879 ++captured;
2880 }
2881 ++k;
2882 }
2883 var a = new c(captured);
2884 var n = 0;
2885 for (var i = 0; i < kept.length; ++i) {
2886 var e = kept[i];
2887 a[n] = e;
2888 ++n;
2889 }
2890 return a;
2891 });
2892
2893 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2894 define($TypedArray$.prototype, 'find', Array.prototype.find);
2895
2896 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2897 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2898
2899 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2900 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2901
2902 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2903 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2904
2905 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2906 define($TypedArray$.prototype, 'join', Array.prototype.join);
2907
2908 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2909 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2910
2911 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2912 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2913
2914 // 22.2.3.17 get %TypedArray%.prototype.length
2915
2916 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2917 define(
2918 $TypedArray$.prototype, 'map',
2919 function map(callbackfn) {
2920 var thisArg = arguments[1];
2921
2922 var o = ToObject(this);
2923 var lenValue = o.length;
2924 var len = ToLength(lenValue);
2925 if (!IsCallable(callbackfn)) throw TypeError();
2926 var t = thisArg;
2927 var a = undefined;
2928 var c = o.constructor;
2929 if (IsConstructor(c))
2930 a = new c(len);
2931 if (a === undefined)
2932 a = new Array(len);
2933 var k = 0;
2934 while (k < len) {
2935 var kPresent = HasProperty(o, k);
2936 if (kPresent) {
2937 var kValue = o[k];
2938 var mappedValue = callbackfn.call(t, kValue, k, o);
2939 a[k] = mappedValue;
2940 }
2941 ++k;
2942 }
2943 return a;
2944 });
2945
2946 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2947 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2948
2949 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2950 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2951
2952 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2953 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2954
2955 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2956 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2957 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2958
2959 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2960 define(
2961 $TypedArray$.prototype, 'slice',
2962 function slice(start, end) {
2963 var o = ToObject(this);
2964 var lenVal = o.length;
2965 var len = ToLength(lenVal);
2966 var relativeStart = ToInteger(start);
2967 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2968 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2969 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2970 var count = final - k;
2971 var c = o.constructor;
2972 if (IsConstructor(c)) {
2973 var a = new c(count);
2974 } else {
2975 throw TypeError();
2976 }
2977 var n = 0;
2978 while (k < final) {
2979 var kValue = o[k];
2980 a[n] = kValue;
2981 ++k;
2982 ++n;
2983 }
2984 return a;
2985 });
2986
2987 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2988 define($TypedArray$.prototype, 'some', Array.prototype.some);
2989
2990 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2991 define(
2992 $TypedArray$.prototype, 'sort',
2993 function sort() {
2994 var comparefn = arguments[0];
2995
2996 function sortCompare(x, y) {
2997 console.assert(Type(x) === 'number' && Type(y) === 'number');
2998 if (x !== x && y !== y) return +0;
2999 if (x !== x) return 1;
3000 if (y !== y) return -1;
3001 if (comparefn !== undefined) {
3002 return comparefn(x, y);
3003 }
3004 if (x < y) return -1;
3005 if (x > y) return 1;
3006 return +0;
3007 }
3008 return Array.prototype.sort.call(this, sortCompare);
3009 });
3010
3011 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3012 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3013 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3014
3015 // 22.2.3.29 %TypedArray%.prototype.values ( )
3016 define($TypedArray$.prototype, 'values', Array.prototype.values);
3017
3018 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3019 define(
3020 $TypedArray$.prototype, $$iterator,
3021 $TypedArray$.prototype.values
3022 );
3023
3024 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3025 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3026
3027 // 22.2.4 The TypedArray Constructors
3028 // 22.2.4.1TypedArray( ... argumentsList)
3029 // 22.2.5 Properties of the TypedArray Constructors
3030 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3031 // 22.2.5.2 TypedArray.prototype
3032 // 22.2.6 Properties of TypedArray Prototype Objects
3033 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3034 // 22.2.6.2 TypedArray.prototype.constructor
3035 // 22.2.7 Properties of TypedArray Instances
3036 });
3037
3038 // ---------------------------------------
3039 // 23 Keyed Collection
3040 // ---------------------------------------
3041
3042 // ---------------------------------------
3043 // 23.1 Map Objects
3044 // ---------------------------------------
3045
3046 (function() {
3047 // 23.1.1 The Map Constructor
3048
3049 // 23.1.1.1 Map ( [ iterable ] )
3050 /** @constructor */
3051 function Map(/*iterable*/) {
3052 var map = strict(this);
3053 var iterable = arguments[0];
3054
3055 if (Type(map) !== 'object') throw TypeError();
3056 if ('[[MapData]]' in map) throw TypeError();
3057
3058 if (iterable !== undefined) {
3059 var adder = map['set'];
3060 if (!IsCallable(adder)) throw TypeError();
3061 var iter = GetIterator(ToObject(iterable));
3062 }
3063 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3064 if (iter === undefined) return map;
3065 while (true) {
3066 var next = IteratorStep(iter);
3067 if (next === false)
3068 return map;
3069 var nextItem = IteratorValue(next);
3070 if (Type(nextItem) !== 'object') throw TypeError();
3071 var k = nextItem[0];
3072 var v = nextItem[1];
3073 adder.call(map, k, v);
3074 }
3075
3076 return map;
3077 }
3078
3079 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3080 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3081 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3082 (new global.Map([['a', 1]]).size !== 1))
3083 global.Map = Map;
3084
3085
3086 function MapDataIndexOf(mapData, key) {
3087 var i;
3088 if (key === key) return mapData.keys.indexOf(key);
3089 // Slow case for NaN
3090 for (i = 0; i < mapData.keys.length; i += 1)
3091 if (SameValueZero(mapData.keys[i], key)) return i;
3092 return -1;
3093 }
3094
3095 // 23.1.1.2 new Map ( ... argumentsList )
3096 // 23.1.2 Properties of the Map Constructor
3097 // 23.1.2.1 Map.prototype
3098 var $MapPrototype$ = {};
3099 Map.prototype = $MapPrototype$;
3100
3101 // 23.1.2.2 get Map [ @@species ]
3102
3103 // 23.1.3 Properties of the Map Prototype Object
3104 // 23.1.3.1 Map.prototype.clear ()
3105 define(
3106 Map.prototype, 'clear',
3107 function clear() {
3108 var m = strict(this);
3109 if (Type(m) !== 'object') throw TypeError();
3110 if (!('[[MapData]]' in m)) throw TypeError();
3111 if (m['[[MapData]]'] === undefined) throw TypeError();
3112 var entries = m['[[MapData]]'];
3113 entries.keys.length = 0;
3114 entries.values.length = 0;
3115 return undefined;
3116 });
3117
3118 // 23.1.3.2 Map.prototype.constructor
3119
3120 // 23.1.3.3 Map.prototype.delete ( key )
3121 define(
3122 Map.prototype, 'delete',
3123 function delete_(key) {
3124 var m = strict(this);
3125 if (Type(m) !== 'object') throw TypeError();
3126 if (!('[[MapData]]' in m)) throw TypeError();
3127 if (m['[[MapData]]'] === undefined) throw TypeError();
3128 var entries = m['[[MapData]]'];
3129 var i = MapDataIndexOf(entries, key);
3130 if (i < 0) return false;
3131 entries.keys[i] = empty;
3132 entries.values[i] = empty;
3133 return true;
3134 });
3135
3136 // 23.1.3.4 Map.prototype.entries ( )
3137 define(
3138 Map.prototype, 'entries',
3139 function entries() {
3140 var m = strict(this);
3141 if (Type(m) !== 'object') throw TypeError();
3142 return CreateMapIterator(m, 'key+value');
3143 });
3144
3145 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3146 define(
3147 Map.prototype, 'forEach',
3148 function forEach(callbackfn /*, thisArg*/) {
3149 var thisArg = arguments[1];
3150
3151 var m = strict(this);
3152 if (Type(m) !== 'object') throw TypeError();
3153 if (!('[[MapData]]' in m)) throw TypeError();
3154 if (m['[[MapData]]'] === undefined) throw TypeError();
3155 var entries = m['[[MapData]]'];
3156
3157 if (!IsCallable(callbackfn)) {
3158 throw TypeError('First argument to forEach is not callable.');
3159 }
3160 for (var i = 0; i < entries.keys.length; ++i) {
3161 if (entries.keys[i] !== empty) {
3162 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3163 }
3164 }
3165 return undefined;
3166 });
3167
3168 // 23.1.3.6 Map.prototype.get ( key )
3169 define(
3170 Map.prototype, 'get',
3171 function get(key) {
3172 var m = strict(this);
3173 if (Type(m) !== 'object') throw TypeError();
3174 if (!('[[MapData]]' in m)) throw TypeError();
3175 if (m['[[MapData]]'] === undefined) throw TypeError();
3176 var entries = m['[[MapData]]'];
3177 var i = MapDataIndexOf(entries, key);
3178 if (i >= 0) return entries.values[i];
3179 return undefined;
3180 });
3181
3182 // 23.1.3.7 Map.prototype.has ( key )
3183 define(
3184 Map.prototype, 'has',
3185 function has(key) {
3186 var m = strict(this);
3187 if (Type(m) !== 'object') throw TypeError();
3188 if (!('[[MapData]]' in m)) throw TypeError();
3189 if (m['[[MapData]]'] === undefined) throw TypeError();
3190 var entries = m['[[MapData]]'];
3191 if (MapDataIndexOf(entries, key) >= 0) return true;
3192 return false;
3193 });
3194
3195 // 23.1.3.8 Map.prototype.keys ( )
3196 define(
3197 Map.prototype, 'keys',
3198 function keys() {
3199 var m = strict(this);
3200 if (Type(m) !== 'object') throw TypeError();
3201 return CreateMapIterator(m, 'key');
3202 });
3203
3204 // 23.1.3.9 Map.prototype.set ( key , value )
3205 define(
3206 Map.prototype, 'set',
3207 function set(key, value) {
3208 var m = strict(this);
3209 if (Type(m) !== 'object') throw TypeError();
3210 if (!('[[MapData]]' in m)) throw TypeError();
3211 if (m['[[MapData]]'] === undefined) throw TypeError();
3212 var entries = m['[[MapData]]'];
3213 var i = MapDataIndexOf(entries, key);
3214 if (i < 0) i = entries.keys.length;
3215 if (SameValue(key, -0)) key = 0;
3216 entries.keys[i] = key;
3217 entries.values[i] = value;
3218 return m;
3219 });
3220
3221 // 23.1.3.10 get Map.prototype.size
3222 Object.defineProperty(
3223 Map.prototype, 'size', {
3224 get: function() {
3225 var m = strict(this);
3226 if (Type(m) !== 'object') throw TypeError();
3227 if (!('[[MapData]]' in m)) throw TypeError();
3228 if (m['[[MapData]]'] === undefined) throw TypeError();
3229 var entries = m['[[MapData]]'];
3230 var count = 0;
3231 for (var i = 0; i < entries.keys.length; ++i) {
3232 if (entries.keys[i] !== empty)
3233 count = count + 1;
3234 }
3235 return count;
3236 }
3237 });
3238
3239 // 23.1.3.11 Map.prototype.values ( )
3240 define(
3241 Map.prototype, 'values',
3242 function values() {
3243 var m = strict(this);
3244 if (Type(m) !== 'object') throw TypeError();
3245 return CreateMapIterator(m, 'value');
3246 });
3247
3248 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3249 define(
3250 Map.prototype, $$iterator,
3251 function() {
3252 var m = strict(this);
3253 if (Type(m) !== 'object') throw TypeError();
3254 return CreateMapIterator(m, 'key+value');
3255 });
3256
3257 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3258 define(global.Map.prototype, $$toStringTag, 'Map');
3259
3260 // 23.1.4 Properties of Map Instances
3261 // 23.1.5 Map Iterator Objects
3262
3263 /** @constructor */
3264 function MapIterator() {}
3265
3266 // 23.1.5.1 CreateMapIterator Abstract Operation
3267 function CreateMapIterator(map, kind) {
3268 if (Type(map) !== 'object') throw TypeError();
3269 if (!('[[MapData]]' in map)) throw TypeError();
3270 if (map['[[MapData]]'] === undefined) throw TypeError();
3271 var iterator = new MapIterator;
3272 set_internal(iterator, '[[Map]]', map);
3273 set_internal(iterator, '[[MapNextIndex]]', 0);
3274 set_internal(iterator, '[[MapIterationKind]]', kind);
3275 return iterator;
3276 }
3277
3278 // 23.1.5.2 The %MapIteratorPrototype% Object
3279 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3280 MapIterator.prototype = $MapIteratorPrototype$;
3281
3282 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3283 define(
3284 $MapIteratorPrototype$, 'next',
3285 function next() {
3286 var o = strict(this);
3287 if (Type(o) !== 'object') throw TypeError();
3288 var m = o['[[Map]]'],
3289 index = o['[[MapNextIndex]]'],
3290 itemKind = o['[[MapIterationKind]]'],
3291 entries = m['[[MapData]]'];
3292 while (index < entries.keys.length) {
3293 var e = {key: entries.keys[index], value: entries.values[index]};
3294 index = index += 1;
3295 set_internal(o, '[[MapNextIndex]]', index);
3296 if (e.key !== empty) {
3297 if (itemKind === 'key') {
3298 return CreateIterResultObject(e.key, false);
3299 } else if (itemKind === 'value') {
3300 return CreateIterResultObject(e.value, false);
3301 } else {
3302 return CreateIterResultObject([e.key, e.value], false);
3303 }
3304 }
3305 }
3306 return CreateIterResultObject(undefined, true);
3307 });
3308
3309 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3310 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3311
3312 // 23.1.5.3 Properties of Map Iterator Instances
3313 }());
3314
3315 // ---------------------------------------
3316 // 23.2 Set Objects
3317 // ---------------------------------------
3318
3319 (function() {
3320 // 23.2.1 The Set Constructor
3321 // 23.2.1.1 Set ( [ iterable ] )
3322
3323 /** @constructor */
3324 function Set(/*iterable*/) {
3325 var set = strict(this);
3326 var iterable = arguments[0];
3327
3328 if (Type(set) !== 'object') throw TypeError();
3329 if ('[[SetData]]' in set) throw TypeError();
3330
3331 if (iterable !== undefined) {
3332 var adder = set['add'];
3333 if (!IsCallable(adder)) throw TypeError();
3334 var iter = GetIterator(ToObject(iterable));
3335 }
3336 set_internal(set, '[[SetData]]', []);
3337 if (iter === undefined) return set;
3338 while (true) {
3339 var next = IteratorStep(iter);
3340 if (next === false)
3341 return set;
3342 var nextValue = IteratorValue(next);
3343 adder.call(set, nextValue);
3344 }
3345
3346 return set;
3347 }
3348
3349 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3350 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3351 (new global.Set([1]).size !== 1))
3352 global.Set = Set;
3353
3354 function SetDataIndexOf(setData, key) {
3355 var i;
3356 if (key === key)
3357 return setData.indexOf(key);
3358 // Slow case for NaN
3359 for (i = 0; i < setData.length; i += 1)
3360 if (SameValueZero(setData[i], key)) return i;
3361 return -1;
3362 }
3363
3364 // 23.2.1.2 new Set ( ...argumentsList )
3365 // 23.2.2 Properties of the Set Constructor
3366
3367 // 23.2.2.1 Set.prototype
3368 var $SetPrototype$ = {};
3369 Set.prototype = $SetPrototype$;
3370
3371 // 23.2.2.2 get Set [ @@species ]
3372 // 23.2.3 Properties of the Set Prototype Object
3373
3374 // 23.2.3.1 Set.prototype.add (value )
3375 define(
3376 Set.prototype, 'add',
3377 function add(value) {
3378 var s = strict(this);
3379 if (Type(s) !== 'object') throw TypeError();
3380 if (!('[[SetData]]' in s)) throw TypeError();
3381 if (s['[[SetData]]'] === undefined) throw TypeError();
3382 if (SameValue(value, -0)) value = 0;
3383 var entries = s['[[SetData]]'];
3384 var i = SetDataIndexOf(entries, value);
3385 if (i < 0) i = s['[[SetData]]'].length;
3386 s['[[SetData]]'][i] = value;
3387
3388 return s;
3389 });
3390
3391 // 23.2.3.2 Set.prototype.clear ()
3392 define(
3393 Set.prototype, 'clear',
3394 function clear() {
3395 var s = strict(this);
3396 if (Type(s) !== 'object') throw TypeError();
3397 if (!('[[SetData]]' in s)) throw TypeError();
3398 if (s['[[SetData]]'] === undefined) throw TypeError();
3399 var entries = s['[[SetData]]'];
3400 entries.length = 0;
3401 return undefined;
3402 });
3403
3404 // 23.2.3.3 Set.prototype.constructor
3405 // 23.2.3.4 Set.prototype.delete ( value )
3406 define(
3407 Set.prototype, 'delete',
3408 function delete_(value) {
3409 var s = strict(this);
3410 if (Type(s) !== 'object') throw TypeError();
3411 if (!('[[SetData]]' in s)) throw TypeError();
3412 if (s['[[SetData]]'] === undefined) throw TypeError();
3413 var entries = s['[[SetData]]'];
3414 var i = SetDataIndexOf(entries, value);
3415 if (i < 0) return false;
3416 entries[i] = empty;
3417 return true;
3418 });
3419
3420 // 23.2.3.5 Set.prototype.entries ( )
3421 define(
3422 Set.prototype, 'entries',
3423 function entries() {
3424 var s = strict(this);
3425 if (Type(s) !== 'object') throw TypeError();
3426 return CreateSetIterator(s, 'key+value');
3427 });
3428
3429 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3430 define(
3431 Set.prototype, 'forEach',
3432 function forEach(callbackfn/*, thisArg*/) {
3433 var thisArg = arguments[1];
3434
3435 var s = strict(this);
3436 if (Type(s) !== 'object') throw TypeError();
3437 if (!('[[SetData]]' in s)) throw TypeError();
3438 if (s['[[SetData]]'] === undefined) throw TypeError();
3439 var entries = s['[[SetData]]'];
3440
3441 if (!IsCallable(callbackfn)) {
3442 throw TypeError('First argument to forEach is not callable.');
3443 }
3444 for (var i = 0; i < entries.length; ++i) {
3445 if (entries[i] !== empty) {
3446 callbackfn.call(thisArg, entries[i], entries[i], s);
3447 }
3448 }
3449 });
3450
3451 // 23.2.3.7 Set.prototype.has ( value )
3452 define(
3453 Set.prototype, 'has',
3454 function has(key) {
3455 var s = strict(this);
3456 if (Type(s) !== 'object') throw TypeError();
3457 if (!('[[SetData]]' in s)) throw TypeError();
3458 if (s['[[SetData]]'] === undefined) throw TypeError();
3459 var entries = s['[[SetData]]'];
3460 return SetDataIndexOf(entries, key) !== -1;
3461 });
3462
3463 // 23.2.3.8 Set.prototype.keys ( )
3464 // See Set.prototype.values
3465
3466 // 23.2.3.9 get Set.prototype.size
3467 Object.defineProperty(
3468 Set.prototype, 'size', {
3469 get: function() {
3470 var s = strict(this);
3471 if (Type(s) !== 'object') throw TypeError();
3472 if (!('[[SetData]]' in s)) throw TypeError();
3473 if (s['[[SetData]]'] === undefined) throw TypeError();
3474 var entries = s['[[SetData]]'];
3475 var count = 0;
3476 for (var i = 0; i < entries.length; ++i) {
3477 if (entries[i] !== empty)
3478 count = count + 1;
3479 }
3480 return count;
3481 }
3482 });
3483
3484 // 23.2.3.10 Set.prototype.values ( )
3485 define(
3486 Set.prototype, 'values',
3487 function values() {
3488 var s = strict(this);
3489 if (Type(s) !== 'object') throw TypeError();
3490 return CreateSetIterator(s, 'value');
3491 });
3492 // NOTE: function name is still 'values':
3493 Set.prototype.keys = Set.prototype.values;
3494
3495 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3496 define(
3497 Set.prototype, $$iterator,
3498 function() {
3499 var s = strict(this);
3500 if (Type(s) !== 'object') throw TypeError();
3501 return CreateSetIterator(s);
3502 });
3503
3504 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3505 define(global.Set.prototype, $$toStringTag, 'Set');
3506
3507 // 23.2.4 Properties of Set Instances
3508 // 23.2.5 Set Iterator Objects
3509 /** @constructor */
3510 function SetIterator() {}
3511
3512 // 23.2.5.1 CreateSetIterator Abstract Operation
3513 function CreateSetIterator(set, kind) {
3514 if (Type(set) !== 'object') throw TypeError();
3515 if (!('[[SetData]]' in set)) throw TypeError();
3516 if (set['[[SetData]]'] === undefined) throw TypeError();
3517 var iterator = new SetIterator;
3518 set_internal(iterator, '[[IteratedSet]]', set);
3519 set_internal(iterator, '[[SetNextIndex]]', 0);
3520 set_internal(iterator, '[[SetIterationKind]]', kind);
3521 return iterator;
3522 }
3523
3524 // 23.2.5.2 The %SetIteratorPrototype% Object
3525 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3526 SetIterator.prototype = $SetIteratorPrototype$;
3527
3528 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3529 define(
3530 $SetIteratorPrototype$, 'next',
3531 function next() {
3532 var o = strict(this);
3533 if (Type(o) !== 'object') throw TypeError();
3534 var s = o['[[IteratedSet]]'],
3535 index = o['[[SetNextIndex]]'],
3536 itemKind = o['[[SetIterationKind]]'],
3537 entries = s['[[SetData]]'];
3538 while (index < entries.length) {
3539 var e = entries[index];
3540 index = index += 1;
3541 set_internal(o, '[[SetNextIndex]]', index);
3542 if (e !== empty) {
3543 if (itemKind === 'key+value')
3544 return CreateIterResultObject([e, e], false);
3545 return CreateIterResultObject(e, false);
3546 }
3547 }
3548 return CreateIterResultObject(undefined, true);
3549 });
3550
3551 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3552 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3553
3554 // 23.2.5.3 Properties of Set Iterator Instances
3555
3556 }());
3557
3558 // ---------------------------------------
3559 // 23.3 WeakMap Objects
3560 // ---------------------------------------
3561
3562 (function() {
3563 // 23.3.1 The WeakMap Constructor
3564 // 23.3.1.1 WeakMap ( [ iterable ] )
3565 /** @constructor */
3566 function WeakMap(/*iterable*/) {
3567 var map = strict(this);
3568 var iterable = arguments[0];
3569
3570 if (Type(map) !== 'object') throw TypeError();
3571 if ('[[WeakMapData]]' in map) throw TypeError();
3572
3573 if (iterable !== undefined) {
3574 var adder = map['set'];
3575 if (!IsCallable(adder)) throw TypeError();
3576 var iter = GetIterator(ToObject(iterable));
3577 }
3578 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3579 if (iter === undefined) return map;
3580 while (true) {
3581 var next = IteratorStep(iter);
3582 if (next === false)
3583 return map;
3584 var nextValue = IteratorValue(next);
3585 if (Type(nextValue) !== 'object') throw TypeError();
3586 var k = nextValue[0];
3587 var v = nextValue[1];
3588 adder.call(map, k, v);
3589 }
3590
3591 return map;
3592 }
3593
3594 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3595 global.WeakMap = WeakMap;
3596
3597 // 23.3.2 Properties of the WeakMap Constructor
3598 // 23.3.2.1 WeakMap.prototype
3599 var $WeakMapPrototype$ = {};
3600 WeakMap.prototype = $WeakMapPrototype$;
3601
3602
3603
3604 // 23.3.2.2 WeakMap[ @@create ] ( )
3605 // 23.3.3 Properties of the WeakMap Prototype Object
3606
3607 // 23.3.3.1 WeakMap.prototype.constructor
3608
3609 // 23.3.3.2 WeakMap.prototype.delete ( key )
3610 define(
3611 WeakMap.prototype, 'delete',
3612 function delete_(key) {
3613 var M = strict(this);
3614 if (Type(M) !== 'object') throw TypeError();
3615 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3616 if (Type(key) !== 'object') throw TypeError('Expected object');
3617 return M['[[WeakMapData]]'].remove(key);
3618 });
3619
3620 // 23.3.3.3 WeakMap.prototype.get ( key )
3621 define(
3622 WeakMap.prototype, 'get',
3623 function get(key, defaultValue) {
3624 var M = strict(this);
3625 if (Type(M) !== 'object') throw TypeError();
3626 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3627 if (Type(key) !== 'object') throw TypeError('Expected object');
3628 return M['[[WeakMapData]]'].get(key, defaultValue);
3629 });
3630
3631 // 23.3.3.4 WeakMap.prototype.has ( key )
3632 define(
3633 WeakMap.prototype, 'has',
3634 function has(key) {
3635 var M = strict(this);
3636 if (Type(M) !== 'object') throw TypeError();
3637 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3638 if (Type(key) !== 'object') throw TypeError('Expected object');
3639 return M['[[WeakMapData]]'].has(key);
3640 });
3641
3642 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3643 define(
3644 WeakMap.prototype, 'set',
3645 function set(key, value) {
3646 var M = strict(this);
3647 if (Type(M) !== 'object') throw TypeError();
3648 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3649 if (Type(key) !== 'object') throw TypeError('Expected object');
3650 M['[[WeakMapData]]'].set(key, value);
3651 return M;
3652 });
3653
3654 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3655 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3656
3657 // 23.3.4 Properties of WeakMap Instances
3658
3659 // Polyfills for incomplete native implementations:
3660 (function() {
3661 var wm = new global.WeakMap();
3662 var orig = global.WeakMap.prototype.set;
3663 define(global.WeakMap.prototype, 'set', function set() {
3664 orig.apply(this, arguments);
3665 return this;
3666 }, wm.set({}, 0) !== wm);
3667 }());
3668 }());
3669
3670 // ---------------------------------------
3671 // 23.4 WeakSet Objects
3672 // ---------------------------------------
3673
3674 (function() {
3675 // 23.4.1 The WeakSet Constructor
3676 // 23.4.1.1 WeakSet ( [ iterable ] )
3677 /** @constructor */
3678 function WeakSet(/*iterable*/) {
3679 var set = strict(this);
3680 var iterable = arguments[0];
3681
3682 if (Type(set) !== 'object') throw TypeError();
3683 if ('[[WeakSetData]]' in set) throw TypeError();
3684
3685 if (iterable !== undefined) {
3686 var adder = set['add'];
3687 if (!IsCallable(adder)) throw TypeError();
3688 var iter = GetIterator(ToObject(iterable));
3689 }
3690 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3691 if (iter === undefined) return set;
3692 while (true) {
3693 var next = IteratorStep(iter);
3694 if (next === false)
3695 return set;
3696 var nextValue = IteratorValue(next);
3697 adder.call(set, nextValue);
3698 }
3699
3700 return set;
3701 }
3702
3703 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3704 global.WeakSet = WeakSet;
3705
3706 // 23.4.2 Properties of the WeakSet Constructor
3707 // 23.4.2.1 WeakSet.prototype
3708 var $WeakSetPrototype$ = {};
3709 WeakSet.prototype = $WeakSetPrototype$;
3710
3711 // 23.4.3 Properties of the WeakSet Prototype Object
3712 // 23.4.3.1 WeakSet.prototype.add (value )
3713 define(
3714 WeakSet.prototype, 'add',
3715 function add(value) {
3716 var S = strict(this);
3717 if (Type(S) !== 'object') throw TypeError();
3718 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3719 if (Type(value) !== 'object') throw TypeError('Expected object');
3720 S['[[WeakSetData]]'].set(value, true);
3721 return S;
3722 });
3723
3724 // 23.4.3.2 WeakSet.prototype.constructor
3725 // 23.4.3.3 WeakSet.prototype.delete ( value )
3726 define(
3727 WeakSet.prototype, 'delete',
3728 function delete_(value) {
3729 var S = strict(this);
3730 if (Type(S) !== 'object') throw TypeError();
3731 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3732 if (Type(value) !== 'object') throw TypeError('Expected object');
3733 return S['[[WeakSetData]]'].remove(value);
3734 });
3735
3736 // 23.4.3.4 WeakSet.prototype.has ( value )
3737 define(
3738 WeakSet.prototype, 'has',
3739 function has(key) {
3740 var S = strict(this);
3741 if (Type(S) !== 'object') throw TypeError();
3742 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3743 if (Type(key) !== 'object') throw TypeError('Expected object');
3744 return S['[[WeakSetData]]'].has(key);
3745 });
3746
3747 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3748 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3749
3750 // 23.4.4 Properties of WeakSet Instances
3751
3752 // Polyfills for incomplete native implementations:
3753 (function() {
3754 var ws = new global.WeakSet();
3755 var orig = global.WeakSet.prototype.add;
3756 define(global.WeakSet.prototype, 'add', function add() {
3757 orig.apply(this, arguments);
3758 return this;
3759 }, ws.add({}) !== ws);
3760 }());
3761 }());
3762
3763 // ---------------------------------------
3764 // 24 Structured Data
3765 // ---------------------------------------
3766
3767 // ---------------------------------------
3768 // 24.1 ArrayBuffer Objects
3769 // ---------------------------------------
3770
3771 // See typedarray.js for TypedArray polyfill
3772
3773 (function() {
3774 if (!('ArrayBuffer' in global))
3775 return;
3776
3777 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3778 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3779 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3780 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3781 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3782 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3783 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3784 // 24.1.2 The ArrayBuffer Constructor
3785 // 24.1.2.1 ArrayBuffer( length )
3786 // 24.1.3 Properties of the ArrayBuffer Constructor
3787
3788 // 24.1.3.1 ArrayBuffer.isView ( arg )
3789 define(
3790 ArrayBuffer, 'isView',
3791 function isView(arg) {
3792 if (Type(arg) !== 'object') return false;
3793 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3794 return false;
3795 });
3796
3797 // 24.1.3.2 ArrayBuffer.prototype
3798 // 24.1.3.3 get ArrayBuffer [ @@species ]
3799 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3800 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3801 // 24.1.4.2 ArrayBuffer.prototype.constructor
3802 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3803
3804 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3805 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3806
3807 // 24.1.5 Properties of the ArrayBuffer Instances
3808 }());
3809
3810 // ---------------------------------------
3811 // 24.2 DataView Objects
3812 // ---------------------------------------
3813
3814 // See typedarray.js for TypedArray polyfill
3815
3816 (function() {
3817 if (!('DataView' in global))
3818 return;
3819
3820 // 24.2.1 Abstract Operations For DataView Objects
3821 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3822 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3823 // 24.2.2 The DataView Constructor
3824 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3825 // 24.2.3 Properties of the DataView Constructor
3826 // 24.2.3.1 DataView.prototype
3827 // 24.2.4 Properties of the DataView Prototype Object
3828 // 24.2.4.1 get DataView.prototype.buffer
3829 // 24.2.4.2 get DataView.prototype.byteLength
3830 // 24.2.4.3 get DataView.prototype.byteOffset
3831 // 24.2.4.4 DataView.prototype.constructor
3832 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3833 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3834 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3835 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3836 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3837 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3838 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3840 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3841 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3842 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3843 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3844 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3845 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3846 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3847 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3848
3849 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3850 define(DataView.prototype, $$toStringTag, 'DataView');
3851
3852 // 24.2.5 Properties of DataView Instances
3853 }());
3854
3855 // ---------------------------------------
3856 // 24.3 The JSON Object
3857 // ---------------------------------------
3858
3859 // 24.3.1 JSON.parse ( text [ , reviver ] )
3860 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3861 // 24.3.3 JSON [ @@toStringTag ]
3862 define(JSON, $$toStringTag, 'JSON');
3863
3864 // ---------------------------------------
3865 // 25.1 Iteration
3866 // ---------------------------------------
3867
3868 // 25.1.1 Common Iteration Interfaces
3869 // 25.1.1.1 The Iterable Interface
3870 // 25.1.1.2 The Iterator Interface
3871 // 25.1.1.3 The IteratorResult Interface
3872
3873 // 25.1.2 The %IteratorPrototype% Object
3874 // Defined earlier, so other prototypes can reference it.
3875 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3876 define($IteratorPrototype$, $$iterator, function() {
3877 return this;
3878 });
3879
3880
3881 // ---------------------------------------
3882 // 25.4 Promise Objects
3883 // ---------------------------------------
3884
3885 (function() {
3886 // 25.4 Promise Objects
3887
3888 // 25.4.1 Promise Abstract Operations
3889
3890 // 25.4.1.1 PromiseCapability Records
3891 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3892
3893 function IfAbruptRejectPromise(value, capability) {
3894 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3895 return capability['[[Promise]]'];
3896 }
3897
3898 // 25.4.1.2 PromiseReaction Records
3899
3900 // 25.4.1.3 CreateResolvingFunctions ( promise )
3901
3902 function CreateResolvingFunctions(promise) {
3903 var alreadyResolved = {'[[value]]': false};
3904 var resolve = PromiseResolveFunction();
3905 set_internal(resolve, '[[Promise]]', promise);
3906 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3907 var reject = PromiseRejectFunction();
3908 set_internal(reject, '[[Promise]]', promise);
3909 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3910 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3911 }
3912
3913 // 25.4.1.3.1 Promise Reject Functions
3914
3915 function PromiseRejectFunction() {
3916 var F = function(reason) {
3917 console.assert(Type(F['[[Promise]]']) === 'object');
3918 var promise = F['[[Promise]]'];
3919 var alreadyResolved = F['[[AlreadyResolved]]'];
3920 if (alreadyResolved['[[value]]']) return undefined;
3921 set_internal(alreadyResolved, '[[value]]', true);
3922 return RejectPromise(promise, reason);
3923 };
3924 return F;
3925 }
3926
3927 // 25.4.1.3.2 Promise Resolve Functions
3928
3929 function PromiseResolveFunction() {
3930 var F = function(resolution) {
3931 console.assert(Type(F['[[Promise]]']) === 'object');
3932 var promise = F['[[Promise]]'];
3933 var alreadyResolved = F['[[AlreadyResolved]]'];
3934 if (alreadyResolved['[[value]]']) return undefined;
3935 set_internal(alreadyResolved, '[[value]]', true);
3936
3937 if (SameValue(resolution, promise)) {
3938 var selfResolutionError = TypeError();
3939 return RejectPromise(promise, selfResolutionError);
3940 }
3941 if (Type(resolution) !== 'object')
3942 return FulfillPromise(promise, resolution);
3943 try {
3944 var then = resolution['then'];
3945 } catch(then) {
3946 return RejectPromise(promise, then);
3947 }
3948 if (!IsCallable(then))
3949 return FulfillPromise(promise, resolution);
3950 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3951 return undefined;
3952 };
3953 return F;
3954 }
3955
3956 // 25.4.1.4 FulfillPromise ( promise, value )
3957
3958 function FulfillPromise(promise, value) {
3959 console.assert(promise['[[PromiseState]]'] === 'pending');
3960 var reactions = promise['[[PromiseFulfillReactions]]'];
3961 set_internal(promise, '[[PromiseResult]]', value);
3962 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3963 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3964 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3965 return TriggerPromiseReactions(reactions, value);
3966 }
3967
3968 // 25.4.1.5 NewPromiseCapability ( C )
3969
3970 function NewPromiseCapability(c) {
3971 // To keep Promise hermetic, this doesn't look much like the spec.
3972 return CreatePromiseCapabilityRecord(undefined, c);
3973 }
3974
3975 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3976
3977 function CreatePromiseCapabilityRecord(promise, constructor) {
3978 // To keep Promise hermetic, this doesn't look much like the spec.
3979 console.assert(IsConstructor(constructor));
3980 var promiseCapability = {};
3981 set_internal(promiseCapability, '[[Promise]]', promise);
3982 set_internal(promiseCapability, '[[Resolve]]', undefined);
3983 set_internal(promiseCapability, '[[Reject]]', undefined);
3984 var executor = GetCapabilitiesExecutor();
3985 set_internal(executor, '[[Capability]]', promiseCapability);
3986
3987 // NOTE: Differs from spec; object is constructed here
3988 var constructorResult = promise = new constructor(executor);
3989 set_internal(promiseCapability, '[[Promise]]', promise);
3990
3991 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3992 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3993 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3994 return promiseCapability;
3995 }
3996
3997 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3998
3999 function GetCapabilitiesExecutor() {
4000 var F = function(resolve, reject) {
4001 console.assert(F['[[Capability]]']);
4002 var promiseCapability = F['[[Capability]]'];
4003 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4004 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4005 set_internal(promiseCapability, '[[Resolve]]', resolve);
4006 set_internal(promiseCapability, '[[Reject]]', reject);
4007 return undefined;
4008 };
4009 return F;
4010 }
4011
4012 // 25.4.1.6 IsPromise ( x )
4013
4014 function IsPromise(x) {
4015 if (Type(x) !== 'object') return false;
4016 if (!('[[PromiseState]]' in x)) return false;
4017 if (x['[[PromiseState]]'] === undefined) return false;
4018 return true;
4019 }
4020
4021 // 25.4.1.7 RejectPromise ( promise, reason )
4022
4023 function RejectPromise(promise, reason) {
4024 console.assert(promise['[[PromiseState]]'] === 'pending');
4025 var reactions = promise['[[PromiseRejectReactions]]'];
4026 set_internal(promise, '[[PromiseResult]]', reason);
4027 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4028 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4029 set_internal(promise, '[[PromiseState]]', 'rejected');
4030 return TriggerPromiseReactions(reactions, reason);
4031 }
4032
4033 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4034
4035 function TriggerPromiseReactions(reactions, argument) {
4036 for (var i = 0, len = reactions.length; i < len; ++i)
4037 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4038 return undefined;
4039 }
4040
4041 // 25.4.2 Promise Jobs
4042
4043 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4044
4045 function PromiseReactionJob(reaction, argument) {
4046 var promiseCapability = reaction['[[Capabilities]]'];
4047 var handler = reaction['[[Handler]]'];
4048 var handlerResult, status;
4049 try {
4050 if (handler === 'Identity') handlerResult = argument;
4051 else if (handler === 'Thrower') throw argument;
4052 else handlerResult = handler.call(undefined, argument);
4053 } catch (handlerResult) {
4054 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4055 NextJob(status); return;
4056 }
4057 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4058 NextJob(status);
4059 }
4060
4061 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4062
4063 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4064 // SPEC BUG: promise vs. promiseToResolve
4065 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4066 try {
4067 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4068 resolvingFunctions['[[Reject]]']);
4069 } catch (thenCallResult) {
4070 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4071 NextJob(status); return;
4072 }
4073 NextJob(thenCallResult);
4074 }
4075
4076 // 25.4.3 The Promise Constructor
4077
4078 // 25.4.3.1 Promise ( executor )
4079
4080 function Promise(executor) {
4081 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4082 Object.defineProperty(this, '[[PromiseState]]', config);
4083 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4084 Object.defineProperty(this, '[[PromiseResult]]', config);
4085 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4086 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4087
4088 var promise = this;
4089 if (Type(promise) !== 'object') throw new TypeError();
4090 if (!('[[PromiseState]]' in promise)) throw TypeError();
4091 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4092 if (!IsCallable(executor)) throw TypeError();
4093
4094 set_internal(promise, '[[PromiseConstructor]]', Promise);
4095
4096 return InitializePromise(promise, executor);
4097 }
4098
4099 // 25.4.3.1.1 InitializePromise ( promise, executor )
4100
4101 function InitializePromise(promise, executor) {
4102 console.assert('[[PromiseState]]' in promise);
4103 console.assert(IsCallable(executor));
4104 set_internal(promise, '[[PromiseState]]', 'pending');
4105 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4106 set_internal(promise, '[[PromiseRejectReactions]]', []);
4107 var resolvingFunctions = CreateResolvingFunctions(promise);
4108 try {
4109 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4110 resolvingFunctions['[[Reject]]']);
4111 } catch (completion) {
4112 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4113 }
4114 return promise;
4115 }
4116
4117 // 25.4.4 Properties of the Promise Constructor
4118 // 25.4.4.1 Promise.all ( iterable )
4119
4120 define(Promise, 'all', function all(iterable) {
4121 var c = strict(this);
4122 var promiseCapability = NewPromiseCapability(c);
4123 try {
4124 var iterator = GetIterator(iterable);
4125 } catch (value) {
4126 promiseCapability['[[Reject]]'].call(undefined, value);
4127 return promiseCapability['[[Promise]]'];
4128 }
4129 var values = [];
4130 var remainingElementsCount = { value: 1 };
4131 var index = 0;
4132 while (true) {
4133 try {
4134 var next = IteratorStep(iterator);
4135 } catch (value) {
4136 promiseCapability['[[Reject]]'].call(undefined, value);
4137 return promiseCapability['[[Promise]]'];
4138 }
4139 if (!next) {
4140 remainingElementsCount.value -= 1;
4141 if (remainingElementsCount.value === 0) {
4142 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4143
4144
4145 }
4146 return promiseCapability['[[Promise]]'];
4147 }
4148 try {
4149 var nextValue = IteratorValue(next);
4150 } catch (value) {
4151 promiseCapability['[[Reject]]'].call(undefined, value);
4152 return promiseCapability['[[Promise]]'];
4153 }
4154 try {
4155 var nextPromise = c.resolve(nextValue);
4156 } catch (value) {
4157 promiseCapability['[[Reject]]'].call(undefined, value);
4158 return promiseCapability['[[Promise]]'];
4159 }
4160 var resolveElement = PromiseAllResolveElementFunction();
4161 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4162 set_internal(resolveElement, '[[Index]]', index);
4163 set_internal(resolveElement, '[[Values]]', values);
4164 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4165 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4166 remainingElementsCount.value += 1;
4167 try {
4168 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4169 } catch (value) {
4170 promiseCapability['[[Reject]]'].call(undefined, value);
4171 return promiseCapability['[[Promise]]'];
4172 }
4173 index += 1;
4174 }
4175 });
4176
4177 // 25.4.4.1.1 Promise.all Resolve Element Functions
4178
4179 function PromiseAllResolveElementFunction() {
4180 var F = function(x) {
4181 var alreadyCalled = F['[[AlreadyCalled]]'];
4182 if (alreadyCalled.value) return undefined;
4183 alreadyCalled.value = true;
4184 var index = F['[[Index]]'];
4185 var values = F['[[Values]]'];
4186 var promiseCapability = F['[[Capabilities]]'];
4187 var remainingElementsCount = F['[[RemainingElements]]'];
4188 try {
4189 values[index] = x;
4190 } catch (result) {
4191 promiseCapability['[[Reject]]'].call(undefined, result);
4192 return promiseCapability['[[Promise]]'];
4193 }
4194 remainingElementsCount.value -= 1;
4195 if (remainingElementsCount.value === 0)
4196 return promiseCapability['[[Resolve]]'].call(undefined, values);
4197 return undefined;
4198 };
4199 return F;
4200 }
4201
4202 // 25.4.4.2 Promise.prototype
4203
4204 Promise.prototype = {};
4205
4206 // 25.4.4.3 Promise.race ( iterable )
4207
4208 define(Promise, 'race', function race(iterable) {
4209 var c = strict(this);
4210 var promiseCapability = NewPromiseCapability(c);
4211 try {
4212 var iterator = GetIterator(iterable);
4213 } catch (value) {
4214 promiseCapability['[[Reject]]'].call(undefined, value);
4215 return promiseCapability['[[Promise]]'];
4216 }
4217 while (true) {
4218 try {
4219 var next = IteratorStep(iterator);
4220 } catch (value) {
4221 promiseCapability['[[Reject]]'].call(undefined, value);
4222 return promiseCapability['[[Promise]]'];
4223 }
4224 if (!next) return promiseCapability['[[Promise]]'];
4225 try {
4226 var nextValue = IteratorValue(next);
4227 } catch (value) {
4228 promiseCapability['[[Reject]]'].call(undefined, value);
4229 return promiseCapability['[[Promise]]'];
4230 }
4231 try {
4232 var nextPromise = c.resolve(nextValue);
4233 } catch (value) {
4234 promiseCapability['[[Reject]]'].call(undefined, value);
4235 return promiseCapability['[[Promise]]'];
4236 }
4237 try {
4238 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4239 } catch (value) {
4240 promiseCapability['[[Reject]]'].call(undefined, value);
4241 return promiseCapability['[[Promise]]'];
4242 }
4243 }
4244 });
4245
4246 // 25.4.4.4 Promise.reject ( r )
4247
4248 define(Promise, 'reject', function reject(r) {
4249 var c = strict(this);
4250 var promiseCapability = NewPromiseCapability(c);
4251 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4252 return promiseCapability['[[Promise]]'];
4253 });
4254
4255 // 25.4.4.5 Promise.resolve ( x )
4256
4257 define(Promise, 'resolve', function resolve(x) {
4258 var c = strict(this);
4259 if (IsPromise(x)) {
4260 var constructor = x['[[PromiseConstructor]]'];
4261 if (SameValue(constructor, c)) return x;
4262 }
4263 var promiseCapability = NewPromiseCapability(c);
4264 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4265 return promiseCapability['[[Promise]]'];
4266 });
4267
4268 // 25.4.4.6 Promise [ @@create ] ( )
4269 // 25.4.4.6.1 AllocatePromise ( constructor )
4270 // 25.4.5 Properties of the Promise Prototype Object
4271 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4272
4273 define(Promise.prototype, 'catch', function catch_(onRejected) {
4274 var promise = this;
4275 return promise.then(undefined, onRejected);
4276 });
4277
4278 // 25.4.5.2 Promise.prototype.constructor
4279
4280 Promise.prototype.constructor = Promise;
4281
4282 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4283
4284 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4285 var promise = this;
4286 if (!IsPromise(promise)) throw TypeError();
4287 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4288 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4289 var c = promise.constructor;
4290 var promiseCapability = NewPromiseCapability(c);
4291 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4292 '[[Handler]]': onFulfilled };
4293 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4294 '[[Handler]]': onRejected };
4295 if (promise['[[PromiseState]]'] === 'pending') {
4296 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4297 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4298 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4299 var value = promise['[[PromiseResult]]'];
4300 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4301 } else if (promise['[[PromiseState]]'] === 'rejected') {
4302 var reason = promise['[[PromiseResult]]'];
4303 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4304 }
4305 return promiseCapability['[[Promise]]'];
4306 });
4307
4308 // 25.4.6 Properties of Promise Instances
4309
4310 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4311 global.Promise = Promise;
4312
4313 // Patch early Promise.cast vs. Promise.resolve implementations
4314 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4315 }());
4316
4317 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4318 define(Promise.prototype, $$toStringTag, 'Promise');
4319
4320 // ---------------------------------------
4321 // 26 Reflection
4322 // ---------------------------------------
4323
4324 (function() {
4325 // 26.1 The Reflect Object
4326 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4327 global.Reflect = {};
4328
4329 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4330 define(
4331 Reflect, 'apply',
4332 function apply(target, thisArgument, argumentsList) {
4333 if (!IsCallable(target)) throw TypeError();
4334 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4335 });
4336
4337 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4338 define(
4339 Reflect, 'construct',
4340 function construct(target, argumentsList) {
4341 return __cons(target, argumentsList);
4342 });
4343
4344 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4345 define(
4346 Reflect, 'defineProperty',
4347 function defineProperty(target, propertyKey, attributes) {
4348 try {
4349 Object.defineProperty(target, propertyKey, attributes);
4350 return true;
4351 } catch (_) {
4352 return false;
4353 }
4354 });
4355
4356 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4357 define(
4358 Reflect, 'deleteProperty',
4359 function deleteProperty(target,name) {
4360 try {
4361 delete target[name];
4362 return !HasOwnProperty(target, name);
4363 } catch (_) {
4364 return false;
4365 }
4366 });
4367
4368 // 26.1.5 Reflect.enumerate ( target )
4369 define(
4370 Reflect, 'enumerate',
4371 function enumerate(target) {
4372 target = ToObject(target);
4373 var iterator = Enumerate(target);
4374 return iterator;
4375 });
4376
4377 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4378 define(
4379 Reflect, 'get',
4380 function get(target, name, receiver) {
4381 target = ToObject(target);
4382 name = String(name);
4383 receiver = (receiver === undefined) ? target : ToObject(receiver);
4384 var desc = getPropertyDescriptor(target, name);
4385 if (desc && 'get' in desc)
4386 return Function.prototype.call.call(desc['get'], receiver);
4387 return target[name];
4388 });
4389
4390 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4391 define(
4392 Reflect, 'getOwnPropertyDescriptor',
4393 Object.getOwnPropertyDescriptor);
4394
4395 // 26.1.8 Reflect.getPrototypeOf ( target )
4396 define(
4397 Reflect, 'getPrototypeOf',
4398 Object.getPrototypeOf);
4399
4400 // 26.1.9 Reflect.has ( target, propertyKey )
4401 define(
4402 Reflect, 'has',
4403 function has(target,name) {
4404 return String(name) in ToObject(target);
4405 });
4406
4407 // 26.1.10 Reflect.isExtensible (target)
4408 define(
4409 Reflect, 'isExtensible',
4410 Object.isExtensible);
4411
4412 // 26.1.11 Reflect.ownKeys ( target )
4413 define(
4414 Reflect, 'ownKeys',
4415 function ownKeys(target) {
4416 var obj = ToObject(target);
4417 return Object.getOwnPropertyNames(obj);
4418 });
4419
4420 // 26.1.12 Reflect.preventExtensions ( target )
4421 define(
4422 Reflect, 'preventExtensions',
4423 function preventExtensions(target) {
4424 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4425 });
4426
4427 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4428 define(
4429 Reflect, 'set',
4430 function set(target, name, value, receiver) {
4431 target = ToObject(target);
4432 name = String(name);
4433 receiver = (receiver === undefined) ? target : ToObject(receiver);
4434 var desc = getPropertyDescriptor(target, name);
4435 try {
4436 if (desc && 'set' in desc)
4437 Function.prototype.call.call(desc['set'], receiver, value);
4438 else
4439 target[name] = value;
4440 return true;
4441 } catch (_) {
4442 return false;
4443 }
4444 });
4445
4446 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4447 define(
4448 Reflect, 'setPrototypeOf',
4449 function setPrototypeOf(target, proto) {
4450 try {
4451 target.__proto__ = proto;
4452 return Reflect.getPrototypeOf(target) === proto;
4453 } catch(_) {
4454 return false;
4455 }
4456 });
4457
4458 }());
4459
4460 // ---------------------------------------
4461 // 26.2 Proxy Objects
4462 // ---------------------------------------
4463
4464 // Not polyfillable.
4465
4466 }(self));
4467
4468 // This helper is defined outside the main scope so that the use of
4469 // 'eval' does not taint the scope for minifiers.
4470 function __cons(t, a) {
4471 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4472 }
4473 </script>
4474 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
4475 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
4476 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
4477 },removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
4478 </script>
4479 <script>/*!
4480 * Bootstrap v3.2.0 (http://getbootstrap.com)
4481 * Copyright 2011-2014 Twitter, Inc.
4482 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4483 */
4484 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
4485 <script>(function() {
4486 'use strict';
4487
4488 /**
4489 * Extend an Object with another Object's properties.
4490 *
4491 * The source objects are specified as additional arguments.
4492 *
4493 * @param dst Object the object to extend.
4494 *
4495 * @return Object the final object.
4496 */
4497 var _extend = function(dst) {
4498 var sources = Array.prototype.slice.call(arguments, 1);
4499 for (var i=0; i<sources.length; ++i) {
4500 var src = sources[i];
4501 for (var p in src) {
4502 if (src.hasOwnProperty(p)) dst[p] = src[p];
4503 }
4504 }
4505 return dst;
4506 };
4507
4508
4509 /**
4510 * Defer execution of given function.
4511 * @param {Function} func
4512 */
4513 var _defer = function(func) {
4514 if (typeof setImmediate === 'function') {
4515 return setImmediate(func);
4516 } else {
4517 return setTimeout(func, 0);
4518 }
4519 };
4520
4521 /**
4522 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
4523 */
4524 var Levenshtein = {
4525 /**
4526 * Calculate levenshtein distance of the two strings.
4527 *
4528 * @param str1 String the first string.
4529 * @param str2 String the second string.
4530 * @return Integer the levenshtein distance (0 and above).
4531 */
4532 get: function(str1, str2) {
4533 // base cases
4534 if (str1 === str2) return 0;
4535 if (str1.length === 0) return str2.length;
4536 if (str2.length === 0) return str1.length;
4537
4538 // two rows
4539 var prevRow = new Array(str2.length + 1),
4540 curCol, nextCol, i, j, tmp;
4541
4542 // initialise previous row
4543 for (i=0; i<prevRow.length; ++i) {
4544 prevRow[i] = i;
4545 }
4546
4547 // calculate current row distance from previous row
4548 for (i=0; i<str1.length; ++i) {
4549 nextCol = i + 1;
4550
4551 for (j=0; j<str2.length; ++j) {
4552 curCol = nextCol;
4553
4554 // substution
4555 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4556 // insertion
4557 tmp = curCol + 1;
4558 if (nextCol > tmp) {
4559 nextCol = tmp;
4560 }
4561 // deletion
4562 tmp = prevRow[j + 1] + 1;
4563 if (nextCol > tmp) {
4564 nextCol = tmp;
4565 }
4566
4567 // copy current col value into previous (in preparation for next iteration)
4568 prevRow[j] = curCol;
4569 }
4570
4571 // copy last col value into previous (in preparation for next iteration)
4572 prevRow[j] = nextCol;
4573 }
4574
4575 return nextCol;
4576 },
4577
4578 /**
4579 * Asynchronously calculate levenshtein distance of the two strings.
4580 *
4581 * @param str1 String the first string.
4582 * @param str2 String the second string.
4583 * @param cb Function callback function with signature: function(Error err, int distance)
4584 * @param [options] Object additional options.
4585 * @param [options.progress] Function progress callback with signature: function(percentComplete)
4586 */
4587 getAsync: function(str1, str2, cb, options) {
4588 options = _extend({}, {
4589 progress: null
4590 }, options);
4591
4592 // base cases
4593 if (str1 === str2) return cb(null, 0);
4594 if (str1.length === 0) return cb(null, str2.length);
4595 if (str2.length === 0) return cb(null, str1.length);
4596
4597 // two rows
4598 var prevRow = new Array(str2.length + 1),
4599 curCol, nextCol,
4600 i, j, tmp,
4601 startTime, currentTime;
4602
4603 // initialise previous row
4604 for (i=0; i<prevRow.length; ++i) {
4605 prevRow[i] = i;
4606 }
4607
4608 nextCol = 1;
4609 i = 0;
4610 j = -1;
4611
4612 var __calculate = function() {
4613 // reset timer
4614 startTime = new Date().valueOf();
4615 currentTime = startTime;
4616
4617 // keep going until one second has elapsed
4618 while (currentTime - startTime < 1000) {
4619 // reached end of current row?
4620 if (str2.length <= (++j)) {
4621 // copy current into previous (in preparation for next iteration)
4622 prevRow[j] = nextCol;
4623
4624 // if already done all chars
4625 if (str1.length <= (++i)) {
4626 return cb(null, nextCol);
4627 }
4628 // else if we have more left to do
4629 else {
4630 nextCol = i + 1;
4631 j = 0;
4632 }
4633 }
4634
4635 // calculation
4636 curCol = nextCol;
4637
4638 // substution
4639 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4640 // insertion
4641 tmp = curCol + 1;
4642 if (nextCol > tmp) {
4643 nextCol = tmp;
4644 }
4645 // deletion
4646 tmp = prevRow[j + 1] + 1;
4647 if (nextCol > tmp) {
4648 nextCol = tmp;
4649 }
4650
4651 // copy current into previous (in preparation for next iteration)
4652 prevRow[j] = curCol;
4653
4654 // get current time
4655 currentTime = new Date().valueOf();
4656 }
4657
4658 // send a progress update?
4659 if (null !== options.progress) {
4660 try {
4661 options.progress.call(null, (i * 100.0/ str1.length));
4662 } catch (err) {
4663 return cb('Progress callback: ' + err.toString());
4664 }
4665 }
4666
4667 // next iteration
4668 _defer(__calculate);
4669 };
4670
4671 __calculate();
4672 }
4673
4674 };
4675
4676 // amd
4677 if (typeof define !== "undefined" && define !== null && define.amd) {
4678 define(function() {
4679 return Levenshtein;
4680 });
4681 }
4682 // commonjs
4683 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
4684 module.exports = Levenshtein;
4685 }
4686 // web worker
4687 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
4688 self.Levenshtein = Levenshtein;
4689 }
4690 // browser main thread
4691 else if (typeof window !== "undefined" && window !== null) {
4692 window.Levenshtein = Levenshtein;
4693 }
4694 }());
4695
4696 </script>
4697 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
4698 write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
4699 for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
4700 7,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
4701 0<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
4702 setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
4703 j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
4704 b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
4705 c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
4706 0,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
4707 (d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[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,
4708 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]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
4709 j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
4710 a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
4711 a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
4712 2)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
4713 LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
4714 this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[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],
4715 [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,
4716 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],[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,
4717 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,
4718 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,
4719 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,
4720 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]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
4721 (a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
4722 correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
4723 j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
4724 d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
4725 </script>
4726 <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.bitcoin = 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){
4727 // (public) Constructor
4728 function BigInteger(a, b, c) {
4729 if (!(this instanceof BigInteger))
4730 return new BigInteger(a, b, c)
4731
4732 if (a != null) {
4733 if ("number" == typeof a) this.fromNumber(a, b, c)
4734 else if (b == null && "string" != typeof a) this.fromString(a, 256)
4735 else this.fromString(a, b)
4736 }
4737 }
4738
4739 var proto = BigInteger.prototype
4740
4741 // duck-typed isBigInteger
4742 proto.__bigi = require('../package.json').version
4743 BigInteger.isBigInteger = function (obj, check_ver) {
4744 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
4745 }
4746
4747 // Bits per digit
4748 var dbits
4749
4750 // am: Compute w_j += (x*this_i), propagate carries,
4751 // c is initial carry, returns final carry.
4752 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
4753 // We need to select the fastest one that works in this environment.
4754
4755 // am1: use a single mult and divide to get the high bits,
4756 // max digit bits should be 26 because
4757 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
4758 function am1(i, x, w, j, c, n) {
4759 while (--n >= 0) {
4760 var v = x * this[i++] + w[j] + c
4761 c = Math.floor(v / 0x4000000)
4762 w[j++] = v & 0x3ffffff
4763 }
4764 return c
4765 }
4766 // am2 avoids a big mult-and-extract completely.
4767 // Max digit bits should be <= 30 because we do bitwise ops
4768 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
4769 function am2(i, x, w, j, c, n) {
4770 var xl = x & 0x7fff,
4771 xh = x >> 15
4772 while (--n >= 0) {
4773 var l = this[i] & 0x7fff
4774 var h = this[i++] >> 15
4775 var m = xh * l + h * xl
4776 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
4777 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
4778 w[j++] = l & 0x3fffffff
4779 }
4780 return c
4781 }
4782 // Alternately, set max digit bits to 28 since some
4783 // browsers slow down when dealing with 32-bit numbers.
4784 function am3(i, x, w, j, c, n) {
4785 var xl = x & 0x3fff,
4786 xh = x >> 14
4787 while (--n >= 0) {
4788 var l = this[i] & 0x3fff
4789 var h = this[i++] >> 14
4790 var m = xh * l + h * xl
4791 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
4792 c = (l >> 28) + (m >> 14) + xh * h
4793 w[j++] = l & 0xfffffff
4794 }
4795 return c
4796 }
4797
4798 // wtf?
4799 BigInteger.prototype.am = am1
4800 dbits = 26
4801
4802 BigInteger.prototype.DB = dbits
4803 BigInteger.prototype.DM = ((1 << dbits) - 1)
4804 var DV = BigInteger.prototype.DV = (1 << dbits)
4805
4806 var BI_FP = 52
4807 BigInteger.prototype.FV = Math.pow(2, BI_FP)
4808 BigInteger.prototype.F1 = BI_FP - dbits
4809 BigInteger.prototype.F2 = 2 * dbits - BI_FP
4810
4811 // Digit conversions
4812 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
4813 var BI_RC = new Array()
4814 var rr, vv
4815 rr = "0".charCodeAt(0)
4816 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
4817 rr = "a".charCodeAt(0)
4818 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
4819 rr = "A".charCodeAt(0)
4820 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
4821
4822 function int2char(n) {
4823 return BI_RM.charAt(n)
4824 }
4825
4826 function intAt(s, i) {
4827 var c = BI_RC[s.charCodeAt(i)]
4828 return (c == null) ? -1 : c
4829 }
4830
4831 // (protected) copy this to r
4832 function bnpCopyTo(r) {
4833 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
4834 r.t = this.t
4835 r.s = this.s
4836 }
4837
4838 // (protected) set from integer value x, -DV <= x < DV
4839 function bnpFromInt(x) {
4840 this.t = 1
4841 this.s = (x < 0) ? -1 : 0
4842 if (x > 0) this[0] = x
4843 else if (x < -1) this[0] = x + DV
4844 else this.t = 0
4845 }
4846
4847 // return bigint initialized to value
4848 function nbv(i) {
4849 var r = new BigInteger()
4850 r.fromInt(i)
4851 return r
4852 }
4853
4854 // (protected) set from string and radix
4855 function bnpFromString(s, b) {
4856 var self = this
4857
4858 var k
4859 if (b == 16) k = 4
4860 else if (b == 8) k = 3
4861 else if (b == 256) k = 8; // byte array
4862 else if (b == 2) k = 1
4863 else if (b == 32) k = 5
4864 else if (b == 4) k = 2
4865 else {
4866 self.fromRadix(s, b)
4867 return
4868 }
4869 self.t = 0
4870 self.s = 0
4871 var i = s.length,
4872 mi = false,
4873 sh = 0
4874 while (--i >= 0) {
4875 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
4876 if (x < 0) {
4877 if (s.charAt(i) == "-") mi = true
4878 continue
4879 }
4880 mi = false
4881 if (sh == 0)
4882 self[self.t++] = x
4883 else if (sh + k > self.DB) {
4884 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
4885 self[self.t++] = (x >> (self.DB - sh))
4886 } else
4887 self[self.t - 1] |= x << sh
4888 sh += k
4889 if (sh >= self.DB) sh -= self.DB
4890 }
4891 if (k == 8 && (s[0] & 0x80) != 0) {
4892 self.s = -1
4893 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
4894 }
4895 self.clamp()
4896 if (mi) BigInteger.ZERO.subTo(self, self)
4897 }
4898
4899 // (protected) clamp off excess high words
4900 function bnpClamp() {
4901 var c = this.s & this.DM
4902 while (this.t > 0 && this[this.t - 1] == c)--this.t
4903 }
4904
4905 // (public) return string representation in given radix
4906 function bnToString(b) {
4907 var self = this
4908 if (self.s < 0) return "-" + self.negate()
4909 .toString(b)
4910 var k
4911 if (b == 16) k = 4
4912 else if (b == 8) k = 3
4913 else if (b == 2) k = 1
4914 else if (b == 32) k = 5
4915 else if (b == 4) k = 2
4916 else return self.toRadix(b)
4917 var km = (1 << k) - 1,
4918 d, m = false,
4919 r = "",
4920 i = self.t
4921 var p = self.DB - (i * self.DB) % k
4922 if (i-- > 0) {
4923 if (p < self.DB && (d = self[i] >> p) > 0) {
4924 m = true
4925 r = int2char(d)
4926 }
4927 while (i >= 0) {
4928 if (p < k) {
4929 d = (self[i] & ((1 << p) - 1)) << (k - p)
4930 d |= self[--i] >> (p += self.DB - k)
4931 } else {
4932 d = (self[i] >> (p -= k)) & km
4933 if (p <= 0) {
4934 p += self.DB
4935 --i
4936 }
4937 }
4938 if (d > 0) m = true
4939 if (m) r += int2char(d)
4940 }
4941 }
4942 return m ? r : "0"
4943 }
4944
4945 // (public) -this
4946 function bnNegate() {
4947 var r = new BigInteger()
4948 BigInteger.ZERO.subTo(this, r)
4949 return r
4950 }
4951
4952 // (public) |this|
4953 function bnAbs() {
4954 return (this.s < 0) ? this.negate() : this
4955 }
4956
4957 // (public) return + if this > a, - if this < a, 0 if equal
4958 function bnCompareTo(a) {
4959 var r = this.s - a.s
4960 if (r != 0) return r
4961 var i = this.t
4962 r = i - a.t
4963 if (r != 0) return (this.s < 0) ? -r : r
4964 while (--i >= 0)
4965 if ((r = this[i] - a[i]) != 0) return r
4966 return 0
4967 }
4968
4969 // returns bit length of the integer x
4970 function nbits(x) {
4971 var r = 1,
4972 t
4973 if ((t = x >>> 16) != 0) {
4974 x = t
4975 r += 16
4976 }
4977 if ((t = x >> 8) != 0) {
4978 x = t
4979 r += 8
4980 }
4981 if ((t = x >> 4) != 0) {
4982 x = t
4983 r += 4
4984 }
4985 if ((t = x >> 2) != 0) {
4986 x = t
4987 r += 2
4988 }
4989 if ((t = x >> 1) != 0) {
4990 x = t
4991 r += 1
4992 }
4993 return r
4994 }
4995
4996 // (public) return the number of bits in "this"
4997 function bnBitLength() {
4998 if (this.t <= 0) return 0
4999 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
5000 }
5001
5002 // (public) return the number of bytes in "this"
5003 function bnByteLength() {
5004 return this.bitLength() >> 3
5005 }
5006
5007 // (protected) r = this << n*DB
5008 function bnpDLShiftTo(n, r) {
5009 var i
5010 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5011 for (i = n - 1; i >= 0; --i) r[i] = 0
5012 r.t = this.t + n
5013 r.s = this.s
5014 }
5015
5016 // (protected) r = this >> n*DB
5017 function bnpDRShiftTo(n, r) {
5018 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5019 r.t = Math.max(this.t - n, 0)
5020 r.s = this.s
5021 }
5022
5023 // (protected) r = this << n
5024 function bnpLShiftTo(n, r) {
5025 var self = this
5026 var bs = n % self.DB
5027 var cbs = self.DB - bs
5028 var bm = (1 << cbs) - 1
5029 var ds = Math.floor(n / self.DB),
5030 c = (self.s << bs) & self.DM,
5031 i
5032 for (i = self.t - 1; i >= 0; --i) {
5033 r[i + ds + 1] = (self[i] >> cbs) | c
5034 c = (self[i] & bm) << bs
5035 }
5036 for (i = ds - 1; i >= 0; --i) r[i] = 0
5037 r[ds] = c
5038 r.t = self.t + ds + 1
5039 r.s = self.s
5040 r.clamp()
5041 }
5042
5043 // (protected) r = this >> n
5044 function bnpRShiftTo(n, r) {
5045 var self = this
5046 r.s = self.s
5047 var ds = Math.floor(n / self.DB)
5048 if (ds >= self.t) {
5049 r.t = 0
5050 return
5051 }
5052 var bs = n % self.DB
5053 var cbs = self.DB - bs
5054 var bm = (1 << bs) - 1
5055 r[0] = self[ds] >> bs
5056 for (var i = ds + 1; i < self.t; ++i) {
5057 r[i - ds - 1] |= (self[i] & bm) << cbs
5058 r[i - ds] = self[i] >> bs
5059 }
5060 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5061 r.t = self.t - ds
5062 r.clamp()
5063 }
5064
5065 // (protected) r = this - a
5066 function bnpSubTo(a, r) {
5067 var self = this
5068 var i = 0,
5069 c = 0,
5070 m = Math.min(a.t, self.t)
5071 while (i < m) {
5072 c += self[i] - a[i]
5073 r[i++] = c & self.DM
5074 c >>= self.DB
5075 }
5076 if (a.t < self.t) {
5077 c -= a.s
5078 while (i < self.t) {
5079 c += self[i]
5080 r[i++] = c & self.DM
5081 c >>= self.DB
5082 }
5083 c += self.s
5084 } else {
5085 c += self.s
5086 while (i < a.t) {
5087 c -= a[i]
5088 r[i++] = c & self.DM
5089 c >>= self.DB
5090 }
5091 c -= a.s
5092 }
5093 r.s = (c < 0) ? -1 : 0
5094 if (c < -1) r[i++] = self.DV + c
5095 else if (c > 0) r[i++] = c
5096 r.t = i
5097 r.clamp()
5098 }
5099
5100 // (protected) r = this * a, r != this,a (HAC 14.12)
5101 // "this" should be the larger one if appropriate.
5102 function bnpMultiplyTo(a, r) {
5103 var x = this.abs(),
5104 y = a.abs()
5105 var i = x.t
5106 r.t = i + y.t
5107 while (--i >= 0) r[i] = 0
5108 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5109 r.s = 0
5110 r.clamp()
5111 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5112 }
5113
5114 // (protected) r = this^2, r != this (HAC 14.16)
5115 function bnpSquareTo(r) {
5116 var x = this.abs()
5117 var i = r.t = 2 * x.t
5118 while (--i >= 0) r[i] = 0
5119 for (i = 0; i < x.t - 1; ++i) {
5120 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5121 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5122 r[i + x.t] -= x.DV
5123 r[i + x.t + 1] = 1
5124 }
5125 }
5126 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5127 r.s = 0
5128 r.clamp()
5129 }
5130
5131 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5132 // r != q, this != m. q or r may be null.
5133 function bnpDivRemTo(m, q, r) {
5134 var self = this
5135 var pm = m.abs()
5136 if (pm.t <= 0) return
5137 var pt = self.abs()
5138 if (pt.t < pm.t) {
5139 if (q != null) q.fromInt(0)
5140 if (r != null) self.copyTo(r)
5141 return
5142 }
5143 if (r == null) r = new BigInteger()
5144 var y = new BigInteger(),
5145 ts = self.s,
5146 ms = m.s
5147 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5148 if (nsh > 0) {
5149 pm.lShiftTo(nsh, y)
5150 pt.lShiftTo(nsh, r)
5151 } else {
5152 pm.copyTo(y)
5153 pt.copyTo(r)
5154 }
5155 var ys = y.t
5156 var y0 = y[ys - 1]
5157 if (y0 == 0) return
5158 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5159 var d1 = self.FV / yt,
5160 d2 = (1 << self.F1) / yt,
5161 e = 1 << self.F2
5162 var i = r.t,
5163 j = i - ys,
5164 t = (q == null) ? new BigInteger() : q
5165 y.dlShiftTo(j, t)
5166 if (r.compareTo(t) >= 0) {
5167 r[r.t++] = 1
5168 r.subTo(t, r)
5169 }
5170 BigInteger.ONE.dlShiftTo(ys, t)
5171 t.subTo(y, y); // "negative" y so we can replace sub with am later
5172 while (y.t < ys) y[y.t++] = 0
5173 while (--j >= 0) {
5174 // Estimate quotient digit
5175 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5176 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5177 y.dlShiftTo(j, t)
5178 r.subTo(t, r)
5179 while (r[i] < --qd) r.subTo(t, r)
5180 }
5181 }
5182 if (q != null) {
5183 r.drShiftTo(ys, q)
5184 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5185 }
5186 r.t = ys
5187 r.clamp()
5188 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5189 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5190 }
5191
5192 // (public) this mod a
5193 function bnMod(a) {
5194 var r = new BigInteger()
5195 this.abs()
5196 .divRemTo(a, null, r)
5197 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5198 return r
5199 }
5200
5201 // Modular reduction using "classic" algorithm
5202 function Classic(m) {
5203 this.m = m
5204 }
5205
5206 function cConvert(x) {
5207 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5208 else return x
5209 }
5210
5211 function cRevert(x) {
5212 return x
5213 }
5214
5215 function cReduce(x) {
5216 x.divRemTo(this.m, null, x)
5217 }
5218
5219 function cMulTo(x, y, r) {
5220 x.multiplyTo(y, r)
5221 this.reduce(r)
5222 }
5223
5224 function cSqrTo(x, r) {
5225 x.squareTo(r)
5226 this.reduce(r)
5227 }
5228
5229 Classic.prototype.convert = cConvert
5230 Classic.prototype.revert = cRevert
5231 Classic.prototype.reduce = cReduce
5232 Classic.prototype.mulTo = cMulTo
5233 Classic.prototype.sqrTo = cSqrTo
5234
5235 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
5236 // justification:
5237 // xy == 1 (mod m)
5238 // xy = 1+km
5239 // xy(2-xy) = (1+km)(1-km)
5240 // x[y(2-xy)] = 1-k^2m^2
5241 // x[y(2-xy)] == 1 (mod m^2)
5242 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
5243 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
5244 // JS multiply "overflows" differently from C/C++, so care is needed here.
5245 function bnpInvDigit() {
5246 if (this.t < 1) return 0
5247 var x = this[0]
5248 if ((x & 1) == 0) return 0
5249 var y = x & 3; // y == 1/x mod 2^2
5250 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
5251 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
5252 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
5253 // last step - calculate inverse mod DV directly
5254 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
5255 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
5256 // we really want the negative inverse, and -DV < y < DV
5257 return (y > 0) ? this.DV - y : -y
5258 }
5259
5260 // Montgomery reduction
5261 function Montgomery(m) {
5262 this.m = m
5263 this.mp = m.invDigit()
5264 this.mpl = this.mp & 0x7fff
5265 this.mph = this.mp >> 15
5266 this.um = (1 << (m.DB - 15)) - 1
5267 this.mt2 = 2 * m.t
5268 }
5269
5270 // xR mod m
5271 function montConvert(x) {
5272 var r = new BigInteger()
5273 x.abs()
5274 .dlShiftTo(this.m.t, r)
5275 r.divRemTo(this.m, null, r)
5276 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
5277 return r
5278 }
5279
5280 // x/R mod m
5281 function montRevert(x) {
5282 var r = new BigInteger()
5283 x.copyTo(r)
5284 this.reduce(r)
5285 return r
5286 }
5287
5288 // x = x/R mod m (HAC 14.32)
5289 function montReduce(x) {
5290 while (x.t <= this.mt2) // pad x so am has enough room later
5291 x[x.t++] = 0
5292 for (var i = 0; i < this.m.t; ++i) {
5293 // faster way of calculating u0 = x[i]*mp mod DV
5294 var j = x[i] & 0x7fff
5295 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
5296 // use am to combine the multiply-shift-add into one call
5297 j = i + this.m.t
5298 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
5299 // propagate carry
5300 while (x[j] >= x.DV) {
5301 x[j] -= x.DV
5302 x[++j]++
5303 }
5304 }
5305 x.clamp()
5306 x.drShiftTo(this.m.t, x)
5307 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
5308 }
5309
5310 // r = "x^2/R mod m"; x != r
5311 function montSqrTo(x, r) {
5312 x.squareTo(r)
5313 this.reduce(r)
5314 }
5315
5316 // r = "xy/R mod m"; x,y != r
5317 function montMulTo(x, y, r) {
5318 x.multiplyTo(y, r)
5319 this.reduce(r)
5320 }
5321
5322 Montgomery.prototype.convert = montConvert
5323 Montgomery.prototype.revert = montRevert
5324 Montgomery.prototype.reduce = montReduce
5325 Montgomery.prototype.mulTo = montMulTo
5326 Montgomery.prototype.sqrTo = montSqrTo
5327
5328 // (protected) true iff this is even
5329 function bnpIsEven() {
5330 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
5331 }
5332
5333 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
5334 function bnpExp(e, z) {
5335 if (e > 0xffffffff || e < 1) return BigInteger.ONE
5336 var r = new BigInteger(),
5337 r2 = new BigInteger(),
5338 g = z.convert(this),
5339 i = nbits(e) - 1
5340 g.copyTo(r)
5341 while (--i >= 0) {
5342 z.sqrTo(r, r2)
5343 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
5344 else {
5345 var t = r
5346 r = r2
5347 r2 = t
5348 }
5349 }
5350 return z.revert(r)
5351 }
5352
5353 // (public) this^e % m, 0 <= e < 2^32
5354 function bnModPowInt(e, m) {
5355 var z
5356 if (e < 256 || m.isEven()) z = new Classic(m)
5357 else z = new Montgomery(m)
5358 return this.exp(e, z)
5359 }
5360
5361 // protected
5362 proto.copyTo = bnpCopyTo
5363 proto.fromInt = bnpFromInt
5364 proto.fromString = bnpFromString
5365 proto.clamp = bnpClamp
5366 proto.dlShiftTo = bnpDLShiftTo
5367 proto.drShiftTo = bnpDRShiftTo
5368 proto.lShiftTo = bnpLShiftTo
5369 proto.rShiftTo = bnpRShiftTo
5370 proto.subTo = bnpSubTo
5371 proto.multiplyTo = bnpMultiplyTo
5372 proto.squareTo = bnpSquareTo
5373 proto.divRemTo = bnpDivRemTo
5374 proto.invDigit = bnpInvDigit
5375 proto.isEven = bnpIsEven
5376 proto.exp = bnpExp
5377
5378 // public
5379 proto.toString = bnToString
5380 proto.negate = bnNegate
5381 proto.abs = bnAbs
5382 proto.compareTo = bnCompareTo
5383 proto.bitLength = bnBitLength
5384 proto.byteLength = bnByteLength
5385 proto.mod = bnMod
5386 proto.modPowInt = bnModPowInt
5387
5388 // (public)
5389 function bnClone() {
5390 var r = new BigInteger()
5391 this.copyTo(r)
5392 return r
5393 }
5394
5395 // (public) return value as integer
5396 function bnIntValue() {
5397 if (this.s < 0) {
5398 if (this.t == 1) return this[0] - this.DV
5399 else if (this.t == 0) return -1
5400 } else if (this.t == 1) return this[0]
5401 else if (this.t == 0) return 0
5402 // assumes 16 < DB < 32
5403 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
5404 }
5405
5406 // (public) return value as byte
5407 function bnByteValue() {
5408 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
5409 }
5410
5411 // (public) return value as short (assumes DB>=16)
5412 function bnShortValue() {
5413 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
5414 }
5415
5416 // (protected) return x s.t. r^x < DV
5417 function bnpChunkSize(r) {
5418 return Math.floor(Math.LN2 * this.DB / Math.log(r))
5419 }
5420
5421 // (public) 0 if this == 0, 1 if this > 0
5422 function bnSigNum() {
5423 if (this.s < 0) return -1
5424 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
5425 else return 1
5426 }
5427
5428 // (protected) convert to radix string
5429 function bnpToRadix(b) {
5430 if (b == null) b = 10
5431 if (this.signum() == 0 || b < 2 || b > 36) return "0"
5432 var cs = this.chunkSize(b)
5433 var a = Math.pow(b, cs)
5434 var d = nbv(a),
5435 y = new BigInteger(),
5436 z = new BigInteger(),
5437 r = ""
5438 this.divRemTo(d, y, z)
5439 while (y.signum() > 0) {
5440 r = (a + z.intValue())
5441 .toString(b)
5442 .substr(1) + r
5443 y.divRemTo(d, y, z)
5444 }
5445 return z.intValue()
5446 .toString(b) + r
5447 }
5448
5449 // (protected) convert from radix string
5450 function bnpFromRadix(s, b) {
5451 var self = this
5452 self.fromInt(0)
5453 if (b == null) b = 10
5454 var cs = self.chunkSize(b)
5455 var d = Math.pow(b, cs),
5456 mi = false,
5457 j = 0,
5458 w = 0
5459 for (var i = 0; i < s.length; ++i) {
5460 var x = intAt(s, i)
5461 if (x < 0) {
5462 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
5463 continue
5464 }
5465 w = b * w + x
5466 if (++j >= cs) {
5467 self.dMultiply(d)
5468 self.dAddOffset(w, 0)
5469 j = 0
5470 w = 0
5471 }
5472 }
5473 if (j > 0) {
5474 self.dMultiply(Math.pow(b, j))
5475 self.dAddOffset(w, 0)
5476 }
5477 if (mi) BigInteger.ZERO.subTo(self, self)
5478 }
5479
5480 // (protected) alternate constructor
5481 function bnpFromNumber(a, b, c) {
5482 var self = this
5483 if ("number" == typeof b) {
5484 // new BigInteger(int,int,RNG)
5485 if (a < 2) self.fromInt(1)
5486 else {
5487 self.fromNumber(a, c)
5488 if (!self.testBit(a - 1)) // force MSB set
5489 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
5490 if (self.isEven()) self.dAddOffset(1, 0); // force odd
5491 while (!self.isProbablePrime(b)) {
5492 self.dAddOffset(2, 0)
5493 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
5494 }
5495 }
5496 } else {
5497 // new BigInteger(int,RNG)
5498 var x = new Array(),
5499 t = a & 7
5500 x.length = (a >> 3) + 1
5501 b.nextBytes(x)
5502 if (t > 0) x[0] &= ((1 << t) - 1)
5503 else x[0] = 0
5504 self.fromString(x, 256)
5505 }
5506 }
5507
5508 // (public) convert to bigendian byte array
5509 function bnToByteArray() {
5510 var self = this
5511 var i = self.t,
5512 r = new Array()
5513 r[0] = self.s
5514 var p = self.DB - (i * self.DB) % 8,
5515 d, k = 0
5516 if (i-- > 0) {
5517 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
5518 r[k++] = d | (self.s << (self.DB - p))
5519 while (i >= 0) {
5520 if (p < 8) {
5521 d = (self[i] & ((1 << p) - 1)) << (8 - p)
5522 d |= self[--i] >> (p += self.DB - 8)
5523 } else {
5524 d = (self[i] >> (p -= 8)) & 0xff
5525 if (p <= 0) {
5526 p += self.DB
5527 --i
5528 }
5529 }
5530 if ((d & 0x80) != 0) d |= -256
5531 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
5532 if (k > 0 || d != self.s) r[k++] = d
5533 }
5534 }
5535 return r
5536 }
5537
5538 function bnEquals(a) {
5539 return (this.compareTo(a) == 0)
5540 }
5541
5542 function bnMin(a) {
5543 return (this.compareTo(a) < 0) ? this : a
5544 }
5545
5546 function bnMax(a) {
5547 return (this.compareTo(a) > 0) ? this : a
5548 }
5549
5550 // (protected) r = this op a (bitwise)
5551 function bnpBitwiseTo(a, op, r) {
5552 var self = this
5553 var i, f, m = Math.min(a.t, self.t)
5554 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
5555 if (a.t < self.t) {
5556 f = a.s & self.DM
5557 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
5558 r.t = self.t
5559 } else {
5560 f = self.s & self.DM
5561 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
5562 r.t = a.t
5563 }
5564 r.s = op(self.s, a.s)
5565 r.clamp()
5566 }
5567
5568 // (public) this & a
5569 function op_and(x, y) {
5570 return x & y
5571 }
5572
5573 function bnAnd(a) {
5574 var r = new BigInteger()
5575 this.bitwiseTo(a, op_and, r)
5576 return r
5577 }
5578
5579 // (public) this | a
5580 function op_or(x, y) {
5581 return x | y
5582 }
5583
5584 function bnOr(a) {
5585 var r = new BigInteger()
5586 this.bitwiseTo(a, op_or, r)
5587 return r
5588 }
5589
5590 // (public) this ^ a
5591 function op_xor(x, y) {
5592 return x ^ y
5593 }
5594
5595 function bnXor(a) {
5596 var r = new BigInteger()
5597 this.bitwiseTo(a, op_xor, r)
5598 return r
5599 }
5600
5601 // (public) this & ~a
5602 function op_andnot(x, y) {
5603 return x & ~y
5604 }
5605
5606 function bnAndNot(a) {
5607 var r = new BigInteger()
5608 this.bitwiseTo(a, op_andnot, r)
5609 return r
5610 }
5611
5612 // (public) ~this
5613 function bnNot() {
5614 var r = new BigInteger()
5615 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
5616 r.t = this.t
5617 r.s = ~this.s
5618 return r
5619 }
5620
5621 // (public) this << n
5622 function bnShiftLeft(n) {
5623 var r = new BigInteger()
5624 if (n < 0) this.rShiftTo(-n, r)
5625 else this.lShiftTo(n, r)
5626 return r
5627 }
5628
5629 // (public) this >> n
5630 function bnShiftRight(n) {
5631 var r = new BigInteger()
5632 if (n < 0) this.lShiftTo(-n, r)
5633 else this.rShiftTo(n, r)
5634 return r
5635 }
5636
5637 // return index of lowest 1-bit in x, x < 2^31
5638 function lbit(x) {
5639 if (x == 0) return -1
5640 var r = 0
5641 if ((x & 0xffff) == 0) {
5642 x >>= 16
5643 r += 16
5644 }
5645 if ((x & 0xff) == 0) {
5646 x >>= 8
5647 r += 8
5648 }
5649 if ((x & 0xf) == 0) {
5650 x >>= 4
5651 r += 4
5652 }
5653 if ((x & 3) == 0) {
5654 x >>= 2
5655 r += 2
5656 }
5657 if ((x & 1) == 0)++r
5658 return r
5659 }
5660
5661 // (public) returns index of lowest 1-bit (or -1 if none)
5662 function bnGetLowestSetBit() {
5663 for (var i = 0; i < this.t; ++i)
5664 if (this[i] != 0) return i * this.DB + lbit(this[i])
5665 if (this.s < 0) return this.t * this.DB
5666 return -1
5667 }
5668
5669 // return number of 1 bits in x
5670 function cbit(x) {
5671 var r = 0
5672 while (x != 0) {
5673 x &= x - 1
5674 ++r
5675 }
5676 return r
5677 }
5678
5679 // (public) return number of set bits
5680 function bnBitCount() {
5681 var r = 0,
5682 x = this.s & this.DM
5683 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
5684 return r
5685 }
5686
5687 // (public) true iff nth bit is set
5688 function bnTestBit(n) {
5689 var j = Math.floor(n / this.DB)
5690 if (j >= this.t) return (this.s != 0)
5691 return ((this[j] & (1 << (n % this.DB))) != 0)
5692 }
5693
5694 // (protected) this op (1<<n)
5695 function bnpChangeBit(n, op) {
5696 var r = BigInteger.ONE.shiftLeft(n)
5697 this.bitwiseTo(r, op, r)
5698 return r
5699 }
5700
5701 // (public) this | (1<<n)
5702 function bnSetBit(n) {
5703 return this.changeBit(n, op_or)
5704 }
5705
5706 // (public) this & ~(1<<n)
5707 function bnClearBit(n) {
5708 return this.changeBit(n, op_andnot)
5709 }
5710
5711 // (public) this ^ (1<<n)
5712 function bnFlipBit(n) {
5713 return this.changeBit(n, op_xor)
5714 }
5715
5716 // (protected) r = this + a
5717 function bnpAddTo(a, r) {
5718 var self = this
5719
5720 var i = 0,
5721 c = 0,
5722 m = Math.min(a.t, self.t)
5723 while (i < m) {
5724 c += self[i] + a[i]
5725 r[i++] = c & self.DM
5726 c >>= self.DB
5727 }
5728 if (a.t < self.t) {
5729 c += a.s
5730 while (i < self.t) {
5731 c += self[i]
5732 r[i++] = c & self.DM
5733 c >>= self.DB
5734 }
5735 c += self.s
5736 } else {
5737 c += self.s
5738 while (i < a.t) {
5739 c += a[i]
5740 r[i++] = c & self.DM
5741 c >>= self.DB
5742 }
5743 c += a.s
5744 }
5745 r.s = (c < 0) ? -1 : 0
5746 if (c > 0) r[i++] = c
5747 else if (c < -1) r[i++] = self.DV + c
5748 r.t = i
5749 r.clamp()
5750 }
5751
5752 // (public) this + a
5753 function bnAdd(a) {
5754 var r = new BigInteger()
5755 this.addTo(a, r)
5756 return r
5757 }
5758
5759 // (public) this - a
5760 function bnSubtract(a) {
5761 var r = new BigInteger()
5762 this.subTo(a, r)
5763 return r
5764 }
5765
5766 // (public) this * a
5767 function bnMultiply(a) {
5768 var r = new BigInteger()
5769 this.multiplyTo(a, r)
5770 return r
5771 }
5772
5773 // (public) this^2
5774 function bnSquare() {
5775 var r = new BigInteger()
5776 this.squareTo(r)
5777 return r
5778 }
5779
5780 // (public) this / a
5781 function bnDivide(a) {
5782 var r = new BigInteger()
5783 this.divRemTo(a, r, null)
5784 return r
5785 }
5786
5787 // (public) this % a
5788 function bnRemainder(a) {
5789 var r = new BigInteger()
5790 this.divRemTo(a, null, r)
5791 return r
5792 }
5793
5794 // (public) [this/a,this%a]
5795 function bnDivideAndRemainder(a) {
5796 var q = new BigInteger(),
5797 r = new BigInteger()
5798 this.divRemTo(a, q, r)
5799 return new Array(q, r)
5800 }
5801
5802 // (protected) this *= n, this >= 0, 1 < n < DV
5803 function bnpDMultiply(n) {
5804 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
5805 ++this.t
5806 this.clamp()
5807 }
5808
5809 // (protected) this += n << w words, this >= 0
5810 function bnpDAddOffset(n, w) {
5811 if (n == 0) return
5812 while (this.t <= w) this[this.t++] = 0
5813 this[w] += n
5814 while (this[w] >= this.DV) {
5815 this[w] -= this.DV
5816 if (++w >= this.t) this[this.t++] = 0
5817 ++this[w]
5818 }
5819 }
5820
5821 // A "null" reducer
5822 function NullExp() {}
5823
5824 function nNop(x) {
5825 return x
5826 }
5827
5828 function nMulTo(x, y, r) {
5829 x.multiplyTo(y, r)
5830 }
5831
5832 function nSqrTo(x, r) {
5833 x.squareTo(r)
5834 }
5835
5836 NullExp.prototype.convert = nNop
5837 NullExp.prototype.revert = nNop
5838 NullExp.prototype.mulTo = nMulTo
5839 NullExp.prototype.sqrTo = nSqrTo
5840
5841 // (public) this^e
5842 function bnPow(e) {
5843 return this.exp(e, new NullExp())
5844 }
5845
5846 // (protected) r = lower n words of "this * a", a.t <= n
5847 // "this" should be the larger one if appropriate.
5848 function bnpMultiplyLowerTo(a, n, r) {
5849 var i = Math.min(this.t + a.t, n)
5850 r.s = 0; // assumes a,this >= 0
5851 r.t = i
5852 while (i > 0) r[--i] = 0
5853 var j
5854 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
5855 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
5856 r.clamp()
5857 }
5858
5859 // (protected) r = "this * a" without lower n words, n > 0
5860 // "this" should be the larger one if appropriate.
5861 function bnpMultiplyUpperTo(a, n, r) {
5862 --n
5863 var i = r.t = this.t + a.t - n
5864 r.s = 0; // assumes a,this >= 0
5865 while (--i >= 0) r[i] = 0
5866 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
5867 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
5868 r.clamp()
5869 r.drShiftTo(1, r)
5870 }
5871
5872 // Barrett modular reduction
5873 function Barrett(m) {
5874 // setup Barrett
5875 this.r2 = new BigInteger()
5876 this.q3 = new BigInteger()
5877 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
5878 this.mu = this.r2.divide(m)
5879 this.m = m
5880 }
5881
5882 function barrettConvert(x) {
5883 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
5884 else if (x.compareTo(this.m) < 0) return x
5885 else {
5886 var r = new BigInteger()
5887 x.copyTo(r)
5888 this.reduce(r)
5889 return r
5890 }
5891 }
5892
5893 function barrettRevert(x) {
5894 return x
5895 }
5896
5897 // x = x mod m (HAC 14.42)
5898 function barrettReduce(x) {
5899 var self = this
5900 x.drShiftTo(self.m.t - 1, self.r2)
5901 if (x.t > self.m.t + 1) {
5902 x.t = self.m.t + 1
5903 x.clamp()
5904 }
5905 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
5906 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
5907 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
5908 x.subTo(self.r2, x)
5909 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
5910 }
5911
5912 // r = x^2 mod m; x != r
5913 function barrettSqrTo(x, r) {
5914 x.squareTo(r)
5915 this.reduce(r)
5916 }
5917
5918 // r = x*y mod m; x,y != r
5919 function barrettMulTo(x, y, r) {
5920 x.multiplyTo(y, r)
5921 this.reduce(r)
5922 }
5923
5924 Barrett.prototype.convert = barrettConvert
5925 Barrett.prototype.revert = barrettRevert
5926 Barrett.prototype.reduce = barrettReduce
5927 Barrett.prototype.mulTo = barrettMulTo
5928 Barrett.prototype.sqrTo = barrettSqrTo
5929
5930 // (public) this^e % m (HAC 14.85)
5931 function bnModPow(e, m) {
5932 var i = e.bitLength(),
5933 k, r = nbv(1),
5934 z
5935 if (i <= 0) return r
5936 else if (i < 18) k = 1
5937 else if (i < 48) k = 3
5938 else if (i < 144) k = 4
5939 else if (i < 768) k = 5
5940 else k = 6
5941 if (i < 8)
5942 z = new Classic(m)
5943 else if (m.isEven())
5944 z = new Barrett(m)
5945 else
5946 z = new Montgomery(m)
5947
5948 // precomputation
5949 var g = new Array(),
5950 n = 3,
5951 k1 = k - 1,
5952 km = (1 << k) - 1
5953 g[1] = z.convert(this)
5954 if (k > 1) {
5955 var g2 = new BigInteger()
5956 z.sqrTo(g[1], g2)
5957 while (n <= km) {
5958 g[n] = new BigInteger()
5959 z.mulTo(g2, g[n - 2], g[n])
5960 n += 2
5961 }
5962 }
5963
5964 var j = e.t - 1,
5965 w, is1 = true,
5966 r2 = new BigInteger(),
5967 t
5968 i = nbits(e[j]) - 1
5969 while (j >= 0) {
5970 if (i >= k1) w = (e[j] >> (i - k1)) & km
5971 else {
5972 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
5973 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
5974 }
5975
5976 n = k
5977 while ((w & 1) == 0) {
5978 w >>= 1
5979 --n
5980 }
5981 if ((i -= n) < 0) {
5982 i += this.DB
5983 --j
5984 }
5985 if (is1) { // ret == 1, don't bother squaring or multiplying it
5986 g[w].copyTo(r)
5987 is1 = false
5988 } else {
5989 while (n > 1) {
5990 z.sqrTo(r, r2)
5991 z.sqrTo(r2, r)
5992 n -= 2
5993 }
5994 if (n > 0) z.sqrTo(r, r2)
5995 else {
5996 t = r
5997 r = r2
5998 r2 = t
5999 }
6000 z.mulTo(r2, g[w], r)
6001 }
6002
6003 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6004 z.sqrTo(r, r2)
6005 t = r
6006 r = r2
6007 r2 = t
6008 if (--i < 0) {
6009 i = this.DB - 1
6010 --j
6011 }
6012 }
6013 }
6014 return z.revert(r)
6015 }
6016
6017 // (public) gcd(this,a) (HAC 14.54)
6018 function bnGCD(a) {
6019 var x = (this.s < 0) ? this.negate() : this.clone()
6020 var y = (a.s < 0) ? a.negate() : a.clone()
6021 if (x.compareTo(y) < 0) {
6022 var t = x
6023 x = y
6024 y = t
6025 }
6026 var i = x.getLowestSetBit(),
6027 g = y.getLowestSetBit()
6028 if (g < 0) return x
6029 if (i < g) g = i
6030 if (g > 0) {
6031 x.rShiftTo(g, x)
6032 y.rShiftTo(g, y)
6033 }
6034 while (x.signum() > 0) {
6035 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6036 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6037 if (x.compareTo(y) >= 0) {
6038 x.subTo(y, x)
6039 x.rShiftTo(1, x)
6040 } else {
6041 y.subTo(x, y)
6042 y.rShiftTo(1, y)
6043 }
6044 }
6045 if (g > 0) y.lShiftTo(g, y)
6046 return y
6047 }
6048
6049 // (protected) this % n, n < 2^26
6050 function bnpModInt(n) {
6051 if (n <= 0) return 0
6052 var d = this.DV % n,
6053 r = (this.s < 0) ? n - 1 : 0
6054 if (this.t > 0)
6055 if (d == 0) r = this[0] % n
6056 else
6057 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6058 return r
6059 }
6060
6061 // (public) 1/this % m (HAC 14.61)
6062 function bnModInverse(m) {
6063 var ac = m.isEven()
6064 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6065 var u = m.clone(),
6066 v = this.clone()
6067 var a = nbv(1),
6068 b = nbv(0),
6069 c = nbv(0),
6070 d = nbv(1)
6071 while (u.signum() != 0) {
6072 while (u.isEven()) {
6073 u.rShiftTo(1, u)
6074 if (ac) {
6075 if (!a.isEven() || !b.isEven()) {
6076 a.addTo(this, a)
6077 b.subTo(m, b)
6078 }
6079 a.rShiftTo(1, a)
6080 } else if (!b.isEven()) b.subTo(m, b)
6081 b.rShiftTo(1, b)
6082 }
6083 while (v.isEven()) {
6084 v.rShiftTo(1, v)
6085 if (ac) {
6086 if (!c.isEven() || !d.isEven()) {
6087 c.addTo(this, c)
6088 d.subTo(m, d)
6089 }
6090 c.rShiftTo(1, c)
6091 } else if (!d.isEven()) d.subTo(m, d)
6092 d.rShiftTo(1, d)
6093 }
6094 if (u.compareTo(v) >= 0) {
6095 u.subTo(v, u)
6096 if (ac) a.subTo(c, a)
6097 b.subTo(d, b)
6098 } else {
6099 v.subTo(u, v)
6100 if (ac) c.subTo(a, c)
6101 d.subTo(b, d)
6102 }
6103 }
6104 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6105 if (d.compareTo(m) >= 0) return d.subtract(m)
6106 if (d.signum() < 0) d.addTo(m, d)
6107 else return d
6108 if (d.signum() < 0) return d.add(m)
6109 else return d
6110 }
6111
6112 var lowprimes = [
6113 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6114 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6115 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6116 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6117 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6118 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6119 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6120 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6121 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6122 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6123 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6124 ]
6125
6126 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6127
6128 // (public) test primality with certainty >= 1-.5^t
6129 function bnIsProbablePrime(t) {
6130 var i, x = this.abs()
6131 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6132 for (i = 0; i < lowprimes.length; ++i)
6133 if (x[0] == lowprimes[i]) return true
6134 return false
6135 }
6136 if (x.isEven()) return false
6137 i = 1
6138 while (i < lowprimes.length) {
6139 var m = lowprimes[i],
6140 j = i + 1
6141 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6142 m = x.modInt(m)
6143 while (i < j) if (m % lowprimes[i++] == 0) return false
6144 }
6145 return x.millerRabin(t)
6146 }
6147
6148 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6149 function bnpMillerRabin(t) {
6150 var n1 = this.subtract(BigInteger.ONE)
6151 var k = n1.getLowestSetBit()
6152 if (k <= 0) return false
6153 var r = n1.shiftRight(k)
6154 t = (t + 1) >> 1
6155 if (t > lowprimes.length) t = lowprimes.length
6156 var a = new BigInteger(null)
6157 var j, bases = []
6158 for (var i = 0; i < t; ++i) {
6159 for (;;) {
6160 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6161 if (bases.indexOf(j) == -1) break
6162 }
6163 bases.push(j)
6164 a.fromInt(j)
6165 var y = a.modPow(r, this)
6166 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6167 var j = 1
6168 while (j++ < k && y.compareTo(n1) != 0) {
6169 y = y.modPowInt(2, this)
6170 if (y.compareTo(BigInteger.ONE) == 0) return false
6171 }
6172 if (y.compareTo(n1) != 0) return false
6173 }
6174 }
6175 return true
6176 }
6177
6178 // protected
6179 proto.chunkSize = bnpChunkSize
6180 proto.toRadix = bnpToRadix
6181 proto.fromRadix = bnpFromRadix
6182 proto.fromNumber = bnpFromNumber
6183 proto.bitwiseTo = bnpBitwiseTo
6184 proto.changeBit = bnpChangeBit
6185 proto.addTo = bnpAddTo
6186 proto.dMultiply = bnpDMultiply
6187 proto.dAddOffset = bnpDAddOffset
6188 proto.multiplyLowerTo = bnpMultiplyLowerTo
6189 proto.multiplyUpperTo = bnpMultiplyUpperTo
6190 proto.modInt = bnpModInt
6191 proto.millerRabin = bnpMillerRabin
6192
6193 // public
6194 proto.clone = bnClone
6195 proto.intValue = bnIntValue
6196 proto.byteValue = bnByteValue
6197 proto.shortValue = bnShortValue
6198 proto.signum = bnSigNum
6199 proto.toByteArray = bnToByteArray
6200 proto.equals = bnEquals
6201 proto.min = bnMin
6202 proto.max = bnMax
6203 proto.and = bnAnd
6204 proto.or = bnOr
6205 proto.xor = bnXor
6206 proto.andNot = bnAndNot
6207 proto.not = bnNot
6208 proto.shiftLeft = bnShiftLeft
6209 proto.shiftRight = bnShiftRight
6210 proto.getLowestSetBit = bnGetLowestSetBit
6211 proto.bitCount = bnBitCount
6212 proto.testBit = bnTestBit
6213 proto.setBit = bnSetBit
6214 proto.clearBit = bnClearBit
6215 proto.flipBit = bnFlipBit
6216 proto.add = bnAdd
6217 proto.subtract = bnSubtract
6218 proto.multiply = bnMultiply
6219 proto.divide = bnDivide
6220 proto.remainder = bnRemainder
6221 proto.divideAndRemainder = bnDivideAndRemainder
6222 proto.modPow = bnModPow
6223 proto.modInverse = bnModInverse
6224 proto.pow = bnPow
6225 proto.gcd = bnGCD
6226 proto.isProbablePrime = bnIsProbablePrime
6227
6228 // JSBN-specific extension
6229 proto.square = bnSquare
6230
6231 // constants
6232 BigInteger.ZERO = nbv(0)
6233 BigInteger.ONE = nbv(1)
6234 BigInteger.valueOf = nbv
6235
6236 module.exports = BigInteger
6237
6238 },{"../package.json":4}],2:[function(require,module,exports){
6239 (function (Buffer){
6240 // FIXME: Kind of a weird way to throw exceptions, consider removing
6241 var assert = require('assert')
6242 var BigInteger = require('./bigi')
6243
6244 /**
6245 * Turns a byte array into a big integer.
6246 *
6247 * This function will interpret a byte array as a big integer in big
6248 * endian notation.
6249 */
6250 BigInteger.fromByteArrayUnsigned = function(byteArray) {
6251 // BigInteger expects a DER integer conformant byte array
6252 if (byteArray[0] & 0x80) {
6253 return new BigInteger([0].concat(byteArray))
6254 }
6255
6256 return new BigInteger(byteArray)
6257 }
6258
6259 /**
6260 * Returns a byte array representation of the big integer.
6261 *
6262 * This returns the absolute of the contained value in big endian
6263 * form. A value of zero results in an empty array.
6264 */
6265 BigInteger.prototype.toByteArrayUnsigned = function() {
6266 var byteArray = this.toByteArray()
6267 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
6268 }
6269
6270 BigInteger.fromDERInteger = function(byteArray) {
6271 return new BigInteger(byteArray)
6272 }
6273
6274 /*
6275 * Converts BigInteger to a DER integer representation.
6276 *
6277 * The format for this value uses the most significant bit as a sign
6278 * bit. If the most significant bit is already set and the integer is
6279 * positive, a 0x00 is prepended.
6280 *
6281 * Examples:
6282 *
6283 * 0 => 0x00
6284 * 1 => 0x01
6285 * -1 => 0xff
6286 * 127 => 0x7f
6287 * -127 => 0x81
6288 * 128 => 0x0080
6289 * -128 => 0x80
6290 * 255 => 0x00ff
6291 * -255 => 0xff01
6292 * 16300 => 0x3fac
6293 * -16300 => 0xc054
6294 * 62300 => 0x00f35c
6295 * -62300 => 0xff0ca4
6296 */
6297 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
6298
6299 BigInteger.fromBuffer = function(buffer) {
6300 // BigInteger expects a DER integer conformant byte array
6301 if (buffer[0] & 0x80) {
6302 var byteArray = Array.prototype.slice.call(buffer)
6303
6304 return new BigInteger([0].concat(byteArray))
6305 }
6306
6307 return new BigInteger(buffer)
6308 }
6309
6310 BigInteger.fromHex = function(hex) {
6311 if (hex === '') return BigInteger.ZERO
6312
6313 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
6314 assert.equal(hex.length % 2, 0, 'Incomplete hex')
6315 return new BigInteger(hex, 16)
6316 }
6317
6318 BigInteger.prototype.toBuffer = function(size) {
6319 var byteArray = this.toByteArrayUnsigned()
6320 var zeros = []
6321
6322 var padding = size - byteArray.length
6323 while (zeros.length < padding) zeros.push(0)
6324
6325 return new Buffer(zeros.concat(byteArray))
6326 }
6327
6328 BigInteger.prototype.toHex = function(size) {
6329 return this.toBuffer(size).toString('hex')
6330 }
6331
6332 }).call(this,require("buffer").Buffer)
6333 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
6334 var BigInteger = require('./bigi')
6335
6336 //addons
6337 require('./convert')
6338
6339 module.exports = BigInteger
6340 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
6341 module.exports={
6342 "name": "bigi",
6343 "version": "1.4.0",
6344 "description": "Big integers.",
6345 "keywords": [
6346 "cryptography",
6347 "math",
6348 "bitcoin",
6349 "arbitrary",
6350 "precision",
6351 "arithmetic",
6352 "big",
6353 "integer",
6354 "int",
6355 "number",
6356 "biginteger",
6357 "bigint",
6358 "bignumber",
6359 "decimal",
6360 "float"
6361 ],
6362 "devDependencies": {
6363 "mocha": "^1.20.1",
6364 "jshint": "^2.5.1",
6365 "coveralls": "^2.10.0",
6366 "istanbul": "^0.2.11"
6367 },
6368 "repository": {
6369 "url": "https://github.com/cryptocoinjs/bigi",
6370 "type": "git"
6371 },
6372 "main": "./lib/index.js",
6373 "scripts": {
6374 "test": "_mocha -- test/*.js",
6375 "jshint": "jshint --config jshint.json lib/*.js ; true",
6376 "unit": "mocha",
6377 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
6378 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
6379 },
6380 "dependencies": {},
6381 "testling": {
6382 "files": "test/*.js",
6383 "harness": "mocha",
6384 "browsers": [
6385 "ie/9..latest",
6386 "firefox/latest",
6387 "chrome/latest",
6388 "safari/6.0..latest",
6389 "iphone/6.0..latest",
6390 "android-browser/4.2..latest"
6391 ]
6392 },
6393 "bugs": {
6394 "url": "https://github.com/cryptocoinjs/bigi/issues"
6395 },
6396 "homepage": "https://github.com/cryptocoinjs/bigi",
6397 "_id": "bigi@1.4.0",
6398 "dist": {
6399 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6400 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6401 },
6402 "_from": "bigi@^1.4.0",
6403 "_npmVersion": "1.4.3",
6404 "_npmUser": {
6405 "name": "jp",
6406 "email": "jprichardson@gmail.com"
6407 },
6408 "maintainers": [
6409 {
6410 "name": "jp",
6411 "email": "jprichardson@gmail.com"
6412 },
6413 {
6414 "name": "midnightlightning",
6415 "email": "boydb@midnightdesign.ws"
6416 },
6417 {
6418 "name": "sidazhang",
6419 "email": "sidazhang89@gmail.com"
6420 },
6421 {
6422 "name": "nadav",
6423 "email": "npm@shesek.info"
6424 }
6425 ],
6426 "directories": {},
6427 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6428 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6429 }
6430
6431 },{}],5:[function(require,module,exports){
6432 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
6433 //
6434 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
6435 //
6436 // Originally from narwhal.js (http://narwhaljs.org)
6437 // Copyright (c) 2009 Thomas Robinson <280north.com>
6438 //
6439 // Permission is hereby granted, free of charge, to any person obtaining a copy
6440 // of this software and associated documentation files (the 'Software'), to
6441 // deal in the Software without restriction, including without limitation the
6442 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6443 // sell copies of the Software, and to permit persons to whom the Software is
6444 // furnished to do so, subject to the following conditions:
6445 //
6446 // The above copyright notice and this permission notice shall be included in
6447 // all copies or substantial portions of the Software.
6448 //
6449 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6450 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6451 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
6452 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
6453 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
6454 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6455
6456 // when used in node, this will actually load the util module we depend on
6457 // versus loading the builtin util module as happens otherwise
6458 // this is a bug in node module loading as far as I am concerned
6459 var util = require('util/');
6460
6461 var pSlice = Array.prototype.slice;
6462 var hasOwn = Object.prototype.hasOwnProperty;
6463
6464 // 1. The assert module provides functions that throw
6465 // AssertionError's when particular conditions are not met. The
6466 // assert module must conform to the following interface.
6467
6468 var assert = module.exports = ok;
6469
6470 // 2. The AssertionError is defined in assert.
6471 // new assert.AssertionError({ message: message,
6472 // actual: actual,
6473 // expected: expected })
6474
6475 assert.AssertionError = function AssertionError(options) {
6476 this.name = 'AssertionError';
6477 this.actual = options.actual;
6478 this.expected = options.expected;
6479 this.operator = options.operator;
6480 if (options.message) {
6481 this.message = options.message;
6482 this.generatedMessage = false;
6483 } else {
6484 this.message = getMessage(this);
6485 this.generatedMessage = true;
6486 }
6487 var stackStartFunction = options.stackStartFunction || fail;
6488
6489 if (Error.captureStackTrace) {
6490 Error.captureStackTrace(this, stackStartFunction);
6491 }
6492 else {
6493 // non v8 browsers so we can have a stacktrace
6494 var err = new Error();
6495 if (err.stack) {
6496 var out = err.stack;
6497
6498 // try to strip useless frames
6499 var fn_name = stackStartFunction.name;
6500 var idx = out.indexOf('\n' + fn_name);
6501 if (idx >= 0) {
6502 // once we have located the function frame
6503 // we need to strip out everything before it (and its line)
6504 var next_line = out.indexOf('\n', idx + 1);
6505 out = out.substring(next_line + 1);
6506 }
6507
6508 this.stack = out;
6509 }
6510 }
6511 };
6512
6513 // assert.AssertionError instanceof Error
6514 util.inherits(assert.AssertionError, Error);
6515
6516 function replacer(key, value) {
6517 if (util.isUndefined(value)) {
6518 return '' + value;
6519 }
6520 if (util.isNumber(value) && !isFinite(value)) {
6521 return value.toString();
6522 }
6523 if (util.isFunction(value) || util.isRegExp(value)) {
6524 return value.toString();
6525 }
6526 return value;
6527 }
6528
6529 function truncate(s, n) {
6530 if (util.isString(s)) {
6531 return s.length < n ? s : s.slice(0, n);
6532 } else {
6533 return s;
6534 }
6535 }
6536
6537 function getMessage(self) {
6538 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
6539 self.operator + ' ' +
6540 truncate(JSON.stringify(self.expected, replacer), 128);
6541 }
6542
6543 // At present only the three keys mentioned above are used and
6544 // understood by the spec. Implementations or sub modules can pass
6545 // other keys to the AssertionError's constructor - they will be
6546 // ignored.
6547
6548 // 3. All of the following functions must throw an AssertionError
6549 // when a corresponding condition is not met, with a message that
6550 // may be undefined if not provided. All assertion methods provide
6551 // both the actual and expected values to the assertion error for
6552 // display purposes.
6553
6554 function fail(actual, expected, message, operator, stackStartFunction) {
6555 throw new assert.AssertionError({
6556 message: message,
6557 actual: actual,
6558 expected: expected,
6559 operator: operator,
6560 stackStartFunction: stackStartFunction
6561 });
6562 }
6563
6564 // EXTENSION! allows for well behaved errors defined elsewhere.
6565 assert.fail = fail;
6566
6567 // 4. Pure assertion tests whether a value is truthy, as determined
6568 // by !!guard.
6569 // assert.ok(guard, message_opt);
6570 // This statement is equivalent to assert.equal(true, !!guard,
6571 // message_opt);. To test strictly for the value true, use
6572 // assert.strictEqual(true, guard, message_opt);.
6573
6574 function ok(value, message) {
6575 if (!value) fail(value, true, message, '==', assert.ok);
6576 }
6577 assert.ok = ok;
6578
6579 // 5. The equality assertion tests shallow, coercive equality with
6580 // ==.
6581 // assert.equal(actual, expected, message_opt);
6582
6583 assert.equal = function equal(actual, expected, message) {
6584 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
6585 };
6586
6587 // 6. The non-equality assertion tests for whether two objects are not equal
6588 // with != assert.notEqual(actual, expected, message_opt);
6589
6590 assert.notEqual = function notEqual(actual, expected, message) {
6591 if (actual == expected) {
6592 fail(actual, expected, message, '!=', assert.notEqual);
6593 }
6594 };
6595
6596 // 7. The equivalence assertion tests a deep equality relation.
6597 // assert.deepEqual(actual, expected, message_opt);
6598
6599 assert.deepEqual = function deepEqual(actual, expected, message) {
6600 if (!_deepEqual(actual, expected)) {
6601 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
6602 }
6603 };
6604
6605 function _deepEqual(actual, expected) {
6606 // 7.1. All identical values are equivalent, as determined by ===.
6607 if (actual === expected) {
6608 return true;
6609
6610 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
6611 if (actual.length != expected.length) return false;
6612
6613 for (var i = 0; i < actual.length; i++) {
6614 if (actual[i] !== expected[i]) return false;
6615 }
6616
6617 return true;
6618
6619 // 7.2. If the expected value is a Date object, the actual value is
6620 // equivalent if it is also a Date object that refers to the same time.
6621 } else if (util.isDate(actual) && util.isDate(expected)) {
6622 return actual.getTime() === expected.getTime();
6623
6624 // 7.3 If the expected value is a RegExp object, the actual value is
6625 // equivalent if it is also a RegExp object with the same source and
6626 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
6627 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
6628 return actual.source === expected.source &&
6629 actual.global === expected.global &&
6630 actual.multiline === expected.multiline &&
6631 actual.lastIndex === expected.lastIndex &&
6632 actual.ignoreCase === expected.ignoreCase;
6633
6634 // 7.4. Other pairs that do not both pass typeof value == 'object',
6635 // equivalence is determined by ==.
6636 } else if (!util.isObject(actual) && !util.isObject(expected)) {
6637 return actual == expected;
6638
6639 // 7.5 For all other Object pairs, including Array objects, equivalence is
6640 // determined by having the same number of owned properties (as verified
6641 // with Object.prototype.hasOwnProperty.call), the same set of keys
6642 // (although not necessarily the same order), equivalent values for every
6643 // corresponding key, and an identical 'prototype' property. Note: this
6644 // accounts for both named and indexed properties on Arrays.
6645 } else {
6646 return objEquiv(actual, expected);
6647 }
6648 }
6649
6650 function isArguments(object) {
6651 return Object.prototype.toString.call(object) == '[object Arguments]';
6652 }
6653
6654 function objEquiv(a, b) {
6655 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
6656 return false;
6657 // an identical 'prototype' property.
6658 if (a.prototype !== b.prototype) return false;
6659 // if one is a primitive, the other must be same
6660 if (util.isPrimitive(a) || util.isPrimitive(b)) {
6661 return a === b;
6662 }
6663 var aIsArgs = isArguments(a),
6664 bIsArgs = isArguments(b);
6665 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
6666 return false;
6667 if (aIsArgs) {
6668 a = pSlice.call(a);
6669 b = pSlice.call(b);
6670 return _deepEqual(a, b);
6671 }
6672 var ka = objectKeys(a),
6673 kb = objectKeys(b),
6674 key, i;
6675 // having the same number of owned properties (keys incorporates
6676 // hasOwnProperty)
6677 if (ka.length != kb.length)
6678 return false;
6679 //the same set of keys (although not necessarily the same order),
6680 ka.sort();
6681 kb.sort();
6682 //~~~cheap key test
6683 for (i = ka.length - 1; i >= 0; i--) {
6684 if (ka[i] != kb[i])
6685 return false;
6686 }
6687 //equivalent values for every corresponding key, and
6688 //~~~possibly expensive deep test
6689 for (i = ka.length - 1; i >= 0; i--) {
6690 key = ka[i];
6691 if (!_deepEqual(a[key], b[key])) return false;
6692 }
6693 return true;
6694 }
6695
6696 // 8. The non-equivalence assertion tests for any deep inequality.
6697 // assert.notDeepEqual(actual, expected, message_opt);
6698
6699 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
6700 if (_deepEqual(actual, expected)) {
6701 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
6702 }
6703 };
6704
6705 // 9. The strict equality assertion tests strict equality, as determined by ===.
6706 // assert.strictEqual(actual, expected, message_opt);
6707
6708 assert.strictEqual = function strictEqual(actual, expected, message) {
6709 if (actual !== expected) {
6710 fail(actual, expected, message, '===', assert.strictEqual);
6711 }
6712 };
6713
6714 // 10. The strict non-equality assertion tests for strict inequality, as
6715 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
6716
6717 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
6718 if (actual === expected) {
6719 fail(actual, expected, message, '!==', assert.notStrictEqual);
6720 }
6721 };
6722
6723 function expectedException(actual, expected) {
6724 if (!actual || !expected) {
6725 return false;
6726 }
6727
6728 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
6729 return expected.test(actual);
6730 } else if (actual instanceof expected) {
6731 return true;
6732 } else if (expected.call({}, actual) === true) {
6733 return true;
6734 }
6735
6736 return false;
6737 }
6738
6739 function _throws(shouldThrow, block, expected, message) {
6740 var actual;
6741
6742 if (util.isString(expected)) {
6743 message = expected;
6744 expected = null;
6745 }
6746
6747 try {
6748 block();
6749 } catch (e) {
6750 actual = e;
6751 }
6752
6753 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
6754 (message ? ' ' + message : '.');
6755
6756 if (shouldThrow && !actual) {
6757 fail(actual, expected, 'Missing expected exception' + message);
6758 }
6759
6760 if (!shouldThrow && expectedException(actual, expected)) {
6761 fail(actual, expected, 'Got unwanted exception' + message);
6762 }
6763
6764 if ((shouldThrow && actual && expected &&
6765 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
6766 throw actual;
6767 }
6768 }
6769
6770 // 11. Expected to throw an error:
6771 // assert.throws(block, Error_opt, message_opt);
6772
6773 assert.throws = function(block, /*optional*/error, /*optional*/message) {
6774 _throws.apply(this, [true].concat(pSlice.call(arguments)));
6775 };
6776
6777 // EXTENSION! This is annoying to write outside this module.
6778 assert.doesNotThrow = function(block, /*optional*/message) {
6779 _throws.apply(this, [false].concat(pSlice.call(arguments)));
6780 };
6781
6782 assert.ifError = function(err) { if (err) {throw err;}};
6783
6784 var objectKeys = Object.keys || function (obj) {
6785 var keys = [];
6786 for (var key in obj) {
6787 if (hasOwn.call(obj, key)) keys.push(key);
6788 }
6789 return keys;
6790 };
6791
6792 },{"util/":29}],6:[function(require,module,exports){
6793
6794 },{}],7:[function(require,module,exports){
6795 /*!
6796 * The buffer module from node.js, for the browser.
6797 *
6798 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
6799 * @license MIT
6800 */
6801
6802 var base64 = require('base64-js')
6803 var ieee754 = require('ieee754')
6804 var isArray = require('is-array')
6805
6806 exports.Buffer = Buffer
6807 exports.SlowBuffer = SlowBuffer
6808 exports.INSPECT_MAX_BYTES = 50
6809 Buffer.poolSize = 8192 // not used by this implementation
6810
6811 var rootParent = {}
6812
6813 /**
6814 * If `Buffer.TYPED_ARRAY_SUPPORT`:
6815 * === true Use Uint8Array implementation (fastest)
6816 * === false Use Object implementation (most compatible, even IE6)
6817 *
6818 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
6819 * Opera 11.6+, iOS 4.2+.
6820 *
6821 * Due to various browser bugs, sometimes the Object implementation will be used even
6822 * when the browser supports typed arrays.
6823 *
6824 * Note:
6825 *
6826 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
6827 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
6828 *
6829 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
6830 * on objects.
6831 *
6832 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
6833 *
6834 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
6835 * incorrect length in some situations.
6836
6837 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
6838 * get the Object implementation, which is slower but behaves correctly.
6839 */
6840 Buffer.TYPED_ARRAY_SUPPORT = (function () {
6841 function Bar () {}
6842 try {
6843 var arr = new Uint8Array(1)
6844 arr.foo = function () { return 42 }
6845 arr.constructor = Bar
6846 return arr.foo() === 42 && // typed array instances can be augmented
6847 arr.constructor === Bar && // constructor can be set
6848 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
6849 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
6850 } catch (e) {
6851 return false
6852 }
6853 })()
6854
6855 function kMaxLength () {
6856 return Buffer.TYPED_ARRAY_SUPPORT
6857 ? 0x7fffffff
6858 : 0x3fffffff
6859 }
6860
6861 /**
6862 * Class: Buffer
6863 * =============
6864 *
6865 * The Buffer constructor returns instances of `Uint8Array` that are augmented
6866 * with function properties for all the node `Buffer` API functions. We use
6867 * `Uint8Array` so that square bracket notation works as expected -- it returns
6868 * a single octet.
6869 *
6870 * By augmenting the instances, we can avoid modifying the `Uint8Array`
6871 * prototype.
6872 */
6873 function Buffer (arg) {
6874 if (!(this instanceof Buffer)) {
6875 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
6876 if (arguments.length > 1) return new Buffer(arg, arguments[1])
6877 return new Buffer(arg)
6878 }
6879
6880 this.length = 0
6881 this.parent = undefined
6882
6883 // Common case.
6884 if (typeof arg === 'number') {
6885 return fromNumber(this, arg)
6886 }
6887
6888 // Slightly less common case.
6889 if (typeof arg === 'string') {
6890 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
6891 }
6892
6893 // Unusual.
6894 return fromObject(this, arg)
6895 }
6896
6897 function fromNumber (that, length) {
6898 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
6899 if (!Buffer.TYPED_ARRAY_SUPPORT) {
6900 for (var i = 0; i < length; i++) {
6901 that[i] = 0
6902 }
6903 }
6904 return that
6905 }
6906
6907 function fromString (that, string, encoding) {
6908 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
6909
6910 // Assumption: byteLength() return value is always < kMaxLength.
6911 var length = byteLength(string, encoding) | 0
6912 that = allocate(that, length)
6913
6914 that.write(string, encoding)
6915 return that
6916 }
6917
6918 function fromObject (that, object) {
6919 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
6920
6921 if (isArray(object)) return fromArray(that, object)
6922
6923 if (object == null) {
6924 throw new TypeError('must start with number, buffer, array or string')
6925 }
6926
6927 if (typeof ArrayBuffer !== 'undefined') {
6928 if (object.buffer instanceof ArrayBuffer) {
6929 return fromTypedArray(that, object)
6930 }
6931 if (object instanceof ArrayBuffer) {
6932 return fromArrayBuffer(that, object)
6933 }
6934 }
6935
6936 if (object.length) return fromArrayLike(that, object)
6937
6938 return fromJsonObject(that, object)
6939 }
6940
6941 function fromBuffer (that, buffer) {
6942 var length = checked(buffer.length) | 0
6943 that = allocate(that, length)
6944 buffer.copy(that, 0, 0, length)
6945 return that
6946 }
6947
6948 function fromArray (that, array) {
6949 var length = checked(array.length) | 0
6950 that = allocate(that, length)
6951 for (var i = 0; i < length; i += 1) {
6952 that[i] = array[i] & 255
6953 }
6954 return that
6955 }
6956
6957 // Duplicate of fromArray() to keep fromArray() monomorphic.
6958 function fromTypedArray (that, array) {
6959 var length = checked(array.length) | 0
6960 that = allocate(that, length)
6961 // Truncating the elements is probably not what people expect from typed
6962 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
6963 // of the old Buffer constructor.
6964 for (var i = 0; i < length; i += 1) {
6965 that[i] = array[i] & 255
6966 }
6967 return that
6968 }
6969
6970 function fromArrayBuffer (that, array) {
6971 if (Buffer.TYPED_ARRAY_SUPPORT) {
6972 // Return an augmented `Uint8Array` instance, for best performance
6973 array.byteLength
6974 that = Buffer._augment(new Uint8Array(array))
6975 } else {
6976 // Fallback: Return an object instance of the Buffer class
6977 that = fromTypedArray(that, new Uint8Array(array))
6978 }
6979 return that
6980 }
6981
6982 function fromArrayLike (that, array) {
6983 var length = checked(array.length) | 0
6984 that = allocate(that, length)
6985 for (var i = 0; i < length; i += 1) {
6986 that[i] = array[i] & 255
6987 }
6988 return that
6989 }
6990
6991 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
6992 // Returns a zero-length buffer for inputs that don't conform to the spec.
6993 function fromJsonObject (that, object) {
6994 var array
6995 var length = 0
6996
6997 if (object.type === 'Buffer' && isArray(object.data)) {
6998 array = object.data
6999 length = checked(array.length) | 0
7000 }
7001 that = allocate(that, length)
7002
7003 for (var i = 0; i < length; i += 1) {
7004 that[i] = array[i] & 255
7005 }
7006 return that
7007 }
7008
7009 function allocate (that, length) {
7010 if (Buffer.TYPED_ARRAY_SUPPORT) {
7011 // Return an augmented `Uint8Array` instance, for best performance
7012 that = Buffer._augment(new Uint8Array(length))
7013 } else {
7014 // Fallback: Return an object instance of the Buffer class
7015 that.length = length
7016 that._isBuffer = true
7017 }
7018
7019 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7020 if (fromPool) that.parent = rootParent
7021
7022 return that
7023 }
7024
7025 function checked (length) {
7026 // Note: cannot use `length < kMaxLength` here because that fails when
7027 // length is NaN (which is otherwise coerced to zero.)
7028 if (length >= kMaxLength()) {
7029 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7030 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7031 }
7032 return length | 0
7033 }
7034
7035 function SlowBuffer (subject, encoding) {
7036 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7037
7038 var buf = new Buffer(subject, encoding)
7039 delete buf.parent
7040 return buf
7041 }
7042
7043 Buffer.isBuffer = function isBuffer (b) {
7044 return !!(b != null && b._isBuffer)
7045 }
7046
7047 Buffer.compare = function compare (a, b) {
7048 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7049 throw new TypeError('Arguments must be Buffers')
7050 }
7051
7052 if (a === b) return 0
7053
7054 var x = a.length
7055 var y = b.length
7056
7057 var i = 0
7058 var len = Math.min(x, y)
7059 while (i < len) {
7060 if (a[i] !== b[i]) break
7061
7062 ++i
7063 }
7064
7065 if (i !== len) {
7066 x = a[i]
7067 y = b[i]
7068 }
7069
7070 if (x < y) return -1
7071 if (y < x) return 1
7072 return 0
7073 }
7074
7075 Buffer.isEncoding = function isEncoding (encoding) {
7076 switch (String(encoding).toLowerCase()) {
7077 case 'hex':
7078 case 'utf8':
7079 case 'utf-8':
7080 case 'ascii':
7081 case 'binary':
7082 case 'base64':
7083 case 'raw':
7084 case 'ucs2':
7085 case 'ucs-2':
7086 case 'utf16le':
7087 case 'utf-16le':
7088 return true
7089 default:
7090 return false
7091 }
7092 }
7093
7094 Buffer.concat = function concat (list, length) {
7095 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7096
7097 if (list.length === 0) {
7098 return new Buffer(0)
7099 }
7100
7101 var i
7102 if (length === undefined) {
7103 length = 0
7104 for (i = 0; i < list.length; i++) {
7105 length += list[i].length
7106 }
7107 }
7108
7109 var buf = new Buffer(length)
7110 var pos = 0
7111 for (i = 0; i < list.length; i++) {
7112 var item = list[i]
7113 item.copy(buf, pos)
7114 pos += item.length
7115 }
7116 return buf
7117 }
7118
7119 function byteLength (string, encoding) {
7120 if (typeof string !== 'string') string = '' + string
7121
7122 var len = string.length
7123 if (len === 0) return 0
7124
7125 // Use a for loop to avoid recursion
7126 var loweredCase = false
7127 for (;;) {
7128 switch (encoding) {
7129 case 'ascii':
7130 case 'binary':
7131 // Deprecated
7132 case 'raw':
7133 case 'raws':
7134 return len
7135 case 'utf8':
7136 case 'utf-8':
7137 return utf8ToBytes(string).length
7138 case 'ucs2':
7139 case 'ucs-2':
7140 case 'utf16le':
7141 case 'utf-16le':
7142 return len * 2
7143 case 'hex':
7144 return len >>> 1
7145 case 'base64':
7146 return base64ToBytes(string).length
7147 default:
7148 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7149 encoding = ('' + encoding).toLowerCase()
7150 loweredCase = true
7151 }
7152 }
7153 }
7154 Buffer.byteLength = byteLength
7155
7156 // pre-set for values that may exist in the future
7157 Buffer.prototype.length = undefined
7158 Buffer.prototype.parent = undefined
7159
7160 function slowToString (encoding, start, end) {
7161 var loweredCase = false
7162
7163 start = start | 0
7164 end = end === undefined || end === Infinity ? this.length : end | 0
7165
7166 if (!encoding) encoding = 'utf8'
7167 if (start < 0) start = 0
7168 if (end > this.length) end = this.length
7169 if (end <= start) return ''
7170
7171 while (true) {
7172 switch (encoding) {
7173 case 'hex':
7174 return hexSlice(this, start, end)
7175
7176 case 'utf8':
7177 case 'utf-8':
7178 return utf8Slice(this, start, end)
7179
7180 case 'ascii':
7181 return asciiSlice(this, start, end)
7182
7183 case 'binary':
7184 return binarySlice(this, start, end)
7185
7186 case 'base64':
7187 return base64Slice(this, start, end)
7188
7189 case 'ucs2':
7190 case 'ucs-2':
7191 case 'utf16le':
7192 case 'utf-16le':
7193 return utf16leSlice(this, start, end)
7194
7195 default:
7196 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7197 encoding = (encoding + '').toLowerCase()
7198 loweredCase = true
7199 }
7200 }
7201 }
7202
7203 Buffer.prototype.toString = function toString () {
7204 var length = this.length | 0
7205 if (length === 0) return ''
7206 if (arguments.length === 0) return utf8Slice(this, 0, length)
7207 return slowToString.apply(this, arguments)
7208 }
7209
7210 Buffer.prototype.equals = function equals (b) {
7211 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7212 if (this === b) return true
7213 return Buffer.compare(this, b) === 0
7214 }
7215
7216 Buffer.prototype.inspect = function inspect () {
7217 var str = ''
7218 var max = exports.INSPECT_MAX_BYTES
7219 if (this.length > 0) {
7220 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
7221 if (this.length > max) str += ' ... '
7222 }
7223 return '<Buffer ' + str + '>'
7224 }
7225
7226 Buffer.prototype.compare = function compare (b) {
7227 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7228 if (this === b) return 0
7229 return Buffer.compare(this, b)
7230 }
7231
7232 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
7233 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
7234 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
7235 byteOffset >>= 0
7236
7237 if (this.length === 0) return -1
7238 if (byteOffset >= this.length) return -1
7239
7240 // Negative offsets start from the end of the buffer
7241 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
7242
7243 if (typeof val === 'string') {
7244 if (val.length === 0) return -1 // special case: looking for empty string always fails
7245 return String.prototype.indexOf.call(this, val, byteOffset)
7246 }
7247 if (Buffer.isBuffer(val)) {
7248 return arrayIndexOf(this, val, byteOffset)
7249 }
7250 if (typeof val === 'number') {
7251 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
7252 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
7253 }
7254 return arrayIndexOf(this, [ val ], byteOffset)
7255 }
7256
7257 function arrayIndexOf (arr, val, byteOffset) {
7258 var foundIndex = -1
7259 for (var i = 0; byteOffset + i < arr.length; i++) {
7260 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
7261 if (foundIndex === -1) foundIndex = i
7262 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
7263 } else {
7264 foundIndex = -1
7265 }
7266 }
7267 return -1
7268 }
7269
7270 throw new TypeError('val must be string, number or Buffer')
7271 }
7272
7273 // `get` is deprecated
7274 Buffer.prototype.get = function get (offset) {
7275 console.log('.get() is deprecated. Access using array indexes instead.')
7276 return this.readUInt8(offset)
7277 }
7278
7279 // `set` is deprecated
7280 Buffer.prototype.set = function set (v, offset) {
7281 console.log('.set() is deprecated. Access using array indexes instead.')
7282 return this.writeUInt8(v, offset)
7283 }
7284
7285 function hexWrite (buf, string, offset, length) {
7286 offset = Number(offset) || 0
7287 var remaining = buf.length - offset
7288 if (!length) {
7289 length = remaining
7290 } else {
7291 length = Number(length)
7292 if (length > remaining) {
7293 length = remaining
7294 }
7295 }
7296
7297 // must be an even number of digits
7298 var strLen = string.length
7299 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
7300
7301 if (length > strLen / 2) {
7302 length = strLen / 2
7303 }
7304 for (var i = 0; i < length; i++) {
7305 var parsed = parseInt(string.substr(i * 2, 2), 16)
7306 if (isNaN(parsed)) throw new Error('Invalid hex string')
7307 buf[offset + i] = parsed
7308 }
7309 return i
7310 }
7311
7312 function utf8Write (buf, string, offset, length) {
7313 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
7314 }
7315
7316 function asciiWrite (buf, string, offset, length) {
7317 return blitBuffer(asciiToBytes(string), buf, offset, length)
7318 }
7319
7320 function binaryWrite (buf, string, offset, length) {
7321 return asciiWrite(buf, string, offset, length)
7322 }
7323
7324 function base64Write (buf, string, offset, length) {
7325 return blitBuffer(base64ToBytes(string), buf, offset, length)
7326 }
7327
7328 function ucs2Write (buf, string, offset, length) {
7329 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
7330 }
7331
7332 Buffer.prototype.write = function write (string, offset, length, encoding) {
7333 // Buffer#write(string)
7334 if (offset === undefined) {
7335 encoding = 'utf8'
7336 length = this.length
7337 offset = 0
7338 // Buffer#write(string, encoding)
7339 } else if (length === undefined && typeof offset === 'string') {
7340 encoding = offset
7341 length = this.length
7342 offset = 0
7343 // Buffer#write(string, offset[, length][, encoding])
7344 } else if (isFinite(offset)) {
7345 offset = offset | 0
7346 if (isFinite(length)) {
7347 length = length | 0
7348 if (encoding === undefined) encoding = 'utf8'
7349 } else {
7350 encoding = length
7351 length = undefined
7352 }
7353 // legacy write(string, encoding, offset, length) - remove in v0.13
7354 } else {
7355 var swap = encoding
7356 encoding = offset
7357 offset = length | 0
7358 length = swap
7359 }
7360
7361 var remaining = this.length - offset
7362 if (length === undefined || length > remaining) length = remaining
7363
7364 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
7365 throw new RangeError('attempt to write outside buffer bounds')
7366 }
7367
7368 if (!encoding) encoding = 'utf8'
7369
7370 var loweredCase = false
7371 for (;;) {
7372 switch (encoding) {
7373 case 'hex':
7374 return hexWrite(this, string, offset, length)
7375
7376 case 'utf8':
7377 case 'utf-8':
7378 return utf8Write(this, string, offset, length)
7379
7380 case 'ascii':
7381 return asciiWrite(this, string, offset, length)
7382
7383 case 'binary':
7384 return binaryWrite(this, string, offset, length)
7385
7386 case 'base64':
7387 // Warning: maxLength not taken into account in base64Write
7388 return base64Write(this, string, offset, length)
7389
7390 case 'ucs2':
7391 case 'ucs-2':
7392 case 'utf16le':
7393 case 'utf-16le':
7394 return ucs2Write(this, string, offset, length)
7395
7396 default:
7397 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7398 encoding = ('' + encoding).toLowerCase()
7399 loweredCase = true
7400 }
7401 }
7402 }
7403
7404 Buffer.prototype.toJSON = function toJSON () {
7405 return {
7406 type: 'Buffer',
7407 data: Array.prototype.slice.call(this._arr || this, 0)
7408 }
7409 }
7410
7411 function base64Slice (buf, start, end) {
7412 if (start === 0 && end === buf.length) {
7413 return base64.fromByteArray(buf)
7414 } else {
7415 return base64.fromByteArray(buf.slice(start, end))
7416 }
7417 }
7418
7419 function utf8Slice (buf, start, end) {
7420 end = Math.min(buf.length, end)
7421 var firstByte
7422 var secondByte
7423 var thirdByte
7424 var fourthByte
7425 var bytesPerSequence
7426 var tempCodePoint
7427 var codePoint
7428 var res = []
7429 var i = start
7430
7431 for (; i < end; i += bytesPerSequence) {
7432 firstByte = buf[i]
7433 codePoint = 0xFFFD
7434
7435 if (firstByte > 0xEF) {
7436 bytesPerSequence = 4
7437 } else if (firstByte > 0xDF) {
7438 bytesPerSequence = 3
7439 } else if (firstByte > 0xBF) {
7440 bytesPerSequence = 2
7441 } else {
7442 bytesPerSequence = 1
7443 }
7444
7445 if (i + bytesPerSequence <= end) {
7446 switch (bytesPerSequence) {
7447 case 1:
7448 if (firstByte < 0x80) {
7449 codePoint = firstByte
7450 }
7451 break
7452 case 2:
7453 secondByte = buf[i + 1]
7454 if ((secondByte & 0xC0) === 0x80) {
7455 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
7456 if (tempCodePoint > 0x7F) {
7457 codePoint = tempCodePoint
7458 }
7459 }
7460 break
7461 case 3:
7462 secondByte = buf[i + 1]
7463 thirdByte = buf[i + 2]
7464 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
7465 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
7466 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
7467 codePoint = tempCodePoint
7468 }
7469 }
7470 break
7471 case 4:
7472 secondByte = buf[i + 1]
7473 thirdByte = buf[i + 2]
7474 fourthByte = buf[i + 3]
7475 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
7476 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
7477 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
7478 codePoint = tempCodePoint
7479 }
7480 }
7481 }
7482 }
7483
7484 if (codePoint === 0xFFFD) {
7485 // we generated an invalid codePoint so make sure to only advance by 1 byte
7486 bytesPerSequence = 1
7487 } else if (codePoint > 0xFFFF) {
7488 // encode to utf16 (surrogate pair dance)
7489 codePoint -= 0x10000
7490 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
7491 codePoint = 0xDC00 | codePoint & 0x3FF
7492 }
7493
7494 res.push(codePoint)
7495 }
7496
7497 return String.fromCharCode.apply(String, res)
7498 }
7499
7500 function asciiSlice (buf, start, end) {
7501 var ret = ''
7502 end = Math.min(buf.length, end)
7503
7504 for (var i = start; i < end; i++) {
7505 ret += String.fromCharCode(buf[i] & 0x7F)
7506 }
7507 return ret
7508 }
7509
7510 function binarySlice (buf, start, end) {
7511 var ret = ''
7512 end = Math.min(buf.length, end)
7513
7514 for (var i = start; i < end; i++) {
7515 ret += String.fromCharCode(buf[i])
7516 }
7517 return ret
7518 }
7519
7520 function hexSlice (buf, start, end) {
7521 var len = buf.length
7522
7523 if (!start || start < 0) start = 0
7524 if (!end || end < 0 || end > len) end = len
7525
7526 var out = ''
7527 for (var i = start; i < end; i++) {
7528 out += toHex(buf[i])
7529 }
7530 return out
7531 }
7532
7533 function utf16leSlice (buf, start, end) {
7534 var bytes = buf.slice(start, end)
7535 var res = ''
7536 for (var i = 0; i < bytes.length; i += 2) {
7537 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
7538 }
7539 return res
7540 }
7541
7542 Buffer.prototype.slice = function slice (start, end) {
7543 var len = this.length
7544 start = ~~start
7545 end = end === undefined ? len : ~~end
7546
7547 if (start < 0) {
7548 start += len
7549 if (start < 0) start = 0
7550 } else if (start > len) {
7551 start = len
7552 }
7553
7554 if (end < 0) {
7555 end += len
7556 if (end < 0) end = 0
7557 } else if (end > len) {
7558 end = len
7559 }
7560
7561 if (end < start) end = start
7562
7563 var newBuf
7564 if (Buffer.TYPED_ARRAY_SUPPORT) {
7565 newBuf = Buffer._augment(this.subarray(start, end))
7566 } else {
7567 var sliceLen = end - start
7568 newBuf = new Buffer(sliceLen, undefined)
7569 for (var i = 0; i < sliceLen; i++) {
7570 newBuf[i] = this[i + start]
7571 }
7572 }
7573
7574 if (newBuf.length) newBuf.parent = this.parent || this
7575
7576 return newBuf
7577 }
7578
7579 /*
7580 * Need to make sure that buffer isn't trying to write out of bounds.
7581 */
7582 function checkOffset (offset, ext, length) {
7583 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
7584 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
7585 }
7586
7587 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
7588 offset = offset | 0
7589 byteLength = byteLength | 0
7590 if (!noAssert) checkOffset(offset, byteLength, this.length)
7591
7592 var val = this[offset]
7593 var mul = 1
7594 var i = 0
7595 while (++i < byteLength && (mul *= 0x100)) {
7596 val += this[offset + i] * mul
7597 }
7598
7599 return val
7600 }
7601
7602 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
7603 offset = offset | 0
7604 byteLength = byteLength | 0
7605 if (!noAssert) {
7606 checkOffset(offset, byteLength, this.length)
7607 }
7608
7609 var val = this[offset + --byteLength]
7610 var mul = 1
7611 while (byteLength > 0 && (mul *= 0x100)) {
7612 val += this[offset + --byteLength] * mul
7613 }
7614
7615 return val
7616 }
7617
7618 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
7619 if (!noAssert) checkOffset(offset, 1, this.length)
7620 return this[offset]
7621 }
7622
7623 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
7624 if (!noAssert) checkOffset(offset, 2, this.length)
7625 return this[offset] | (this[offset + 1] << 8)
7626 }
7627
7628 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
7629 if (!noAssert) checkOffset(offset, 2, this.length)
7630 return (this[offset] << 8) | this[offset + 1]
7631 }
7632
7633 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
7634 if (!noAssert) checkOffset(offset, 4, this.length)
7635
7636 return ((this[offset]) |
7637 (this[offset + 1] << 8) |
7638 (this[offset + 2] << 16)) +
7639 (this[offset + 3] * 0x1000000)
7640 }
7641
7642 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
7643 if (!noAssert) checkOffset(offset, 4, this.length)
7644
7645 return (this[offset] * 0x1000000) +
7646 ((this[offset + 1] << 16) |
7647 (this[offset + 2] << 8) |
7648 this[offset + 3])
7649 }
7650
7651 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
7652 offset = offset | 0
7653 byteLength = byteLength | 0
7654 if (!noAssert) checkOffset(offset, byteLength, this.length)
7655
7656 var val = this[offset]
7657 var mul = 1
7658 var i = 0
7659 while (++i < byteLength && (mul *= 0x100)) {
7660 val += this[offset + i] * mul
7661 }
7662 mul *= 0x80
7663
7664 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
7665
7666 return val
7667 }
7668
7669 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
7670 offset = offset | 0
7671 byteLength = byteLength | 0
7672 if (!noAssert) checkOffset(offset, byteLength, this.length)
7673
7674 var i = byteLength
7675 var mul = 1
7676 var val = this[offset + --i]
7677 while (i > 0 && (mul *= 0x100)) {
7678 val += this[offset + --i] * mul
7679 }
7680 mul *= 0x80
7681
7682 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
7683
7684 return val
7685 }
7686
7687 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
7688 if (!noAssert) checkOffset(offset, 1, this.length)
7689 if (!(this[offset] & 0x80)) return (this[offset])
7690 return ((0xff - this[offset] + 1) * -1)
7691 }
7692
7693 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
7694 if (!noAssert) checkOffset(offset, 2, this.length)
7695 var val = this[offset] | (this[offset + 1] << 8)
7696 return (val & 0x8000) ? val | 0xFFFF0000 : val
7697 }
7698
7699 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
7700 if (!noAssert) checkOffset(offset, 2, this.length)
7701 var val = this[offset + 1] | (this[offset] << 8)
7702 return (val & 0x8000) ? val | 0xFFFF0000 : val
7703 }
7704
7705 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
7706 if (!noAssert) checkOffset(offset, 4, this.length)
7707
7708 return (this[offset]) |
7709 (this[offset + 1] << 8) |
7710 (this[offset + 2] << 16) |
7711 (this[offset + 3] << 24)
7712 }
7713
7714 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
7715 if (!noAssert) checkOffset(offset, 4, this.length)
7716
7717 return (this[offset] << 24) |
7718 (this[offset + 1] << 16) |
7719 (this[offset + 2] << 8) |
7720 (this[offset + 3])
7721 }
7722
7723 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
7724 if (!noAssert) checkOffset(offset, 4, this.length)
7725 return ieee754.read(this, offset, true, 23, 4)
7726 }
7727
7728 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
7729 if (!noAssert) checkOffset(offset, 4, this.length)
7730 return ieee754.read(this, offset, false, 23, 4)
7731 }
7732
7733 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
7734 if (!noAssert) checkOffset(offset, 8, this.length)
7735 return ieee754.read(this, offset, true, 52, 8)
7736 }
7737
7738 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
7739 if (!noAssert) checkOffset(offset, 8, this.length)
7740 return ieee754.read(this, offset, false, 52, 8)
7741 }
7742
7743 function checkInt (buf, value, offset, ext, max, min) {
7744 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
7745 if (value > max || value < min) throw new RangeError('value is out of bounds')
7746 if (offset + ext > buf.length) throw new RangeError('index out of range')
7747 }
7748
7749 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
7750 value = +value
7751 offset = offset | 0
7752 byteLength = byteLength | 0
7753 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
7754
7755 var mul = 1
7756 var i = 0
7757 this[offset] = value & 0xFF
7758 while (++i < byteLength && (mul *= 0x100)) {
7759 this[offset + i] = (value / mul) & 0xFF
7760 }
7761
7762 return offset + byteLength
7763 }
7764
7765 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
7766 value = +value
7767 offset = offset | 0
7768 byteLength = byteLength | 0
7769 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
7770
7771 var i = byteLength - 1
7772 var mul = 1
7773 this[offset + i] = value & 0xFF
7774 while (--i >= 0 && (mul *= 0x100)) {
7775 this[offset + i] = (value / mul) & 0xFF
7776 }
7777
7778 return offset + byteLength
7779 }
7780
7781 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
7782 value = +value
7783 offset = offset | 0
7784 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
7785 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
7786 this[offset] = value
7787 return offset + 1
7788 }
7789
7790 function objectWriteUInt16 (buf, value, offset, littleEndian) {
7791 if (value < 0) value = 0xffff + value + 1
7792 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
7793 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
7794 (littleEndian ? i : 1 - i) * 8
7795 }
7796 }
7797
7798 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
7799 value = +value
7800 offset = offset | 0
7801 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
7802 if (Buffer.TYPED_ARRAY_SUPPORT) {
7803 this[offset] = value
7804 this[offset + 1] = (value >>> 8)
7805 } else {
7806 objectWriteUInt16(this, value, offset, true)
7807 }
7808 return offset + 2
7809 }
7810
7811 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
7812 value = +value
7813 offset = offset | 0
7814 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
7815 if (Buffer.TYPED_ARRAY_SUPPORT) {
7816 this[offset] = (value >>> 8)
7817 this[offset + 1] = value
7818 } else {
7819 objectWriteUInt16(this, value, offset, false)
7820 }
7821 return offset + 2
7822 }
7823
7824 function objectWriteUInt32 (buf, value, offset, littleEndian) {
7825 if (value < 0) value = 0xffffffff + value + 1
7826 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
7827 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
7828 }
7829 }
7830
7831 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
7832 value = +value
7833 offset = offset | 0
7834 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
7835 if (Buffer.TYPED_ARRAY_SUPPORT) {
7836 this[offset + 3] = (value >>> 24)
7837 this[offset + 2] = (value >>> 16)
7838 this[offset + 1] = (value >>> 8)
7839 this[offset] = value
7840 } else {
7841 objectWriteUInt32(this, value, offset, true)
7842 }
7843 return offset + 4
7844 }
7845
7846 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
7847 value = +value
7848 offset = offset | 0
7849 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
7850 if (Buffer.TYPED_ARRAY_SUPPORT) {
7851 this[offset] = (value >>> 24)
7852 this[offset + 1] = (value >>> 16)
7853 this[offset + 2] = (value >>> 8)
7854 this[offset + 3] = value
7855 } else {
7856 objectWriteUInt32(this, value, offset, false)
7857 }
7858 return offset + 4
7859 }
7860
7861 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
7862 value = +value
7863 offset = offset | 0
7864 if (!noAssert) {
7865 var limit = Math.pow(2, 8 * byteLength - 1)
7866
7867 checkInt(this, value, offset, byteLength, limit - 1, -limit)
7868 }
7869
7870 var i = 0
7871 var mul = 1
7872 var sub = value < 0 ? 1 : 0
7873 this[offset] = value & 0xFF
7874 while (++i < byteLength && (mul *= 0x100)) {
7875 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
7876 }
7877
7878 return offset + byteLength
7879 }
7880
7881 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
7882 value = +value
7883 offset = offset | 0
7884 if (!noAssert) {
7885 var limit = Math.pow(2, 8 * byteLength - 1)
7886
7887 checkInt(this, value, offset, byteLength, limit - 1, -limit)
7888 }
7889
7890 var i = byteLength - 1
7891 var mul = 1
7892 var sub = value < 0 ? 1 : 0
7893 this[offset + i] = value & 0xFF
7894 while (--i >= 0 && (mul *= 0x100)) {
7895 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
7896 }
7897
7898 return offset + byteLength
7899 }
7900
7901 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
7902 value = +value
7903 offset = offset | 0
7904 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
7905 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
7906 if (value < 0) value = 0xff + value + 1
7907 this[offset] = value
7908 return offset + 1
7909 }
7910
7911 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
7912 value = +value
7913 offset = offset | 0
7914 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
7915 if (Buffer.TYPED_ARRAY_SUPPORT) {
7916 this[offset] = value
7917 this[offset + 1] = (value >>> 8)
7918 } else {
7919 objectWriteUInt16(this, value, offset, true)
7920 }
7921 return offset + 2
7922 }
7923
7924 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
7925 value = +value
7926 offset = offset | 0
7927 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
7928 if (Buffer.TYPED_ARRAY_SUPPORT) {
7929 this[offset] = (value >>> 8)
7930 this[offset + 1] = value
7931 } else {
7932 objectWriteUInt16(this, value, offset, false)
7933 }
7934 return offset + 2
7935 }
7936
7937 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
7938 value = +value
7939 offset = offset | 0
7940 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
7941 if (Buffer.TYPED_ARRAY_SUPPORT) {
7942 this[offset] = value
7943 this[offset + 1] = (value >>> 8)
7944 this[offset + 2] = (value >>> 16)
7945 this[offset + 3] = (value >>> 24)
7946 } else {
7947 objectWriteUInt32(this, value, offset, true)
7948 }
7949 return offset + 4
7950 }
7951
7952 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
7953 value = +value
7954 offset = offset | 0
7955 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
7956 if (value < 0) value = 0xffffffff + value + 1
7957 if (Buffer.TYPED_ARRAY_SUPPORT) {
7958 this[offset] = (value >>> 24)
7959 this[offset + 1] = (value >>> 16)
7960 this[offset + 2] = (value >>> 8)
7961 this[offset + 3] = value
7962 } else {
7963 objectWriteUInt32(this, value, offset, false)
7964 }
7965 return offset + 4
7966 }
7967
7968 function checkIEEE754 (buf, value, offset, ext, max, min) {
7969 if (value > max || value < min) throw new RangeError('value is out of bounds')
7970 if (offset + ext > buf.length) throw new RangeError('index out of range')
7971 if (offset < 0) throw new RangeError('index out of range')
7972 }
7973
7974 function writeFloat (buf, value, offset, littleEndian, noAssert) {
7975 if (!noAssert) {
7976 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
7977 }
7978 ieee754.write(buf, value, offset, littleEndian, 23, 4)
7979 return offset + 4
7980 }
7981
7982 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
7983 return writeFloat(this, value, offset, true, noAssert)
7984 }
7985
7986 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
7987 return writeFloat(this, value, offset, false, noAssert)
7988 }
7989
7990 function writeDouble (buf, value, offset, littleEndian, noAssert) {
7991 if (!noAssert) {
7992 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
7993 }
7994 ieee754.write(buf, value, offset, littleEndian, 52, 8)
7995 return offset + 8
7996 }
7997
7998 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
7999 return writeDouble(this, value, offset, true, noAssert)
8000 }
8001
8002 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8003 return writeDouble(this, value, offset, false, noAssert)
8004 }
8005
8006 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8007 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8008 if (!start) start = 0
8009 if (!end && end !== 0) end = this.length
8010 if (targetStart >= target.length) targetStart = target.length
8011 if (!targetStart) targetStart = 0
8012 if (end > 0 && end < start) end = start
8013
8014 // Copy 0 bytes; we're done
8015 if (end === start) return 0
8016 if (target.length === 0 || this.length === 0) return 0
8017
8018 // Fatal error conditions
8019 if (targetStart < 0) {
8020 throw new RangeError('targetStart out of bounds')
8021 }
8022 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8023 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8024
8025 // Are we oob?
8026 if (end > this.length) end = this.length
8027 if (target.length - targetStart < end - start) {
8028 end = target.length - targetStart + start
8029 }
8030
8031 var len = end - start
8032 var i
8033
8034 if (this === target && start < targetStart && targetStart < end) {
8035 // descending copy from end
8036 for (i = len - 1; i >= 0; i--) {
8037 target[i + targetStart] = this[i + start]
8038 }
8039 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8040 // ascending copy from start
8041 for (i = 0; i < len; i++) {
8042 target[i + targetStart] = this[i + start]
8043 }
8044 } else {
8045 target._set(this.subarray(start, start + len), targetStart)
8046 }
8047
8048 return len
8049 }
8050
8051 // fill(value, start=0, end=buffer.length)
8052 Buffer.prototype.fill = function fill (value, start, end) {
8053 if (!value) value = 0
8054 if (!start) start = 0
8055 if (!end) end = this.length
8056
8057 if (end < start) throw new RangeError('end < start')
8058
8059 // Fill 0 bytes; we're done
8060 if (end === start) return
8061 if (this.length === 0) return
8062
8063 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8064 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8065
8066 var i
8067 if (typeof value === 'number') {
8068 for (i = start; i < end; i++) {
8069 this[i] = value
8070 }
8071 } else {
8072 var bytes = utf8ToBytes(value.toString())
8073 var len = bytes.length
8074 for (i = start; i < end; i++) {
8075 this[i] = bytes[i % len]
8076 }
8077 }
8078
8079 return this
8080 }
8081
8082 /**
8083 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8084 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8085 */
8086 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8087 if (typeof Uint8Array !== 'undefined') {
8088 if (Buffer.TYPED_ARRAY_SUPPORT) {
8089 return (new Buffer(this)).buffer
8090 } else {
8091 var buf = new Uint8Array(this.length)
8092 for (var i = 0, len = buf.length; i < len; i += 1) {
8093 buf[i] = this[i]
8094 }
8095 return buf.buffer
8096 }
8097 } else {
8098 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8099 }
8100 }
8101
8102 // HELPER FUNCTIONS
8103 // ================
8104
8105 var BP = Buffer.prototype
8106
8107 /**
8108 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8109 */
8110 Buffer._augment = function _augment (arr) {
8111 arr.constructor = Buffer
8112 arr._isBuffer = true
8113
8114 // save reference to original Uint8Array set method before overwriting
8115 arr._set = arr.set
8116
8117 // deprecated
8118 arr.get = BP.get
8119 arr.set = BP.set
8120
8121 arr.write = BP.write
8122 arr.toString = BP.toString
8123 arr.toLocaleString = BP.toString
8124 arr.toJSON = BP.toJSON
8125 arr.equals = BP.equals
8126 arr.compare = BP.compare
8127 arr.indexOf = BP.indexOf
8128 arr.copy = BP.copy
8129 arr.slice = BP.slice
8130 arr.readUIntLE = BP.readUIntLE
8131 arr.readUIntBE = BP.readUIntBE
8132 arr.readUInt8 = BP.readUInt8
8133 arr.readUInt16LE = BP.readUInt16LE
8134 arr.readUInt16BE = BP.readUInt16BE
8135 arr.readUInt32LE = BP.readUInt32LE
8136 arr.readUInt32BE = BP.readUInt32BE
8137 arr.readIntLE = BP.readIntLE
8138 arr.readIntBE = BP.readIntBE
8139 arr.readInt8 = BP.readInt8
8140 arr.readInt16LE = BP.readInt16LE
8141 arr.readInt16BE = BP.readInt16BE
8142 arr.readInt32LE = BP.readInt32LE
8143 arr.readInt32BE = BP.readInt32BE
8144 arr.readFloatLE = BP.readFloatLE
8145 arr.readFloatBE = BP.readFloatBE
8146 arr.readDoubleLE = BP.readDoubleLE
8147 arr.readDoubleBE = BP.readDoubleBE
8148 arr.writeUInt8 = BP.writeUInt8
8149 arr.writeUIntLE = BP.writeUIntLE
8150 arr.writeUIntBE = BP.writeUIntBE
8151 arr.writeUInt16LE = BP.writeUInt16LE
8152 arr.writeUInt16BE = BP.writeUInt16BE
8153 arr.writeUInt32LE = BP.writeUInt32LE
8154 arr.writeUInt32BE = BP.writeUInt32BE
8155 arr.writeIntLE = BP.writeIntLE
8156 arr.writeIntBE = BP.writeIntBE
8157 arr.writeInt8 = BP.writeInt8
8158 arr.writeInt16LE = BP.writeInt16LE
8159 arr.writeInt16BE = BP.writeInt16BE
8160 arr.writeInt32LE = BP.writeInt32LE
8161 arr.writeInt32BE = BP.writeInt32BE
8162 arr.writeFloatLE = BP.writeFloatLE
8163 arr.writeFloatBE = BP.writeFloatBE
8164 arr.writeDoubleLE = BP.writeDoubleLE
8165 arr.writeDoubleBE = BP.writeDoubleBE
8166 arr.fill = BP.fill
8167 arr.inspect = BP.inspect
8168 arr.toArrayBuffer = BP.toArrayBuffer
8169
8170 return arr
8171 }
8172
8173 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8174
8175 function base64clean (str) {
8176 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8177 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8178 // Node converts strings with length < 2 to ''
8179 if (str.length < 2) return ''
8180 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8181 while (str.length % 4 !== 0) {
8182 str = str + '='
8183 }
8184 return str
8185 }
8186
8187 function stringtrim (str) {
8188 if (str.trim) return str.trim()
8189 return str.replace(/^\s+|\s+$/g, '')
8190 }
8191
8192 function toHex (n) {
8193 if (n < 16) return '0' + n.toString(16)
8194 return n.toString(16)
8195 }
8196
8197 function utf8ToBytes (string, units) {
8198 units = units || Infinity
8199 var codePoint
8200 var length = string.length
8201 var leadSurrogate = null
8202 var bytes = []
8203
8204 for (var i = 0; i < length; i++) {
8205 codePoint = string.charCodeAt(i)
8206
8207 // is surrogate component
8208 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8209 // last char was a lead
8210 if (!leadSurrogate) {
8211 // no lead yet
8212 if (codePoint > 0xDBFF) {
8213 // unexpected trail
8214 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8215 continue
8216
8217 } else if (i + 1 === length) {
8218 // unpaired lead
8219 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8220 continue
8221 }
8222
8223 // valid lead
8224 leadSurrogate = codePoint
8225
8226 continue
8227 }
8228
8229 // 2 leads in a row
8230 if (codePoint < 0xDC00) {
8231 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8232 leadSurrogate = codePoint
8233 continue
8234 }
8235
8236 // valid surrogate pair
8237 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
8238
8239 } else if (leadSurrogate) {
8240 // valid bmp char, but last char was a lead
8241 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8242 }
8243
8244 leadSurrogate = null
8245
8246 // encode utf8
8247 if (codePoint < 0x80) {
8248 if ((units -= 1) < 0) break
8249 bytes.push(codePoint)
8250 } else if (codePoint < 0x800) {
8251 if ((units -= 2) < 0) break
8252 bytes.push(
8253 codePoint >> 0x6 | 0xC0,
8254 codePoint & 0x3F | 0x80
8255 )
8256 } else if (codePoint < 0x10000) {
8257 if ((units -= 3) < 0) break
8258 bytes.push(
8259 codePoint >> 0xC | 0xE0,
8260 codePoint >> 0x6 & 0x3F | 0x80,
8261 codePoint & 0x3F | 0x80
8262 )
8263 } else if (codePoint < 0x110000) {
8264 if ((units -= 4) < 0) break
8265 bytes.push(
8266 codePoint >> 0x12 | 0xF0,
8267 codePoint >> 0xC & 0x3F | 0x80,
8268 codePoint >> 0x6 & 0x3F | 0x80,
8269 codePoint & 0x3F | 0x80
8270 )
8271 } else {
8272 throw new Error('Invalid code point')
8273 }
8274 }
8275
8276 return bytes
8277 }
8278
8279 function asciiToBytes (str) {
8280 var byteArray = []
8281 for (var i = 0; i < str.length; i++) {
8282 // Node's code seems to be doing this and not & 0x7F..
8283 byteArray.push(str.charCodeAt(i) & 0xFF)
8284 }
8285 return byteArray
8286 }
8287
8288 function utf16leToBytes (str, units) {
8289 var c, hi, lo
8290 var byteArray = []
8291 for (var i = 0; i < str.length; i++) {
8292 if ((units -= 2) < 0) break
8293
8294 c = str.charCodeAt(i)
8295 hi = c >> 8
8296 lo = c % 256
8297 byteArray.push(lo)
8298 byteArray.push(hi)
8299 }
8300
8301 return byteArray
8302 }
8303
8304 function base64ToBytes (str) {
8305 return base64.toByteArray(base64clean(str))
8306 }
8307
8308 function blitBuffer (src, dst, offset, length) {
8309 for (var i = 0; i < length; i++) {
8310 if ((i + offset >= dst.length) || (i >= src.length)) break
8311 dst[i + offset] = src[i]
8312 }
8313 return i
8314 }
8315
8316 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
8317 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
8318
8319 ;(function (exports) {
8320 'use strict';
8321
8322 var Arr = (typeof Uint8Array !== 'undefined')
8323 ? Uint8Array
8324 : Array
8325
8326 var PLUS = '+'.charCodeAt(0)
8327 var SLASH = '/'.charCodeAt(0)
8328 var NUMBER = '0'.charCodeAt(0)
8329 var LOWER = 'a'.charCodeAt(0)
8330 var UPPER = 'A'.charCodeAt(0)
8331 var PLUS_URL_SAFE = '-'.charCodeAt(0)
8332 var SLASH_URL_SAFE = '_'.charCodeAt(0)
8333
8334 function decode (elt) {
8335 var code = elt.charCodeAt(0)
8336 if (code === PLUS ||
8337 code === PLUS_URL_SAFE)
8338 return 62 // '+'
8339 if (code === SLASH ||
8340 code === SLASH_URL_SAFE)
8341 return 63 // '/'
8342 if (code < NUMBER)
8343 return -1 //no match
8344 if (code < NUMBER + 10)
8345 return code - NUMBER + 26 + 26
8346 if (code < UPPER + 26)
8347 return code - UPPER
8348 if (code < LOWER + 26)
8349 return code - LOWER + 26
8350 }
8351
8352 function b64ToByteArray (b64) {
8353 var i, j, l, tmp, placeHolders, arr
8354
8355 if (b64.length % 4 > 0) {
8356 throw new Error('Invalid string. Length must be a multiple of 4')
8357 }
8358
8359 // the number of equal signs (place holders)
8360 // if there are two placeholders, than the two characters before it
8361 // represent one byte
8362 // if there is only one, then the three characters before it represent 2 bytes
8363 // this is just a cheap hack to not do indexOf twice
8364 var len = b64.length
8365 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
8366
8367 // base64 is 4/3 + up to two characters of the original data
8368 arr = new Arr(b64.length * 3 / 4 - placeHolders)
8369
8370 // if there are placeholders, only get up to the last complete 4 chars
8371 l = placeHolders > 0 ? b64.length - 4 : b64.length
8372
8373 var L = 0
8374
8375 function push (v) {
8376 arr[L++] = v
8377 }
8378
8379 for (i = 0, j = 0; i < l; i += 4, j += 3) {
8380 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
8381 push((tmp & 0xFF0000) >> 16)
8382 push((tmp & 0xFF00) >> 8)
8383 push(tmp & 0xFF)
8384 }
8385
8386 if (placeHolders === 2) {
8387 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
8388 push(tmp & 0xFF)
8389 } else if (placeHolders === 1) {
8390 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
8391 push((tmp >> 8) & 0xFF)
8392 push(tmp & 0xFF)
8393 }
8394
8395 return arr
8396 }
8397
8398 function uint8ToBase64 (uint8) {
8399 var i,
8400 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
8401 output = "",
8402 temp, length
8403
8404 function encode (num) {
8405 return lookup.charAt(num)
8406 }
8407
8408 function tripletToBase64 (num) {
8409 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
8410 }
8411
8412 // go through the array every three bytes, we'll deal with trailing stuff later
8413 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
8414 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
8415 output += tripletToBase64(temp)
8416 }
8417
8418 // pad the end with zeros, but make sure to not forget the extra bytes
8419 switch (extraBytes) {
8420 case 1:
8421 temp = uint8[uint8.length - 1]
8422 output += encode(temp >> 2)
8423 output += encode((temp << 4) & 0x3F)
8424 output += '=='
8425 break
8426 case 2:
8427 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
8428 output += encode(temp >> 10)
8429 output += encode((temp >> 4) & 0x3F)
8430 output += encode((temp << 2) & 0x3F)
8431 output += '='
8432 break
8433 }
8434
8435 return output
8436 }
8437
8438 exports.toByteArray = b64ToByteArray
8439 exports.fromByteArray = uint8ToBase64
8440 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
8441
8442 },{}],9:[function(require,module,exports){
8443 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
8444 var e, m
8445 var eLen = nBytes * 8 - mLen - 1
8446 var eMax = (1 << eLen) - 1
8447 var eBias = eMax >> 1
8448 var nBits = -7
8449 var i = isLE ? (nBytes - 1) : 0
8450 var d = isLE ? -1 : 1
8451 var s = buffer[offset + i]
8452
8453 i += d
8454
8455 e = s & ((1 << (-nBits)) - 1)
8456 s >>= (-nBits)
8457 nBits += eLen
8458 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8459
8460 m = e & ((1 << (-nBits)) - 1)
8461 e >>= (-nBits)
8462 nBits += mLen
8463 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8464
8465 if (e === 0) {
8466 e = 1 - eBias
8467 } else if (e === eMax) {
8468 return m ? NaN : ((s ? -1 : 1) * Infinity)
8469 } else {
8470 m = m + Math.pow(2, mLen)
8471 e = e - eBias
8472 }
8473 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8474 }
8475
8476 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
8477 var e, m, c
8478 var eLen = nBytes * 8 - mLen - 1
8479 var eMax = (1 << eLen) - 1
8480 var eBias = eMax >> 1
8481 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
8482 var i = isLE ? 0 : (nBytes - 1)
8483 var d = isLE ? 1 : -1
8484 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8485
8486 value = Math.abs(value)
8487
8488 if (isNaN(value) || value === Infinity) {
8489 m = isNaN(value) ? 1 : 0
8490 e = eMax
8491 } else {
8492 e = Math.floor(Math.log(value) / Math.LN2)
8493 if (value * (c = Math.pow(2, -e)) < 1) {
8494 e--
8495 c *= 2
8496 }
8497 if (e + eBias >= 1) {
8498 value += rt / c
8499 } else {
8500 value += rt * Math.pow(2, 1 - eBias)
8501 }
8502 if (value * c >= 2) {
8503 e++
8504 c /= 2
8505 }
8506
8507 if (e + eBias >= eMax) {
8508 m = 0
8509 e = eMax
8510 } else if (e + eBias >= 1) {
8511 m = (value * c - 1) * Math.pow(2, mLen)
8512 e = e + eBias
8513 } else {
8514 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
8515 e = 0
8516 }
8517 }
8518
8519 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
8520
8521 e = (e << mLen) | m
8522 eLen += mLen
8523 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
8524
8525 buffer[offset + i - d] |= s * 128
8526 }
8527
8528 },{}],10:[function(require,module,exports){
8529
8530 /**
8531 * isArray
8532 */
8533
8534 var isArray = Array.isArray;
8535
8536 /**
8537 * toString
8538 */
8539
8540 var str = Object.prototype.toString;
8541
8542 /**
8543 * Whether or not the given `val`
8544 * is an array.
8545 *
8546 * example:
8547 *
8548 * isArray([]);
8549 * // > true
8550 * isArray(arguments);
8551 * // > false
8552 * isArray('');
8553 * // > false
8554 *
8555 * @param {mixed} val
8556 * @return {bool}
8557 */
8558
8559 module.exports = isArray || function (val) {
8560 return !! val && '[object Array]' == str.call(val);
8561 };
8562
8563 },{}],11:[function(require,module,exports){
8564 // Copyright Joyent, Inc. and other Node contributors.
8565 //
8566 // Permission is hereby granted, free of charge, to any person obtaining a
8567 // copy of this software and associated documentation files (the
8568 // "Software"), to deal in the Software without restriction, including
8569 // without limitation the rights to use, copy, modify, merge, publish,
8570 // distribute, sublicense, and/or sell copies of the Software, and to permit
8571 // persons to whom the Software is furnished to do so, subject to the
8572 // following conditions:
8573 //
8574 // The above copyright notice and this permission notice shall be included
8575 // in all copies or substantial portions of the Software.
8576 //
8577 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
8578 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
8579 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
8580 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
8581 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
8582 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
8583 // USE OR OTHER DEALINGS IN THE SOFTWARE.
8584
8585 function EventEmitter() {
8586 this._events = this._events || {};
8587 this._maxListeners = this._maxListeners || undefined;
8588 }
8589 module.exports = EventEmitter;
8590
8591 // Backwards-compat with node 0.10.x
8592 EventEmitter.EventEmitter = EventEmitter;
8593
8594 EventEmitter.prototype._events = undefined;
8595 EventEmitter.prototype._maxListeners = undefined;
8596
8597 // By default EventEmitters will print a warning if more than 10 listeners are
8598 // added to it. This is a useful default which helps finding memory leaks.
8599 EventEmitter.defaultMaxListeners = 10;
8600
8601 // Obviously not all Emitters should be limited to 10. This function allows
8602 // that to be increased. Set to zero for unlimited.
8603 EventEmitter.prototype.setMaxListeners = function(n) {
8604 if (!isNumber(n) || n < 0 || isNaN(n))
8605 throw TypeError('n must be a positive number');
8606 this._maxListeners = n;
8607 return this;
8608 };
8609
8610 EventEmitter.prototype.emit = function(type) {
8611 var er, handler, len, args, i, listeners;
8612
8613 if (!this._events)
8614 this._events = {};
8615
8616 // If there is no 'error' event listener then throw.
8617 if (type === 'error') {
8618 if (!this._events.error ||
8619 (isObject(this._events.error) && !this._events.error.length)) {
8620 er = arguments[1];
8621 if (er instanceof Error) {
8622 throw er; // Unhandled 'error' event
8623 }
8624 throw TypeError('Uncaught, unspecified "error" event.');
8625 }
8626 }
8627
8628 handler = this._events[type];
8629
8630 if (isUndefined(handler))
8631 return false;
8632
8633 if (isFunction(handler)) {
8634 switch (arguments.length) {
8635 // fast cases
8636 case 1:
8637 handler.call(this);
8638 break;
8639 case 2:
8640 handler.call(this, arguments[1]);
8641 break;
8642 case 3:
8643 handler.call(this, arguments[1], arguments[2]);
8644 break;
8645 // slower
8646 default:
8647 len = arguments.length;
8648 args = new Array(len - 1);
8649 for (i = 1; i < len; i++)
8650 args[i - 1] = arguments[i];
8651 handler.apply(this, args);
8652 }
8653 } else if (isObject(handler)) {
8654 len = arguments.length;
8655 args = new Array(len - 1);
8656 for (i = 1; i < len; i++)
8657 args[i - 1] = arguments[i];
8658
8659 listeners = handler.slice();
8660 len = listeners.length;
8661 for (i = 0; i < len; i++)
8662 listeners[i].apply(this, args);
8663 }
8664
8665 return true;
8666 };
8667
8668 EventEmitter.prototype.addListener = function(type, listener) {
8669 var m;
8670
8671 if (!isFunction(listener))
8672 throw TypeError('listener must be a function');
8673
8674 if (!this._events)
8675 this._events = {};
8676
8677 // To avoid recursion in the case that type === "newListener"! Before
8678 // adding it to the listeners, first emit "newListener".
8679 if (this._events.newListener)
8680 this.emit('newListener', type,
8681 isFunction(listener.listener) ?
8682 listener.listener : listener);
8683
8684 if (!this._events[type])
8685 // Optimize the case of one listener. Don't need the extra array object.
8686 this._events[type] = listener;
8687 else if (isObject(this._events[type]))
8688 // If we've already got an array, just append.
8689 this._events[type].push(listener);
8690 else
8691 // Adding the second element, need to change to array.
8692 this._events[type] = [this._events[type], listener];
8693
8694 // Check for listener leak
8695 if (isObject(this._events[type]) && !this._events[type].warned) {
8696 var m;
8697 if (!isUndefined(this._maxListeners)) {
8698 m = this._maxListeners;
8699 } else {
8700 m = EventEmitter.defaultMaxListeners;
8701 }
8702
8703 if (m && m > 0 && this._events[type].length > m) {
8704 this._events[type].warned = true;
8705 console.error('(node) warning: possible EventEmitter memory ' +
8706 'leak detected. %d listeners added. ' +
8707 'Use emitter.setMaxListeners() to increase limit.',
8708 this._events[type].length);
8709 if (typeof console.trace === 'function') {
8710 // not supported in IE 10
8711 console.trace();
8712 }
8713 }
8714 }
8715
8716 return this;
8717 };
8718
8719 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8720
8721 EventEmitter.prototype.once = function(type, listener) {
8722 if (!isFunction(listener))
8723 throw TypeError('listener must be a function');
8724
8725 var fired = false;
8726
8727 function g() {
8728 this.removeListener(type, g);
8729
8730 if (!fired) {
8731 fired = true;
8732 listener.apply(this, arguments);
8733 }
8734 }
8735
8736 g.listener = listener;
8737 this.on(type, g);
8738
8739 return this;
8740 };
8741
8742 // emits a 'removeListener' event iff the listener was removed
8743 EventEmitter.prototype.removeListener = function(type, listener) {
8744 var list, position, length, i;
8745
8746 if (!isFunction(listener))
8747 throw TypeError('listener must be a function');
8748
8749 if (!this._events || !this._events[type])
8750 return this;
8751
8752 list = this._events[type];
8753 length = list.length;
8754 position = -1;
8755
8756 if (list === listener ||
8757 (isFunction(list.listener) && list.listener === listener)) {
8758 delete this._events[type];
8759 if (this._events.removeListener)
8760 this.emit('removeListener', type, listener);
8761
8762 } else if (isObject(list)) {
8763 for (i = length; i-- > 0;) {
8764 if (list[i] === listener ||
8765 (list[i].listener && list[i].listener === listener)) {
8766 position = i;
8767 break;
8768 }
8769 }
8770
8771 if (position < 0)
8772 return this;
8773
8774 if (list.length === 1) {
8775 list.length = 0;
8776 delete this._events[type];
8777 } else {
8778 list.splice(position, 1);
8779 }
8780
8781 if (this._events.removeListener)
8782 this.emit('removeListener', type, listener);
8783 }
8784
8785 return this;
8786 };
8787
8788 EventEmitter.prototype.removeAllListeners = function(type) {
8789 var key, listeners;
8790
8791 if (!this._events)
8792 return this;
8793
8794 // not listening for removeListener, no need to emit
8795 if (!this._events.removeListener) {
8796 if (arguments.length === 0)
8797 this._events = {};
8798 else if (this._events[type])
8799 delete this._events[type];
8800 return this;
8801 }
8802
8803 // emit removeListener for all listeners on all events
8804 if (arguments.length === 0) {
8805 for (key in this._events) {
8806 if (key === 'removeListener') continue;
8807 this.removeAllListeners(key);
8808 }
8809 this.removeAllListeners('removeListener');
8810 this._events = {};
8811 return this;
8812 }
8813
8814 listeners = this._events[type];
8815
8816 if (isFunction(listeners)) {
8817 this.removeListener(type, listeners);
8818 } else {
8819 // LIFO order
8820 while (listeners.length)
8821 this.removeListener(type, listeners[listeners.length - 1]);
8822 }
8823 delete this._events[type];
8824
8825 return this;
8826 };
8827
8828 EventEmitter.prototype.listeners = function(type) {
8829 var ret;
8830 if (!this._events || !this._events[type])
8831 ret = [];
8832 else if (isFunction(this._events[type]))
8833 ret = [this._events[type]];
8834 else
8835 ret = this._events[type].slice();
8836 return ret;
8837 };
8838
8839 EventEmitter.listenerCount = function(emitter, type) {
8840 var ret;
8841 if (!emitter._events || !emitter._events[type])
8842 ret = 0;
8843 else if (isFunction(emitter._events[type]))
8844 ret = 1;
8845 else
8846 ret = emitter._events[type].length;
8847 return ret;
8848 };
8849
8850 function isFunction(arg) {
8851 return typeof arg === 'function';
8852 }
8853
8854 function isNumber(arg) {
8855 return typeof arg === 'number';
8856 }
8857
8858 function isObject(arg) {
8859 return typeof arg === 'object' && arg !== null;
8860 }
8861
8862 function isUndefined(arg) {
8863 return arg === void 0;
8864 }
8865
8866 },{}],12:[function(require,module,exports){
8867 if (typeof Object.create === 'function') {
8868 // implementation from standard node.js 'util' module
8869 module.exports = function inherits(ctor, superCtor) {
8870 ctor.super_ = superCtor
8871 ctor.prototype = Object.create(superCtor.prototype, {
8872 constructor: {
8873 value: ctor,
8874 enumerable: false,
8875 writable: true,
8876 configurable: true
8877 }
8878 });
8879 };
8880 } else {
8881 // old school shim for old browsers
8882 module.exports = function inherits(ctor, superCtor) {
8883 ctor.super_ = superCtor
8884 var TempCtor = function () {}
8885 TempCtor.prototype = superCtor.prototype
8886 ctor.prototype = new TempCtor()
8887 ctor.prototype.constructor = ctor
8888 }
8889 }
8890
8891 },{}],13:[function(require,module,exports){
8892 module.exports = Array.isArray || function (arr) {
8893 return Object.prototype.toString.call(arr) == '[object Array]';
8894 };
8895
8896 },{}],14:[function(require,module,exports){
8897 // shim for using process in browser
8898
8899 var process = module.exports = {};
8900 var queue = [];
8901 var draining = false;
8902 var currentQueue;
8903 var queueIndex = -1;
8904
8905 function cleanUpNextTick() {
8906 draining = false;
8907 if (currentQueue.length) {
8908 queue = currentQueue.concat(queue);
8909 } else {
8910 queueIndex = -1;
8911 }
8912 if (queue.length) {
8913 drainQueue();
8914 }
8915 }
8916
8917 function drainQueue() {
8918 if (draining) {
8919 return;
8920 }
8921 var timeout = setTimeout(cleanUpNextTick);
8922 draining = true;
8923
8924 var len = queue.length;
8925 while(len) {
8926 currentQueue = queue;
8927 queue = [];
8928 while (++queueIndex < len) {
8929 currentQueue[queueIndex].run();
8930 }
8931 queueIndex = -1;
8932 len = queue.length;
8933 }
8934 currentQueue = null;
8935 draining = false;
8936 clearTimeout(timeout);
8937 }
8938
8939 process.nextTick = function (fun) {
8940 var args = new Array(arguments.length - 1);
8941 if (arguments.length > 1) {
8942 for (var i = 1; i < arguments.length; i++) {
8943 args[i - 1] = arguments[i];
8944 }
8945 }
8946 queue.push(new Item(fun, args));
8947 if (queue.length === 1 && !draining) {
8948 setTimeout(drainQueue, 0);
8949 }
8950 };
8951
8952 // v8 likes predictible objects
8953 function Item(fun, array) {
8954 this.fun = fun;
8955 this.array = array;
8956 }
8957 Item.prototype.run = function () {
8958 this.fun.apply(null, this.array);
8959 };
8960 process.title = 'browser';
8961 process.browser = true;
8962 process.env = {};
8963 process.argv = [];
8964 process.version = ''; // empty string to avoid regexp issues
8965 process.versions = {};
8966
8967 function noop() {}
8968
8969 process.on = noop;
8970 process.addListener = noop;
8971 process.once = noop;
8972 process.off = noop;
8973 process.removeListener = noop;
8974 process.removeAllListeners = noop;
8975 process.emit = noop;
8976
8977 process.binding = function (name) {
8978 throw new Error('process.binding is not supported');
8979 };
8980
8981 // TODO(shtylman)
8982 process.cwd = function () { return '/' };
8983 process.chdir = function (dir) {
8984 throw new Error('process.chdir is not supported');
8985 };
8986 process.umask = function() { return 0; };
8987
8988 },{}],15:[function(require,module,exports){
8989 module.exports = require("./lib/_stream_duplex.js")
8990
8991 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
8992 (function (process){
8993 // Copyright Joyent, Inc. and other Node contributors.
8994 //
8995 // Permission is hereby granted, free of charge, to any person obtaining a
8996 // copy of this software and associated documentation files (the
8997 // "Software"), to deal in the Software without restriction, including
8998 // without limitation the rights to use, copy, modify, merge, publish,
8999 // distribute, sublicense, and/or sell copies of the Software, and to permit
9000 // persons to whom the Software is furnished to do so, subject to the
9001 // following conditions:
9002 //
9003 // The above copyright notice and this permission notice shall be included
9004 // in all copies or substantial portions of the Software.
9005 //
9006 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9007 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9008 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9009 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9010 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9011 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9012 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9013
9014 // a duplex stream is just a stream that is both readable and writable.
9015 // Since JS doesn't have multiple prototypal inheritance, this class
9016 // prototypally inherits from Readable, and then parasitically from
9017 // Writable.
9018
9019 module.exports = Duplex;
9020
9021 /*<replacement>*/
9022 var objectKeys = Object.keys || function (obj) {
9023 var keys = [];
9024 for (var key in obj) keys.push(key);
9025 return keys;
9026 }
9027 /*</replacement>*/
9028
9029
9030 /*<replacement>*/
9031 var util = require('core-util-is');
9032 util.inherits = require('inherits');
9033 /*</replacement>*/
9034
9035 var Readable = require('./_stream_readable');
9036 var Writable = require('./_stream_writable');
9037
9038 util.inherits(Duplex, Readable);
9039
9040 forEach(objectKeys(Writable.prototype), function(method) {
9041 if (!Duplex.prototype[method])
9042 Duplex.prototype[method] = Writable.prototype[method];
9043 });
9044
9045 function Duplex(options) {
9046 if (!(this instanceof Duplex))
9047 return new Duplex(options);
9048
9049 Readable.call(this, options);
9050 Writable.call(this, options);
9051
9052 if (options && options.readable === false)
9053 this.readable = false;
9054
9055 if (options && options.writable === false)
9056 this.writable = false;
9057
9058 this.allowHalfOpen = true;
9059 if (options && options.allowHalfOpen === false)
9060 this.allowHalfOpen = false;
9061
9062 this.once('end', onend);
9063 }
9064
9065 // the no-half-open enforcer
9066 function onend() {
9067 // if we allow half-open state, or if the writable side ended,
9068 // then we're ok.
9069 if (this.allowHalfOpen || this._writableState.ended)
9070 return;
9071
9072 // no more data can be written.
9073 // But allow more writes to happen in this tick.
9074 process.nextTick(this.end.bind(this));
9075 }
9076
9077 function forEach (xs, f) {
9078 for (var i = 0, l = xs.length; i < l; i++) {
9079 f(xs[i], i);
9080 }
9081 }
9082
9083 }).call(this,require('_process'))
9084 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9085 // Copyright Joyent, Inc. and other Node contributors.
9086 //
9087 // Permission is hereby granted, free of charge, to any person obtaining a
9088 // copy of this software and associated documentation files (the
9089 // "Software"), to deal in the Software without restriction, including
9090 // without limitation the rights to use, copy, modify, merge, publish,
9091 // distribute, sublicense, and/or sell copies of the Software, and to permit
9092 // persons to whom the Software is furnished to do so, subject to the
9093 // following conditions:
9094 //
9095 // The above copyright notice and this permission notice shall be included
9096 // in all copies or substantial portions of the Software.
9097 //
9098 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9099 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9100 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9101 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9102 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9103 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9104 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9105
9106 // a passthrough stream.
9107 // basically just the most minimal sort of Transform stream.
9108 // Every written chunk gets output as-is.
9109
9110 module.exports = PassThrough;
9111
9112 var Transform = require('./_stream_transform');
9113
9114 /*<replacement>*/
9115 var util = require('core-util-is');
9116 util.inherits = require('inherits');
9117 /*</replacement>*/
9118
9119 util.inherits(PassThrough, Transform);
9120
9121 function PassThrough(options) {
9122 if (!(this instanceof PassThrough))
9123 return new PassThrough(options);
9124
9125 Transform.call(this, options);
9126 }
9127
9128 PassThrough.prototype._transform = function(chunk, encoding, cb) {
9129 cb(null, chunk);
9130 };
9131
9132 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9133 (function (process){
9134 // Copyright Joyent, Inc. and other Node contributors.
9135 //
9136 // Permission is hereby granted, free of charge, to any person obtaining a
9137 // copy of this software and associated documentation files (the
9138 // "Software"), to deal in the Software without restriction, including
9139 // without limitation the rights to use, copy, modify, merge, publish,
9140 // distribute, sublicense, and/or sell copies of the Software, and to permit
9141 // persons to whom the Software is furnished to do so, subject to the
9142 // following conditions:
9143 //
9144 // The above copyright notice and this permission notice shall be included
9145 // in all copies or substantial portions of the Software.
9146 //
9147 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9148 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9149 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9150 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9151 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9152 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9153 // USE OR OTHER DEALINGS IN THE SOFTWARE.
9154
9155 module.exports = Readable;
9156
9157 /*<replacement>*/
9158 var isArray = require('isarray');
9159 /*</replacement>*/
9160
9161
9162 /*<replacement>*/
9163 var Buffer = require('buffer').Buffer;
9164 /*</replacement>*/
9165
9166 Readable.ReadableState = ReadableState;
9167
9168 var EE = require('events').EventEmitter;
9169
9170 /*<replacement>*/
9171 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9172 return emitter.listeners(type).length;
9173 };
9174 /*</replacement>*/
9175
9176 var Stream = require('stream');
9177
9178 /*<replacement>*/
9179 var util = require('core-util-is');
9180 util.inherits = require('inherits');
9181 /*</replacement>*/
9182
9183 var StringDecoder;
9184
9185
9186 /*<replacement>*/
9187 var debug = require('util');
9188 if (debug && debug.debuglog) {
9189 debug = debug.debuglog('stream');
9190 } else {
9191 debug = function () {};
9192 }
9193 /*</replacement>*/
9194
9195
9196 util.inherits(Readable, Stream);
9197
9198 function ReadableState(options, stream) {
9199 var Duplex = require('./_stream_duplex');
9200
9201 options = options || {};
9202
9203 // the point at which it stops calling _read() to fill the buffer
9204 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9205 var hwm = options.highWaterMark;
9206 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9207 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9208
9209 // cast to ints.
9210 this.highWaterMark = ~~this.highWaterMark;
9211
9212 this.buffer = [];
9213 this.length = 0;
9214 this.pipes = null;
9215 this.pipesCount = 0;
9216 this.flowing = null;
9217 this.ended = false;
9218 this.endEmitted = false;
9219 this.reading = false;
9220
9221 // a flag to be able to tell if the onwrite cb is called immediately,
9222 // or on a later tick. We set this to true at first, because any
9223 // actions that shouldn't happen until "later" should generally also
9224 // not happen before the first write call.
9225 this.sync = true;
9226
9227 // whenever we return null, then we set a flag to say
9228 // that we're awaiting a 'readable' event emission.
9229 this.needReadable = false;
9230 this.emittedReadable = false;
9231 this.readableListening = false;
9232
9233
9234 // object stream flag. Used to make read(n) ignore n and to
9235 // make all the buffer merging and length checks go away
9236 this.objectMode = !!options.objectMode;
9237
9238 if (stream instanceof Duplex)
9239 this.objectMode = this.objectMode || !!options.readableObjectMode;
9240
9241 // Crypto is kind of old and crusty. Historically, its default string
9242 // encoding is 'binary' so we have to make this configurable.
9243 // Everything else in the universe uses 'utf8', though.
9244 this.defaultEncoding = options.defaultEncoding || 'utf8';
9245
9246 // when piping, we only care about 'readable' events that happen
9247 // after read()ing all the bytes and not getting any pushback.
9248 this.ranOut = false;
9249
9250 // the number of writers that are awaiting a drain event in .pipe()s
9251 this.awaitDrain = 0;
9252
9253 // if true, a maybeReadMore has been scheduled
9254 this.readingMore = false;
9255
9256 this.decoder = null;
9257 this.encoding = null;
9258 if (options.encoding) {
9259 if (!StringDecoder)
9260 StringDecoder = require('string_decoder/').StringDecoder;
9261 this.decoder = new StringDecoder(options.encoding);
9262 this.encoding = options.encoding;
9263 }
9264 }
9265
9266 function Readable(options) {
9267 var Duplex = require('./_stream_duplex');
9268
9269 if (!(this instanceof Readable))
9270 return new Readable(options);
9271
9272 this._readableState = new ReadableState(options, this);
9273
9274 // legacy
9275 this.readable = true;
9276
9277 Stream.call(this);
9278 }
9279
9280 // Manually shove something into the read() buffer.
9281 // This returns true if the highWaterMark has not been hit yet,
9282 // similar to how Writable.write() returns true if you should
9283 // write() some more.
9284 Readable.prototype.push = function(chunk, encoding) {
9285 var state = this._readableState;
9286
9287 if (util.isString(chunk) && !state.objectMode) {
9288 encoding = encoding || state.defaultEncoding;
9289 if (encoding !== state.encoding) {
9290 chunk = new Buffer(chunk, encoding);
9291 encoding = '';
9292 }
9293 }
9294
9295 return readableAddChunk(this, state, chunk, encoding, false);
9296 };
9297
9298 // Unshift should *always* be something directly out of read()
9299 Readable.prototype.unshift = function(chunk) {
9300 var state = this._readableState;
9301 return readableAddChunk(this, state, chunk, '', true);
9302 };
9303
9304 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
9305 var er = chunkInvalid(state, chunk);
9306 if (er) {
9307 stream.emit('error', er);
9308 } else if (util.isNullOrUndefined(chunk)) {
9309 state.reading = false;
9310 if (!state.ended)
9311 onEofChunk(stream, state);
9312 } else if (state.objectMode || chunk && chunk.length > 0) {
9313 if (state.ended && !addToFront) {
9314 var e = new Error('stream.push() after EOF');
9315 stream.emit('error', e);
9316 } else if (state.endEmitted && addToFront) {
9317 var e = new Error('stream.unshift() after end event');
9318 stream.emit('error', e);
9319 } else {
9320 if (state.decoder && !addToFront && !encoding)
9321 chunk = state.decoder.write(chunk);
9322
9323 if (!addToFront)
9324 state.reading = false;
9325
9326 // if we want the data now, just emit it.
9327 if (state.flowing && state.length === 0 && !state.sync) {
9328 stream.emit('data', chunk);
9329 stream.read(0);
9330 } else {
9331 // update the buffer info.
9332 state.length += state.objectMode ? 1 : chunk.length;
9333 if (addToFront)
9334 state.buffer.unshift(chunk);
9335 else
9336 state.buffer.push(chunk);
9337
9338 if (state.needReadable)
9339 emitReadable(stream);
9340 }
9341
9342 maybeReadMore(stream, state);
9343 }
9344 } else if (!addToFront) {
9345 state.reading = false;
9346 }
9347
9348 return needMoreData(state);
9349 }
9350
9351
9352
9353 // if it's past the high water mark, we can push in some more.
9354 // Also, if we have no data yet, we can stand some
9355 // more bytes. This is to work around cases where hwm=0,
9356 // such as the repl. Also, if the push() triggered a
9357 // readable event, and the user called read(largeNumber) such that
9358 // needReadable was set, then we ought to push more, so that another
9359 // 'readable' event will be triggered.
9360 function needMoreData(state) {
9361 return !state.ended &&
9362 (state.needReadable ||
9363 state.length < state.highWaterMark ||
9364 state.length === 0);
9365 }
9366
9367 // backwards compatibility.
9368 Readable.prototype.setEncoding = function(enc) {
9369 if (!StringDecoder)
9370 StringDecoder = require('string_decoder/').StringDecoder;
9371 this._readableState.decoder = new StringDecoder(enc);
9372 this._readableState.encoding = enc;
9373 return this;
9374 };
9375
9376 // Don't raise the hwm > 128MB
9377 var MAX_HWM = 0x800000;
9378 function roundUpToNextPowerOf2(n) {
9379 if (n >= MAX_HWM) {
9380 n = MAX_HWM;
9381 } else {
9382 // Get the next highest power of 2
9383 n--;
9384 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
9385 n++;
9386 }
9387 return n;
9388 }
9389
9390 function howMuchToRead(n, state) {
9391 if (state.length === 0 && state.ended)
9392 return 0;
9393
9394 if (state.objectMode)
9395 return n === 0 ? 0 : 1;
9396
9397 if (isNaN(n) || util.isNull(n)) {
9398 // only flow one buffer at a time
9399 if (state.flowing && state.buffer.length)
9400 return state.buffer[0].length;
9401 else
9402 return state.length;
9403 }
9404
9405 if (n <= 0)
9406 return 0;
9407
9408 // If we're asking for more than the target buffer level,
9409 // then raise the water mark. Bump up to the next highest
9410 // power of 2, to prevent increasing it excessively in tiny
9411 // amounts.
9412 if (n > state.highWaterMark)
9413 state.highWaterMark = roundUpToNextPowerOf2(n);
9414
9415 // don't have that much. return null, unless we've ended.
9416 if (n > state.length) {
9417 if (!state.ended) {
9418 state.needReadable = true;
9419 return 0;
9420 } else
9421 return state.length;
9422 }
9423
9424 return n;
9425 }
9426
9427 // you can override either this method, or the async _read(n) below.
9428 Readable.prototype.read = function(n) {
9429 debug('read', n);
9430 var state = this._readableState;
9431 var nOrig = n;
9432
9433 if (!util.isNumber(n) || n > 0)
9434 state.emittedReadable = false;
9435
9436 // if we're doing read(0) to trigger a readable event, but we
9437 // already have a bunch of data in the buffer, then just trigger
9438 // the 'readable' event and move on.
9439 if (n === 0 &&
9440 state.needReadable &&
9441 (state.length >= state.highWaterMark || state.ended)) {
9442 debug('read: emitReadable', state.length, state.ended);
9443 if (state.length === 0 && state.ended)
9444 endReadable(this);
9445 else
9446 emitReadable(this);
9447 return null;
9448 }
9449
9450 n = howMuchToRead(n, state);
9451
9452 // if we've ended, and we're now clear, then finish it up.
9453 if (n === 0 && state.ended) {
9454 if (state.length === 0)
9455 endReadable(this);
9456 return null;
9457 }
9458
9459 // All the actual chunk generation logic needs to be
9460 // *below* the call to _read. The reason is that in certain
9461 // synthetic stream cases, such as passthrough streams, _read
9462 // may be a completely synchronous operation which may change
9463 // the state of the read buffer, providing enough data when
9464 // before there was *not* enough.
9465 //
9466 // So, the steps are:
9467 // 1. Figure out what the state of things will be after we do
9468 // a read from the buffer.
9469 //
9470 // 2. If that resulting state will trigger a _read, then call _read.
9471 // Note that this may be asynchronous, or synchronous. Yes, it is
9472 // deeply ugly to write APIs this way, but that still doesn't mean
9473 // that the Readable class should behave improperly, as streams are
9474 // designed to be sync/async agnostic.
9475 // Take note if the _read call is sync or async (ie, if the read call
9476 // has returned yet), so that we know whether or not it's safe to emit
9477 // 'readable' etc.
9478 //
9479 // 3. Actually pull the requested chunks out of the buffer and return.
9480
9481 // if we need a readable event, then we need to do some reading.
9482 var doRead = state.needReadable;
9483 debug('need readable', doRead);
9484
9485 // if we currently have less than the highWaterMark, then also read some
9486 if (state.length === 0 || state.length - n < state.highWaterMark) {
9487 doRead = true;
9488 debug('length less than watermark', doRead);
9489 }
9490
9491 // however, if we've ended, then there's no point, and if we're already
9492 // reading, then it's unnecessary.
9493 if (state.ended || state.reading) {
9494 doRead = false;
9495 debug('reading or ended', doRead);
9496 }
9497
9498 if (doRead) {
9499 debug('do read');
9500 state.reading = true;
9501 state.sync = true;
9502 // if the length is currently zero, then we *need* a readable event.
9503 if (state.length === 0)
9504 state.needReadable = true;
9505 // call internal read method
9506 this._read(state.highWaterMark);
9507 state.sync = false;
9508 }
9509
9510 // If _read pushed data synchronously, then `reading` will be false,
9511 // and we need to re-evaluate how much data we can return to the user.
9512 if (doRead && !state.reading)
9513 n = howMuchToRead(nOrig, state);
9514
9515 var ret;
9516 if (n > 0)
9517 ret = fromList(n, state);
9518 else
9519 ret = null;
9520
9521 if (util.isNull(ret)) {
9522 state.needReadable = true;
9523 n = 0;
9524 }
9525
9526 state.length -= n;
9527
9528 // If we have nothing in the buffer, then we want to know
9529 // as soon as we *do* get something into the buffer.
9530 if (state.length === 0 && !state.ended)
9531 state.needReadable = true;
9532
9533 // If we tried to read() past the EOF, then emit end on the next tick.
9534 if (nOrig !== n && state.ended && state.length === 0)
9535 endReadable(this);
9536
9537 if (!util.isNull(ret))
9538 this.emit('data', ret);
9539
9540 return ret;
9541 };
9542
9543 function chunkInvalid(state, chunk) {
9544 var er = null;
9545 if (!util.isBuffer(chunk) &&
9546 !util.isString(chunk) &&
9547 !util.isNullOrUndefined(chunk) &&
9548 !state.objectMode) {
9549 er = new TypeError('Invalid non-string/buffer chunk');
9550 }
9551 return er;
9552 }
9553
9554
9555 function onEofChunk(stream, state) {
9556 if (state.decoder && !state.ended) {
9557 var chunk = state.decoder.end();
9558 if (chunk && chunk.length) {
9559 state.buffer.push(chunk);
9560 state.length += state.objectMode ? 1 : chunk.length;
9561 }
9562 }
9563 state.ended = true;
9564
9565 // emit 'readable' now to make sure it gets picked up.
9566 emitReadable(stream);
9567 }
9568
9569 // Don't emit readable right away in sync mode, because this can trigger
9570 // another read() call => stack overflow. This way, it might trigger
9571 // a nextTick recursion warning, but that's not so bad.
9572 function emitReadable(stream) {
9573 var state = stream._readableState;
9574 state.needReadable = false;
9575 if (!state.emittedReadable) {
9576 debug('emitReadable', state.flowing);
9577 state.emittedReadable = true;
9578 if (state.sync)
9579 process.nextTick(function() {
9580 emitReadable_(stream);
9581 });
9582 else
9583 emitReadable_(stream);
9584 }
9585 }
9586
9587 function emitReadable_(stream) {
9588 debug('emit readable');
9589 stream.emit('readable');
9590 flow(stream);
9591 }
9592
9593
9594 // at this point, the user has presumably seen the 'readable' event,
9595 // and called read() to consume some data. that may have triggered
9596 // in turn another _read(n) call, in which case reading = true if
9597 // it's in progress.
9598 // However, if we're not ended, or reading, and the length < hwm,
9599 // then go ahead and try to read some more preemptively.
9600 function maybeReadMore(stream, state) {
9601 if (!state.readingMore) {
9602 state.readingMore = true;
9603 process.nextTick(function() {
9604 maybeReadMore_(stream, state);
9605 });
9606 }
9607 }
9608
9609 function maybeReadMore_(stream, state) {
9610 var len = state.length;
9611 while (!state.reading && !state.flowing && !state.ended &&
9612 state.length < state.highWaterMark) {
9613 debug('maybeReadMore read 0');
9614 stream.read(0);
9615 if (len === state.length)
9616 // didn't get any data, stop spinning.
9617 break;
9618 else
9619 len = state.length;
9620 }
9621 state.readingMore = false;
9622 }
9623
9624 // abstract method. to be overridden in specific implementation classes.
9625 // call cb(er, data) where data is <= n in length.
9626 // for virtual (non-string, non-buffer) streams, "length" is somewhat
9627 // arbitrary, and perhaps not very meaningful.
9628 Readable.prototype._read = function(n) {
9629 this.emit('error', new Error('not implemented'));
9630 };
9631
9632 Readable.prototype.pipe = function(dest, pipeOpts) {
9633 var src = this;
9634 var state = this._readableState;
9635
9636 switch (state.pipesCount) {
9637 case 0:
9638 state.pipes = dest;
9639 break;
9640 case 1:
9641 state.pipes = [state.pipes, dest];
9642 break;
9643 default:
9644 state.pipes.push(dest);
9645 break;
9646 }
9647 state.pipesCount += 1;
9648 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
9649
9650 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
9651 dest !== process.stdout &&
9652 dest !== process.stderr;
9653
9654 var endFn = doEnd ? onend : cleanup;
9655 if (state.endEmitted)
9656 process.nextTick(endFn);
9657 else
9658 src.once('end', endFn);
9659
9660 dest.on('unpipe', onunpipe);
9661 function onunpipe(readable) {
9662 debug('onunpipe');
9663 if (readable === src) {
9664 cleanup();
9665 }
9666 }
9667
9668 function onend() {
9669 debug('onend');
9670 dest.end();
9671 }
9672
9673 // when the dest drains, it reduces the awaitDrain counter
9674 // on the source. This would be more elegant with a .once()
9675 // handler in flow(), but adding and removing repeatedly is
9676 // too slow.
9677 var ondrain = pipeOnDrain(src);
9678 dest.on('drain', ondrain);
9679
9680 function cleanup() {
9681 debug('cleanup');
9682 // cleanup event handlers once the pipe is broken
9683 dest.removeListener('close', onclose);
9684 dest.removeListener('finish', onfinish);
9685 dest.removeListener('drain', ondrain);
9686 dest.removeListener('error', onerror);
9687 dest.removeListener('unpipe', onunpipe);
9688 src.removeListener('end', onend);
9689 src.removeListener('end', cleanup);
9690 src.removeListener('data', ondata);
9691
9692 // if the reader is waiting for a drain event from this
9693 // specific writer, then it would cause it to never start
9694 // flowing again.
9695 // So, if this is awaiting a drain, then we just call it now.
9696 // If we don't know, then assume that we are waiting for one.
9697 if (state.awaitDrain &&
9698 (!dest._writableState || dest._writableState.needDrain))
9699 ondrain();
9700 }
9701
9702 src.on('data', ondata);
9703 function ondata(chunk) {
9704 debug('ondata');
9705 var ret = dest.write(chunk);
9706 if (false === ret) {
9707 debug('false write response, pause',
9708 src._readableState.awaitDrain);
9709 src._readableState.awaitDrain++;
9710 src.pause();
9711 }
9712 }
9713
9714 // if the dest has an error, then stop piping into it.
9715 // however, don't suppress the throwing behavior for this.
9716 function onerror(er) {
9717 debug('onerror', er);
9718 unpipe();
9719 dest.removeListener('error', onerror);
9720 if (EE.listenerCount(dest, 'error') === 0)
9721 dest.emit('error', er);
9722 }
9723 // This is a brutally ugly hack to make sure that our error handler
9724 // is attached before any userland ones. NEVER DO THIS.
9725 if (!dest._events || !dest._events.error)
9726 dest.on('error', onerror);
9727 else if (isArray(dest._events.error))
9728 dest._events.error.unshift(onerror);
9729 else
9730 dest._events.error = [onerror, dest._events.error];
9731
9732
9733
9734 // Both close and finish should trigger unpipe, but only once.
9735 function onclose() {
9736 dest.removeListener('finish', onfinish);
9737 unpipe();
9738 }
9739 dest.once('close', onclose);
9740 function onfinish() {
9741 debug('onfinish');
9742 dest.removeListener('close', onclose);
9743 unpipe();
9744 }
9745 dest.once('finish', onfinish);
9746
9747 function unpipe() {
9748 debug('unpipe');
9749 src.unpipe(dest);
9750 }
9751
9752 // tell the dest that it's being piped to
9753 dest.emit('pipe', src);
9754
9755 // start the flow if it hasn't been started already.
9756 if (!state.flowing) {
9757 debug('pipe resume');
9758 src.resume();
9759 }
9760
9761 return dest;
9762 };
9763
9764 function pipeOnDrain(src) {
9765 return function() {
9766 var state = src._readableState;
9767 debug('pipeOnDrain', state.awaitDrain);
9768 if (state.awaitDrain)
9769 state.awaitDrain--;
9770 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
9771 state.flowing = true;
9772 flow(src);
9773 }
9774 };
9775 }
9776
9777
9778 Readable.prototype.unpipe = function(dest) {
9779 var state = this._readableState;
9780
9781 // if we're not piping anywhere, then do nothing.
9782 if (state.pipesCount === 0)
9783 return this;
9784
9785 // just one destination. most common case.
9786 if (state.pipesCount === 1) {
9787 // passed in one, but it's not the right one.
9788 if (dest && dest !== state.pipes)
9789 return this;
9790
9791 if (!dest)
9792 dest = state.pipes;
9793
9794 // got a match.
9795 state.pipes = null;
9796 state.pipesCount = 0;
9797 state.flowing = false;
9798 if (dest)
9799 dest.emit('unpipe', this);
9800 return this;
9801 }
9802
9803 // slow case. multiple pipe destinations.
9804
9805 if (!dest) {
9806 // remove all.
9807 var dests = state.pipes;
9808 var len = state.pipesCount;
9809 state.pipes = null;
9810 state.pipesCount = 0;
9811 state.flowing = false;
9812
9813 for (var i = 0; i < len; i++)
9814 dests[i].emit('unpipe', this);
9815 return this;
9816 }
9817
9818 // try to find the right one.
9819 var i = indexOf(state.pipes, dest);
9820 if (i === -1)
9821 return this;
9822
9823 state.pipes.splice(i, 1);
9824 state.pipesCount -= 1;
9825 if (state.pipesCount === 1)
9826 state.pipes = state.pipes[0];
9827
9828 dest.emit('unpipe', this);
9829
9830 return this;
9831 };
9832
9833 // set up data events if they are asked for
9834 // Ensure readable listeners eventually get something
9835 Readable.prototype.on = function(ev, fn) {
9836 var res = Stream.prototype.on.call(this, ev, fn);
9837
9838 // If listening to data, and it has not explicitly been paused,
9839 // then call resume to start the flow of data on the next tick.
9840 if (ev === 'data' && false !== this._readableState.flowing) {
9841 this.resume();
9842 }
9843
9844 if (ev === 'readable' && this.readable) {
9845 var state = this._readableState;
9846 if (!state.readableListening) {
9847 state.readableListening = true;
9848 state.emittedReadable = false;
9849 state.needReadable = true;
9850 if (!state.reading) {
9851 var self = this;
9852 process.nextTick(function() {
9853 debug('readable nexttick read 0');
9854 self.read(0);
9855 });
9856 } else if (state.length) {
9857 emitReadable(this, state);
9858 }
9859 }
9860 }
9861
9862 return res;
9863 };
9864 Readable.prototype.addListener = Readable.prototype.on;
9865
9866 // pause() and resume() are remnants of the legacy readable stream API
9867 // If the user uses them, then switch into old mode.
9868 Readable.prototype.resume = function() {
9869 var state = this._readableState;
9870 if (!state.flowing) {
9871 debug('resume');
9872 state.flowing = true;
9873 if (!state.reading) {
9874 debug('resume read 0');
9875 this.read(0);
9876 }
9877 resume(this, state);
9878 }
9879 return this;
9880 };
9881
9882 function resume(stream, state) {
9883 if (!state.resumeScheduled) {
9884 state.resumeScheduled = true;
9885 process.nextTick(function() {
9886 resume_(stream, state);
9887 });
9888 }
9889 }
9890
9891 function resume_(stream, state) {
9892 state.resumeScheduled = false;
9893 stream.emit('resume');
9894 flow(stream);
9895 if (state.flowing && !state.reading)
9896 stream.read(0);
9897 }
9898
9899 Readable.prototype.pause = function() {
9900 debug('call pause flowing=%j', this._readableState.flowing);
9901 if (false !== this._readableState.flowing) {
9902 debug('pause');
9903 this._readableState.flowing = false;
9904 this.emit('pause');
9905 }
9906 return this;
9907 };
9908
9909 function flow(stream) {
9910 var state = stream._readableState;
9911 debug('flow', state.flowing);
9912 if (state.flowing) {
9913 do {
9914 var chunk = stream.read();
9915 } while (null !== chunk && state.flowing);
9916 }
9917 }
9918
9919 // wrap an old-style stream as the async data source.
9920 // This is *not* part of the readable stream interface.
9921 // It is an ugly unfortunate mess of history.
9922 Readable.prototype.wrap = function(stream) {
9923 var state = this._readableState;
9924 var paused = false;
9925
9926 var self = this;
9927 stream.on('end', function() {
9928 debug('wrapped end');
9929 if (state.decoder && !state.ended) {
9930 var chunk = state.decoder.end();
9931 if (chunk && chunk.length)
9932 self.push(chunk);
9933 }
9934
9935 self.push(null);
9936 });
9937
9938 stream.on('data', function(chunk) {
9939 debug('wrapped data');
9940 if (state.decoder)
9941 chunk = state.decoder.write(chunk);
9942 if (!chunk || !state.objectMode && !chunk.length)
9943 return;
9944
9945 var ret = self.push(chunk);
9946 if (!ret) {
9947 paused = true;
9948 stream.pause();
9949 }
9950 });
9951
9952 // proxy all the other methods.
9953 // important when wrapping filters and duplexes.
9954 for (var i in stream) {
9955 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
9956 this[i] = function(method) { return function() {
9957 return stream[method].apply(stream, arguments);
9958 }}(i);
9959 }
9960 }
9961
9962 // proxy certain important events.
9963 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
9964 forEach(events, function(ev) {
9965 stream.on(ev, self.emit.bind(self, ev));
9966 });
9967
9968 // when we try to consume some more bytes, simply unpause the
9969 // underlying stream.
9970 self._read = function(n) {
9971 debug('wrapped _read', n);
9972 if (paused) {
9973 paused = false;
9974 stream.resume();
9975 }
9976 };
9977
9978 return self;
9979 };
9980
9981
9982
9983 // exposed for testing purposes only.
9984 Readable._fromList = fromList;
9985
9986 // Pluck off n bytes from an array of buffers.
9987 // Length is the combined lengths of all the buffers in the list.
9988 function fromList(n, state) {
9989 var list = state.buffer;
9990 var length = state.length;
9991 var stringMode = !!state.decoder;
9992 var objectMode = !!state.objectMode;
9993 var ret;
9994
9995 // nothing in the list, definitely empty.
9996 if (list.length === 0)
9997 return null;
9998
9999 if (length === 0)
10000 ret = null;
10001 else if (objectMode)
10002 ret = list.shift();
10003 else if (!n || n >= length) {
10004 // read it all, truncate the array.
10005 if (stringMode)
10006 ret = list.join('');
10007 else
10008 ret = Buffer.concat(list, length);
10009 list.length = 0;
10010 } else {
10011 // read just some of it.
10012 if (n < list[0].length) {
10013 // just take a part of the first list item.
10014 // slice is the same for buffers and strings.
10015 var buf = list[0];
10016 ret = buf.slice(0, n);
10017 list[0] = buf.slice(n);
10018 } else if (n === list[0].length) {
10019 // first list is a perfect match
10020 ret = list.shift();
10021 } else {
10022 // complex case.
10023 // we have enough to cover it, but it spans past the first buffer.
10024 if (stringMode)
10025 ret = '';
10026 else
10027 ret = new Buffer(n);
10028
10029 var c = 0;
10030 for (var i = 0, l = list.length; i < l && c < n; i++) {
10031 var buf = list[0];
10032 var cpy = Math.min(n - c, buf.length);
10033
10034 if (stringMode)
10035 ret += buf.slice(0, cpy);
10036 else
10037 buf.copy(ret, c, 0, cpy);
10038
10039 if (cpy < buf.length)
10040 list[0] = buf.slice(cpy);
10041 else
10042 list.shift();
10043
10044 c += cpy;
10045 }
10046 }
10047 }
10048
10049 return ret;
10050 }
10051
10052 function endReadable(stream) {
10053 var state = stream._readableState;
10054
10055 // If we get here before consuming all the bytes, then that is a
10056 // bug in node. Should never happen.
10057 if (state.length > 0)
10058 throw new Error('endReadable called on non-empty stream');
10059
10060 if (!state.endEmitted) {
10061 state.ended = true;
10062 process.nextTick(function() {
10063 // Check that we didn't get one last unshift.
10064 if (!state.endEmitted && state.length === 0) {
10065 state.endEmitted = true;
10066 stream.readable = false;
10067 stream.emit('end');
10068 }
10069 });
10070 }
10071 }
10072
10073 function forEach (xs, f) {
10074 for (var i = 0, l = xs.length; i < l; i++) {
10075 f(xs[i], i);
10076 }
10077 }
10078
10079 function indexOf (xs, x) {
10080 for (var i = 0, l = xs.length; i < l; i++) {
10081 if (xs[i] === x) return i;
10082 }
10083 return -1;
10084 }
10085
10086 }).call(this,require('_process'))
10087 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
10088 // Copyright Joyent, Inc. and other Node contributors.
10089 //
10090 // Permission is hereby granted, free of charge, to any person obtaining a
10091 // copy of this software and associated documentation files (the
10092 // "Software"), to deal in the Software without restriction, including
10093 // without limitation the rights to use, copy, modify, merge, publish,
10094 // distribute, sublicense, and/or sell copies of the Software, and to permit
10095 // persons to whom the Software is furnished to do so, subject to the
10096 // following conditions:
10097 //
10098 // The above copyright notice and this permission notice shall be included
10099 // in all copies or substantial portions of the Software.
10100 //
10101 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10102 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10103 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10104 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10105 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10106 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10107 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10108
10109
10110 // a transform stream is a readable/writable stream where you do
10111 // something with the data. Sometimes it's called a "filter",
10112 // but that's not a great name for it, since that implies a thing where
10113 // some bits pass through, and others are simply ignored. (That would
10114 // be a valid example of a transform, of course.)
10115 //
10116 // While the output is causally related to the input, it's not a
10117 // necessarily symmetric or synchronous transformation. For example,
10118 // a zlib stream might take multiple plain-text writes(), and then
10119 // emit a single compressed chunk some time in the future.
10120 //
10121 // Here's how this works:
10122 //
10123 // The Transform stream has all the aspects of the readable and writable
10124 // stream classes. When you write(chunk), that calls _write(chunk,cb)
10125 // internally, and returns false if there's a lot of pending writes
10126 // buffered up. When you call read(), that calls _read(n) until
10127 // there's enough pending readable data buffered up.
10128 //
10129 // In a transform stream, the written data is placed in a buffer. When
10130 // _read(n) is called, it transforms the queued up data, calling the
10131 // buffered _write cb's as it consumes chunks. If consuming a single
10132 // written chunk would result in multiple output chunks, then the first
10133 // outputted bit calls the readcb, and subsequent chunks just go into
10134 // the read buffer, and will cause it to emit 'readable' if necessary.
10135 //
10136 // This way, back-pressure is actually determined by the reading side,
10137 // since _read has to be called to start processing a new chunk. However,
10138 // a pathological inflate type of transform can cause excessive buffering
10139 // here. For example, imagine a stream where every byte of input is
10140 // interpreted as an integer from 0-255, and then results in that many
10141 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10142 // 1kb of data being output. In this case, you could write a very small
10143 // amount of input, and end up with a very large amount of output. In
10144 // such a pathological inflating mechanism, there'd be no way to tell
10145 // the system to stop doing the transform. A single 4MB write could
10146 // cause the system to run out of memory.
10147 //
10148 // However, even in such a pathological case, only a single written chunk
10149 // would be consumed, and then the rest would wait (un-transformed) until
10150 // the results of the previous transformed chunk were consumed.
10151
10152 module.exports = Transform;
10153
10154 var Duplex = require('./_stream_duplex');
10155
10156 /*<replacement>*/
10157 var util = require('core-util-is');
10158 util.inherits = require('inherits');
10159 /*</replacement>*/
10160
10161 util.inherits(Transform, Duplex);
10162
10163
10164 function TransformState(options, stream) {
10165 this.afterTransform = function(er, data) {
10166 return afterTransform(stream, er, data);
10167 };
10168
10169 this.needTransform = false;
10170 this.transforming = false;
10171 this.writecb = null;
10172 this.writechunk = null;
10173 }
10174
10175 function afterTransform(stream, er, data) {
10176 var ts = stream._transformState;
10177 ts.transforming = false;
10178
10179 var cb = ts.writecb;
10180
10181 if (!cb)
10182 return stream.emit('error', new Error('no writecb in Transform class'));
10183
10184 ts.writechunk = null;
10185 ts.writecb = null;
10186
10187 if (!util.isNullOrUndefined(data))
10188 stream.push(data);
10189
10190 if (cb)
10191 cb(er);
10192
10193 var rs = stream._readableState;
10194 rs.reading = false;
10195 if (rs.needReadable || rs.length < rs.highWaterMark) {
10196 stream._read(rs.highWaterMark);
10197 }
10198 }
10199
10200
10201 function Transform(options) {
10202 if (!(this instanceof Transform))
10203 return new Transform(options);
10204
10205 Duplex.call(this, options);
10206
10207 this._transformState = new TransformState(options, this);
10208
10209 // when the writable side finishes, then flush out anything remaining.
10210 var stream = this;
10211
10212 // start out asking for a readable event once data is transformed.
10213 this._readableState.needReadable = true;
10214
10215 // we have implemented the _read method, and done the other things
10216 // that Readable wants before the first _read call, so unset the
10217 // sync guard flag.
10218 this._readableState.sync = false;
10219
10220 this.once('prefinish', function() {
10221 if (util.isFunction(this._flush))
10222 this._flush(function(er) {
10223 done(stream, er);
10224 });
10225 else
10226 done(stream);
10227 });
10228 }
10229
10230 Transform.prototype.push = function(chunk, encoding) {
10231 this._transformState.needTransform = false;
10232 return Duplex.prototype.push.call(this, chunk, encoding);
10233 };
10234
10235 // This is the part where you do stuff!
10236 // override this function in implementation classes.
10237 // 'chunk' is an input chunk.
10238 //
10239 // Call `push(newChunk)` to pass along transformed output
10240 // to the readable side. You may call 'push' zero or more times.
10241 //
10242 // Call `cb(err)` when you are done with this chunk. If you pass
10243 // an error, then that'll put the hurt on the whole operation. If you
10244 // never call cb(), then you'll never get another chunk.
10245 Transform.prototype._transform = function(chunk, encoding, cb) {
10246 throw new Error('not implemented');
10247 };
10248
10249 Transform.prototype._write = function(chunk, encoding, cb) {
10250 var ts = this._transformState;
10251 ts.writecb = cb;
10252 ts.writechunk = chunk;
10253 ts.writeencoding = encoding;
10254 if (!ts.transforming) {
10255 var rs = this._readableState;
10256 if (ts.needTransform ||
10257 rs.needReadable ||
10258 rs.length < rs.highWaterMark)
10259 this._read(rs.highWaterMark);
10260 }
10261 };
10262
10263 // Doesn't matter what the args are here.
10264 // _transform does all the work.
10265 // That we got here means that the readable side wants more data.
10266 Transform.prototype._read = function(n) {
10267 var ts = this._transformState;
10268
10269 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
10270 ts.transforming = true;
10271 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
10272 } else {
10273 // mark that we need a transform, so that any data that comes in
10274 // will get processed, now that we've asked for it.
10275 ts.needTransform = true;
10276 }
10277 };
10278
10279
10280 function done(stream, er) {
10281 if (er)
10282 return stream.emit('error', er);
10283
10284 // if there's nothing in the write buffer, then that means
10285 // that nothing more will ever be provided
10286 var ws = stream._writableState;
10287 var ts = stream._transformState;
10288
10289 if (ws.length)
10290 throw new Error('calling transform done when ws.length != 0');
10291
10292 if (ts.transforming)
10293 throw new Error('calling transform done when still transforming');
10294
10295 return stream.push(null);
10296 }
10297
10298 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
10299 (function (process){
10300 // Copyright Joyent, Inc. and other Node contributors.
10301 //
10302 // Permission is hereby granted, free of charge, to any person obtaining a
10303 // copy of this software and associated documentation files (the
10304 // "Software"), to deal in the Software without restriction, including
10305 // without limitation the rights to use, copy, modify, merge, publish,
10306 // distribute, sublicense, and/or sell copies of the Software, and to permit
10307 // persons to whom the Software is furnished to do so, subject to the
10308 // following conditions:
10309 //
10310 // The above copyright notice and this permission notice shall be included
10311 // in all copies or substantial portions of the Software.
10312 //
10313 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10314 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10315 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10316 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10317 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10318 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10319 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10320
10321 // A bit simpler than readable streams.
10322 // Implement an async ._write(chunk, cb), and it'll handle all
10323 // the drain event emission and buffering.
10324
10325 module.exports = Writable;
10326
10327 /*<replacement>*/
10328 var Buffer = require('buffer').Buffer;
10329 /*</replacement>*/
10330
10331 Writable.WritableState = WritableState;
10332
10333
10334 /*<replacement>*/
10335 var util = require('core-util-is');
10336 util.inherits = require('inherits');
10337 /*</replacement>*/
10338
10339 var Stream = require('stream');
10340
10341 util.inherits(Writable, Stream);
10342
10343 function WriteReq(chunk, encoding, cb) {
10344 this.chunk = chunk;
10345 this.encoding = encoding;
10346 this.callback = cb;
10347 }
10348
10349 function WritableState(options, stream) {
10350 var Duplex = require('./_stream_duplex');
10351
10352 options = options || {};
10353
10354 // the point at which write() starts returning false
10355 // Note: 0 is a valid value, means that we always return false if
10356 // the entire buffer is not flushed immediately on write()
10357 var hwm = options.highWaterMark;
10358 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
10359 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
10360
10361 // object stream flag to indicate whether or not this stream
10362 // contains buffers or objects.
10363 this.objectMode = !!options.objectMode;
10364
10365 if (stream instanceof Duplex)
10366 this.objectMode = this.objectMode || !!options.writableObjectMode;
10367
10368 // cast to ints.
10369 this.highWaterMark = ~~this.highWaterMark;
10370
10371 this.needDrain = false;
10372 // at the start of calling end()
10373 this.ending = false;
10374 // when end() has been called, and returned
10375 this.ended = false;
10376 // when 'finish' is emitted
10377 this.finished = false;
10378
10379 // should we decode strings into buffers before passing to _write?
10380 // this is here so that some node-core streams can optimize string
10381 // handling at a lower level.
10382 var noDecode = options.decodeStrings === false;
10383 this.decodeStrings = !noDecode;
10384
10385 // Crypto is kind of old and crusty. Historically, its default string
10386 // encoding is 'binary' so we have to make this configurable.
10387 // Everything else in the universe uses 'utf8', though.
10388 this.defaultEncoding = options.defaultEncoding || 'utf8';
10389
10390 // not an actual buffer we keep track of, but a measurement
10391 // of how much we're waiting to get pushed to some underlying
10392 // socket or file.
10393 this.length = 0;
10394
10395 // a flag to see when we're in the middle of a write.
10396 this.writing = false;
10397
10398 // when true all writes will be buffered until .uncork() call
10399 this.corked = 0;
10400
10401 // a flag to be able to tell if the onwrite cb is called immediately,
10402 // or on a later tick. We set this to true at first, because any
10403 // actions that shouldn't happen until "later" should generally also
10404 // not happen before the first write call.
10405 this.sync = true;
10406
10407 // a flag to know if we're processing previously buffered items, which
10408 // may call the _write() callback in the same tick, so that we don't
10409 // end up in an overlapped onwrite situation.
10410 this.bufferProcessing = false;
10411
10412 // the callback that's passed to _write(chunk,cb)
10413 this.onwrite = function(er) {
10414 onwrite(stream, er);
10415 };
10416
10417 // the callback that the user supplies to write(chunk,encoding,cb)
10418 this.writecb = null;
10419
10420 // the amount that is being written when _write is called.
10421 this.writelen = 0;
10422
10423 this.buffer = [];
10424
10425 // number of pending user-supplied write callbacks
10426 // this must be 0 before 'finish' can be emitted
10427 this.pendingcb = 0;
10428
10429 // emit prefinish if the only thing we're waiting for is _write cbs
10430 // This is relevant for synchronous Transform streams
10431 this.prefinished = false;
10432
10433 // True if the error was already emitted and should not be thrown again
10434 this.errorEmitted = false;
10435 }
10436
10437 function Writable(options) {
10438 var Duplex = require('./_stream_duplex');
10439
10440 // Writable ctor is applied to Duplexes, though they're not
10441 // instanceof Writable, they're instanceof Readable.
10442 if (!(this instanceof Writable) && !(this instanceof Duplex))
10443 return new Writable(options);
10444
10445 this._writableState = new WritableState(options, this);
10446
10447 // legacy.
10448 this.writable = true;
10449
10450 Stream.call(this);
10451 }
10452
10453 // Otherwise people can pipe Writable streams, which is just wrong.
10454 Writable.prototype.pipe = function() {
10455 this.emit('error', new Error('Cannot pipe. Not readable.'));
10456 };
10457
10458
10459 function writeAfterEnd(stream, state, cb) {
10460 var er = new Error('write after end');
10461 // TODO: defer error events consistently everywhere, not just the cb
10462 stream.emit('error', er);
10463 process.nextTick(function() {
10464 cb(er);
10465 });
10466 }
10467
10468 // If we get something that is not a buffer, string, null, or undefined,
10469 // and we're not in objectMode, then that's an error.
10470 // Otherwise stream chunks are all considered to be of length=1, and the
10471 // watermarks determine how many objects to keep in the buffer, rather than
10472 // how many bytes or characters.
10473 function validChunk(stream, state, chunk, cb) {
10474 var valid = true;
10475 if (!util.isBuffer(chunk) &&
10476 !util.isString(chunk) &&
10477 !util.isNullOrUndefined(chunk) &&
10478 !state.objectMode) {
10479 var er = new TypeError('Invalid non-string/buffer chunk');
10480 stream.emit('error', er);
10481 process.nextTick(function() {
10482 cb(er);
10483 });
10484 valid = false;
10485 }
10486 return valid;
10487 }
10488
10489 Writable.prototype.write = function(chunk, encoding, cb) {
10490 var state = this._writableState;
10491 var ret = false;
10492
10493 if (util.isFunction(encoding)) {
10494 cb = encoding;
10495 encoding = null;
10496 }
10497
10498 if (util.isBuffer(chunk))
10499 encoding = 'buffer';
10500 else if (!encoding)
10501 encoding = state.defaultEncoding;
10502
10503 if (!util.isFunction(cb))
10504 cb = function() {};
10505
10506 if (state.ended)
10507 writeAfterEnd(this, state, cb);
10508 else if (validChunk(this, state, chunk, cb)) {
10509 state.pendingcb++;
10510 ret = writeOrBuffer(this, state, chunk, encoding, cb);
10511 }
10512
10513 return ret;
10514 };
10515
10516 Writable.prototype.cork = function() {
10517 var state = this._writableState;
10518
10519 state.corked++;
10520 };
10521
10522 Writable.prototype.uncork = function() {
10523 var state = this._writableState;
10524
10525 if (state.corked) {
10526 state.corked--;
10527
10528 if (!state.writing &&
10529 !state.corked &&
10530 !state.finished &&
10531 !state.bufferProcessing &&
10532 state.buffer.length)
10533 clearBuffer(this, state);
10534 }
10535 };
10536
10537 function decodeChunk(state, chunk, encoding) {
10538 if (!state.objectMode &&
10539 state.decodeStrings !== false &&
10540 util.isString(chunk)) {
10541 chunk = new Buffer(chunk, encoding);
10542 }
10543 return chunk;
10544 }
10545
10546 // if we're already writing something, then just put this
10547 // in the queue, and wait our turn. Otherwise, call _write
10548 // If we return false, then we need a drain event, so set that flag.
10549 function writeOrBuffer(stream, state, chunk, encoding, cb) {
10550 chunk = decodeChunk(state, chunk, encoding);
10551 if (util.isBuffer(chunk))
10552 encoding = 'buffer';
10553 var len = state.objectMode ? 1 : chunk.length;
10554
10555 state.length += len;
10556
10557 var ret = state.length < state.highWaterMark;
10558 // we must ensure that previous needDrain will not be reset to false.
10559 if (!ret)
10560 state.needDrain = true;
10561
10562 if (state.writing || state.corked)
10563 state.buffer.push(new WriteReq(chunk, encoding, cb));
10564 else
10565 doWrite(stream, state, false, len, chunk, encoding, cb);
10566
10567 return ret;
10568 }
10569
10570 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
10571 state.writelen = len;
10572 state.writecb = cb;
10573 state.writing = true;
10574 state.sync = true;
10575 if (writev)
10576 stream._writev(chunk, state.onwrite);
10577 else
10578 stream._write(chunk, encoding, state.onwrite);
10579 state.sync = false;
10580 }
10581
10582 function onwriteError(stream, state, sync, er, cb) {
10583 if (sync)
10584 process.nextTick(function() {
10585 state.pendingcb--;
10586 cb(er);
10587 });
10588 else {
10589 state.pendingcb--;
10590 cb(er);
10591 }
10592
10593 stream._writableState.errorEmitted = true;
10594 stream.emit('error', er);
10595 }
10596
10597 function onwriteStateUpdate(state) {
10598 state.writing = false;
10599 state.writecb = null;
10600 state.length -= state.writelen;
10601 state.writelen = 0;
10602 }
10603
10604 function onwrite(stream, er) {
10605 var state = stream._writableState;
10606 var sync = state.sync;
10607 var cb = state.writecb;
10608
10609 onwriteStateUpdate(state);
10610
10611 if (er)
10612 onwriteError(stream, state, sync, er, cb);
10613 else {
10614 // Check if we're actually ready to finish, but don't emit yet
10615 var finished = needFinish(stream, state);
10616
10617 if (!finished &&
10618 !state.corked &&
10619 !state.bufferProcessing &&
10620 state.buffer.length) {
10621 clearBuffer(stream, state);
10622 }
10623
10624 if (sync) {
10625 process.nextTick(function() {
10626 afterWrite(stream, state, finished, cb);
10627 });
10628 } else {
10629 afterWrite(stream, state, finished, cb);
10630 }
10631 }
10632 }
10633
10634 function afterWrite(stream, state, finished, cb) {
10635 if (!finished)
10636 onwriteDrain(stream, state);
10637 state.pendingcb--;
10638 cb();
10639 finishMaybe(stream, state);
10640 }
10641
10642 // Must force callback to be called on nextTick, so that we don't
10643 // emit 'drain' before the write() consumer gets the 'false' return
10644 // value, and has a chance to attach a 'drain' listener.
10645 function onwriteDrain(stream, state) {
10646 if (state.length === 0 && state.needDrain) {
10647 state.needDrain = false;
10648 stream.emit('drain');
10649 }
10650 }
10651
10652
10653 // if there's something in the buffer waiting, then process it
10654 function clearBuffer(stream, state) {
10655 state.bufferProcessing = true;
10656
10657 if (stream._writev && state.buffer.length > 1) {
10658 // Fast case, write everything using _writev()
10659 var cbs = [];
10660 for (var c = 0; c < state.buffer.length; c++)
10661 cbs.push(state.buffer[c].callback);
10662
10663 // count the one we are adding, as well.
10664 // TODO(isaacs) clean this up
10665 state.pendingcb++;
10666 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
10667 for (var i = 0; i < cbs.length; i++) {
10668 state.pendingcb--;
10669 cbs[i](err);
10670 }
10671 });
10672
10673 // Clear buffer
10674 state.buffer = [];
10675 } else {
10676 // Slow case, write chunks one-by-one
10677 for (var c = 0; c < state.buffer.length; c++) {
10678 var entry = state.buffer[c];
10679 var chunk = entry.chunk;
10680 var encoding = entry.encoding;
10681 var cb = entry.callback;
10682 var len = state.objectMode ? 1 : chunk.length;
10683
10684 doWrite(stream, state, false, len, chunk, encoding, cb);
10685
10686 // if we didn't call the onwrite immediately, then
10687 // it means that we need to wait until it does.
10688 // also, that means that the chunk and cb are currently
10689 // being processed, so move the buffer counter past them.
10690 if (state.writing) {
10691 c++;
10692 break;
10693 }
10694 }
10695
10696 if (c < state.buffer.length)
10697 state.buffer = state.buffer.slice(c);
10698 else
10699 state.buffer.length = 0;
10700 }
10701
10702 state.bufferProcessing = false;
10703 }
10704
10705 Writable.prototype._write = function(chunk, encoding, cb) {
10706 cb(new Error('not implemented'));
10707
10708 };
10709
10710 Writable.prototype._writev = null;
10711
10712 Writable.prototype.end = function(chunk, encoding, cb) {
10713 var state = this._writableState;
10714
10715 if (util.isFunction(chunk)) {
10716 cb = chunk;
10717 chunk = null;
10718 encoding = null;
10719 } else if (util.isFunction(encoding)) {
10720 cb = encoding;
10721 encoding = null;
10722 }
10723
10724 if (!util.isNullOrUndefined(chunk))
10725 this.write(chunk, encoding);
10726
10727 // .end() fully uncorks
10728 if (state.corked) {
10729 state.corked = 1;
10730 this.uncork();
10731 }
10732
10733 // ignore unnecessary end() calls.
10734 if (!state.ending && !state.finished)
10735 endWritable(this, state, cb);
10736 };
10737
10738
10739 function needFinish(stream, state) {
10740 return (state.ending &&
10741 state.length === 0 &&
10742 !state.finished &&
10743 !state.writing);
10744 }
10745
10746 function prefinish(stream, state) {
10747 if (!state.prefinished) {
10748 state.prefinished = true;
10749 stream.emit('prefinish');
10750 }
10751 }
10752
10753 function finishMaybe(stream, state) {
10754 var need = needFinish(stream, state);
10755 if (need) {
10756 if (state.pendingcb === 0) {
10757 prefinish(stream, state);
10758 state.finished = true;
10759 stream.emit('finish');
10760 } else
10761 prefinish(stream, state);
10762 }
10763 return need;
10764 }
10765
10766 function endWritable(stream, state, cb) {
10767 state.ending = true;
10768 finishMaybe(stream, state);
10769 if (cb) {
10770 if (state.finished)
10771 process.nextTick(cb);
10772 else
10773 stream.once('finish', cb);
10774 }
10775 state.ended = true;
10776 }
10777
10778 }).call(this,require('_process'))
10779 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
10780 (function (Buffer){
10781 // Copyright Joyent, Inc. and other Node contributors.
10782 //
10783 // Permission is hereby granted, free of charge, to any person obtaining a
10784 // copy of this software and associated documentation files (the
10785 // "Software"), to deal in the Software without restriction, including
10786 // without limitation the rights to use, copy, modify, merge, publish,
10787 // distribute, sublicense, and/or sell copies of the Software, and to permit
10788 // persons to whom the Software is furnished to do so, subject to the
10789 // following conditions:
10790 //
10791 // The above copyright notice and this permission notice shall be included
10792 // in all copies or substantial portions of the Software.
10793 //
10794 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10795 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10796 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10797 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10798 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10799 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10800 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10801
10802 // NOTE: These type checking functions intentionally don't use `instanceof`
10803 // because it is fragile and can be easily faked with `Object.create()`.
10804 function isArray(ar) {
10805 return Array.isArray(ar);
10806 }
10807 exports.isArray = isArray;
10808
10809 function isBoolean(arg) {
10810 return typeof arg === 'boolean';
10811 }
10812 exports.isBoolean = isBoolean;
10813
10814 function isNull(arg) {
10815 return arg === null;
10816 }
10817 exports.isNull = isNull;
10818
10819 function isNullOrUndefined(arg) {
10820 return arg == null;
10821 }
10822 exports.isNullOrUndefined = isNullOrUndefined;
10823
10824 function isNumber(arg) {
10825 return typeof arg === 'number';
10826 }
10827 exports.isNumber = isNumber;
10828
10829 function isString(arg) {
10830 return typeof arg === 'string';
10831 }
10832 exports.isString = isString;
10833
10834 function isSymbol(arg) {
10835 return typeof arg === 'symbol';
10836 }
10837 exports.isSymbol = isSymbol;
10838
10839 function isUndefined(arg) {
10840 return arg === void 0;
10841 }
10842 exports.isUndefined = isUndefined;
10843
10844 function isRegExp(re) {
10845 return isObject(re) && objectToString(re) === '[object RegExp]';
10846 }
10847 exports.isRegExp = isRegExp;
10848
10849 function isObject(arg) {
10850 return typeof arg === 'object' && arg !== null;
10851 }
10852 exports.isObject = isObject;
10853
10854 function isDate(d) {
10855 return isObject(d) && objectToString(d) === '[object Date]';
10856 }
10857 exports.isDate = isDate;
10858
10859 function isError(e) {
10860 return isObject(e) &&
10861 (objectToString(e) === '[object Error]' || e instanceof Error);
10862 }
10863 exports.isError = isError;
10864
10865 function isFunction(arg) {
10866 return typeof arg === 'function';
10867 }
10868 exports.isFunction = isFunction;
10869
10870 function isPrimitive(arg) {
10871 return arg === null ||
10872 typeof arg === 'boolean' ||
10873 typeof arg === 'number' ||
10874 typeof arg === 'string' ||
10875 typeof arg === 'symbol' || // ES6 symbol
10876 typeof arg === 'undefined';
10877 }
10878 exports.isPrimitive = isPrimitive;
10879
10880 function isBuffer(arg) {
10881 return Buffer.isBuffer(arg);
10882 }
10883 exports.isBuffer = isBuffer;
10884
10885 function objectToString(o) {
10886 return Object.prototype.toString.call(o);
10887 }
10888 }).call(this,require("buffer").Buffer)
10889 },{"buffer":7}],22:[function(require,module,exports){
10890 module.exports = require("./lib/_stream_passthrough.js")
10891
10892 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
10893 exports = module.exports = require('./lib/_stream_readable.js');
10894 exports.Stream = require('stream');
10895 exports.Readable = exports;
10896 exports.Writable = require('./lib/_stream_writable.js');
10897 exports.Duplex = require('./lib/_stream_duplex.js');
10898 exports.Transform = require('./lib/_stream_transform.js');
10899 exports.PassThrough = require('./lib/_stream_passthrough.js');
10900
10901 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
10902 module.exports = require("./lib/_stream_transform.js")
10903
10904 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
10905 module.exports = require("./lib/_stream_writable.js")
10906
10907 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
10908 // Copyright Joyent, Inc. and other Node contributors.
10909 //
10910 // Permission is hereby granted, free of charge, to any person obtaining a
10911 // copy of this software and associated documentation files (the
10912 // "Software"), to deal in the Software without restriction, including
10913 // without limitation the rights to use, copy, modify, merge, publish,
10914 // distribute, sublicense, and/or sell copies of the Software, and to permit
10915 // persons to whom the Software is furnished to do so, subject to the
10916 // following conditions:
10917 //
10918 // The above copyright notice and this permission notice shall be included
10919 // in all copies or substantial portions of the Software.
10920 //
10921 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10922 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10923 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10924 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10925 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10926 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10927 // USE OR OTHER DEALINGS IN THE SOFTWARE.
10928
10929 module.exports = Stream;
10930
10931 var EE = require('events').EventEmitter;
10932 var inherits = require('inherits');
10933
10934 inherits(Stream, EE);
10935 Stream.Readable = require('readable-stream/readable.js');
10936 Stream.Writable = require('readable-stream/writable.js');
10937 Stream.Duplex = require('readable-stream/duplex.js');
10938 Stream.Transform = require('readable-stream/transform.js');
10939 Stream.PassThrough = require('readable-stream/passthrough.js');
10940
10941 // Backwards-compat with node 0.4.x
10942 Stream.Stream = Stream;
10943
10944
10945
10946 // old-style streams. Note that the pipe method (the only relevant
10947 // part of this class) is overridden in the Readable class.
10948
10949 function Stream() {
10950 EE.call(this);
10951 }
10952
10953 Stream.prototype.pipe = function(dest, options) {
10954 var source = this;
10955
10956 function ondata(chunk) {
10957 if (dest.writable) {
10958 if (false === dest.write(chunk) && source.pause) {
10959 source.pause();
10960 }
10961 }
10962 }
10963
10964 source.on('data', ondata);
10965
10966 function ondrain() {
10967 if (source.readable && source.resume) {
10968 source.resume();
10969 }
10970 }
10971
10972 dest.on('drain', ondrain);
10973
10974 // If the 'end' option is not supplied, dest.end() will be called when
10975 // source gets the 'end' or 'close' events. Only dest.end() once.
10976 if (!dest._isStdio && (!options || options.end !== false)) {
10977 source.on('end', onend);
10978 source.on('close', onclose);
10979 }
10980
10981 var didOnEnd = false;
10982 function onend() {
10983 if (didOnEnd) return;
10984 didOnEnd = true;
10985
10986 dest.end();
10987 }
10988
10989
10990 function onclose() {
10991 if (didOnEnd) return;
10992 didOnEnd = true;
10993
10994 if (typeof dest.destroy === 'function') dest.destroy();
10995 }
10996
10997 // don't leave dangling pipes when there are errors.
10998 function onerror(er) {
10999 cleanup();
11000 if (EE.listenerCount(this, 'error') === 0) {
11001 throw er; // Unhandled stream error in pipe.
11002 }
11003 }
11004
11005 source.on('error', onerror);
11006 dest.on('error', onerror);
11007
11008 // remove all the event listeners that were added.
11009 function cleanup() {
11010 source.removeListener('data', ondata);
11011 dest.removeListener('drain', ondrain);
11012
11013 source.removeListener('end', onend);
11014 source.removeListener('close', onclose);
11015
11016 source.removeListener('error', onerror);
11017 dest.removeListener('error', onerror);
11018
11019 source.removeListener('end', cleanup);
11020 source.removeListener('close', cleanup);
11021
11022 dest.removeListener('close', cleanup);
11023 }
11024
11025 source.on('end', cleanup);
11026 source.on('close', cleanup);
11027
11028 dest.on('close', cleanup);
11029
11030 dest.emit('pipe', source);
11031
11032 // Allow for unix-like usage: A.pipe(B).pipe(C)
11033 return dest;
11034 };
11035
11036 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
11037 // Copyright Joyent, Inc. and other Node contributors.
11038 //
11039 // Permission is hereby granted, free of charge, to any person obtaining a
11040 // copy of this software and associated documentation files (the
11041 // "Software"), to deal in the Software without restriction, including
11042 // without limitation the rights to use, copy, modify, merge, publish,
11043 // distribute, sublicense, and/or sell copies of the Software, and to permit
11044 // persons to whom the Software is furnished to do so, subject to the
11045 // following conditions:
11046 //
11047 // The above copyright notice and this permission notice shall be included
11048 // in all copies or substantial portions of the Software.
11049 //
11050 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11051 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11052 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11053 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11054 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11055 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11056 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11057
11058 var Buffer = require('buffer').Buffer;
11059
11060 var isBufferEncoding = Buffer.isEncoding
11061 || function(encoding) {
11062 switch (encoding && encoding.toLowerCase()) {
11063 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;
11064 default: return false;
11065 }
11066 }
11067
11068
11069 function assertEncoding(encoding) {
11070 if (encoding && !isBufferEncoding(encoding)) {
11071 throw new Error('Unknown encoding: ' + encoding);
11072 }
11073 }
11074
11075 // StringDecoder provides an interface for efficiently splitting a series of
11076 // buffers into a series of JS strings without breaking apart multi-byte
11077 // characters. CESU-8 is handled as part of the UTF-8 encoding.
11078 //
11079 // @TODO Handling all encodings inside a single object makes it very difficult
11080 // to reason about this code, so it should be split up in the future.
11081 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11082 // points as used by CESU-8.
11083 var StringDecoder = exports.StringDecoder = function(encoding) {
11084 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11085 assertEncoding(encoding);
11086 switch (this.encoding) {
11087 case 'utf8':
11088 // CESU-8 represents each of Surrogate Pair by 3-bytes
11089 this.surrogateSize = 3;
11090 break;
11091 case 'ucs2':
11092 case 'utf16le':
11093 // UTF-16 represents each of Surrogate Pair by 2-bytes
11094 this.surrogateSize = 2;
11095 this.detectIncompleteChar = utf16DetectIncompleteChar;
11096 break;
11097 case 'base64':
11098 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11099 this.surrogateSize = 3;
11100 this.detectIncompleteChar = base64DetectIncompleteChar;
11101 break;
11102 default:
11103 this.write = passThroughWrite;
11104 return;
11105 }
11106
11107 // Enough space to store all bytes of a single character. UTF-8 needs 4
11108 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11109 this.charBuffer = new Buffer(6);
11110 // Number of bytes received for the current incomplete multi-byte character.
11111 this.charReceived = 0;
11112 // Number of bytes expected for the current incomplete multi-byte character.
11113 this.charLength = 0;
11114 };
11115
11116
11117 // write decodes the given buffer and returns it as JS string that is
11118 // guaranteed to not contain any partial multi-byte characters. Any partial
11119 // character found at the end of the buffer is buffered up, and will be
11120 // returned when calling write again with the remaining bytes.
11121 //
11122 // Note: Converting a Buffer containing an orphan surrogate to a String
11123 // currently works, but converting a String to a Buffer (via `new Buffer`, or
11124 // Buffer#write) will replace incomplete surrogates with the unicode
11125 // replacement character. See https://codereview.chromium.org/121173009/ .
11126 StringDecoder.prototype.write = function(buffer) {
11127 var charStr = '';
11128 // if our last write ended with an incomplete multibyte character
11129 while (this.charLength) {
11130 // determine how many remaining bytes this buffer has to offer for this char
11131 var available = (buffer.length >= this.charLength - this.charReceived) ?
11132 this.charLength - this.charReceived :
11133 buffer.length;
11134
11135 // add the new bytes to the char buffer
11136 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11137 this.charReceived += available;
11138
11139 if (this.charReceived < this.charLength) {
11140 // still not enough chars in this buffer? wait for more ...
11141 return '';
11142 }
11143
11144 // remove bytes belonging to the current character from the buffer
11145 buffer = buffer.slice(available, buffer.length);
11146
11147 // get the character that was split
11148 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11149
11150 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11151 var charCode = charStr.charCodeAt(charStr.length - 1);
11152 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11153 this.charLength += this.surrogateSize;
11154 charStr = '';
11155 continue;
11156 }
11157 this.charReceived = this.charLength = 0;
11158
11159 // if there are no more bytes in this buffer, just emit our char
11160 if (buffer.length === 0) {
11161 return charStr;
11162 }
11163 break;
11164 }
11165
11166 // determine and set charLength / charReceived
11167 this.detectIncompleteChar(buffer);
11168
11169 var end = buffer.length;
11170 if (this.charLength) {
11171 // buffer the incomplete character bytes we got
11172 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11173 end -= this.charReceived;
11174 }
11175
11176 charStr += buffer.toString(this.encoding, 0, end);
11177
11178 var end = charStr.length - 1;
11179 var charCode = charStr.charCodeAt(end);
11180 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11181 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11182 var size = this.surrogateSize;
11183 this.charLength += size;
11184 this.charReceived += size;
11185 this.charBuffer.copy(this.charBuffer, size, 0, size);
11186 buffer.copy(this.charBuffer, 0, 0, size);
11187 return charStr.substring(0, end);
11188 }
11189
11190 // or just emit the charStr
11191 return charStr;
11192 };
11193
11194 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
11195 // the end of the given buffer. If so, it sets this.charLength to the byte
11196 // length that character, and sets this.charReceived to the number of bytes
11197 // that are available for this character.
11198 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11199 // determine how many bytes we have to check at the end of this buffer
11200 var i = (buffer.length >= 3) ? 3 : buffer.length;
11201
11202 // Figure out if one of the last i bytes of our buffer announces an
11203 // incomplete char.
11204 for (; i > 0; i--) {
11205 var c = buffer[buffer.length - i];
11206
11207 // See http://en.wikipedia.org/wiki/UTF-8#Description
11208
11209 // 110XXXXX
11210 if (i == 1 && c >> 5 == 0x06) {
11211 this.charLength = 2;
11212 break;
11213 }
11214
11215 // 1110XXXX
11216 if (i <= 2 && c >> 4 == 0x0E) {
11217 this.charLength = 3;
11218 break;
11219 }
11220
11221 // 11110XXX
11222 if (i <= 3 && c >> 3 == 0x1E) {
11223 this.charLength = 4;
11224 break;
11225 }
11226 }
11227 this.charReceived = i;
11228 };
11229
11230 StringDecoder.prototype.end = function(buffer) {
11231 var res = '';
11232 if (buffer && buffer.length)
11233 res = this.write(buffer);
11234
11235 if (this.charReceived) {
11236 var cr = this.charReceived;
11237 var buf = this.charBuffer;
11238 var enc = this.encoding;
11239 res += buf.slice(0, cr).toString(enc);
11240 }
11241
11242 return res;
11243 };
11244
11245 function passThroughWrite(buffer) {
11246 return buffer.toString(this.encoding);
11247 }
11248
11249 function utf16DetectIncompleteChar(buffer) {
11250 this.charReceived = buffer.length % 2;
11251 this.charLength = this.charReceived ? 2 : 0;
11252 }
11253
11254 function base64DetectIncompleteChar(buffer) {
11255 this.charReceived = buffer.length % 3;
11256 this.charLength = this.charReceived ? 3 : 0;
11257 }
11258
11259 },{"buffer":7}],28:[function(require,module,exports){
11260 module.exports = function isBuffer(arg) {
11261 return arg && typeof arg === 'object'
11262 && typeof arg.copy === 'function'
11263 && typeof arg.fill === 'function'
11264 && typeof arg.readUInt8 === 'function';
11265 }
11266 },{}],29:[function(require,module,exports){
11267 (function (process,global){
11268 // Copyright Joyent, Inc. and other Node contributors.
11269 //
11270 // Permission is hereby granted, free of charge, to any person obtaining a
11271 // copy of this software and associated documentation files (the
11272 // "Software"), to deal in the Software without restriction, including
11273 // without limitation the rights to use, copy, modify, merge, publish,
11274 // distribute, sublicense, and/or sell copies of the Software, and to permit
11275 // persons to whom the Software is furnished to do so, subject to the
11276 // following conditions:
11277 //
11278 // The above copyright notice and this permission notice shall be included
11279 // in all copies or substantial portions of the Software.
11280 //
11281 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11282 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11283 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11284 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11285 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11286 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11287 // USE OR OTHER DEALINGS IN THE SOFTWARE.
11288
11289 var formatRegExp = /%[sdj%]/g;
11290 exports.format = function(f) {
11291 if (!isString(f)) {
11292 var objects = [];
11293 for (var i = 0; i < arguments.length; i++) {
11294 objects.push(inspect(arguments[i]));
11295 }
11296 return objects.join(' ');
11297 }
11298
11299 var i = 1;
11300 var args = arguments;
11301 var len = args.length;
11302 var str = String(f).replace(formatRegExp, function(x) {
11303 if (x === '%%') return '%';
11304 if (i >= len) return x;
11305 switch (x) {
11306 case '%s': return String(args[i++]);
11307 case '%d': return Number(args[i++]);
11308 case '%j':
11309 try {
11310 return JSON.stringify(args[i++]);
11311 } catch (_) {
11312 return '[Circular]';
11313 }
11314 default:
11315 return x;
11316 }
11317 });
11318 for (var x = args[i]; i < len; x = args[++i]) {
11319 if (isNull(x) || !isObject(x)) {
11320 str += ' ' + x;
11321 } else {
11322 str += ' ' + inspect(x);
11323 }
11324 }
11325 return str;
11326 };
11327
11328
11329 // Mark that a method should not be used.
11330 // Returns a modified function which warns once by default.
11331 // If --no-deprecation is set, then it is a no-op.
11332 exports.deprecate = function(fn, msg) {
11333 // Allow for deprecating things in the process of starting up.
11334 if (isUndefined(global.process)) {
11335 return function() {
11336 return exports.deprecate(fn, msg).apply(this, arguments);
11337 };
11338 }
11339
11340 if (process.noDeprecation === true) {
11341 return fn;
11342 }
11343
11344 var warned = false;
11345 function deprecated() {
11346 if (!warned) {
11347 if (process.throwDeprecation) {
11348 throw new Error(msg);
11349 } else if (process.traceDeprecation) {
11350 console.trace(msg);
11351 } else {
11352 console.error(msg);
11353 }
11354 warned = true;
11355 }
11356 return fn.apply(this, arguments);
11357 }
11358
11359 return deprecated;
11360 };
11361
11362
11363 var debugs = {};
11364 var debugEnviron;
11365 exports.debuglog = function(set) {
11366 if (isUndefined(debugEnviron))
11367 debugEnviron = process.env.NODE_DEBUG || '';
11368 set = set.toUpperCase();
11369 if (!debugs[set]) {
11370 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
11371 var pid = process.pid;
11372 debugs[set] = function() {
11373 var msg = exports.format.apply(exports, arguments);
11374 console.error('%s %d: %s', set, pid, msg);
11375 };
11376 } else {
11377 debugs[set] = function() {};
11378 }
11379 }
11380 return debugs[set];
11381 };
11382
11383
11384 /**
11385 * Echos the value of a value. Trys to print the value out
11386 * in the best way possible given the different types.
11387 *
11388 * @param {Object} obj The object to print out.
11389 * @param {Object} opts Optional options object that alters the output.
11390 */
11391 /* legacy: obj, showHidden, depth, colors*/
11392 function inspect(obj, opts) {
11393 // default options
11394 var ctx = {
11395 seen: [],
11396 stylize: stylizeNoColor
11397 };
11398 // legacy...
11399 if (arguments.length >= 3) ctx.depth = arguments[2];
11400 if (arguments.length >= 4) ctx.colors = arguments[3];
11401 if (isBoolean(opts)) {
11402 // legacy...
11403 ctx.showHidden = opts;
11404 } else if (opts) {
11405 // got an "options" object
11406 exports._extend(ctx, opts);
11407 }
11408 // set default options
11409 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
11410 if (isUndefined(ctx.depth)) ctx.depth = 2;
11411 if (isUndefined(ctx.colors)) ctx.colors = false;
11412 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
11413 if (ctx.colors) ctx.stylize = stylizeWithColor;
11414 return formatValue(ctx, obj, ctx.depth);
11415 }
11416 exports.inspect = inspect;
11417
11418
11419 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
11420 inspect.colors = {
11421 'bold' : [1, 22],
11422 'italic' : [3, 23],
11423 'underline' : [4, 24],
11424 'inverse' : [7, 27],
11425 'white' : [37, 39],
11426 'grey' : [90, 39],
11427 'black' : [30, 39],
11428 'blue' : [34, 39],
11429 'cyan' : [36, 39],
11430 'green' : [32, 39],
11431 'magenta' : [35, 39],
11432 'red' : [31, 39],
11433 'yellow' : [33, 39]
11434 };
11435
11436 // Don't use 'blue' not visible on cmd.exe
11437 inspect.styles = {
11438 'special': 'cyan',
11439 'number': 'yellow',
11440 'boolean': 'yellow',
11441 'undefined': 'grey',
11442 'null': 'bold',
11443 'string': 'green',
11444 'date': 'magenta',
11445 // "name": intentionally not styling
11446 'regexp': 'red'
11447 };
11448
11449
11450 function stylizeWithColor(str, styleType) {
11451 var style = inspect.styles[styleType];
11452
11453 if (style) {
11454 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
11455 '\u001b[' + inspect.colors[style][1] + 'm';
11456 } else {
11457 return str;
11458 }
11459 }
11460
11461
11462 function stylizeNoColor(str, styleType) {
11463 return str;
11464 }
11465
11466
11467 function arrayToHash(array) {
11468 var hash = {};
11469
11470 array.forEach(function(val, idx) {
11471 hash[val] = true;
11472 });
11473
11474 return hash;
11475 }
11476
11477
11478 function formatValue(ctx, value, recurseTimes) {
11479 // Provide a hook for user-specified inspect functions.
11480 // Check that value is an object with an inspect function on it
11481 if (ctx.customInspect &&
11482 value &&
11483 isFunction(value.inspect) &&
11484 // Filter out the util module, it's inspect function is special
11485 value.inspect !== exports.inspect &&
11486 // Also filter out any prototype objects using the circular check.
11487 !(value.constructor && value.constructor.prototype === value)) {
11488 var ret = value.inspect(recurseTimes, ctx);
11489 if (!isString(ret)) {
11490 ret = formatValue(ctx, ret, recurseTimes);
11491 }
11492 return ret;
11493 }
11494
11495 // Primitive types cannot have properties
11496 var primitive = formatPrimitive(ctx, value);
11497 if (primitive) {
11498 return primitive;
11499 }
11500
11501 // Look up the keys of the object.
11502 var keys = Object.keys(value);
11503 var visibleKeys = arrayToHash(keys);
11504
11505 if (ctx.showHidden) {
11506 keys = Object.getOwnPropertyNames(value);
11507 }
11508
11509 // IE doesn't make error fields non-enumerable
11510 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
11511 if (isError(value)
11512 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
11513 return formatError(value);
11514 }
11515
11516 // Some type of object without properties can be shortcutted.
11517 if (keys.length === 0) {
11518 if (isFunction(value)) {
11519 var name = value.name ? ': ' + value.name : '';
11520 return ctx.stylize('[Function' + name + ']', 'special');
11521 }
11522 if (isRegExp(value)) {
11523 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11524 }
11525 if (isDate(value)) {
11526 return ctx.stylize(Date.prototype.toString.call(value), 'date');
11527 }
11528 if (isError(value)) {
11529 return formatError(value);
11530 }
11531 }
11532
11533 var base = '', array = false, braces = ['{', '}'];
11534
11535 // Make Array say that they are Array
11536 if (isArray(value)) {
11537 array = true;
11538 braces = ['[', ']'];
11539 }
11540
11541 // Make functions say that they are functions
11542 if (isFunction(value)) {
11543 var n = value.name ? ': ' + value.name : '';
11544 base = ' [Function' + n + ']';
11545 }
11546
11547 // Make RegExps say that they are RegExps
11548 if (isRegExp(value)) {
11549 base = ' ' + RegExp.prototype.toString.call(value);
11550 }
11551
11552 // Make dates with properties first say the date
11553 if (isDate(value)) {
11554 base = ' ' + Date.prototype.toUTCString.call(value);
11555 }
11556
11557 // Make error with message first say the error
11558 if (isError(value)) {
11559 base = ' ' + formatError(value);
11560 }
11561
11562 if (keys.length === 0 && (!array || value.length == 0)) {
11563 return braces[0] + base + braces[1];
11564 }
11565
11566 if (recurseTimes < 0) {
11567 if (isRegExp(value)) {
11568 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11569 } else {
11570 return ctx.stylize('[Object]', 'special');
11571 }
11572 }
11573
11574 ctx.seen.push(value);
11575
11576 var output;
11577 if (array) {
11578 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
11579 } else {
11580 output = keys.map(function(key) {
11581 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
11582 });
11583 }
11584
11585 ctx.seen.pop();
11586
11587 return reduceToSingleString(output, base, braces);
11588 }
11589
11590
11591 function formatPrimitive(ctx, value) {
11592 if (isUndefined(value))
11593 return ctx.stylize('undefined', 'undefined');
11594 if (isString(value)) {
11595 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
11596 .replace(/'/g, "\\'")
11597 .replace(/\\"/g, '"') + '\'';
11598 return ctx.stylize(simple, 'string');
11599 }
11600 if (isNumber(value))
11601 return ctx.stylize('' + value, 'number');
11602 if (isBoolean(value))
11603 return ctx.stylize('' + value, 'boolean');
11604 // For some reason typeof null is "object", so special case here.
11605 if (isNull(value))
11606 return ctx.stylize('null', 'null');
11607 }
11608
11609
11610 function formatError(value) {
11611 return '[' + Error.prototype.toString.call(value) + ']';
11612 }
11613
11614
11615 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
11616 var output = [];
11617 for (var i = 0, l = value.length; i < l; ++i) {
11618 if (hasOwnProperty(value, String(i))) {
11619 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
11620 String(i), true));
11621 } else {
11622 output.push('');
11623 }
11624 }
11625 keys.forEach(function(key) {
11626 if (!key.match(/^\d+$/)) {
11627 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
11628 key, true));
11629 }
11630 });
11631 return output;
11632 }
11633
11634
11635 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
11636 var name, str, desc;
11637 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
11638 if (desc.get) {
11639 if (desc.set) {
11640 str = ctx.stylize('[Getter/Setter]', 'special');
11641 } else {
11642 str = ctx.stylize('[Getter]', 'special');
11643 }
11644 } else {
11645 if (desc.set) {
11646 str = ctx.stylize('[Setter]', 'special');
11647 }
11648 }
11649 if (!hasOwnProperty(visibleKeys, key)) {
11650 name = '[' + key + ']';
11651 }
11652 if (!str) {
11653 if (ctx.seen.indexOf(desc.value) < 0) {
11654 if (isNull(recurseTimes)) {
11655 str = formatValue(ctx, desc.value, null);
11656 } else {
11657 str = formatValue(ctx, desc.value, recurseTimes - 1);
11658 }
11659 if (str.indexOf('\n') > -1) {
11660 if (array) {
11661 str = str.split('\n').map(function(line) {
11662 return ' ' + line;
11663 }).join('\n').substr(2);
11664 } else {
11665 str = '\n' + str.split('\n').map(function(line) {
11666 return ' ' + line;
11667 }).join('\n');
11668 }
11669 }
11670 } else {
11671 str = ctx.stylize('[Circular]', 'special');
11672 }
11673 }
11674 if (isUndefined(name)) {
11675 if (array && key.match(/^\d+$/)) {
11676 return str;
11677 }
11678 name = JSON.stringify('' + key);
11679 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
11680 name = name.substr(1, name.length - 2);
11681 name = ctx.stylize(name, 'name');
11682 } else {
11683 name = name.replace(/'/g, "\\'")
11684 .replace(/\\"/g, '"')
11685 .replace(/(^"|"$)/g, "'");
11686 name = ctx.stylize(name, 'string');
11687 }
11688 }
11689
11690 return name + ': ' + str;
11691 }
11692
11693
11694 function reduceToSingleString(output, base, braces) {
11695 var numLinesEst = 0;
11696 var length = output.reduce(function(prev, cur) {
11697 numLinesEst++;
11698 if (cur.indexOf('\n') >= 0) numLinesEst++;
11699 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
11700 }, 0);
11701
11702 if (length > 60) {
11703 return braces[0] +
11704 (base === '' ? '' : base + '\n ') +
11705 ' ' +
11706 output.join(',\n ') +
11707 ' ' +
11708 braces[1];
11709 }
11710
11711 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
11712 }
11713
11714
11715 // NOTE: These type checking functions intentionally don't use `instanceof`
11716 // because it is fragile and can be easily faked with `Object.create()`.
11717 function isArray(ar) {
11718 return Array.isArray(ar);
11719 }
11720 exports.isArray = isArray;
11721
11722 function isBoolean(arg) {
11723 return typeof arg === 'boolean';
11724 }
11725 exports.isBoolean = isBoolean;
11726
11727 function isNull(arg) {
11728 return arg === null;
11729 }
11730 exports.isNull = isNull;
11731
11732 function isNullOrUndefined(arg) {
11733 return arg == null;
11734 }
11735 exports.isNullOrUndefined = isNullOrUndefined;
11736
11737 function isNumber(arg) {
11738 return typeof arg === 'number';
11739 }
11740 exports.isNumber = isNumber;
11741
11742 function isString(arg) {
11743 return typeof arg === 'string';
11744 }
11745 exports.isString = isString;
11746
11747 function isSymbol(arg) {
11748 return typeof arg === 'symbol';
11749 }
11750 exports.isSymbol = isSymbol;
11751
11752 function isUndefined(arg) {
11753 return arg === void 0;
11754 }
11755 exports.isUndefined = isUndefined;
11756
11757 function isRegExp(re) {
11758 return isObject(re) && objectToString(re) === '[object RegExp]';
11759 }
11760 exports.isRegExp = isRegExp;
11761
11762 function isObject(arg) {
11763 return typeof arg === 'object' && arg !== null;
11764 }
11765 exports.isObject = isObject;
11766
11767 function isDate(d) {
11768 return isObject(d) && objectToString(d) === '[object Date]';
11769 }
11770 exports.isDate = isDate;
11771
11772 function isError(e) {
11773 return isObject(e) &&
11774 (objectToString(e) === '[object Error]' || e instanceof Error);
11775 }
11776 exports.isError = isError;
11777
11778 function isFunction(arg) {
11779 return typeof arg === 'function';
11780 }
11781 exports.isFunction = isFunction;
11782
11783 function isPrimitive(arg) {
11784 return arg === null ||
11785 typeof arg === 'boolean' ||
11786 typeof arg === 'number' ||
11787 typeof arg === 'string' ||
11788 typeof arg === 'symbol' || // ES6 symbol
11789 typeof arg === 'undefined';
11790 }
11791 exports.isPrimitive = isPrimitive;
11792
11793 exports.isBuffer = require('./support/isBuffer');
11794
11795 function objectToString(o) {
11796 return Object.prototype.toString.call(o);
11797 }
11798
11799
11800 function pad(n) {
11801 return n < 10 ? '0' + n.toString(10) : n.toString(10);
11802 }
11803
11804
11805 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
11806 'Oct', 'Nov', 'Dec'];
11807
11808 // 26 Feb 16:19:34
11809 function timestamp() {
11810 var d = new Date();
11811 var time = [pad(d.getHours()),
11812 pad(d.getMinutes()),
11813 pad(d.getSeconds())].join(':');
11814 return [d.getDate(), months[d.getMonth()], time].join(' ');
11815 }
11816
11817
11818 // log is just a thin wrapper to console.log that prepends a timestamp
11819 exports.log = function() {
11820 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
11821 };
11822
11823
11824 /**
11825 * Inherit the prototype methods from one constructor into another.
11826 *
11827 * The Function.prototype.inherits from lang.js rewritten as a standalone
11828 * function (not on Function.prototype). NOTE: If this file is to be loaded
11829 * during bootstrapping this function needs to be rewritten using some native
11830 * functions as prototype setup using normal JavaScript does not work as
11831 * expected during bootstrapping (see mirror.js in r114903).
11832 *
11833 * @param {function} ctor Constructor function which needs to inherit the
11834 * prototype.
11835 * @param {function} superCtor Constructor function to inherit prototype from.
11836 */
11837 exports.inherits = require('inherits');
11838
11839 exports._extend = function(origin, add) {
11840 // Don't do anything if add isn't an object
11841 if (!add || !isObject(add)) return origin;
11842
11843 var keys = Object.keys(add);
11844 var i = keys.length;
11845 while (i--) {
11846 origin[keys[i]] = add[keys[i]];
11847 }
11848 return origin;
11849 };
11850
11851 function hasOwnProperty(obj, prop) {
11852 return Object.prototype.hasOwnProperty.call(obj, prop);
11853 }
11854
11855 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11856 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
11857 // Base58 encoding/decoding
11858 // Originally written by Mike Hearn for BitcoinJ
11859 // Copyright (c) 2011 Google Inc
11860 // Ported to JavaScript by Stefan Thomas
11861 // Merged Buffer refactorings from base58-native by Stephen Pair
11862 // Copyright (c) 2013 BitPay Inc
11863
11864 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
11865 var ALPHABET_MAP = {}
11866 for(var i = 0; i < ALPHABET.length; i++) {
11867 ALPHABET_MAP[ALPHABET.charAt(i)] = i
11868 }
11869 var BASE = 58
11870
11871 function encode(buffer) {
11872 if (buffer.length === 0) return ''
11873
11874 var i, j, digits = [0]
11875 for (i = 0; i < buffer.length; i++) {
11876 for (j = 0; j < digits.length; j++) digits[j] <<= 8
11877
11878 digits[0] += buffer[i]
11879
11880 var carry = 0
11881 for (j = 0; j < digits.length; ++j) {
11882 digits[j] += carry
11883
11884 carry = (digits[j] / BASE) | 0
11885 digits[j] %= BASE
11886 }
11887
11888 while (carry) {
11889 digits.push(carry % BASE)
11890
11891 carry = (carry / BASE) | 0
11892 }
11893 }
11894
11895 // deal with leading zeros
11896 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
11897
11898 // convert digits to a string
11899 var stringOutput = ""
11900 for (var i = digits.length - 1; i >= 0; i--) {
11901 stringOutput = stringOutput + ALPHABET[digits[i]]
11902 }
11903 return stringOutput
11904 }
11905
11906 function decode(string) {
11907 if (string.length === 0) return []
11908
11909 var i, j, bytes = [0]
11910 for (i = 0; i < string.length; i++) {
11911 var c = string[i]
11912 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
11913
11914 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
11915 bytes[0] += ALPHABET_MAP[c]
11916
11917 var carry = 0
11918 for (j = 0; j < bytes.length; ++j) {
11919 bytes[j] += carry
11920
11921 carry = bytes[j] >> 8
11922 bytes[j] &= 0xff
11923 }
11924
11925 while (carry) {
11926 bytes.push(carry & 0xff)
11927
11928 carry >>= 8
11929 }
11930 }
11931
11932 // deal with leading zeros
11933 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
11934
11935 return bytes.reverse()
11936 }
11937
11938 module.exports = {
11939 encode: encode,
11940 decode: decode
11941 }
11942
11943 },{}],31:[function(require,module,exports){
11944 (function (Buffer){
11945 'use strict'
11946
11947 var base58 = require('bs58')
11948 var createHash = require('create-hash')
11949
11950 // SHA256(SHA256(buffer))
11951 function sha256x2 (buffer) {
11952 buffer = createHash('sha256').update(buffer).digest()
11953 return createHash('sha256').update(buffer).digest()
11954 }
11955
11956 // Encode a buffer as a base58-check encoded string
11957 function encode (payload) {
11958 var checksum = sha256x2(payload).slice(0, 4)
11959
11960 return base58.encode(Buffer.concat([
11961 payload,
11962 checksum
11963 ]))
11964 }
11965
11966 // Decode a base58-check encoded string to a buffer
11967 function decode (string) {
11968 var buffer = new Buffer(base58.decode(string))
11969
11970 var payload = buffer.slice(0, -4)
11971 var checksum = buffer.slice(-4)
11972 var newChecksum = sha256x2(payload).slice(0, 4)
11973
11974 for (var i = 0; i < newChecksum.length; ++i) {
11975 if (newChecksum[i] === checksum[i]) continue
11976
11977 throw new Error('Invalid checksum')
11978 }
11979
11980 return payload
11981 }
11982
11983 module.exports = {
11984 encode: encode,
11985 decode: decode
11986 }
11987
11988 }).call(this,require("buffer").Buffer)
11989 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
11990 (function (Buffer){
11991 'use strict';
11992 var inherits = require('inherits')
11993 var md5 = require('./md5')
11994 var rmd160 = require('ripemd160')
11995 var sha = require('sha.js')
11996
11997 var Transform = require('stream').Transform
11998
11999 function HashNoConstructor(hash) {
12000 Transform.call(this)
12001
12002 this._hash = hash
12003 this.buffers = []
12004 }
12005
12006 inherits(HashNoConstructor, Transform)
12007
12008 HashNoConstructor.prototype._transform = function (data, _, next) {
12009 this.buffers.push(data)
12010
12011 next()
12012 }
12013
12014 HashNoConstructor.prototype._flush = function (next) {
12015 this.push(this.digest())
12016 next()
12017 }
12018
12019 HashNoConstructor.prototype.update = function (data, enc) {
12020 if (typeof data === 'string') {
12021 data = new Buffer(data, enc)
12022 }
12023
12024 this.buffers.push(data)
12025 return this
12026 }
12027
12028 HashNoConstructor.prototype.digest = function (enc) {
12029 var buf = Buffer.concat(this.buffers)
12030 var r = this._hash(buf)
12031 this.buffers = null
12032
12033 return enc ? r.toString(enc) : r
12034 }
12035
12036 function Hash(hash) {
12037 Transform.call(this)
12038
12039 this._hash = hash
12040 }
12041
12042 inherits(Hash, Transform)
12043
12044 Hash.prototype._transform = function (data, enc, next) {
12045 if (enc) data = new Buffer(data, enc)
12046
12047 this._hash.update(data)
12048
12049 next()
12050 }
12051
12052 Hash.prototype._flush = function (next) {
12053 this.push(this._hash.digest())
12054 this._hash = null
12055
12056 next()
12057 }
12058
12059 Hash.prototype.update = function (data, enc) {
12060 if (typeof data === 'string') {
12061 data = new Buffer(data, enc)
12062 }
12063
12064 this._hash.update(data)
12065 return this
12066 }
12067
12068 Hash.prototype.digest = function (enc) {
12069 var outData = this._hash.digest()
12070
12071 return enc ? outData.toString(enc) : outData
12072 }
12073
12074 module.exports = function createHash (alg) {
12075 if ('md5' === alg) return new HashNoConstructor(md5)
12076 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12077
12078 return new Hash(sha(alg))
12079 }
12080
12081 }).call(this,require("buffer").Buffer)
12082 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12083 (function (Buffer){
12084 'use strict';
12085 var intSize = 4;
12086 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12087 var chrsz = 8;
12088
12089 function toArray(buf, bigEndian) {
12090 if ((buf.length % intSize) !== 0) {
12091 var len = buf.length + (intSize - (buf.length % intSize));
12092 buf = Buffer.concat([buf, zeroBuffer], len);
12093 }
12094
12095 var arr = [];
12096 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12097 for (var i = 0; i < buf.length; i += intSize) {
12098 arr.push(fn.call(buf, i));
12099 }
12100 return arr;
12101 }
12102
12103 function toBuffer(arr, size, bigEndian) {
12104 var buf = new Buffer(size);
12105 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12106 for (var i = 0; i < arr.length; i++) {
12107 fn.call(buf, arr[i], i * 4, true);
12108 }
12109 return buf;
12110 }
12111
12112 function hash(buf, fn, hashSize, bigEndian) {
12113 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12114 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12115 return toBuffer(arr, hashSize, bigEndian);
12116 }
12117 exports.hash = hash;
12118 }).call(this,require("buffer").Buffer)
12119 },{"buffer":7}],34:[function(require,module,exports){
12120 'use strict';
12121 /*
12122 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12123 * Digest Algorithm, as defined in RFC 1321.
12124 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12125 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12126 * Distributed under the BSD License
12127 * See http://pajhome.org.uk/crypt/md5 for more info.
12128 */
12129
12130 var helpers = require('./helpers');
12131
12132 /*
12133 * Calculate the MD5 of an array of little-endian words, and a bit length
12134 */
12135 function core_md5(x, len)
12136 {
12137 /* append padding */
12138 x[len >> 5] |= 0x80 << ((len) % 32);
12139 x[(((len + 64) >>> 9) << 4) + 14] = len;
12140
12141 var a = 1732584193;
12142 var b = -271733879;
12143 var c = -1732584194;
12144 var d = 271733878;
12145
12146 for(var i = 0; i < x.length; i += 16)
12147 {
12148 var olda = a;
12149 var oldb = b;
12150 var oldc = c;
12151 var oldd = d;
12152
12153 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12154 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12155 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12156 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12157 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12158 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12159 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12160 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12161 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12162 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12163 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12164 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12165 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12166 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12167 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12168 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12169
12170 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12171 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12172 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12173 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12174 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12175 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12176 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12177 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12178 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12179 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12180 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12181 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12182 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12183 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12184 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12185 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12186
12187 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12188 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12189 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12190 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12191 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12192 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12193 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12194 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12195 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12196 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12197 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12198 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12199 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12200 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12201 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12202 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12203
12204 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12205 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12206 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12207 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12208 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12209 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12210 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12211 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12212 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12213 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12214 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12215 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12216 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12217 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12218 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12219 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
12220
12221 a = safe_add(a, olda);
12222 b = safe_add(b, oldb);
12223 c = safe_add(c, oldc);
12224 d = safe_add(d, oldd);
12225 }
12226 return Array(a, b, c, d);
12227
12228 }
12229
12230 /*
12231 * These functions implement the four basic operations the algorithm uses.
12232 */
12233 function md5_cmn(q, a, b, x, s, t)
12234 {
12235 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
12236 }
12237 function md5_ff(a, b, c, d, x, s, t)
12238 {
12239 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
12240 }
12241 function md5_gg(a, b, c, d, x, s, t)
12242 {
12243 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
12244 }
12245 function md5_hh(a, b, c, d, x, s, t)
12246 {
12247 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
12248 }
12249 function md5_ii(a, b, c, d, x, s, t)
12250 {
12251 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
12252 }
12253
12254 /*
12255 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
12256 * to work around bugs in some JS interpreters.
12257 */
12258 function safe_add(x, y)
12259 {
12260 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
12261 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
12262 return (msw << 16) | (lsw & 0xFFFF);
12263 }
12264
12265 /*
12266 * Bitwise rotate a 32-bit number to the left.
12267 */
12268 function bit_rol(num, cnt)
12269 {
12270 return (num << cnt) | (num >>> (32 - cnt));
12271 }
12272
12273 module.exports = function md5(buf) {
12274 return helpers.hash(buf, core_md5, 16);
12275 };
12276 },{"./helpers":33}],35:[function(require,module,exports){
12277 arguments[4][12][0].apply(exports,arguments)
12278 },{"dup":12}],36:[function(require,module,exports){
12279 (function (Buffer){
12280 /*
12281 CryptoJS v3.1.2
12282 code.google.com/p/crypto-js
12283 (c) 2009-2013 by Jeff Mott. All rights reserved.
12284 code.google.com/p/crypto-js/wiki/License
12285 */
12286 /** @preserve
12287 (c) 2012 by Cédric Mesnil. All rights reserved.
12288
12289 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12290
12291 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
12292 - 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.
12293
12294 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.
12295 */
12296
12297 // constants table
12298 var zl = [
12299 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
12300 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
12301 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
12302 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
12303 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
12304 ]
12305
12306 var zr = [
12307 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
12308 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
12309 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
12310 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12311 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
12312 ]
12313
12314 var sl = [
12315 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
12316 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
12317 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
12318 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
12319 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
12320 ]
12321
12322 var sr = [
12323 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
12324 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
12325 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
12326 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
12327 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
12328 ]
12329
12330 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
12331 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
12332
12333 function bytesToWords (bytes) {
12334 var words = []
12335 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
12336 words[b >>> 5] |= bytes[i] << (24 - b % 32)
12337 }
12338 return words
12339 }
12340
12341 function wordsToBytes (words) {
12342 var bytes = []
12343 for (var b = 0; b < words.length * 32; b += 8) {
12344 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
12345 }
12346 return bytes
12347 }
12348
12349 function processBlock (H, M, offset) {
12350 // swap endian
12351 for (var i = 0; i < 16; i++) {
12352 var offset_i = offset + i
12353 var M_offset_i = M[offset_i]
12354
12355 // Swap
12356 M[offset_i] = (
12357 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
12358 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
12359 )
12360 }
12361
12362 // Working variables
12363 var al, bl, cl, dl, el
12364 var ar, br, cr, dr, er
12365
12366 ar = al = H[0]
12367 br = bl = H[1]
12368 cr = cl = H[2]
12369 dr = dl = H[3]
12370 er = el = H[4]
12371
12372 // computation
12373 var t
12374 for (i = 0; i < 80; i += 1) {
12375 t = (al + M[offset + zl[i]]) | 0
12376 if (i < 16) {
12377 t += f1(bl, cl, dl) + hl[0]
12378 } else if (i < 32) {
12379 t += f2(bl, cl, dl) + hl[1]
12380 } else if (i < 48) {
12381 t += f3(bl, cl, dl) + hl[2]
12382 } else if (i < 64) {
12383 t += f4(bl, cl, dl) + hl[3]
12384 } else {// if (i<80) {
12385 t += f5(bl, cl, dl) + hl[4]
12386 }
12387 t = t | 0
12388 t = rotl(t, sl[i])
12389 t = (t + el) | 0
12390 al = el
12391 el = dl
12392 dl = rotl(cl, 10)
12393 cl = bl
12394 bl = t
12395
12396 t = (ar + M[offset + zr[i]]) | 0
12397 if (i < 16) {
12398 t += f5(br, cr, dr) + hr[0]
12399 } else if (i < 32) {
12400 t += f4(br, cr, dr) + hr[1]
12401 } else if (i < 48) {
12402 t += f3(br, cr, dr) + hr[2]
12403 } else if (i < 64) {
12404 t += f2(br, cr, dr) + hr[3]
12405 } else {// if (i<80) {
12406 t += f1(br, cr, dr) + hr[4]
12407 }
12408
12409 t = t | 0
12410 t = rotl(t, sr[i])
12411 t = (t + er) | 0
12412 ar = er
12413 er = dr
12414 dr = rotl(cr, 10)
12415 cr = br
12416 br = t
12417 }
12418
12419 // intermediate hash value
12420 t = (H[1] + cl + dr) | 0
12421 H[1] = (H[2] + dl + er) | 0
12422 H[2] = (H[3] + el + ar) | 0
12423 H[3] = (H[4] + al + br) | 0
12424 H[4] = (H[0] + bl + cr) | 0
12425 H[0] = t
12426 }
12427
12428 function f1 (x, y, z) {
12429 return ((x) ^ (y) ^ (z))
12430 }
12431
12432 function f2 (x, y, z) {
12433 return (((x) & (y)) | ((~x) & (z)))
12434 }
12435
12436 function f3 (x, y, z) {
12437 return (((x) | (~(y))) ^ (z))
12438 }
12439
12440 function f4 (x, y, z) {
12441 return (((x) & (z)) | ((y) & (~(z))))
12442 }
12443
12444 function f5 (x, y, z) {
12445 return ((x) ^ ((y) | (~(z))))
12446 }
12447
12448 function rotl (x, n) {
12449 return (x << n) | (x >>> (32 - n))
12450 }
12451
12452 function ripemd160 (message) {
12453 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
12454
12455 if (typeof message === 'string') {
12456 message = new Buffer(message, 'utf8')
12457 }
12458
12459 var m = bytesToWords(message)
12460
12461 var nBitsLeft = message.length * 8
12462 var nBitsTotal = message.length * 8
12463
12464 // Add padding
12465 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
12466 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
12467 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
12468 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
12469 )
12470
12471 for (var i = 0; i < m.length; i += 16) {
12472 processBlock(H, m, i)
12473 }
12474
12475 // swap endian
12476 for (i = 0; i < 5; i++) {
12477 // shortcut
12478 var H_i = H[i]
12479
12480 // Swap
12481 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
12482 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
12483 }
12484
12485 var digestbytes = wordsToBytes(H)
12486 return new Buffer(digestbytes)
12487 }
12488
12489 module.exports = ripemd160
12490
12491 }).call(this,require("buffer").Buffer)
12492 },{"buffer":7}],37:[function(require,module,exports){
12493 (function (Buffer){
12494 // prototype class for hash functions
12495 function Hash (blockSize, finalSize) {
12496 this._block = new Buffer(blockSize)
12497 this._finalSize = finalSize
12498 this._blockSize = blockSize
12499 this._len = 0
12500 this._s = 0
12501 }
12502
12503 Hash.prototype.update = function (data, enc) {
12504 if (typeof data === 'string') {
12505 enc = enc || 'utf8'
12506 data = new Buffer(data, enc)
12507 }
12508
12509 var l = this._len += data.length
12510 var s = this._s || 0
12511 var f = 0
12512 var buffer = this._block
12513
12514 while (s < l) {
12515 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
12516 var ch = (t - f)
12517
12518 for (var i = 0; i < ch; i++) {
12519 buffer[(s % this._blockSize) + i] = data[i + f]
12520 }
12521
12522 s += ch
12523 f += ch
12524
12525 if ((s % this._blockSize) === 0) {
12526 this._update(buffer)
12527 }
12528 }
12529 this._s = s
12530
12531 return this
12532 }
12533
12534 Hash.prototype.digest = function (enc) {
12535 // Suppose the length of the message M, in bits, is l
12536 var l = this._len * 8
12537
12538 // Append the bit 1 to the end of the message
12539 this._block[this._len % this._blockSize] = 0x80
12540
12541 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
12542 this._block.fill(0, this._len % this._blockSize + 1)
12543
12544 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
12545 this._update(this._block)
12546 this._block.fill(0)
12547 }
12548
12549 // to this append the block which is equal to the number l written in binary
12550 // TODO: handle case where l is > Math.pow(2, 29)
12551 this._block.writeInt32BE(l, this._blockSize - 4)
12552
12553 var hash = this._update(this._block) || this._hash()
12554
12555 return enc ? hash.toString(enc) : hash
12556 }
12557
12558 Hash.prototype._update = function () {
12559 throw new Error('_update must be implemented by subclass')
12560 }
12561
12562 module.exports = Hash
12563
12564 }).call(this,require("buffer").Buffer)
12565 },{"buffer":7}],38:[function(require,module,exports){
12566 var exports = module.exports = function SHA (algorithm) {
12567 algorithm = algorithm.toLowerCase()
12568
12569 var Algorithm = exports[algorithm]
12570 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
12571
12572 return new Algorithm()
12573 }
12574
12575 exports.sha = require('./sha')
12576 exports.sha1 = require('./sha1')
12577 exports.sha224 = require('./sha224')
12578 exports.sha256 = require('./sha256')
12579 exports.sha384 = require('./sha384')
12580 exports.sha512 = require('./sha512')
12581
12582 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
12583 (function (Buffer){
12584 /*
12585 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
12586 * in FIPS PUB 180-1
12587 * This source code is derived from sha1.js of the same repository.
12588 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
12589 * operation was added.
12590 */
12591
12592 var inherits = require('inherits')
12593 var Hash = require('./hash')
12594
12595 var W = new Array(80)
12596
12597 function Sha () {
12598 this.init()
12599 this._w = W
12600
12601 Hash.call(this, 64, 56)
12602 }
12603
12604 inherits(Sha, Hash)
12605
12606 Sha.prototype.init = function () {
12607 this._a = 0x67452301 | 0
12608 this._b = 0xefcdab89 | 0
12609 this._c = 0x98badcfe | 0
12610 this._d = 0x10325476 | 0
12611 this._e = 0xc3d2e1f0 | 0
12612
12613 return this
12614 }
12615
12616 /*
12617 * Bitwise rotate a 32-bit number to the left.
12618 */
12619 function rol (num, cnt) {
12620 return (num << cnt) | (num >>> (32 - cnt))
12621 }
12622
12623 Sha.prototype._update = function (M) {
12624 var W = this._w
12625
12626 var a = this._a
12627 var b = this._b
12628 var c = this._c
12629 var d = this._d
12630 var e = this._e
12631
12632 var j = 0, k
12633
12634 /*
12635 * SHA-1 has a bitwise rotate left operation. But, SHA is not
12636 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
12637 */
12638 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
12639 function loop (w, f) {
12640 W[j] = w
12641
12642 var t = rol(a, 5) + f + e + w + k
12643
12644 e = d
12645 d = c
12646 c = rol(b, 30)
12647 b = a
12648 a = t
12649 j++
12650 }
12651
12652 k = 1518500249
12653 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
12654 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
12655 k = 1859775393
12656 while (j < 40) loop(calcW(), b ^ c ^ d)
12657 k = -1894007588
12658 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
12659 k = -899497514
12660 while (j < 80) loop(calcW(), b ^ c ^ d)
12661
12662 this._a = (a + this._a) | 0
12663 this._b = (b + this._b) | 0
12664 this._c = (c + this._c) | 0
12665 this._d = (d + this._d) | 0
12666 this._e = (e + this._e) | 0
12667 }
12668
12669 Sha.prototype._hash = function () {
12670 var H = new Buffer(20)
12671
12672 H.writeInt32BE(this._a | 0, 0)
12673 H.writeInt32BE(this._b | 0, 4)
12674 H.writeInt32BE(this._c | 0, 8)
12675 H.writeInt32BE(this._d | 0, 12)
12676 H.writeInt32BE(this._e | 0, 16)
12677
12678 return H
12679 }
12680
12681 module.exports = Sha
12682
12683
12684 }).call(this,require("buffer").Buffer)
12685 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
12686 (function (Buffer){
12687 /*
12688 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
12689 * in FIPS PUB 180-1
12690 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
12691 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12692 * Distributed under the BSD License
12693 * See http://pajhome.org.uk/crypt/md5 for details.
12694 */
12695
12696 var inherits = require('inherits')
12697 var Hash = require('./hash')
12698
12699 var W = new Array(80)
12700
12701 function Sha1 () {
12702 this.init()
12703 this._w = W
12704
12705 Hash.call(this, 64, 56)
12706 }
12707
12708 inherits(Sha1, Hash)
12709
12710 Sha1.prototype.init = function () {
12711 this._a = 0x67452301 | 0
12712 this._b = 0xefcdab89 | 0
12713 this._c = 0x98badcfe | 0
12714 this._d = 0x10325476 | 0
12715 this._e = 0xc3d2e1f0 | 0
12716
12717 return this
12718 }
12719
12720 /*
12721 * Bitwise rotate a 32-bit number to the left.
12722 */
12723 function rol (num, cnt) {
12724 return (num << cnt) | (num >>> (32 - cnt))
12725 }
12726
12727 Sha1.prototype._update = function (M) {
12728 var W = this._w
12729
12730 var a = this._a
12731 var b = this._b
12732 var c = this._c
12733 var d = this._d
12734 var e = this._e
12735
12736 var j = 0, k
12737
12738 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
12739 function loop (w, f) {
12740 W[j] = w
12741
12742 var t = rol(a, 5) + f + e + w + k
12743
12744 e = d
12745 d = c
12746 c = rol(b, 30)
12747 b = a
12748 a = t
12749 j++
12750 }
12751
12752 k = 1518500249
12753 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
12754 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
12755 k = 1859775393
12756 while (j < 40) loop(calcW(), b ^ c ^ d)
12757 k = -1894007588
12758 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
12759 k = -899497514
12760 while (j < 80) loop(calcW(), b ^ c ^ d)
12761
12762 this._a = (a + this._a) | 0
12763 this._b = (b + this._b) | 0
12764 this._c = (c + this._c) | 0
12765 this._d = (d + this._d) | 0
12766 this._e = (e + this._e) | 0
12767 }
12768
12769 Sha1.prototype._hash = function () {
12770 var H = new Buffer(20)
12771
12772 H.writeInt32BE(this._a | 0, 0)
12773 H.writeInt32BE(this._b | 0, 4)
12774 H.writeInt32BE(this._c | 0, 8)
12775 H.writeInt32BE(this._d | 0, 12)
12776 H.writeInt32BE(this._e | 0, 16)
12777
12778 return H
12779 }
12780
12781 module.exports = Sha1
12782
12783 }).call(this,require("buffer").Buffer)
12784 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
12785 (function (Buffer){
12786 /**
12787 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
12788 * in FIPS 180-2
12789 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
12790 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12791 *
12792 */
12793
12794 var inherits = require('inherits')
12795 var Sha256 = require('./sha256')
12796 var Hash = require('./hash')
12797
12798 var W = new Array(64)
12799
12800 function Sha224 () {
12801 this.init()
12802
12803 this._w = W // new Array(64)
12804
12805 Hash.call(this, 64, 56)
12806 }
12807
12808 inherits(Sha224, Sha256)
12809
12810 Sha224.prototype.init = function () {
12811 this._a = 0xc1059ed8 | 0
12812 this._b = 0x367cd507 | 0
12813 this._c = 0x3070dd17 | 0
12814 this._d = 0xf70e5939 | 0
12815 this._e = 0xffc00b31 | 0
12816 this._f = 0x68581511 | 0
12817 this._g = 0x64f98fa7 | 0
12818 this._h = 0xbefa4fa4 | 0
12819
12820 return this
12821 }
12822
12823 Sha224.prototype._hash = function () {
12824 var H = new Buffer(28)
12825
12826 H.writeInt32BE(this._a, 0)
12827 H.writeInt32BE(this._b, 4)
12828 H.writeInt32BE(this._c, 8)
12829 H.writeInt32BE(this._d, 12)
12830 H.writeInt32BE(this._e, 16)
12831 H.writeInt32BE(this._f, 20)
12832 H.writeInt32BE(this._g, 24)
12833
12834 return H
12835 }
12836
12837 module.exports = Sha224
12838
12839 }).call(this,require("buffer").Buffer)
12840 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
12841 (function (Buffer){
12842 /**
12843 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
12844 * in FIPS 180-2
12845 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
12846 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12847 *
12848 */
12849
12850 var inherits = require('inherits')
12851 var Hash = require('./hash')
12852
12853 var K = [
12854 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
12855 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
12856 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
12857 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
12858 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
12859 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
12860 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
12861 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
12862 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
12863 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
12864 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
12865 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
12866 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
12867 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
12868 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
12869 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
12870 ]
12871
12872 var W = new Array(64)
12873
12874 function Sha256 () {
12875 this.init()
12876
12877 this._w = W // new Array(64)
12878
12879 Hash.call(this, 64, 56)
12880 }
12881
12882 inherits(Sha256, Hash)
12883
12884 Sha256.prototype.init = function () {
12885 this._a = 0x6a09e667 | 0
12886 this._b = 0xbb67ae85 | 0
12887 this._c = 0x3c6ef372 | 0
12888 this._d = 0xa54ff53a | 0
12889 this._e = 0x510e527f | 0
12890 this._f = 0x9b05688c | 0
12891 this._g = 0x1f83d9ab | 0
12892 this._h = 0x5be0cd19 | 0
12893
12894 return this
12895 }
12896
12897 function S (X, n) {
12898 return (X >>> n) | (X << (32 - n))
12899 }
12900
12901 function R (X, n) {
12902 return (X >>> n)
12903 }
12904
12905 function Ch (x, y, z) {
12906 return ((x & y) ^ ((~x) & z))
12907 }
12908
12909 function Maj (x, y, z) {
12910 return ((x & y) ^ (x & z) ^ (y & z))
12911 }
12912
12913 function Sigma0256 (x) {
12914 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
12915 }
12916
12917 function Sigma1256 (x) {
12918 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
12919 }
12920
12921 function Gamma0256 (x) {
12922 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
12923 }
12924
12925 function Gamma1256 (x) {
12926 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
12927 }
12928
12929 Sha256.prototype._update = function (M) {
12930 var W = this._w
12931
12932 var a = this._a | 0
12933 var b = this._b | 0
12934 var c = this._c | 0
12935 var d = this._d | 0
12936 var e = this._e | 0
12937 var f = this._f | 0
12938 var g = this._g | 0
12939 var h = this._h | 0
12940
12941 var j = 0
12942
12943 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
12944 function loop (w) {
12945 W[j] = w
12946
12947 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
12948 var T2 = Sigma0256(a) + Maj(a, b, c)
12949
12950 h = g
12951 g = f
12952 f = e
12953 e = d + T1
12954 d = c
12955 c = b
12956 b = a
12957 a = T1 + T2
12958
12959 j++
12960 }
12961
12962 while (j < 16) loop(M.readInt32BE(j * 4))
12963 while (j < 64) loop(calcW())
12964
12965 this._a = (a + this._a) | 0
12966 this._b = (b + this._b) | 0
12967 this._c = (c + this._c) | 0
12968 this._d = (d + this._d) | 0
12969 this._e = (e + this._e) | 0
12970 this._f = (f + this._f) | 0
12971 this._g = (g + this._g) | 0
12972 this._h = (h + this._h) | 0
12973 }
12974
12975 Sha256.prototype._hash = function () {
12976 var H = new Buffer(32)
12977
12978 H.writeInt32BE(this._a, 0)
12979 H.writeInt32BE(this._b, 4)
12980 H.writeInt32BE(this._c, 8)
12981 H.writeInt32BE(this._d, 12)
12982 H.writeInt32BE(this._e, 16)
12983 H.writeInt32BE(this._f, 20)
12984 H.writeInt32BE(this._g, 24)
12985 H.writeInt32BE(this._h, 28)
12986
12987 return H
12988 }
12989
12990 module.exports = Sha256
12991
12992 }).call(this,require("buffer").Buffer)
12993 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
12994 (function (Buffer){
12995 var inherits = require('inherits')
12996 var SHA512 = require('./sha512')
12997 var Hash = require('./hash')
12998
12999 var W = new Array(160)
13000
13001 function Sha384 () {
13002 this.init()
13003 this._w = W
13004
13005 Hash.call(this, 128, 112)
13006 }
13007
13008 inherits(Sha384, SHA512)
13009
13010 Sha384.prototype.init = function () {
13011 this._a = 0xcbbb9d5d | 0
13012 this._b = 0x629a292a | 0
13013 this._c = 0x9159015a | 0
13014 this._d = 0x152fecd8 | 0
13015 this._e = 0x67332667 | 0
13016 this._f = 0x8eb44a87 | 0
13017 this._g = 0xdb0c2e0d | 0
13018 this._h = 0x47b5481d | 0
13019
13020 this._al = 0xc1059ed8 | 0
13021 this._bl = 0x367cd507 | 0
13022 this._cl = 0x3070dd17 | 0
13023 this._dl = 0xf70e5939 | 0
13024 this._el = 0xffc00b31 | 0
13025 this._fl = 0x68581511 | 0
13026 this._gl = 0x64f98fa7 | 0
13027 this._hl = 0xbefa4fa4 | 0
13028
13029 return this
13030 }
13031
13032 Sha384.prototype._hash = function () {
13033 var H = new Buffer(48)
13034
13035 function writeInt64BE (h, l, offset) {
13036 H.writeInt32BE(h, offset)
13037 H.writeInt32BE(l, offset + 4)
13038 }
13039
13040 writeInt64BE(this._a, this._al, 0)
13041 writeInt64BE(this._b, this._bl, 8)
13042 writeInt64BE(this._c, this._cl, 16)
13043 writeInt64BE(this._d, this._dl, 24)
13044 writeInt64BE(this._e, this._el, 32)
13045 writeInt64BE(this._f, this._fl, 40)
13046
13047 return H
13048 }
13049
13050 module.exports = Sha384
13051
13052 }).call(this,require("buffer").Buffer)
13053 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13054 (function (Buffer){
13055 var inherits = require('inherits')
13056 var Hash = require('./hash')
13057
13058 var K = [
13059 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13060 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13061 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13062 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13063 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13064 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13065 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13066 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13067 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13068 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13069 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13070 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13071 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13072 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13073 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13074 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13075 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13076 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13077 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13078 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13079 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13080 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13081 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13082 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13083 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13084 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13085 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13086 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13087 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13088 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13089 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13090 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13091 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13092 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13093 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13094 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13095 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13096 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13097 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13098 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13099 ]
13100
13101 var W = new Array(160)
13102
13103 function Sha512 () {
13104 this.init()
13105 this._w = W
13106
13107 Hash.call(this, 128, 112)
13108 }
13109
13110 inherits(Sha512, Hash)
13111
13112 Sha512.prototype.init = function () {
13113 this._a = 0x6a09e667 | 0
13114 this._b = 0xbb67ae85 | 0
13115 this._c = 0x3c6ef372 | 0
13116 this._d = 0xa54ff53a | 0
13117 this._e = 0x510e527f | 0
13118 this._f = 0x9b05688c | 0
13119 this._g = 0x1f83d9ab | 0
13120 this._h = 0x5be0cd19 | 0
13121
13122 this._al = 0xf3bcc908 | 0
13123 this._bl = 0x84caa73b | 0
13124 this._cl = 0xfe94f82b | 0
13125 this._dl = 0x5f1d36f1 | 0
13126 this._el = 0xade682d1 | 0
13127 this._fl = 0x2b3e6c1f | 0
13128 this._gl = 0xfb41bd6b | 0
13129 this._hl = 0x137e2179 | 0
13130
13131 return this
13132 }
13133
13134 function S (X, Xl, n) {
13135 return (X >>> n) | (Xl << (32 - n))
13136 }
13137
13138 function Ch (x, y, z) {
13139 return ((x & y) ^ ((~x) & z))
13140 }
13141
13142 function Maj (x, y, z) {
13143 return ((x & y) ^ (x & z) ^ (y & z))
13144 }
13145
13146 Sha512.prototype._update = function (M) {
13147 var W = this._w
13148
13149 var a = this._a | 0
13150 var b = this._b | 0
13151 var c = this._c | 0
13152 var d = this._d | 0
13153 var e = this._e | 0
13154 var f = this._f | 0
13155 var g = this._g | 0
13156 var h = this._h | 0
13157
13158 var al = this._al | 0
13159 var bl = this._bl | 0
13160 var cl = this._cl | 0
13161 var dl = this._dl | 0
13162 var el = this._el | 0
13163 var fl = this._fl | 0
13164 var gl = this._gl | 0
13165 var hl = this._hl | 0
13166
13167 var i = 0, j = 0
13168 var Wi, Wil
13169 function calcW () {
13170 var x = W[j - 15 * 2]
13171 var xl = W[j - 15 * 2 + 1]
13172 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13173 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13174
13175 x = W[j - 2 * 2]
13176 xl = W[j - 2 * 2 + 1]
13177 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13178 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13179
13180 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13181 var Wi7 = W[j - 7 * 2]
13182 var Wi7l = W[j - 7 * 2 + 1]
13183
13184 var Wi16 = W[j - 16 * 2]
13185 var Wi16l = W[j - 16 * 2 + 1]
13186
13187 Wil = gamma0l + Wi7l
13188 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13189 Wil = Wil + gamma1l
13190 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13191 Wil = Wil + Wi16l
13192 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13193 }
13194
13195 function loop () {
13196 W[j] = Wi
13197 W[j + 1] = Wil
13198
13199 var maj = Maj(a, b, c)
13200 var majl = Maj(al, bl, cl)
13201
13202 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13203 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13204 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13205 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13206
13207 // t1 = h + sigma1 + ch + K[i] + W[i]
13208 var Ki = K[j]
13209 var Kil = K[j + 1]
13210
13211 var ch = Ch(e, f, g)
13212 var chl = Ch(el, fl, gl)
13213
13214 var t1l = hl + sigma1l
13215 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13216 t1l = t1l + chl
13217 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13218 t1l = t1l + Kil
13219 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
13220 t1l = t1l + Wil
13221 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
13222
13223 // t2 = sigma0 + maj
13224 var t2l = sigma0l + majl
13225 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
13226
13227 h = g
13228 hl = gl
13229 g = f
13230 gl = fl
13231 f = e
13232 fl = el
13233 el = (dl + t1l) | 0
13234 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13235 d = c
13236 dl = cl
13237 c = b
13238 cl = bl
13239 b = a
13240 bl = al
13241 al = (t1l + t2l) | 0
13242 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
13243
13244 i++
13245 j += 2
13246 }
13247
13248 while (i < 16) {
13249 Wi = M.readInt32BE(j * 4)
13250 Wil = M.readInt32BE(j * 4 + 4)
13251
13252 loop()
13253 }
13254
13255 while (i < 80) {
13256 calcW()
13257 loop()
13258 }
13259
13260 this._al = (this._al + al) | 0
13261 this._bl = (this._bl + bl) | 0
13262 this._cl = (this._cl + cl) | 0
13263 this._dl = (this._dl + dl) | 0
13264 this._el = (this._el + el) | 0
13265 this._fl = (this._fl + fl) | 0
13266 this._gl = (this._gl + gl) | 0
13267 this._hl = (this._hl + hl) | 0
13268
13269 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
13270 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
13271 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
13272 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13273 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
13274 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
13275 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
13276 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
13277 }
13278
13279 Sha512.prototype._hash = function () {
13280 var H = new Buffer(64)
13281
13282 function writeInt64BE (h, l, offset) {
13283 H.writeInt32BE(h, offset)
13284 H.writeInt32BE(l, offset + 4)
13285 }
13286
13287 writeInt64BE(this._a, this._al, 0)
13288 writeInt64BE(this._b, this._bl, 8)
13289 writeInt64BE(this._c, this._cl, 16)
13290 writeInt64BE(this._d, this._dl, 24)
13291 writeInt64BE(this._e, this._el, 32)
13292 writeInt64BE(this._f, this._fl, 40)
13293 writeInt64BE(this._g, this._gl, 48)
13294 writeInt64BE(this._h, this._hl, 56)
13295
13296 return H
13297 }
13298
13299 module.exports = Sha512
13300
13301 }).call(this,require("buffer").Buffer)
13302 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
13303 (function (Buffer){
13304 'use strict';
13305 var createHash = require('create-hash/browser');
13306 var inherits = require('inherits')
13307
13308 var Transform = require('stream').Transform
13309
13310 var ZEROS = new Buffer(128)
13311 ZEROS.fill(0)
13312
13313 function Hmac(alg, key) {
13314 Transform.call(this)
13315
13316 if (typeof key === 'string') {
13317 key = new Buffer(key)
13318 }
13319
13320 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
13321
13322 this._alg = alg
13323 this._key = key
13324
13325 if (key.length > blocksize) {
13326 key = createHash(alg).update(key).digest()
13327
13328 } else if (key.length < blocksize) {
13329 key = Buffer.concat([key, ZEROS], blocksize)
13330 }
13331
13332 var ipad = this._ipad = new Buffer(blocksize)
13333 var opad = this._opad = new Buffer(blocksize)
13334
13335 for (var i = 0; i < blocksize; i++) {
13336 ipad[i] = key[i] ^ 0x36
13337 opad[i] = key[i] ^ 0x5C
13338 }
13339
13340 this._hash = createHash(alg).update(ipad)
13341 }
13342
13343 inherits(Hmac, Transform)
13344
13345 Hmac.prototype.update = function (data, enc) {
13346 this._hash.update(data, enc)
13347
13348 return this
13349 }
13350
13351 Hmac.prototype._transform = function (data, _, next) {
13352 this._hash.update(data)
13353
13354 next()
13355 }
13356
13357 Hmac.prototype._flush = function (next) {
13358 this.push(this.digest())
13359
13360 next()
13361 }
13362
13363 Hmac.prototype.digest = function (enc) {
13364 var h = this._hash.digest()
13365
13366 return createHash(this._alg).update(this._opad).update(h).digest(enc)
13367 }
13368
13369 module.exports = function createHmac(alg, key) {
13370 return new Hmac(alg, key)
13371 }
13372
13373 }).call(this,require("buffer").Buffer)
13374 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
13375 arguments[4][12][0].apply(exports,arguments)
13376 },{"dup":12}],47:[function(require,module,exports){
13377 var assert = require('assert')
13378 var BigInteger = require('bigi')
13379
13380 var Point = require('./point')
13381
13382 function Curve(p, a, b, Gx, Gy, n, h) {
13383 this.p = p
13384 this.a = a
13385 this.b = b
13386 this.G = Point.fromAffine(this, Gx, Gy)
13387 this.n = n
13388 this.h = h
13389
13390 this.infinity = new Point(this, null, null, BigInteger.ZERO)
13391
13392 // result caching
13393 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
13394 }
13395
13396 Curve.prototype.pointFromX = function(isOdd, x) {
13397 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
13398 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
13399
13400 var y = beta
13401 if (beta.isEven() ^ !isOdd) {
13402 y = this.p.subtract(y) // -y % p
13403 }
13404
13405 return Point.fromAffine(this, x, y)
13406 }
13407
13408 Curve.prototype.isInfinity = function(Q) {
13409 if (Q === this.infinity) return true
13410
13411 return Q.z.signum() === 0 && Q.y.signum() !== 0
13412 }
13413
13414 Curve.prototype.isOnCurve = function(Q) {
13415 if (this.isInfinity(Q)) return true
13416
13417 var x = Q.affineX
13418 var y = Q.affineY
13419 var a = this.a
13420 var b = this.b
13421 var p = this.p
13422
13423 // Check that xQ and yQ are integers in the interval [0, p - 1]
13424 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
13425 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
13426
13427 // and check that y^2 = x^3 + ax + b (mod p)
13428 var lhs = y.square().mod(p)
13429 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
13430 return lhs.equals(rhs)
13431 }
13432
13433 /**
13434 * Validate an elliptic curve point.
13435 *
13436 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
13437 */
13438 Curve.prototype.validate = function(Q) {
13439 // Check Q != O
13440 assert(!this.isInfinity(Q), 'Point is at infinity')
13441 assert(this.isOnCurve(Q), 'Point is not on the curve')
13442
13443 // Check nQ = O (where Q is a scalar multiple of G)
13444 var nQ = Q.multiply(this.n)
13445 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
13446
13447 return true
13448 }
13449
13450 module.exports = Curve
13451
13452 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
13453 module.exports={
13454 "secp128r1": {
13455 "p": "fffffffdffffffffffffffffffffffff",
13456 "a": "fffffffdfffffffffffffffffffffffc",
13457 "b": "e87579c11079f43dd824993c2cee5ed3",
13458 "n": "fffffffe0000000075a30d1b9038a115",
13459 "h": "01",
13460 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
13461 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
13462 },
13463 "secp160k1": {
13464 "p": "fffffffffffffffffffffffffffffffeffffac73",
13465 "a": "00",
13466 "b": "07",
13467 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
13468 "h": "01",
13469 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
13470 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
13471 },
13472 "secp160r1": {
13473 "p": "ffffffffffffffffffffffffffffffff7fffffff",
13474 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
13475 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
13476 "n": "0100000000000000000001f4c8f927aed3ca752257",
13477 "h": "01",
13478 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
13479 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
13480 },
13481 "secp192k1": {
13482 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
13483 "a": "00",
13484 "b": "03",
13485 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
13486 "h": "01",
13487 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
13488 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
13489 },
13490 "secp192r1": {
13491 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
13492 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
13493 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
13494 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
13495 "h": "01",
13496 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
13497 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
13498 },
13499 "secp256k1": {
13500 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
13501 "a": "00",
13502 "b": "07",
13503 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
13504 "h": "01",
13505 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
13506 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
13507 },
13508 "secp256r1": {
13509 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
13510 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
13511 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
13512 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
13513 "h": "01",
13514 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
13515 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
13516 }
13517 }
13518
13519 },{}],49:[function(require,module,exports){
13520 var Point = require('./point')
13521 var Curve = require('./curve')
13522
13523 var getCurveByName = require('./names')
13524
13525 module.exports = {
13526 Curve: Curve,
13527 Point: Point,
13528 getCurveByName: getCurveByName
13529 }
13530
13531 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
13532 var BigInteger = require('bigi')
13533
13534 var curves = require('./curves')
13535 var Curve = require('./curve')
13536
13537 function getCurveByName(name) {
13538 var curve = curves[name]
13539 if (!curve) return null
13540
13541 var p = new BigInteger(curve.p, 16)
13542 var a = new BigInteger(curve.a, 16)
13543 var b = new BigInteger(curve.b, 16)
13544 var n = new BigInteger(curve.n, 16)
13545 var h = new BigInteger(curve.h, 16)
13546 var Gx = new BigInteger(curve.Gx, 16)
13547 var Gy = new BigInteger(curve.Gy, 16)
13548
13549 return new Curve(p, a, b, Gx, Gy, n, h)
13550 }
13551
13552 module.exports = getCurveByName
13553
13554 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
13555 (function (Buffer){
13556 var assert = require('assert')
13557 var BigInteger = require('bigi')
13558
13559 var THREE = BigInteger.valueOf(3)
13560
13561 function Point(curve, x, y, z) {
13562 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
13563
13564 this.curve = curve
13565 this.x = x
13566 this.y = y
13567 this.z = z
13568 this._zInv = null
13569
13570 this.compressed = true
13571 }
13572
13573 Object.defineProperty(Point.prototype, 'zInv', {
13574 get: function() {
13575 if (this._zInv === null) {
13576 this._zInv = this.z.modInverse(this.curve.p)
13577 }
13578
13579 return this._zInv
13580 }
13581 })
13582
13583 Object.defineProperty(Point.prototype, 'affineX', {
13584 get: function() {
13585 return this.x.multiply(this.zInv).mod(this.curve.p)
13586 }
13587 })
13588
13589 Object.defineProperty(Point.prototype, 'affineY', {
13590 get: function() {
13591 return this.y.multiply(this.zInv).mod(this.curve.p)
13592 }
13593 })
13594
13595 Point.fromAffine = function(curve, x, y) {
13596 return new Point(curve, x, y, BigInteger.ONE)
13597 }
13598
13599 Point.prototype.equals = function(other) {
13600 if (other === this) return true
13601 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
13602 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
13603
13604 // u = Y2 * Z1 - Y1 * Z2
13605 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
13606
13607 if (u.signum() !== 0) return false
13608
13609 // v = X2 * Z1 - X1 * Z2
13610 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
13611
13612 return v.signum() === 0
13613 }
13614
13615 Point.prototype.negate = function() {
13616 var y = this.curve.p.subtract(this.y)
13617
13618 return new Point(this.curve, this.x, y, this.z)
13619 }
13620
13621 Point.prototype.add = function(b) {
13622 if (this.curve.isInfinity(this)) return b
13623 if (this.curve.isInfinity(b)) return this
13624
13625 var x1 = this.x
13626 var y1 = this.y
13627 var x2 = b.x
13628 var y2 = b.y
13629
13630 // u = Y2 * Z1 - Y1 * Z2
13631 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
13632 // v = X2 * Z1 - X1 * Z2
13633 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
13634
13635 if (v.signum() === 0) {
13636 if (u.signum() === 0) {
13637 return this.twice() // this == b, so double
13638 }
13639
13640 return this.curve.infinity // this = -b, so infinity
13641 }
13642
13643 var v2 = v.square()
13644 var v3 = v2.multiply(v)
13645 var x1v2 = x1.multiply(v2)
13646 var zu2 = u.square().multiply(this.z)
13647
13648 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
13649 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
13650 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
13651 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)
13652 // z3 = v^3 * z1 * z2
13653 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
13654
13655 return new Point(this.curve, x3, y3, z3)
13656 }
13657
13658 Point.prototype.twice = function() {
13659 if (this.curve.isInfinity(this)) return this
13660 if (this.y.signum() === 0) return this.curve.infinity
13661
13662 var x1 = this.x
13663 var y1 = this.y
13664
13665 var y1z1 = y1.multiply(this.z)
13666 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
13667 var a = this.curve.a
13668
13669 // w = 3 * x1^2 + a * z1^2
13670 var w = x1.square().multiply(THREE)
13671
13672 if (a.signum() !== 0) {
13673 w = w.add(this.z.square().multiply(a))
13674 }
13675
13676 w = w.mod(this.curve.p)
13677 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
13678 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
13679 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
13680 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
13681 // z3 = 8 * (y1 * z1)^3
13682 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
13683
13684 return new Point(this.curve, x3, y3, z3)
13685 }
13686
13687 // Simple NAF (Non-Adjacent Form) multiplication algorithm
13688 // TODO: modularize the multiplication algorithm
13689 Point.prototype.multiply = function(k) {
13690 if (this.curve.isInfinity(this)) return this
13691 if (k.signum() === 0) return this.curve.infinity
13692
13693 var e = k
13694 var h = e.multiply(THREE)
13695
13696 var neg = this.negate()
13697 var R = this
13698
13699 for (var i = h.bitLength() - 2; i > 0; --i) {
13700 R = R.twice()
13701
13702 var hBit = h.testBit(i)
13703 var eBit = e.testBit(i)
13704
13705 if (hBit != eBit) {
13706 R = R.add(hBit ? this : neg)
13707 }
13708 }
13709
13710 return R
13711 }
13712
13713 // Compute this*j + x*k (simultaneous multiplication)
13714 Point.prototype.multiplyTwo = function(j, x, k) {
13715 var i
13716
13717 if (j.bitLength() > k.bitLength())
13718 i = j.bitLength() - 1
13719 else
13720 i = k.bitLength() - 1
13721
13722 var R = this.curve.infinity
13723 var both = this.add(x)
13724
13725 while (i >= 0) {
13726 R = R.twice()
13727
13728 var jBit = j.testBit(i)
13729 var kBit = k.testBit(i)
13730
13731 if (jBit) {
13732 if (kBit) {
13733 R = R.add(both)
13734
13735 } else {
13736 R = R.add(this)
13737 }
13738
13739 } else {
13740 if (kBit) {
13741 R = R.add(x)
13742 }
13743 }
13744 --i
13745 }
13746
13747 return R
13748 }
13749
13750 Point.prototype.getEncoded = function(compressed) {
13751 if (compressed == undefined) compressed = this.compressed
13752 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
13753
13754 var x = this.affineX
13755 var y = this.affineY
13756
13757 var buffer
13758
13759 // Determine size of q in bytes
13760 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
13761
13762 // 0x02/0x03 | X
13763 if (compressed) {
13764 buffer = new Buffer(1 + byteLength)
13765 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
13766
13767 // 0x04 | X | Y
13768 } else {
13769 buffer = new Buffer(1 + byteLength + byteLength)
13770 buffer.writeUInt8(0x04, 0)
13771
13772 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
13773 }
13774
13775 x.toBuffer(byteLength).copy(buffer, 1)
13776
13777 return buffer
13778 }
13779
13780 Point.decodeFrom = function(curve, buffer) {
13781 var type = buffer.readUInt8(0)
13782 var compressed = (type !== 4)
13783
13784 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
13785 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
13786
13787 var Q
13788 if (compressed) {
13789 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
13790 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
13791
13792 var isOdd = (type === 0x03)
13793 Q = curve.pointFromX(isOdd, x)
13794
13795 } else {
13796 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
13797
13798 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
13799 Q = Point.fromAffine(curve, x, y)
13800 }
13801
13802 Q.compressed = compressed
13803 return Q
13804 }
13805
13806 Point.prototype.toString = function () {
13807 if (this.curve.isInfinity(this)) return '(INFINITY)'
13808
13809 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
13810 }
13811
13812 module.exports = Point
13813
13814 }).call(this,require("buffer").Buffer)
13815 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
13816 (function (process,global,Buffer){
13817 'use strict';
13818
13819 var crypto = global.crypto || global.msCrypto
13820 if(crypto && crypto.getRandomValues) {
13821 module.exports = randomBytes;
13822 } else {
13823 module.exports = oldBrowser;
13824 }
13825 function randomBytes(size, cb) {
13826 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
13827 /* This will not work in older browsers.
13828 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
13829 */
13830
13831 crypto.getRandomValues(bytes);
13832 if (typeof cb === 'function') {
13833 return process.nextTick(function () {
13834 cb(null, bytes);
13835 });
13836 }
13837 return bytes;
13838 }
13839 function oldBrowser() {
13840 throw new Error(
13841 'secure random number generation not supported by this browser\n'+
13842 'use chrome, FireFox or Internet Explorer 11'
13843 )
13844 }
13845
13846 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
13847 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
13848 (function (Buffer){
13849 'use strict';
13850
13851 function getFunctionName(fn) {
13852 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
13853 }
13854
13855 function getTypeTypeName(type) {
13856 if (nativeTypes.Function(type)) {
13857 type = type.toJSON ? type.toJSON() : getFunctionName(type);
13858 }
13859 if (nativeTypes.Object(type)) return JSON.stringify(type);
13860
13861 return type;
13862 }
13863
13864 function getValueTypeName(value) {
13865 if (nativeTypes.Null(value)) return '';
13866
13867 return getFunctionName(value.constructor);
13868 }
13869
13870 function tfErrorString(type, value) {
13871 var typeTypeName = getTypeTypeName(type);
13872 var valueTypeName = getValueTypeName(value);
13873
13874 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
13875 }
13876
13877 function tfPropertyErrorString(type, name, value) {
13878 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
13879 }
13880
13881 var nativeTypes = {
13882 Array: (function (_Array) {
13883 function Array(_x) {
13884 return _Array.apply(this, arguments);
13885 }
13886
13887 Array.toString = function () {
13888 return _Array.toString();
13889 };
13890
13891 return Array;
13892 })(function (value) {
13893 return value !== null && value !== undefined && value.constructor === Array;
13894 }),
13895 Boolean: function Boolean(value) {
13896 return typeof value === 'boolean';
13897 },
13898 Buffer: (function (_Buffer) {
13899 function Buffer(_x2) {
13900 return _Buffer.apply(this, arguments);
13901 }
13902
13903 Buffer.toString = function () {
13904 return _Buffer.toString();
13905 };
13906
13907 return Buffer;
13908 })(function (value) {
13909 return Buffer.isBuffer(value);
13910 }),
13911 Function: function Function(value) {
13912 return typeof value === 'function';
13913 },
13914 Null: function Null(value) {
13915 return value === undefined || value === null;
13916 },
13917 Number: function Number(value) {
13918 return typeof value === 'number';
13919 },
13920 Object: function Object(value) {
13921 return typeof value === 'object';
13922 },
13923 String: function String(value) {
13924 return typeof value === 'string';
13925 },
13926 '': function _() {
13927 return true;
13928 }
13929 };
13930
13931 function tJSON(type) {
13932 return type && type.toJSON ? type.toJSON() : type;
13933 }
13934
13935 function sJSON(type) {
13936 var json = tJSON(type);
13937 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
13938 }
13939
13940 var otherTypes = {
13941 arrayOf: function arrayOf(type) {
13942 function arrayOf(value, strict) {
13943 try {
13944 return nativeTypes.Array(value) && value.every(function (x) {
13945 return typeforce(type, x, strict);
13946 });
13947 } catch (e) {
13948 return false;
13949 }
13950 }
13951 arrayOf.toJSON = function () {
13952 return [tJSON(type)];
13953 };
13954
13955 return arrayOf;
13956 },
13957
13958 maybe: function maybe(type) {
13959 function maybe(value, strict) {
13960 return nativeTypes.Null(value) || typeforce(type, value, strict);
13961 }
13962 maybe.toJSON = function () {
13963 return '?' + sJSON(type);
13964 };
13965
13966 return maybe;
13967 },
13968
13969 object: function object(type) {
13970 function object(value, strict) {
13971 typeforce(nativeTypes.Object, value, strict);
13972
13973 var propertyName, propertyType, propertyValue;
13974
13975 try {
13976 for (propertyName in type) {
13977 propertyType = type[propertyName];
13978 propertyValue = value[propertyName];
13979
13980 typeforce(propertyType, propertyValue, strict);
13981 }
13982 } catch (e) {
13983 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
13984 }
13985
13986 if (strict) {
13987 for (propertyName in value) {
13988 if (type[propertyName]) continue;
13989
13990 throw new TypeError('Unexpected property "' + propertyName + '"');
13991 }
13992 }
13993
13994 return true;
13995 }
13996 object.toJSON = function () {
13997 return type;
13998 };
13999
14000 return object;
14001 },
14002
14003 oneOf: function oneOf() {
14004 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14005 types[_key] = arguments[_key];
14006 }
14007
14008 function oneOf(value, strict) {
14009 return types.some(function (type) {
14010 try {
14011 return typeforce(type, value, strict);
14012 } catch (e) {
14013 return false;
14014 }
14015 });
14016 }
14017 oneOf.toJSON = function () {
14018 return types.map(sJSON).join('|');
14019 };
14020
14021 return oneOf;
14022 },
14023
14024 quacksLike: function quacksLike(type) {
14025 function quacksLike(value, strict) {
14026 return type === getValueTypeName(value);
14027 }
14028 quacksLike.toJSON = function () {
14029 return type;
14030 };
14031
14032 return quacksLike;
14033 },
14034
14035 tuple: function tuple() {
14036 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14037 types[_key2] = arguments[_key2];
14038 }
14039
14040 function tuple(value, strict) {
14041 return types.every(function (type, i) {
14042 return typeforce(type, value[i], strict);
14043 });
14044 }
14045 tuple.toJSON = function () {
14046 return '(' + types.map(sJSON).join(', ') + ')';
14047 };
14048
14049 return tuple;
14050 },
14051
14052 value: function value(expected) {
14053 function value(actual) {
14054 return actual === expected;
14055 }
14056 value.toJSON = function () {
14057 return expected;
14058 };
14059
14060 return value;
14061 }
14062 };
14063
14064 function compile(type) {
14065 if (nativeTypes.String(type)) {
14066 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14067
14068 return nativeTypes[type] || otherTypes.quacksLike(type);
14069 } else if (type && nativeTypes.Object(type)) {
14070 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14071
14072 var compiled = {};
14073
14074 for (var propertyName in type) {
14075 compiled[propertyName] = compile(type[propertyName]);
14076 }
14077
14078 return otherTypes.object(compiled);
14079 } else if (nativeTypes.Function(type)) {
14080 return type;
14081 }
14082
14083 return otherTypes.value(type);
14084 }
14085
14086 function typeforce(_x3, _x4, _x5) {
14087 var _again = true;
14088
14089 _function: while (_again) {
14090 var type = _x3,
14091 value = _x4,
14092 strict = _x5;
14093 _again = false;
14094
14095 if (nativeTypes.Function(type)) {
14096 if (type(value, strict)) return true;
14097
14098 throw new TypeError(tfErrorString(type, value));
14099 }
14100
14101 // JIT
14102 _x3 = compile(type);
14103 _x4 = value;
14104 _x5 = strict;
14105 _again = true;
14106 continue _function;
14107 }
14108 }
14109
14110 // assign all types to typeforce function
14111 var typeName;
14112 Object.keys(nativeTypes).forEach(function (typeName) {
14113 var nativeType = nativeTypes[typeName];
14114 nativeType.toJSON = function () {
14115 return typeName;
14116 };
14117
14118 typeforce[typeName] = nativeType;
14119 });
14120
14121 for (typeName in otherTypes) {
14122 typeforce[typeName] = otherTypes[typeName];
14123 }
14124
14125 module.exports = typeforce;
14126 module.exports.compile = compile;
14127 }).call(this,require("buffer").Buffer)
14128 },{"buffer":7}],54:[function(require,module,exports){
14129 (function (Buffer){
14130 var assert = require('assert')
14131 var base58check = require('bs58check')
14132 var typeForce = require('typeforce')
14133 var networks = require('./networks')
14134 var scripts = require('./scripts')
14135
14136 function findScriptTypeByVersion (version) {
14137 for (var networkName in networks) {
14138 var network = networks[networkName]
14139
14140 if (version === network.pubKeyHash) return 'pubkeyhash'
14141 if (version === network.scriptHash) return 'scripthash'
14142 }
14143 }
14144
14145 function Address (hash, version) {
14146 typeForce('Buffer', hash)
14147
14148 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14149 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14150
14151 this.hash = hash
14152 this.version = version
14153 }
14154
14155 Address.fromBase58Check = function (string) {
14156 var payload = base58check.decode(string)
14157 var version = payload.readUInt8(0)
14158 var hash = payload.slice(1)
14159
14160 return new Address(hash, version)
14161 }
14162
14163 Address.fromOutputScript = function (script, network) {
14164 network = network || networks.bitcoin
14165
14166 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14167 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14168
14169 assert(false, script.toASM() + ' has no matching Address')
14170 }
14171
14172 Address.prototype.toBase58Check = function () {
14173 var payload = new Buffer(21)
14174 payload.writeUInt8(this.version, 0)
14175 this.hash.copy(payload, 1)
14176
14177 return base58check.encode(payload)
14178 }
14179
14180 Address.prototype.toOutputScript = function () {
14181 var scriptType = findScriptTypeByVersion(this.version)
14182
14183 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14184 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14185
14186 assert(false, this.toString() + ' has no matching Script')
14187 }
14188
14189 Address.prototype.toString = Address.prototype.toBase58Check
14190
14191 module.exports = Address
14192
14193 }).call(this,require("buffer").Buffer)
14194 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14195 var bs58check = require('bs58check')
14196
14197 function decode () {
14198 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14199
14200 return bs58check.decode.apply(undefined, arguments)
14201 }
14202
14203 function encode () {
14204 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14205
14206 return bs58check.encode.apply(undefined, arguments)
14207 }
14208
14209 module.exports = {
14210 decode: decode,
14211 encode: encode
14212 }
14213
14214 },{"bs58check":31}],56:[function(require,module,exports){
14215 (function (Buffer){
14216 var assert = require('assert')
14217 var bufferutils = require('./bufferutils')
14218 var crypto = require('./crypto')
14219
14220 var Transaction = require('./transaction')
14221
14222 function Block () {
14223 this.version = 1
14224 this.prevHash = null
14225 this.merkleRoot = null
14226 this.timestamp = 0
14227 this.bits = 0
14228 this.nonce = 0
14229 }
14230
14231 Block.fromBuffer = function (buffer) {
14232 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
14233
14234 var offset = 0
14235 function readSlice (n) {
14236 offset += n
14237 return buffer.slice(offset - n, offset)
14238 }
14239
14240 function readUInt32 () {
14241 var i = buffer.readUInt32LE(offset)
14242 offset += 4
14243 return i
14244 }
14245
14246 var block = new Block()
14247 block.version = readUInt32()
14248 block.prevHash = readSlice(32)
14249 block.merkleRoot = readSlice(32)
14250 block.timestamp = readUInt32()
14251 block.bits = readUInt32()
14252 block.nonce = readUInt32()
14253
14254 if (buffer.length === 80) return block
14255
14256 function readVarInt () {
14257 var vi = bufferutils.readVarInt(buffer, offset)
14258 offset += vi.size
14259 return vi.number
14260 }
14261
14262 // FIXME: poor performance
14263 function readTransaction () {
14264 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
14265
14266 offset += tx.toBuffer().length
14267 return tx
14268 }
14269
14270 var nTransactions = readVarInt()
14271 block.transactions = []
14272
14273 for (var i = 0; i < nTransactions; ++i) {
14274 var tx = readTransaction()
14275 block.transactions.push(tx)
14276 }
14277
14278 return block
14279 }
14280
14281 Block.fromHex = function (hex) {
14282 return Block.fromBuffer(new Buffer(hex, 'hex'))
14283 }
14284
14285 Block.prototype.getHash = function () {
14286 return crypto.hash256(this.toBuffer(true))
14287 }
14288
14289 Block.prototype.getId = function () {
14290 return bufferutils.reverse(this.getHash()).toString('hex')
14291 }
14292
14293 Block.prototype.getUTCDate = function () {
14294 var date = new Date(0) // epoch
14295 date.setUTCSeconds(this.timestamp)
14296
14297 return date
14298 }
14299
14300 Block.prototype.toBuffer = function (headersOnly) {
14301 var buffer = new Buffer(80)
14302
14303 var offset = 0
14304 function writeSlice (slice) {
14305 slice.copy(buffer, offset)
14306 offset += slice.length
14307 }
14308
14309 function writeUInt32 (i) {
14310 buffer.writeUInt32LE(i, offset)
14311 offset += 4
14312 }
14313
14314 writeUInt32(this.version)
14315 writeSlice(this.prevHash)
14316 writeSlice(this.merkleRoot)
14317 writeUInt32(this.timestamp)
14318 writeUInt32(this.bits)
14319 writeUInt32(this.nonce)
14320
14321 if (headersOnly || !this.transactions) return buffer
14322
14323 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
14324 var txBuffers = this.transactions.map(function (tx) {
14325 return tx.toBuffer()
14326 })
14327
14328 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
14329 }
14330
14331 Block.prototype.toHex = function (headersOnly) {
14332 return this.toBuffer(headersOnly).toString('hex')
14333 }
14334
14335 module.exports = Block
14336
14337 }).call(this,require("buffer").Buffer)
14338 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
14339 (function (Buffer){
14340 var assert = require('assert')
14341 var opcodes = require('./opcodes')
14342
14343 // https://github.com/feross/buffer/blob/master/index.js#L1127
14344 function verifuint (value, max) {
14345 assert(typeof value === 'number', 'cannot write a non-number as a number')
14346 assert(value >= 0, 'specified a negative value for writing an unsigned value')
14347 assert(value <= max, 'value is larger than maximum value for type')
14348 assert(Math.floor(value) === value, 'value has a fractional component')
14349 }
14350
14351 function pushDataSize (i) {
14352 return i < opcodes.OP_PUSHDATA1 ? 1
14353 : i < 0xff ? 2
14354 : i < 0xffff ? 3
14355 : 5
14356 }
14357
14358 function readPushDataInt (buffer, offset) {
14359 var opcode = buffer.readUInt8(offset)
14360 var number, size
14361
14362 // ~6 bit
14363 if (opcode < opcodes.OP_PUSHDATA1) {
14364 number = opcode
14365 size = 1
14366
14367 // 8 bit
14368 } else if (opcode === opcodes.OP_PUSHDATA1) {
14369 if (offset + 2 > buffer.length) return null
14370 number = buffer.readUInt8(offset + 1)
14371 size = 2
14372
14373 // 16 bit
14374 } else if (opcode === opcodes.OP_PUSHDATA2) {
14375 if (offset + 3 > buffer.length) return null
14376 number = buffer.readUInt16LE(offset + 1)
14377 size = 3
14378
14379 // 32 bit
14380 } else {
14381 if (offset + 5 > buffer.length) return null
14382 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
14383
14384 number = buffer.readUInt32LE(offset + 1)
14385 size = 5
14386 }
14387
14388 return {
14389 opcode: opcode,
14390 number: number,
14391 size: size
14392 }
14393 }
14394
14395 function readUInt64LE (buffer, offset) {
14396 var a = buffer.readUInt32LE(offset)
14397 var b = buffer.readUInt32LE(offset + 4)
14398 b *= 0x100000000
14399
14400 verifuint(b + a, 0x001fffffffffffff)
14401
14402 return b + a
14403 }
14404
14405 function readVarInt (buffer, offset) {
14406 var t = buffer.readUInt8(offset)
14407 var number, size
14408
14409 // 8 bit
14410 if (t < 253) {
14411 number = t
14412 size = 1
14413
14414 // 16 bit
14415 } else if (t < 254) {
14416 number = buffer.readUInt16LE(offset + 1)
14417 size = 3
14418
14419 // 32 bit
14420 } else if (t < 255) {
14421 number = buffer.readUInt32LE(offset + 1)
14422 size = 5
14423
14424 // 64 bit
14425 } else {
14426 number = readUInt64LE(buffer, offset + 1)
14427 size = 9
14428 }
14429
14430 return {
14431 number: number,
14432 size: size
14433 }
14434 }
14435
14436 function writePushDataInt (buffer, number, offset) {
14437 var size = pushDataSize(number)
14438
14439 // ~6 bit
14440 if (size === 1) {
14441 buffer.writeUInt8(number, offset)
14442
14443 // 8 bit
14444 } else if (size === 2) {
14445 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
14446 buffer.writeUInt8(number, offset + 1)
14447
14448 // 16 bit
14449 } else if (size === 3) {
14450 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
14451 buffer.writeUInt16LE(number, offset + 1)
14452
14453 // 32 bit
14454 } else {
14455 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
14456 buffer.writeUInt32LE(number, offset + 1)
14457 }
14458
14459 return size
14460 }
14461
14462 function writeUInt64LE (buffer, value, offset) {
14463 verifuint(value, 0x001fffffffffffff)
14464
14465 buffer.writeInt32LE(value & -1, offset)
14466 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
14467 }
14468
14469 function varIntSize (i) {
14470 return i < 253 ? 1
14471 : i < 0x10000 ? 3
14472 : i < 0x100000000 ? 5
14473 : 9
14474 }
14475
14476 function writeVarInt (buffer, number, offset) {
14477 var size = varIntSize(number)
14478
14479 // 8 bit
14480 if (size === 1) {
14481 buffer.writeUInt8(number, offset)
14482
14483 // 16 bit
14484 } else if (size === 3) {
14485 buffer.writeUInt8(253, offset)
14486 buffer.writeUInt16LE(number, offset + 1)
14487
14488 // 32 bit
14489 } else if (size === 5) {
14490 buffer.writeUInt8(254, offset)
14491 buffer.writeUInt32LE(number, offset + 1)
14492
14493 // 64 bit
14494 } else {
14495 buffer.writeUInt8(255, offset)
14496 writeUInt64LE(buffer, number, offset + 1)
14497 }
14498
14499 return size
14500 }
14501
14502 function varIntBuffer (i) {
14503 var size = varIntSize(i)
14504 var buffer = new Buffer(size)
14505 writeVarInt(buffer, i, 0)
14506
14507 return buffer
14508 }
14509
14510 function reverse (buffer) {
14511 var buffer2 = new Buffer(buffer)
14512 Array.prototype.reverse.call(buffer2)
14513 return buffer2
14514 }
14515
14516 module.exports = {
14517 pushDataSize: pushDataSize,
14518 readPushDataInt: readPushDataInt,
14519 readUInt64LE: readUInt64LE,
14520 readVarInt: readVarInt,
14521 reverse: reverse,
14522 varIntBuffer: varIntBuffer,
14523 varIntSize: varIntSize,
14524 writePushDataInt: writePushDataInt,
14525 writeUInt64LE: writeUInt64LE,
14526 writeVarInt: writeVarInt
14527 }
14528
14529 }).call(this,require("buffer").Buffer)
14530 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
14531 var createHash = require('create-hash')
14532
14533 function hash160 (buffer) {
14534 return ripemd160(sha256(buffer))
14535 }
14536
14537 function hash256 (buffer) {
14538 return sha256(sha256(buffer))
14539 }
14540
14541 function ripemd160 (buffer) {
14542 return createHash('rmd160').update(buffer).digest()
14543 }
14544
14545 function sha1 (buffer) {
14546 return createHash('sha1').update(buffer).digest()
14547 }
14548
14549 function sha256 (buffer) {
14550 return createHash('sha256').update(buffer).digest()
14551 }
14552
14553 // FIXME: Name not consistent with others
14554 var createHmac = require('create-hmac')
14555
14556 function HmacSHA256 (buffer, secret) {
14557 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
14558 return createHmac('sha256', secret).update(buffer).digest()
14559 }
14560
14561 function HmacSHA512 (buffer, secret) {
14562 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
14563 return createHmac('sha512', secret).update(buffer).digest()
14564 }
14565
14566 module.exports = {
14567 ripemd160: ripemd160,
14568 sha1: sha1,
14569 sha256: sha256,
14570 hash160: hash160,
14571 hash256: hash256,
14572 HmacSHA256: HmacSHA256,
14573 HmacSHA512: HmacSHA512
14574 }
14575
14576 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
14577 (function (Buffer){
14578 var assert = require('assert')
14579 var createHmac = require('create-hmac')
14580 var typeForce = require('typeforce')
14581
14582 var BigInteger = require('bigi')
14583 var ECSignature = require('./ecsignature')
14584
14585 var ZERO = new Buffer([0])
14586 var ONE = new Buffer([1])
14587
14588 // https://tools.ietf.org/html/rfc6979#section-3.2
14589 function deterministicGenerateK (curve, hash, d, checkSig) {
14590 typeForce('Buffer', hash)
14591 typeForce('BigInteger', d)
14592
14593 // FIXME: remove/uncomment for 2.0.0
14594 // typeForce('Function', checkSig)
14595
14596 if (typeof checkSig !== 'function') {
14597 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
14598
14599 checkSig = function (k) {
14600 var G = curve.G
14601 var n = curve.n
14602 var e = BigInteger.fromBuffer(hash)
14603
14604 var Q = G.multiply(k)
14605
14606 if (curve.isInfinity(Q))
14607 return false
14608
14609 var r = Q.affineX.mod(n)
14610 if (r.signum() === 0)
14611 return false
14612
14613 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
14614 if (s.signum() === 0)
14615 return false
14616
14617 return true
14618 }
14619 }
14620
14621 // sanity check
14622 assert.equal(hash.length, 32, 'Hash must be 256 bit')
14623
14624 var x = d.toBuffer(32)
14625 var k = new Buffer(32)
14626 var v = new Buffer(32)
14627
14628 // Step A, ignored as hash already provided
14629 // Step B
14630 v.fill(1)
14631
14632 // Step C
14633 k.fill(0)
14634
14635 // Step D
14636 k = createHmac('sha256', k)
14637 .update(v)
14638 .update(ZERO)
14639 .update(x)
14640 .update(hash)
14641 .digest()
14642
14643 // Step E
14644 v = createHmac('sha256', k).update(v).digest()
14645
14646 // Step F
14647 k = createHmac('sha256', k)
14648 .update(v)
14649 .update(ONE)
14650 .update(x)
14651 .update(hash)
14652 .digest()
14653
14654 // Step G
14655 v = createHmac('sha256', k).update(v).digest()
14656
14657 // Step H1/H2a, ignored as tlen === qlen (256 bit)
14658 // Step H2b
14659 v = createHmac('sha256', k).update(v).digest()
14660
14661 var T = BigInteger.fromBuffer(v)
14662
14663 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
14664 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
14665 k = createHmac('sha256', k)
14666 .update(v)
14667 .update(ZERO)
14668 .digest()
14669
14670 v = createHmac('sha256', k).update(v).digest()
14671
14672 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
14673 // Step H2b again
14674 v = createHmac('sha256', k).update(v).digest()
14675 T = BigInteger.fromBuffer(v)
14676 }
14677
14678 return T
14679 }
14680
14681 function sign (curve, hash, d) {
14682 var r, s
14683
14684 var e = BigInteger.fromBuffer(hash)
14685 var n = curve.n
14686 var G = curve.G
14687
14688 deterministicGenerateK(curve, hash, d, function (k) {
14689 var Q = G.multiply(k)
14690
14691 if (curve.isInfinity(Q))
14692 return false
14693
14694 r = Q.affineX.mod(n)
14695 if (r.signum() === 0)
14696 return false
14697
14698 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
14699 if (s.signum() === 0)
14700 return false
14701
14702 return true
14703 })
14704
14705 var N_OVER_TWO = n.shiftRight(1)
14706
14707 // enforce low S values, see bip62: 'low s values in signatures'
14708 if (s.compareTo(N_OVER_TWO) > 0) {
14709 s = n.subtract(s)
14710 }
14711
14712 return new ECSignature(r, s)
14713 }
14714
14715 function verifyRaw (curve, e, signature, Q) {
14716 var n = curve.n
14717 var G = curve.G
14718
14719 var r = signature.r
14720 var s = signature.s
14721
14722 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
14723 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
14724 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
14725
14726 // c = s^-1 mod n
14727 var c = s.modInverse(n)
14728
14729 // 1.4.4 Compute u1 = es^−1 mod n
14730 // u2 = rs^−1 mod n
14731 var u1 = e.multiply(c).mod(n)
14732 var u2 = r.multiply(c).mod(n)
14733
14734 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
14735 var R = G.multiplyTwo(u1, Q, u2)
14736 var v = R.affineX.mod(n)
14737
14738 // 1.4.5 (cont.) Enforce R is not at infinity
14739 if (curve.isInfinity(R)) return false
14740
14741 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
14742 return v.equals(r)
14743 }
14744
14745 function verify (curve, hash, signature, Q) {
14746 // 1.4.2 H = Hash(M), already done by the user
14747 // 1.4.3 e = H
14748 var e = BigInteger.fromBuffer(hash)
14749
14750 return verifyRaw(curve, e, signature, Q)
14751 }
14752
14753 /**
14754 * Recover a public key from a signature.
14755 *
14756 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
14757 * Key Recovery Operation".
14758 *
14759 * http://www.secg.org/download/aid-780/sec1-v2.pdf
14760 */
14761 function recoverPubKey (curve, e, signature, i) {
14762 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
14763
14764 var n = curve.n
14765 var G = curve.G
14766
14767 var r = signature.r
14768 var s = signature.s
14769
14770 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
14771 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
14772
14773 // A set LSB signifies that the y-coordinate is odd
14774 var isYOdd = i & 1
14775
14776 // The more significant bit specifies whether we should use the
14777 // first or second candidate key.
14778 var isSecondKey = i >> 1
14779
14780 // 1.1 Let x = r + jn
14781 var x = isSecondKey ? r.add(n) : r
14782 var R = curve.pointFromX(isYOdd, x)
14783
14784 // 1.4 Check that nR is at infinity
14785 var nR = R.multiply(n)
14786 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
14787
14788 // Compute -e from e
14789 var eNeg = e.negate().mod(n)
14790
14791 // 1.6.1 Compute Q = r^-1 (sR - eG)
14792 // Q = r^-1 (sR + -eG)
14793 var rInv = r.modInverse(n)
14794
14795 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
14796 curve.validate(Q)
14797
14798 return Q
14799 }
14800
14801 /**
14802 * Calculate pubkey extraction parameter.
14803 *
14804 * When extracting a pubkey from a signature, we have to
14805 * distinguish four different cases. Rather than putting this
14806 * burden on the verifier, Bitcoin includes a 2-bit value with the
14807 * signature.
14808 *
14809 * This function simply tries all four cases and returns the value
14810 * that resulted in a successful pubkey recovery.
14811 */
14812 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
14813 for (var i = 0; i < 4; i++) {
14814 var Qprime = recoverPubKey(curve, e, signature, i)
14815
14816 // 1.6.2 Verify Q
14817 if (Qprime.equals(Q)) {
14818 return i
14819 }
14820 }
14821
14822 throw new Error('Unable to find valid recovery factor')
14823 }
14824
14825 module.exports = {
14826 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
14827 deterministicGenerateK: deterministicGenerateK,
14828 recoverPubKey: recoverPubKey,
14829 sign: sign,
14830 verify: verify,
14831 verifyRaw: verifyRaw
14832 }
14833
14834 }).call(this,require("buffer").Buffer)
14835 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
14836 (function (Buffer){
14837 var assert = require('assert')
14838 var base58check = require('bs58check')
14839 var ecdsa = require('./ecdsa')
14840 var networks = require('./networks')
14841 var randomBytes = require('randombytes')
14842 var typeForce = require('typeforce')
14843
14844 var BigInteger = require('bigi')
14845 var ECPubKey = require('./ecpubkey')
14846
14847 var ecurve = require('ecurve')
14848 var secp256k1 = ecurve.getCurveByName('secp256k1')
14849
14850 function ECKey (d, compressed) {
14851 assert(d.signum() > 0, 'Private key must be greater than 0')
14852 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
14853
14854 var Q = ECKey.curve.G.multiply(d)
14855
14856 this.d = d
14857 this.pub = new ECPubKey(Q, compressed)
14858 }
14859
14860 // Constants
14861 ECKey.curve = secp256k1
14862
14863 // Static constructors
14864 ECKey.fromWIF = function (string) {
14865 var payload = base58check.decode(string)
14866 var compressed = false
14867
14868 // Ignore the version byte
14869 payload = payload.slice(1)
14870
14871 if (payload.length === 33) {
14872 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
14873
14874 // Truncate the compression flag
14875 payload = payload.slice(0, -1)
14876 compressed = true
14877 }
14878
14879 assert.equal(payload.length, 32, 'Invalid WIF payload length')
14880
14881 var d = BigInteger.fromBuffer(payload)
14882 return new ECKey(d, compressed)
14883 }
14884
14885 ECKey.makeRandom = function (compressed, rng) {
14886 rng = rng || randomBytes
14887
14888 var buffer = rng(32)
14889 typeForce('Buffer', buffer)
14890 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
14891
14892 var d = BigInteger.fromBuffer(buffer)
14893 d = d.mod(ECKey.curve.n)
14894
14895 return new ECKey(d, compressed)
14896 }
14897
14898 // Export functions
14899 ECKey.prototype.toWIF = function (network) {
14900 network = network || networks.bitcoin
14901
14902 var bufferLen = this.pub.compressed ? 34 : 33
14903 var buffer = new Buffer(bufferLen)
14904
14905 buffer.writeUInt8(network.wif, 0)
14906 this.d.toBuffer(32).copy(buffer, 1)
14907
14908 if (this.pub.compressed) {
14909 buffer.writeUInt8(0x01, 33)
14910 }
14911
14912 return base58check.encode(buffer)
14913 }
14914
14915 // Operations
14916 ECKey.prototype.sign = function (hash) {
14917 return ecdsa.sign(ECKey.curve, hash, this.d)
14918 }
14919
14920 module.exports = ECKey
14921
14922 }).call(this,require("buffer").Buffer)
14923 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
14924 (function (Buffer){
14925 var crypto = require('./crypto')
14926 var ecdsa = require('./ecdsa')
14927 var typeForce = require('typeforce')
14928 var networks = require('./networks')
14929
14930 var Address = require('./address')
14931
14932 var ecurve = require('ecurve')
14933 var secp256k1 = ecurve.getCurveByName('secp256k1')
14934
14935 function ECPubKey (Q, compressed) {
14936 if (compressed === undefined) {
14937 compressed = true
14938 }
14939
14940 typeForce('Point', Q)
14941 typeForce('Boolean', compressed)
14942
14943 this.compressed = compressed
14944 this.Q = Q
14945 }
14946
14947 // Constants
14948 ECPubKey.curve = secp256k1
14949
14950 // Static constructors
14951 ECPubKey.fromBuffer = function (buffer) {
14952 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
14953 return new ECPubKey(Q, Q.compressed)
14954 }
14955
14956 ECPubKey.fromHex = function (hex) {
14957 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
14958 }
14959
14960 // Operations
14961 ECPubKey.prototype.getAddress = function (network) {
14962 network = network || networks.bitcoin
14963
14964 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
14965 }
14966
14967 ECPubKey.prototype.verify = function (hash, signature) {
14968 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
14969 }
14970
14971 // Export functions
14972 ECPubKey.prototype.toBuffer = function () {
14973 return this.Q.getEncoded(this.compressed)
14974 }
14975
14976 ECPubKey.prototype.toHex = function () {
14977 return this.toBuffer().toString('hex')
14978 }
14979
14980 module.exports = ECPubKey
14981
14982 }).call(this,require("buffer").Buffer)
14983 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
14984 (function (Buffer){
14985 var assert = require('assert')
14986 var typeForce = require('typeforce')
14987
14988 var BigInteger = require('bigi')
14989
14990 function ECSignature (r, s) {
14991 typeForce('BigInteger', r)
14992 typeForce('BigInteger', s)
14993
14994 this.r = r
14995 this.s = s
14996 }
14997
14998 ECSignature.parseCompact = function (buffer) {
14999 assert.equal(buffer.length, 65, 'Invalid signature length')
15000 var i = buffer.readUInt8(0) - 27
15001
15002 // At most 3 bits
15003 assert.equal(i, i & 7, 'Invalid signature parameter')
15004 var compressed = !!(i & 4)
15005
15006 // Recovery param only
15007 i = i & 3
15008
15009 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15010 var s = BigInteger.fromBuffer(buffer.slice(33))
15011
15012 return {
15013 compressed: compressed,
15014 i: i,
15015 signature: new ECSignature(r, s)
15016 }
15017 }
15018
15019 ECSignature.fromDER = function (buffer) {
15020 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15021 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15022 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15023
15024 var rLen = buffer.readUInt8(3)
15025 assert(rLen > 0, 'R length is zero')
15026
15027 var offset = 4 + rLen
15028 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15029
15030 var sLen = buffer.readUInt8(offset + 1)
15031 assert(sLen > 0, 'S length is zero')
15032
15033 var rB = buffer.slice(4, offset)
15034 var sB = buffer.slice(offset + 2)
15035 offset += 2 + sLen
15036
15037 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15038 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15039 }
15040
15041 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15042 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15043 }
15044
15045 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15046 var r = BigInteger.fromDERInteger(rB)
15047 var s = BigInteger.fromDERInteger(sB)
15048
15049 assert(r.signum() >= 0, 'R value is negative')
15050 assert(s.signum() >= 0, 'S value is negative')
15051
15052 return new ECSignature(r, s)
15053 }
15054
15055 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15056 ECSignature.parseScriptSignature = function (buffer) {
15057 var hashType = buffer.readUInt8(buffer.length - 1)
15058 var hashTypeMod = hashType & ~0x80
15059
15060 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15061
15062 return {
15063 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15064 hashType: hashType
15065 }
15066 }
15067
15068 ECSignature.prototype.toCompact = function (i, compressed) {
15069 if (compressed) {
15070 i += 4
15071 }
15072
15073 i += 27
15074
15075 var buffer = new Buffer(65)
15076 buffer.writeUInt8(i, 0)
15077
15078 this.r.toBuffer(32).copy(buffer, 1)
15079 this.s.toBuffer(32).copy(buffer, 33)
15080
15081 return buffer
15082 }
15083
15084 ECSignature.prototype.toDER = function () {
15085 var rBa = this.r.toDERInteger()
15086 var sBa = this.s.toDERInteger()
15087
15088 var sequence = []
15089
15090 // INTEGER
15091 sequence.push(0x02, rBa.length)
15092 sequence = sequence.concat(rBa)
15093
15094 // INTEGER
15095 sequence.push(0x02, sBa.length)
15096 sequence = sequence.concat(sBa)
15097
15098 // SEQUENCE
15099 sequence.unshift(0x30, sequence.length)
15100
15101 return new Buffer(sequence)
15102 }
15103
15104 ECSignature.prototype.toScriptSignature = function (hashType) {
15105 var hashTypeMod = hashType & ~0x80
15106 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15107
15108 var hashTypeBuffer = new Buffer(1)
15109 hashTypeBuffer.writeUInt8(hashType, 0)
15110
15111 return Buffer.concat([this.toDER(), hashTypeBuffer])
15112 }
15113
15114 module.exports = ECSignature
15115
15116 }).call(this,require("buffer").Buffer)
15117 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15118 (function (Buffer){
15119 var assert = require('assert')
15120 var base58check = require('bs58check')
15121 var bcrypto = require('./crypto')
15122 var createHmac = require('create-hmac')
15123 var typeForce = require('typeforce')
15124 var networks = require('./networks')
15125
15126 var BigInteger = require('bigi')
15127 var ECKey = require('./eckey')
15128 var ECPubKey = require('./ecpubkey')
15129
15130 var ecurve = require('ecurve')
15131 var curve = ecurve.getCurveByName('secp256k1')
15132
15133 function findBIP32NetworkByVersion (version) {
15134 for (var name in networks) {
15135 var network = networks[name]
15136
15137 if (version === network.bip32.private || version === network.bip32.public) {
15138 return network
15139 }
15140 }
15141
15142 assert(false, 'Could not find network for ' + version.toString(16))
15143 }
15144
15145 function HDNode (K, chainCode, network) {
15146 network = network || networks.bitcoin
15147
15148 typeForce('Buffer', chainCode)
15149
15150 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15151 assert(network.bip32, 'Unknown BIP32 constants for network')
15152
15153 this.chainCode = chainCode
15154 this.depth = 0
15155 this.index = 0
15156 this.parentFingerprint = 0x00000000
15157 this.network = network
15158
15159 if (K instanceof BigInteger) {
15160 this.privKey = new ECKey(K, true)
15161 this.pubKey = this.privKey.pub
15162 } else if (K instanceof ECKey) {
15163 assert(K.pub.compressed, 'ECKey must be compressed')
15164 this.privKey = K
15165 this.pubKey = K.pub
15166 } else if (K instanceof ECPubKey) {
15167 assert(K.compressed, 'ECPubKey must be compressed')
15168 this.pubKey = K
15169 } else {
15170 this.pubKey = new ECPubKey(K, true)
15171 }
15172 }
15173
15174 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15175 HDNode.HIGHEST_BIT = 0x80000000
15176 HDNode.LENGTH = 78
15177
15178 HDNode.fromSeedBuffer = function (seed, network) {
15179 typeForce('Buffer', seed)
15180
15181 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15182 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15183
15184 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15185 var IL = I.slice(0, 32)
15186 var IR = I.slice(32)
15187
15188 // In case IL is 0 or >= n, the master key is invalid
15189 // This is handled by `new ECKey` in the HDNode constructor
15190 var pIL = BigInteger.fromBuffer(IL)
15191
15192 return new HDNode(pIL, IR, network)
15193 }
15194
15195 HDNode.fromSeedHex = function (hex, network) {
15196 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15197 }
15198
15199 HDNode.fromBase58 = function (string, network) {
15200 return HDNode.fromBuffer(base58check.decode(string), network, true)
15201 }
15202
15203 // FIXME: remove in 2.x.y
15204 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15205 if (!__ignoreDeprecation) {
15206 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15207 }
15208
15209 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15210
15211 // 4 byte: version bytes
15212 var version = buffer.readUInt32BE(0)
15213
15214 if (network) {
15215 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15216
15217 // auto-detect
15218 } else {
15219 network = findBIP32NetworkByVersion(version)
15220 }
15221
15222 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
15223 var depth = buffer.readUInt8(4)
15224
15225 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15226 var parentFingerprint = buffer.readUInt32BE(5)
15227 if (depth === 0) {
15228 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
15229 }
15230
15231 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15232 // This is encoded in MSB order. (0x00000000 if master key)
15233 var index = buffer.readUInt32BE(9)
15234 assert(depth > 0 || index === 0, 'Invalid index')
15235
15236 // 32 bytes: the chain code
15237 var chainCode = buffer.slice(13, 45)
15238 var data, hd
15239
15240 // 33 bytes: private key data (0x00 + k)
15241 if (version === network.bip32.private) {
15242 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
15243 data = buffer.slice(46, 78)
15244 var d = BigInteger.fromBuffer(data)
15245 hd = new HDNode(d, chainCode, network)
15246
15247 // 33 bytes: public key data (0x02 + X or 0x03 + X)
15248 } else {
15249 data = buffer.slice(45, 78)
15250 var Q = ecurve.Point.decodeFrom(curve, data)
15251 assert.equal(Q.compressed, true, 'Invalid public key')
15252
15253 // Verify that the X coordinate in the public point corresponds to a point on the curve.
15254 // If not, the extended public key is invalid.
15255 curve.validate(Q)
15256
15257 hd = new HDNode(Q, chainCode, network)
15258 }
15259
15260 hd.depth = depth
15261 hd.index = index
15262 hd.parentFingerprint = parentFingerprint
15263
15264 return hd
15265 }
15266
15267 // FIXME: remove in 2.x.y
15268 HDNode.fromHex = function (hex, network) {
15269 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
15270 }
15271
15272 HDNode.prototype.getIdentifier = function () {
15273 return bcrypto.hash160(this.pubKey.toBuffer())
15274 }
15275
15276 HDNode.prototype.getFingerprint = function () {
15277 return this.getIdentifier().slice(0, 4)
15278 }
15279
15280 HDNode.prototype.getAddress = function () {
15281 return this.pubKey.getAddress(this.network)
15282 }
15283
15284 HDNode.prototype.neutered = function () {
15285 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
15286 neutered.depth = this.depth
15287 neutered.index = this.index
15288 neutered.parentFingerprint = this.parentFingerprint
15289
15290 return neutered
15291 }
15292
15293 HDNode.prototype.toBase58 = function (isPrivate) {
15294 return base58check.encode(this.toBuffer(isPrivate, true))
15295 }
15296
15297 // FIXME: remove in 2.x.y
15298 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
15299 if (isPrivate === undefined) {
15300 isPrivate = !!this.privKey
15301
15302 // FIXME: remove in 2.x.y
15303 } else {
15304 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
15305 }
15306
15307 if (!__ignoreDeprecation) {
15308 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
15309 }
15310
15311 // Version
15312 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
15313 var buffer = new Buffer(HDNode.LENGTH)
15314
15315 // 4 bytes: version bytes
15316 buffer.writeUInt32BE(version, 0)
15317
15318 // Depth
15319 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
15320 buffer.writeUInt8(this.depth, 4)
15321
15322 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15323 buffer.writeUInt32BE(this.parentFingerprint, 5)
15324
15325 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15326 // This is encoded in Big endian. (0x00000000 if master key)
15327 buffer.writeUInt32BE(this.index, 9)
15328
15329 // 32 bytes: the chain code
15330 this.chainCode.copy(buffer, 13)
15331
15332 // 33 bytes: the public key or private key data
15333 if (isPrivate) {
15334 // FIXME: remove in 2.x.y
15335 assert(this.privKey, 'Missing private key')
15336
15337 // 0x00 + k for private keys
15338 buffer.writeUInt8(0, 45)
15339 this.privKey.d.toBuffer(32).copy(buffer, 46)
15340 } else {
15341 // X9.62 encoding for public keys
15342 this.pubKey.toBuffer().copy(buffer, 45)
15343 }
15344
15345 return buffer
15346 }
15347
15348 // FIXME: remove in 2.x.y
15349 HDNode.prototype.toHex = function (isPrivate) {
15350 return this.toBuffer(isPrivate).toString('hex')
15351 }
15352
15353 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
15354 HDNode.prototype.derive = function (index) {
15355 var isHardened = index >= HDNode.HIGHEST_BIT
15356 var indexBuffer = new Buffer(4)
15357 indexBuffer.writeUInt32BE(index, 0)
15358
15359 var data
15360
15361 // Hardened child
15362 if (isHardened) {
15363 assert(this.privKey, 'Could not derive hardened child key')
15364
15365 // data = 0x00 || ser256(kpar) || ser32(index)
15366 data = Buffer.concat([
15367 this.privKey.d.toBuffer(33),
15368 indexBuffer
15369 ])
15370
15371 // Normal child
15372 } else {
15373 // data = serP(point(kpar)) || ser32(index)
15374 // = serP(Kpar) || ser32(index)
15375 data = Buffer.concat([
15376 this.pubKey.toBuffer(),
15377 indexBuffer
15378 ])
15379 }
15380
15381 var I = createHmac('sha512', this.chainCode).update(data).digest()
15382 var IL = I.slice(0, 32)
15383 var IR = I.slice(32)
15384
15385 var pIL = BigInteger.fromBuffer(IL)
15386
15387 // In case parse256(IL) >= n, proceed with the next value for i
15388 if (pIL.compareTo(curve.n) >= 0) {
15389 return this.derive(index + 1)
15390 }
15391
15392 // Private parent key -> private child key
15393 var hd
15394 if (this.privKey) {
15395 // ki = parse256(IL) + kpar (mod n)
15396 var ki = pIL.add(this.privKey.d).mod(curve.n)
15397
15398 // In case ki == 0, proceed with the next value for i
15399 if (ki.signum() === 0) {
15400 return this.derive(index + 1)
15401 }
15402
15403 hd = new HDNode(ki, IR, this.network)
15404
15405 // Public parent key -> public child key
15406 } else {
15407 // Ki = point(parse256(IL)) + Kpar
15408 // = G*IL + Kpar
15409 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
15410
15411 // In case Ki is the point at infinity, proceed with the next value for i
15412 if (curve.isInfinity(Ki)) {
15413 return this.derive(index + 1)
15414 }
15415
15416 hd = new HDNode(Ki, IR, this.network)
15417 }
15418
15419 hd.depth = this.depth + 1
15420 hd.index = index
15421 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
15422
15423 return hd
15424 }
15425
15426 HDNode.prototype.deriveHardened = function (index) {
15427 // Only derives hardened private keys by default
15428 return this.derive(index + HDNode.HIGHEST_BIT)
15429 }
15430
15431 HDNode.prototype.toString = HDNode.prototype.toBase58
15432
15433 module.exports = HDNode
15434
15435 }).call(this,require("buffer").Buffer)
15436 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
15437 module.exports = {
15438 Address: require('./address'),
15439 base58check: require('./base58check'),
15440 Block: require('./block'),
15441 bufferutils: require('./bufferutils'),
15442 crypto: require('./crypto'),
15443 ecdsa: require('./ecdsa'),
15444 ECKey: require('./eckey'),
15445 ECPubKey: require('./ecpubkey'),
15446 ECSignature: require('./ecsignature'),
15447 Message: require('./message'),
15448 opcodes: require('./opcodes'),
15449 HDNode: require('./hdnode'),
15450 Script: require('./script'),
15451 scripts: require('./scripts'),
15452 Transaction: require('./transaction'),
15453 TransactionBuilder: require('./transaction_builder'),
15454 networks: require('./networks'),
15455 Wallet: require('./wallet')
15456 }
15457
15458 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
15459 (function (Buffer){
15460 var bufferutils = require('./bufferutils')
15461 var crypto = require('./crypto')
15462 var ecdsa = require('./ecdsa')
15463 var networks = require('./networks')
15464
15465 var BigInteger = require('bigi')
15466 var ECPubKey = require('./ecpubkey')
15467 var ECSignature = require('./ecsignature')
15468
15469 var ecurve = require('ecurve')
15470 var ecparams = ecurve.getCurveByName('secp256k1')
15471
15472 function magicHash (message, network) {
15473 var magicPrefix = new Buffer(network.magicPrefix)
15474 var messageBuffer = new Buffer(message)
15475 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
15476
15477 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
15478 return crypto.hash256(buffer)
15479 }
15480
15481 function sign (privKey, message, network) {
15482 network = network || networks.bitcoin
15483
15484 var hash = magicHash(message, network)
15485 var signature = privKey.sign(hash)
15486 var e = BigInteger.fromBuffer(hash)
15487 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
15488
15489 return signature.toCompact(i, privKey.pub.compressed)
15490 }
15491
15492 // TODO: network could be implied from address
15493 function verify (address, signature, message, network) {
15494 if (!Buffer.isBuffer(signature)) {
15495 signature = new Buffer(signature, 'base64')
15496 }
15497
15498 network = network || networks.bitcoin
15499
15500 var hash = magicHash(message, network)
15501 var parsed = ECSignature.parseCompact(signature)
15502 var e = BigInteger.fromBuffer(hash)
15503 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
15504
15505 var pubKey = new ECPubKey(Q, parsed.compressed)
15506 return pubKey.getAddress(network).toString() === address.toString()
15507 }
15508
15509 module.exports = {
15510 magicHash: magicHash,
15511 sign: sign,
15512 verify: verify
15513 }
15514
15515 }).call(this,require("buffer").Buffer)
15516 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
15517 // https://en.bitcoin.it/wiki/List_of_address_prefixes
15518 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
15519
15520 var networks = {
15521 bitcoin: {
15522 magicPrefix: '\x18Bitcoin Signed Message:\n',
15523 bip32: {
15524 public: 0x0488b21e,
15525 private: 0x0488ade4
15526 },
15527 pubKeyHash: 0x00,
15528 scriptHash: 0x05,
15529 wif: 0x80,
15530 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
15531 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
15532 estimateFee: estimateFee('bitcoin')
15533 },
15534 testnet: {
15535 magicPrefix: '\x18Bitcoin Signed Message:\n',
15536 bip32: {
15537 public: 0x043587cf,
15538 private: 0x04358394
15539 },
15540 pubKeyHash: 0x6f,
15541 scriptHash: 0xc4,
15542 wif: 0xef,
15543 dustThreshold: 546,
15544 feePerKb: 10000,
15545 estimateFee: estimateFee('testnet')
15546 },
15547 litecoin: {
15548 magicPrefix: '\x19Litecoin Signed Message:\n',
15549 bip32: {
15550 public: 0x019da462,
15551 private: 0x019d9cfe
15552 },
15553 pubKeyHash: 0x30,
15554 scriptHash: 0x05,
15555 wif: 0xb0,
15556 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
15557 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
15558 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
15559 estimateFee: estimateFee('litecoin')
15560 },
15561 dogecoin: {
15562 magicPrefix: '\x19Dogecoin Signed Message:\n',
15563 bip32: {
15564 public: 0x02facafd,
15565 private: 0x02fac398
15566 },
15567 pubKeyHash: 0x1e,
15568 scriptHash: 0x16,
15569 wif: 0x9e,
15570 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
15571 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
15572 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
15573 estimateFee: estimateFee('dogecoin')
15574 },
15575 viacoin: {
15576 magicPrefix: '\x18Viacoin Signed Message:\n',
15577 bip32: {
15578 public: 0x0488b21e,
15579 private: 0x0488ade4
15580 },
15581 pubKeyHash: 0x47,
15582 scriptHash: 0x21,
15583 wif: 0xc7,
15584 dustThreshold: 560,
15585 dustSoftThreshold: 100000,
15586 feePerKb: 100000, //
15587 estimateFee: estimateFee('viacoin')
15588 },
15589 viacointestnet: {
15590 magicPrefix: '\x18Viacoin Signed Message:\n',
15591 bip32: {
15592 public: 0x043587cf,
15593 private: 0x04358394
15594 },
15595 pubKeyHash: 0x7f,
15596 scriptHash: 0xc4,
15597 wif: 0xff,
15598 dustThreshold: 560,
15599 dustSoftThreshold: 100000,
15600 feePerKb: 100000,
15601 estimateFee: estimateFee('viacointestnet')
15602 },
15603 gamerscoin: {
15604 magicPrefix: '\x19Gamerscoin Signed Message:\n',
15605 bip32: {
15606 public: 0x019da462,
15607 private: 0x019d9cfe
15608 },
15609 pubKeyHash: 0x26,
15610 scriptHash: 0x05,
15611 wif: 0xA6,
15612 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
15613 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
15614 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
15615 estimateFee: estimateFee('gamerscoin')
15616 },
15617 jumbucks: {
15618 magicPrefix: '\x19Jumbucks Signed Message:\n',
15619 bip32: {
15620 public: 0x037a689a,
15621 private: 0x037a6460
15622 },
15623 pubKeyHash: 0x2b,
15624 scriptHash: 0x05,
15625 wif: 0xab,
15626 dustThreshold: 0,
15627 dustSoftThreshold: 10000,
15628 feePerKb: 10000,
15629 estimateFee: estimateFee('jumbucks')
15630 },
15631 zetacoin: {
15632 magicPrefix: '\x18Zetacoin Signed Message:\n',
15633 bip32: {
15634 public: 0x0488b21e,
15635 private: 0x0488ade4
15636 },
15637 pubKeyHash: 0x50,
15638 scriptHash: 0x09,
15639 wif: 0xe0,
15640 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
15641 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
15642 estimateFee: estimateFee('zetacoin')
15643 }
15644 }
15645
15646 function estimateFee (type) {
15647 return function (tx) {
15648 var network = networks[type]
15649 var baseFee = network.feePerKb
15650 var byteSize = tx.toBuffer().length
15651
15652 var fee = baseFee * Math.ceil(byteSize / 1000)
15653 if (network.dustSoftThreshold === undefined) return fee
15654
15655 tx.outs.forEach(function (e) {
15656 if (e.value < network.dustSoftThreshold) {
15657 fee += baseFee
15658 }
15659 })
15660
15661 return fee
15662 }
15663 }
15664
15665 module.exports = networks
15666
15667 },{}],67:[function(require,module,exports){
15668 module.exports = {
15669 // push value
15670 OP_FALSE: 0,
15671 OP_0: 0,
15672 OP_PUSHDATA1: 76,
15673 OP_PUSHDATA2: 77,
15674 OP_PUSHDATA4: 78,
15675 OP_1NEGATE: 79,
15676 OP_RESERVED: 80,
15677 OP_1: 81,
15678 OP_TRUE: 81,
15679 OP_2: 82,
15680 OP_3: 83,
15681 OP_4: 84,
15682 OP_5: 85,
15683 OP_6: 86,
15684 OP_7: 87,
15685 OP_8: 88,
15686 OP_9: 89,
15687 OP_10: 90,
15688 OP_11: 91,
15689 OP_12: 92,
15690 OP_13: 93,
15691 OP_14: 94,
15692 OP_15: 95,
15693 OP_16: 96,
15694
15695 // control
15696 OP_NOP: 97,
15697 OP_VER: 98,
15698 OP_IF: 99,
15699 OP_NOTIF: 100,
15700 OP_VERIF: 101,
15701 OP_VERNOTIF: 102,
15702 OP_ELSE: 103,
15703 OP_ENDIF: 104,
15704 OP_VERIFY: 105,
15705 OP_RETURN: 106,
15706
15707 // stack ops
15708 OP_TOALTSTACK: 107,
15709 OP_FROMALTSTACK: 108,
15710 OP_2DROP: 109,
15711 OP_2DUP: 110,
15712 OP_3DUP: 111,
15713 OP_2OVER: 112,
15714 OP_2ROT: 113,
15715 OP_2SWAP: 114,
15716 OP_IFDUP: 115,
15717 OP_DEPTH: 116,
15718 OP_DROP: 117,
15719 OP_DUP: 118,
15720 OP_NIP: 119,
15721 OP_OVER: 120,
15722 OP_PICK: 121,
15723 OP_ROLL: 122,
15724 OP_ROT: 123,
15725 OP_SWAP: 124,
15726 OP_TUCK: 125,
15727
15728 // splice ops
15729 OP_CAT: 126,
15730 OP_SUBSTR: 127,
15731 OP_LEFT: 128,
15732 OP_RIGHT: 129,
15733 OP_SIZE: 130,
15734
15735 // bit logic
15736 OP_INVERT: 131,
15737 OP_AND: 132,
15738 OP_OR: 133,
15739 OP_XOR: 134,
15740 OP_EQUAL: 135,
15741 OP_EQUALVERIFY: 136,
15742 OP_RESERVED1: 137,
15743 OP_RESERVED2: 138,
15744
15745 // numeric
15746 OP_1ADD: 139,
15747 OP_1SUB: 140,
15748 OP_2MUL: 141,
15749 OP_2DIV: 142,
15750 OP_NEGATE: 143,
15751 OP_ABS: 144,
15752 OP_NOT: 145,
15753 OP_0NOTEQUAL: 146,
15754
15755 OP_ADD: 147,
15756 OP_SUB: 148,
15757 OP_MUL: 149,
15758 OP_DIV: 150,
15759 OP_MOD: 151,
15760 OP_LSHIFT: 152,
15761 OP_RSHIFT: 153,
15762
15763 OP_BOOLAND: 154,
15764 OP_BOOLOR: 155,
15765 OP_NUMEQUAL: 156,
15766 OP_NUMEQUALVERIFY: 157,
15767 OP_NUMNOTEQUAL: 158,
15768 OP_LESSTHAN: 159,
15769 OP_GREATERTHAN: 160,
15770 OP_LESSTHANOREQUAL: 161,
15771 OP_GREATERTHANOREQUAL: 162,
15772 OP_MIN: 163,
15773 OP_MAX: 164,
15774
15775 OP_WITHIN: 165,
15776
15777 // crypto
15778 OP_RIPEMD160: 166,
15779 OP_SHA1: 167,
15780 OP_SHA256: 168,
15781 OP_HASH160: 169,
15782 OP_HASH256: 170,
15783 OP_CODESEPARATOR: 171,
15784 OP_CHECKSIG: 172,
15785 OP_CHECKSIGVERIFY: 173,
15786 OP_CHECKMULTISIG: 174,
15787 OP_CHECKMULTISIGVERIFY: 175,
15788
15789 // expansion
15790 OP_NOP1: 176,
15791 OP_NOP2: 177,
15792 OP_NOP3: 178,
15793 OP_NOP4: 179,
15794 OP_NOP5: 180,
15795 OP_NOP6: 181,
15796 OP_NOP7: 182,
15797 OP_NOP8: 183,
15798 OP_NOP9: 184,
15799 OP_NOP10: 185,
15800
15801 // template matching params
15802 OP_PUBKEYHASH: 253,
15803 OP_PUBKEY: 254,
15804 OP_INVALIDOPCODE: 255
15805 }
15806
15807 },{}],68:[function(require,module,exports){
15808 (function (Buffer){
15809 var assert = require('assert')
15810 var bufferutils = require('./bufferutils')
15811 var crypto = require('./crypto')
15812 var typeForce = require('typeforce')
15813 var opcodes = require('./opcodes')
15814
15815 function Script (buffer, chunks) {
15816 typeForce('Buffer', buffer)
15817 typeForce('Array', chunks)
15818
15819 this.buffer = buffer
15820 this.chunks = chunks
15821 }
15822
15823 Script.fromASM = function (asm) {
15824 var strChunks = asm.split(' ')
15825 var chunks = strChunks.map(function (strChunk) {
15826 // opcode
15827 if (strChunk in opcodes) {
15828 return opcodes[strChunk]
15829
15830 // data chunk
15831 } else {
15832 return new Buffer(strChunk, 'hex')
15833 }
15834 })
15835
15836 return Script.fromChunks(chunks)
15837 }
15838
15839 Script.fromBuffer = function (buffer) {
15840 var chunks = []
15841 var i = 0
15842
15843 while (i < buffer.length) {
15844 var opcode = buffer.readUInt8(i)
15845
15846 // data chunk
15847 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
15848 var d = bufferutils.readPushDataInt(buffer, i)
15849
15850 // did reading a pushDataInt fail? return non-chunked script
15851 if (d === null) return new Script(buffer, [])
15852 i += d.size
15853
15854 // attempt to read too much data?
15855 if (i + d.number > buffer.length) return new Script(buffer, [])
15856
15857 var data = buffer.slice(i, i + d.number)
15858 i += d.number
15859
15860 chunks.push(data)
15861
15862 // opcode
15863 } else {
15864 chunks.push(opcode)
15865
15866 i += 1
15867 }
15868 }
15869
15870 return new Script(buffer, chunks)
15871 }
15872
15873 Script.fromChunks = function (chunks) {
15874 typeForce('Array', chunks)
15875
15876 var bufferSize = chunks.reduce(function (accum, chunk) {
15877 // data chunk
15878 if (Buffer.isBuffer(chunk)) {
15879 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
15880 }
15881
15882 // opcode
15883 return accum + 1
15884 }, 0.0)
15885
15886 var buffer = new Buffer(bufferSize)
15887 var offset = 0
15888
15889 chunks.forEach(function (chunk) {
15890 // data chunk
15891 if (Buffer.isBuffer(chunk)) {
15892 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
15893
15894 chunk.copy(buffer, offset)
15895 offset += chunk.length
15896
15897 // opcode
15898 } else {
15899 buffer.writeUInt8(chunk, offset)
15900 offset += 1
15901 }
15902 })
15903
15904 assert.equal(offset, buffer.length, 'Could not decode chunks')
15905 return new Script(buffer, chunks)
15906 }
15907
15908 Script.fromHex = function (hex) {
15909 return Script.fromBuffer(new Buffer(hex, 'hex'))
15910 }
15911
15912 Script.EMPTY = Script.fromChunks([])
15913
15914 Script.prototype.getHash = function () {
15915 return crypto.hash160(this.buffer)
15916 }
15917
15918 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
15919 Script.prototype.without = function (needle) {
15920 return Script.fromChunks(this.chunks.filter(function (op) {
15921 return op !== needle
15922 }))
15923 }
15924
15925 var reverseOps = []
15926 for (var op in opcodes) {
15927 var code = opcodes[op]
15928 reverseOps[code] = op
15929 }
15930
15931 Script.prototype.toASM = function () {
15932 return this.chunks.map(function (chunk) {
15933 // data chunk
15934 if (Buffer.isBuffer(chunk)) {
15935 return chunk.toString('hex')
15936
15937 // opcode
15938 } else {
15939 return reverseOps[chunk]
15940 }
15941 }).join(' ')
15942 }
15943
15944 Script.prototype.toBuffer = function () {
15945 return this.buffer
15946 }
15947
15948 Script.prototype.toHex = function () {
15949 return this.toBuffer().toString('hex')
15950 }
15951
15952 module.exports = Script
15953
15954 }).call(this,require("buffer").Buffer)
15955 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
15956 (function (Buffer){
15957 var assert = require('assert')
15958 var ops = require('./opcodes')
15959 var typeForce = require('typeforce')
15960
15961 var ecurve = require('ecurve')
15962 var curve = ecurve.getCurveByName('secp256k1')
15963
15964 var ECSignature = require('./ecsignature')
15965 var Script = require('./script')
15966
15967 function isCanonicalPubKey (buffer) {
15968 if (!Buffer.isBuffer(buffer)) return false
15969
15970 try {
15971 ecurve.Point.decodeFrom(curve, buffer)
15972 } catch (e) {
15973 if (!(e.message.match(/Invalid sequence (length|tag)/)))
15974 throw e
15975
15976 return false
15977 }
15978
15979 return true
15980 }
15981
15982 function isCanonicalSignature (buffer) {
15983 if (!Buffer.isBuffer(buffer)) return false
15984
15985 try {
15986 ECSignature.parseScriptSignature(buffer)
15987 } catch (e) {
15988 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
15989 throw e
15990 }
15991
15992 return false
15993 }
15994
15995 return true
15996 }
15997
15998 function isPubKeyHashInput (script) {
15999 return script.chunks.length === 2 &&
16000 isCanonicalSignature(script.chunks[0]) &&
16001 isCanonicalPubKey(script.chunks[1])
16002 }
16003
16004 function isPubKeyHashOutput (script) {
16005 return script.chunks.length === 5 &&
16006 script.chunks[0] === ops.OP_DUP &&
16007 script.chunks[1] === ops.OP_HASH160 &&
16008 Buffer.isBuffer(script.chunks[2]) &&
16009 script.chunks[2].length === 20 &&
16010 script.chunks[3] === ops.OP_EQUALVERIFY &&
16011 script.chunks[4] === ops.OP_CHECKSIG
16012 }
16013
16014 function isPubKeyInput (script) {
16015 return script.chunks.length === 1 &&
16016 isCanonicalSignature(script.chunks[0])
16017 }
16018
16019 function isPubKeyOutput (script) {
16020 return script.chunks.length === 2 &&
16021 isCanonicalPubKey(script.chunks[0]) &&
16022 script.chunks[1] === ops.OP_CHECKSIG
16023 }
16024
16025 function isScriptHashInput (script, allowIncomplete) {
16026 if (script.chunks.length < 2) return false
16027
16028 var lastChunk = script.chunks[script.chunks.length - 1]
16029 if (!Buffer.isBuffer(lastChunk)) return false
16030
16031 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16032 var redeemScript = Script.fromBuffer(lastChunk)
16033
16034 // is redeemScript a valid script?
16035 if (redeemScript.chunks.length === 0) return false
16036
16037 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16038 }
16039
16040 function isScriptHashOutput (script) {
16041 return script.chunks.length === 3 &&
16042 script.chunks[0] === ops.OP_HASH160 &&
16043 Buffer.isBuffer(script.chunks[1]) &&
16044 script.chunks[1].length === 20 &&
16045 script.chunks[2] === ops.OP_EQUAL
16046 }
16047
16048 // allowIncomplete is to account for combining signatures
16049 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16050 function isMultisigInput (script, allowIncomplete) {
16051 if (script.chunks.length < 2) return false
16052 if (script.chunks[0] !== ops.OP_0) return false
16053
16054 if (allowIncomplete) {
16055 return script.chunks.slice(1).every(function (chunk) {
16056 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16057 })
16058 }
16059
16060 return script.chunks.slice(1).every(isCanonicalSignature)
16061 }
16062
16063 function isMultisigOutput (script) {
16064 if (script.chunks.length < 4) return false
16065 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16066
16067 var mOp = script.chunks[0]
16068 if (mOp === ops.OP_0) return false
16069 if (mOp < ops.OP_1) return false
16070 if (mOp > ops.OP_16) return false
16071
16072 var nOp = script.chunks[script.chunks.length - 2]
16073 if (nOp === ops.OP_0) return false
16074 if (nOp < ops.OP_1) return false
16075 if (nOp > ops.OP_16) return false
16076
16077 var m = mOp - (ops.OP_1 - 1)
16078 var n = nOp - (ops.OP_1 - 1)
16079 if (n < m) return false
16080
16081 var pubKeys = script.chunks.slice(1, -2)
16082 if (n < pubKeys.length) return false
16083
16084 return pubKeys.every(isCanonicalPubKey)
16085 }
16086
16087 function isNullDataOutput (script) {
16088 return script.chunks[0] === ops.OP_RETURN
16089 }
16090
16091 function classifyOutput (script) {
16092 typeForce('Script', script)
16093
16094 if (isPubKeyHashOutput(script)) {
16095 return 'pubkeyhash'
16096 } else if (isScriptHashOutput(script)) {
16097 return 'scripthash'
16098 } else if (isMultisigOutput(script)) {
16099 return 'multisig'
16100 } else if (isPubKeyOutput(script)) {
16101 return 'pubkey'
16102 } else if (isNullDataOutput(script)) {
16103 return 'nulldata'
16104 }
16105
16106 return 'nonstandard'
16107 }
16108
16109 function classifyInput (script, allowIncomplete) {
16110 typeForce('Script', script)
16111
16112 if (isPubKeyHashInput(script)) {
16113 return 'pubkeyhash'
16114 } else if (isMultisigInput(script, allowIncomplete)) {
16115 return 'multisig'
16116 } else if (isScriptHashInput(script, allowIncomplete)) {
16117 return 'scripthash'
16118 } else if (isPubKeyInput(script)) {
16119 return 'pubkey'
16120 }
16121
16122 return 'nonstandard'
16123 }
16124
16125 // Standard Script Templates
16126 // {pubKey} OP_CHECKSIG
16127 function pubKeyOutput (pubKey) {
16128 return Script.fromChunks([
16129 pubKey.toBuffer(),
16130 ops.OP_CHECKSIG
16131 ])
16132 }
16133
16134 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16135 function pubKeyHashOutput (hash) {
16136 typeForce('Buffer', hash)
16137
16138 return Script.fromChunks([
16139 ops.OP_DUP,
16140 ops.OP_HASH160,
16141 hash,
16142 ops.OP_EQUALVERIFY,
16143 ops.OP_CHECKSIG
16144 ])
16145 }
16146
16147 // OP_HASH160 {scriptHash} OP_EQUAL
16148 function scriptHashOutput (hash) {
16149 typeForce('Buffer', hash)
16150
16151 return Script.fromChunks([
16152 ops.OP_HASH160,
16153 hash,
16154 ops.OP_EQUAL
16155 ])
16156 }
16157
16158 // m [pubKeys ...] n OP_CHECKMULTISIG
16159 function multisigOutput (m, pubKeys) {
16160 typeForce(['ECPubKey'], pubKeys)
16161
16162 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16163
16164 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16165 return pubKey.toBuffer()
16166 })
16167 var n = pubKeys.length
16168
16169 return Script.fromChunks([].concat(
16170 (ops.OP_1 - 1) + m,
16171 pubKeyBuffers,
16172 (ops.OP_1 - 1) + n,
16173 ops.OP_CHECKMULTISIG
16174 ))
16175 }
16176
16177 // {signature}
16178 function pubKeyInput (signature) {
16179 typeForce('Buffer', signature)
16180
16181 return Script.fromChunks([signature])
16182 }
16183
16184 // {signature} {pubKey}
16185 function pubKeyHashInput (signature, pubKey) {
16186 typeForce('Buffer', signature)
16187
16188 return Script.fromChunks([signature, pubKey.toBuffer()])
16189 }
16190
16191 // <scriptSig> {serialized scriptPubKey script}
16192 function scriptHashInput (scriptSig, scriptPubKey) {
16193 return Script.fromChunks([].concat(
16194 scriptSig.chunks,
16195 scriptPubKey.toBuffer()
16196 ))
16197 }
16198
16199 // OP_0 [signatures ...]
16200 function multisigInput (signatures, scriptPubKey) {
16201 if (scriptPubKey) {
16202 assert(isMultisigOutput(scriptPubKey))
16203
16204 var mOp = scriptPubKey.chunks[0]
16205 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16206 var m = mOp - (ops.OP_1 - 1)
16207 var n = nOp - (ops.OP_1 - 1)
16208
16209 assert(signatures.length >= m, 'Not enough signatures provided')
16210 assert(signatures.length <= n, 'Too many signatures provided')
16211 }
16212
16213 return Script.fromChunks([].concat(ops.OP_0, signatures))
16214 }
16215
16216 function nullDataOutput (data) {
16217 return Script.fromChunks([ops.OP_RETURN, data])
16218 }
16219
16220 module.exports = {
16221 isCanonicalPubKey: isCanonicalPubKey,
16222 isCanonicalSignature: isCanonicalSignature,
16223 isPubKeyHashInput: isPubKeyHashInput,
16224 isPubKeyHashOutput: isPubKeyHashOutput,
16225 isPubKeyInput: isPubKeyInput,
16226 isPubKeyOutput: isPubKeyOutput,
16227 isScriptHashInput: isScriptHashInput,
16228 isScriptHashOutput: isScriptHashOutput,
16229 isMultisigInput: isMultisigInput,
16230 isMultisigOutput: isMultisigOutput,
16231 isNullDataOutput: isNullDataOutput,
16232 classifyOutput: classifyOutput,
16233 classifyInput: classifyInput,
16234 pubKeyOutput: pubKeyOutput,
16235 pubKeyHashOutput: pubKeyHashOutput,
16236 scriptHashOutput: scriptHashOutput,
16237 multisigOutput: multisigOutput,
16238 pubKeyInput: pubKeyInput,
16239 pubKeyHashInput: pubKeyHashInput,
16240 scriptHashInput: scriptHashInput,
16241 multisigInput: multisigInput,
16242 dataOutput: function (data) {
16243 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
16244 return nullDataOutput(data)
16245 },
16246 nullDataOutput: nullDataOutput
16247 }
16248
16249 }).call(this,require("buffer").Buffer)
16250 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
16251 (function (Buffer){
16252 var assert = require('assert')
16253 var bufferutils = require('./bufferutils')
16254 var crypto = require('./crypto')
16255 var typeForce = require('typeforce')
16256 var opcodes = require('./opcodes')
16257 var scripts = require('./scripts')
16258
16259 var Address = require('./address')
16260 var ECSignature = require('./ecsignature')
16261 var Script = require('./script')
16262
16263 function Transaction () {
16264 this.version = 1
16265 this.locktime = 0
16266 this.ins = []
16267 this.outs = []
16268 }
16269
16270 Transaction.DEFAULT_SEQUENCE = 0xffffffff
16271 Transaction.SIGHASH_ALL = 0x01
16272 Transaction.SIGHASH_NONE = 0x02
16273 Transaction.SIGHASH_SINGLE = 0x03
16274 Transaction.SIGHASH_ANYONECANPAY = 0x80
16275
16276 Transaction.fromBuffer = function (buffer, __disableAssert) {
16277 var offset = 0
16278 function readSlice (n) {
16279 offset += n
16280 return buffer.slice(offset - n, offset)
16281 }
16282
16283 function readUInt32 () {
16284 var i = buffer.readUInt32LE(offset)
16285 offset += 4
16286 return i
16287 }
16288
16289 function readUInt64 () {
16290 var i = bufferutils.readUInt64LE(buffer, offset)
16291 offset += 8
16292 return i
16293 }
16294
16295 function readVarInt () {
16296 var vi = bufferutils.readVarInt(buffer, offset)
16297 offset += vi.size
16298 return vi.number
16299 }
16300
16301 function readScript () {
16302 return Script.fromBuffer(readSlice(readVarInt()))
16303 }
16304
16305 function readGenerationScript () {
16306 return new Script(readSlice(readVarInt()), [])
16307 }
16308
16309 var tx = new Transaction()
16310 tx.version = readUInt32()
16311
16312 var vinLen = readVarInt()
16313 for (var i = 0; i < vinLen; ++i) {
16314 var hash = readSlice(32)
16315
16316 if (Transaction.isCoinbaseHash(hash)) {
16317 tx.ins.push({
16318 hash: hash,
16319 index: readUInt32(),
16320 script: readGenerationScript(),
16321 sequence: readUInt32()
16322 })
16323 } else {
16324 tx.ins.push({
16325 hash: hash,
16326 index: readUInt32(),
16327 script: readScript(),
16328 sequence: readUInt32()
16329 })
16330 }
16331 }
16332
16333 var voutLen = readVarInt()
16334 for (i = 0; i < voutLen; ++i) {
16335 tx.outs.push({
16336 value: readUInt64(),
16337 script: readScript()
16338 })
16339 }
16340
16341 tx.locktime = readUInt32()
16342
16343 if (!__disableAssert) {
16344 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
16345 }
16346
16347 return tx
16348 }
16349
16350 Transaction.fromHex = function (hex) {
16351 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
16352 }
16353
16354 Transaction.isCoinbaseHash = function (buffer) {
16355 return Array.prototype.every.call(buffer, function (x) {
16356 return x === 0
16357 })
16358 }
16359
16360 /**
16361 * Create a new txIn.
16362 *
16363 * Can be called with any of:
16364 *
16365 * - A transaction and an index
16366 * - A transaction hash and an index
16367 *
16368 * Note that this method does not sign the created input.
16369 */
16370 Transaction.prototype.addInput = function (hash, index, sequence, script) {
16371 if (sequence === undefined || sequence === null) {
16372 sequence = Transaction.DEFAULT_SEQUENCE
16373 }
16374
16375 script = script || Script.EMPTY
16376
16377 if (typeof hash === 'string') {
16378 // TxId hex is big-endian, we need little-endian
16379 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
16380 } else if (hash instanceof Transaction) {
16381 hash = hash.getHash()
16382 }
16383
16384 typeForce('Buffer', hash)
16385 typeForce('Number', index)
16386 typeForce('Number', sequence)
16387 typeForce('Script', script)
16388
16389 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
16390
16391 // Add the input and return the input's index
16392 return (this.ins.push({
16393 hash: hash,
16394 index: index,
16395 script: script,
16396 sequence: sequence
16397 }) - 1)
16398 }
16399
16400 /**
16401 * Create a new txOut.
16402 *
16403 * Can be called with:
16404 *
16405 * - A base58 address string and a value
16406 * - An Address object and a value
16407 * - A scriptPubKey Script and a value
16408 */
16409 Transaction.prototype.addOutput = function (scriptPubKey, value) {
16410 // Attempt to get a valid address if it's a base58 address string
16411 if (typeof scriptPubKey === 'string') {
16412 scriptPubKey = Address.fromBase58Check(scriptPubKey)
16413 }
16414
16415 // Attempt to get a valid script if it's an Address object
16416 if (scriptPubKey instanceof Address) {
16417 scriptPubKey = scriptPubKey.toOutputScript()
16418 }
16419
16420 typeForce('Script', scriptPubKey)
16421 typeForce('Number', value)
16422
16423 // Add the output and return the output's index
16424 return (this.outs.push({
16425 script: scriptPubKey,
16426 value: value
16427 }) - 1)
16428 }
16429
16430 Transaction.prototype.clone = function () {
16431 var newTx = new Transaction()
16432 newTx.version = this.version
16433 newTx.locktime = this.locktime
16434
16435 newTx.ins = this.ins.map(function (txIn) {
16436 return {
16437 hash: txIn.hash,
16438 index: txIn.index,
16439 script: txIn.script,
16440 sequence: txIn.sequence
16441 }
16442 })
16443
16444 newTx.outs = this.outs.map(function (txOut) {
16445 return {
16446 script: txOut.script,
16447 value: txOut.value
16448 }
16449 })
16450
16451 return newTx
16452 }
16453
16454 /**
16455 * Hash transaction for signing a specific input.
16456 *
16457 * Bitcoin uses a different hash for each signed transaction input. This
16458 * method copies the transaction, makes the necessary changes based on the
16459 * hashType, serializes and finally hashes the result. This hash can then be
16460 * used to sign the transaction input in question.
16461 */
16462 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
16463 // FIXME: remove in 2.x.y
16464 if (arguments[0] instanceof Script) {
16465 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
16466
16467 // swap the arguments (must be stored in tmp, arguments is special)
16468 var tmp = arguments[0]
16469 inIndex = arguments[1]
16470 prevOutScript = tmp
16471 }
16472
16473 typeForce('Number', inIndex)
16474 typeForce('Script', prevOutScript)
16475 typeForce('Number', hashType)
16476
16477 assert(inIndex >= 0, 'Invalid vin index')
16478 assert(inIndex < this.ins.length, 'Invalid vin index')
16479
16480 var txTmp = this.clone()
16481 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
16482
16483 // Blank out other inputs' signatures
16484 txTmp.ins.forEach(function (txIn) {
16485 txIn.script = Script.EMPTY
16486 })
16487 txTmp.ins[inIndex].script = hashScript
16488
16489 var hashTypeModifier = hashType & 0x1f
16490
16491 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
16492 assert(false, 'SIGHASH_NONE not yet supported')
16493 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
16494 assert(false, 'SIGHASH_SINGLE not yet supported')
16495 }
16496
16497 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
16498 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
16499 }
16500
16501 var hashTypeBuffer = new Buffer(4)
16502 hashTypeBuffer.writeInt32LE(hashType, 0)
16503
16504 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
16505 return crypto.hash256(buffer)
16506 }
16507
16508 Transaction.prototype.getHash = function () {
16509 return crypto.hash256(this.toBuffer())
16510 }
16511
16512 Transaction.prototype.getId = function () {
16513 // TxHash is little-endian, we need big-endian
16514 return bufferutils.reverse(this.getHash()).toString('hex')
16515 }
16516
16517 Transaction.prototype.toBuffer = function () {
16518 function scriptSize (script) {
16519 var length = script.buffer.length
16520
16521 return bufferutils.varIntSize(length) + length
16522 }
16523
16524 var buffer = new Buffer(
16525 8 +
16526 bufferutils.varIntSize(this.ins.length) +
16527 bufferutils.varIntSize(this.outs.length) +
16528 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
16529 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
16530 )
16531
16532 var offset = 0
16533 function writeSlice (slice) {
16534 slice.copy(buffer, offset)
16535 offset += slice.length
16536 }
16537
16538 function writeUInt32 (i) {
16539 buffer.writeUInt32LE(i, offset)
16540 offset += 4
16541 }
16542
16543 function writeUInt64 (i) {
16544 bufferutils.writeUInt64LE(buffer, i, offset)
16545 offset += 8
16546 }
16547
16548 function writeVarInt (i) {
16549 var n = bufferutils.writeVarInt(buffer, i, offset)
16550 offset += n
16551 }
16552
16553 writeUInt32(this.version)
16554 writeVarInt(this.ins.length)
16555
16556 this.ins.forEach(function (txIn) {
16557 writeSlice(txIn.hash)
16558 writeUInt32(txIn.index)
16559 writeVarInt(txIn.script.buffer.length)
16560 writeSlice(txIn.script.buffer)
16561 writeUInt32(txIn.sequence)
16562 })
16563
16564 writeVarInt(this.outs.length)
16565 this.outs.forEach(function (txOut) {
16566 writeUInt64(txOut.value)
16567 writeVarInt(txOut.script.buffer.length)
16568 writeSlice(txOut.script.buffer)
16569 })
16570
16571 writeUInt32(this.locktime)
16572
16573 return buffer
16574 }
16575
16576 Transaction.prototype.toHex = function () {
16577 return this.toBuffer().toString('hex')
16578 }
16579
16580 Transaction.prototype.setInputScript = function (index, script) {
16581 typeForce('Number', index)
16582 typeForce('Script', script)
16583
16584 this.ins[index].script = script
16585 }
16586
16587 // FIXME: remove in 2.x.y
16588 Transaction.prototype.sign = function (index, privKey, hashType) {
16589 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
16590
16591 var prevOutScript = privKey.pub.getAddress().toOutputScript()
16592 var signature = this.signInput(index, prevOutScript, privKey, hashType)
16593
16594 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
16595 this.setInputScript(index, scriptSig)
16596 }
16597
16598 // FIXME: remove in 2.x.y
16599 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
16600 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
16601
16602 hashType = hashType || Transaction.SIGHASH_ALL
16603
16604 var hash = this.hashForSignature(index, prevOutScript, hashType)
16605 var signature = privKey.sign(hash)
16606
16607 return signature.toScriptSignature(hashType)
16608 }
16609
16610 // FIXME: remove in 2.x.y
16611 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
16612 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
16613
16614 var parsed = ECSignature.parseScriptSignature(buffer)
16615 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
16616
16617 return pubKey.verify(hash, parsed.signature)
16618 }
16619
16620 module.exports = Transaction
16621
16622 }).call(this,require("buffer").Buffer)
16623 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
16624 (function (Buffer){
16625 var assert = require('assert')
16626 var ops = require('./opcodes')
16627 var scripts = require('./scripts')
16628
16629 var ECPubKey = require('./ecpubkey')
16630 var ECSignature = require('./ecsignature')
16631 var Script = require('./script')
16632 var Transaction = require('./transaction')
16633
16634 function extractInput (txIn) {
16635 var redeemScript
16636 var scriptSig = txIn.script
16637 var prevOutScript
16638 var prevOutType = scripts.classifyInput(scriptSig, true)
16639 var scriptType
16640
16641 // Re-classify if scriptHash
16642 if (prevOutType === 'scripthash') {
16643 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
16644 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
16645
16646 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
16647 scriptType = scripts.classifyInput(scriptSig, true)
16648 } else {
16649 scriptType = prevOutType
16650 }
16651
16652 // Extract hashType, pubKeys and signatures
16653 var hashType, parsed, pubKeys, signatures
16654
16655 switch (scriptType) {
16656 case 'pubkeyhash': {
16657 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
16658 hashType = parsed.hashType
16659 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
16660 signatures = [parsed.signature]
16661 prevOutScript = pubKeys[0].getAddress().toOutputScript()
16662
16663 break
16664 }
16665
16666 case 'pubkey': {
16667 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
16668 hashType = parsed.hashType
16669 signatures = [parsed.signature]
16670
16671 if (redeemScript) {
16672 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
16673 }
16674
16675 break
16676 }
16677
16678 case 'multisig': {
16679 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
16680 if (chunk === ops.OP_0) return chunk
16681
16682 var parsed = ECSignature.parseScriptSignature(chunk)
16683 hashType = parsed.hashType
16684
16685 return parsed.signature
16686 })
16687
16688 if (redeemScript) {
16689 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16690 }
16691
16692 break
16693 }
16694 }
16695
16696 return {
16697 hashType: hashType,
16698 prevOutScript: prevOutScript,
16699 prevOutType: prevOutType,
16700 pubKeys: pubKeys,
16701 redeemScript: redeemScript,
16702 scriptType: scriptType,
16703 signatures: signatures
16704 }
16705 }
16706
16707 function TransactionBuilder () {
16708 this.prevTxMap = {}
16709 this.prevOutScripts = {}
16710 this.prevOutTypes = {}
16711
16712 this.inputs = []
16713 this.tx = new Transaction()
16714 }
16715
16716 TransactionBuilder.fromTransaction = function (transaction) {
16717 var txb = new TransactionBuilder()
16718
16719 // Copy other transaction fields
16720 txb.tx.version = transaction.version
16721 txb.tx.locktime = transaction.locktime
16722
16723 // Extract/add inputs
16724 transaction.ins.forEach(function (txIn) {
16725 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
16726 })
16727
16728 // Extract/add outputs
16729 transaction.outs.forEach(function (txOut) {
16730 txb.addOutput(txOut.script, txOut.value)
16731 })
16732
16733 // Extract/add signatures
16734 txb.inputs = transaction.ins.map(function (txIn) {
16735 // TODO: remove me after testcase added
16736 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
16737
16738 // Ignore empty scripts
16739 if (txIn.script.buffer.length === 0) return {}
16740
16741 return extractInput(txIn)
16742 })
16743
16744 return txb
16745 }
16746
16747 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
16748 var prevOutHash
16749
16750 // txId
16751 if (typeof prevTx === 'string') {
16752 prevOutHash = new Buffer(prevTx, 'hex')
16753
16754 // TxId hex is big-endian, we want little-endian hash
16755 Array.prototype.reverse.call(prevOutHash)
16756
16757 // Transaction
16758 } else if (prevTx instanceof Transaction) {
16759 prevOutHash = prevTx.getHash()
16760 prevOutScript = prevTx.outs[index].script
16761
16762 // txHash
16763 } else {
16764 prevOutHash = prevTx
16765 }
16766
16767 var input = {}
16768 if (prevOutScript) {
16769 var prevOutType = scripts.classifyOutput(prevOutScript)
16770
16771 // if we can, extract pubKey information
16772 switch (prevOutType) {
16773 case 'multisig': {
16774 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16775 break
16776 }
16777
16778 case 'pubkey': {
16779 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
16780 break
16781 }
16782 }
16783
16784 if (prevOutType !== 'scripthash') {
16785 input.scriptType = prevOutType
16786 }
16787
16788 input.prevOutScript = prevOutScript
16789 input.prevOutType = prevOutType
16790 }
16791
16792 assert(this.inputs.every(function (input2) {
16793 if (input2.hashType === undefined) return true
16794
16795 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
16796 }), 'No, this would invalidate signatures')
16797
16798 var prevOut = prevOutHash.toString('hex') + ':' + index
16799 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
16800
16801 var vin = this.tx.addInput(prevOutHash, index, sequence)
16802 this.inputs[vin] = input
16803 this.prevTxMap[prevOut] = vin
16804
16805 return vin
16806 }
16807
16808 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
16809 assert(this.inputs.every(function (input) {
16810 if (input.hashType === undefined) return true
16811
16812 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
16813 }), 'No, this would invalidate signatures')
16814
16815 return this.tx.addOutput(scriptPubKey, value)
16816 }
16817
16818 TransactionBuilder.prototype.build = function () {
16819 return this.__build(false)
16820 }
16821 TransactionBuilder.prototype.buildIncomplete = function () {
16822 return this.__build(true)
16823 }
16824
16825 var canSignTypes = {
16826 'pubkeyhash': true,
16827 'multisig': true,
16828 'pubkey': true
16829 }
16830
16831 TransactionBuilder.prototype.__build = function (allowIncomplete) {
16832 if (!allowIncomplete) {
16833 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
16834 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
16835 }
16836
16837 var tx = this.tx.clone()
16838
16839 // Create script signatures from signature meta-data
16840 this.inputs.forEach(function (input, index) {
16841 var scriptType = input.scriptType
16842 var scriptSig
16843
16844 if (!allowIncomplete) {
16845 assert(!!scriptType, 'Transaction is not complete')
16846 assert(scriptType in canSignTypes, scriptType + ' not supported')
16847 assert(input.signatures, 'Transaction is missing signatures')
16848 }
16849
16850 if (input.signatures) {
16851 switch (scriptType) {
16852 case 'pubkeyhash': {
16853 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
16854 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
16855 break
16856 }
16857
16858 case 'multisig': {
16859 // Array.prototype.map is sparse-compatible
16860 var msSignatures = input.signatures.map(function (signature) {
16861 return signature && signature.toScriptSignature(input.hashType)
16862 })
16863
16864 // fill in blanks with OP_0
16865 if (allowIncomplete) {
16866 for (var i = 0; i < msSignatures.length; ++i) {
16867 if (msSignatures[i]) continue
16868
16869 msSignatures[i] = ops.OP_0
16870 }
16871 } else {
16872 // Array.prototype.filter returns non-sparse array
16873 msSignatures = msSignatures.filter(function (x) { return x })
16874 }
16875
16876 var redeemScript = allowIncomplete ? undefined : input.redeemScript
16877 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
16878 break
16879 }
16880
16881 case 'pubkey': {
16882 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
16883 scriptSig = scripts.pubKeyInput(pkSignature)
16884 break
16885 }
16886 }
16887 }
16888
16889 // did we build a scriptSig?
16890 if (scriptSig) {
16891 // wrap as scriptHash if necessary
16892 if (input.prevOutType === 'scripthash') {
16893 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
16894 }
16895
16896 tx.setInputScript(index, scriptSig)
16897 }
16898 })
16899
16900 return tx
16901 }
16902
16903 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
16904 assert(index in this.inputs, 'No input at index: ' + index)
16905 hashType = hashType || Transaction.SIGHASH_ALL
16906
16907 var input = this.inputs[index]
16908 var canSign = input.hashType &&
16909 input.prevOutScript &&
16910 input.prevOutType &&
16911 input.pubKeys &&
16912 input.scriptType &&
16913 input.signatures
16914
16915 // are we almost ready to sign?
16916 if (canSign) {
16917 // if redeemScript was provided, enforce consistency
16918 if (redeemScript) {
16919 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
16920 }
16921
16922 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
16923
16924 // no? prepare
16925 } else {
16926 // must be pay-to-scriptHash?
16927 if (redeemScript) {
16928 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
16929 if (input.prevOutScript) {
16930 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
16931
16932 var scriptHash = input.prevOutScript.chunks[1]
16933 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
16934 }
16935
16936 var scriptType = scripts.classifyOutput(redeemScript)
16937 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
16938
16939 var pubKeys = []
16940 switch (scriptType) {
16941 case 'multisig': {
16942 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
16943 break
16944 }
16945
16946 case 'pubkeyhash': {
16947 var pkh1 = redeemScript.chunks[2]
16948 var pkh2 = privKey.pub.getAddress().hash
16949
16950 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
16951 pubKeys = [privKey.pub]
16952 break
16953 }
16954
16955 case 'pubkey': {
16956 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
16957 break
16958 }
16959 }
16960
16961 if (!input.prevOutScript) {
16962 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
16963 input.prevOutType = 'scripthash'
16964 }
16965
16966 input.pubKeys = pubKeys
16967 input.redeemScript = redeemScript
16968 input.scriptType = scriptType
16969
16970 // cannot be pay-to-scriptHash
16971 } else {
16972 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
16973
16974 // can we otherwise sign this?
16975 if (input.scriptType) {
16976 assert(input.pubKeys, input.scriptType + ' not supported')
16977
16978 // we know nothin' Jon Snow, assume pubKeyHash
16979 } else {
16980 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
16981 input.prevOutType = 'pubkeyhash'
16982 input.pubKeys = [privKey.pub]
16983 input.scriptType = input.prevOutType
16984 }
16985 }
16986
16987 input.hashType = hashType
16988 input.signatures = input.signatures || []
16989 }
16990
16991 var signatureScript = input.redeemScript || input.prevOutScript
16992 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
16993
16994 // enforce signature order matches public keys
16995 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
16996 // maintain a local copy of unmatched signatures
16997 var unmatched = input.signatures.slice()
16998
16999 input.signatures = input.pubKeys.map(function (pubKey) {
17000 var match
17001
17002 // check for any matching signatures
17003 unmatched.some(function (signature, i) {
17004 if (!pubKey.verify(signatureHash, signature)) return false
17005 match = signature
17006
17007 // remove matched signature from unmatched
17008 unmatched.splice(i, 1)
17009
17010 return true
17011 })
17012
17013 return match || undefined
17014 })
17015 }
17016
17017 // enforce in order signing of public keys
17018 assert(input.pubKeys.some(function (pubKey, i) {
17019 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17020
17021 assert(!input.signatures[i], 'Signature already exists')
17022 var signature = privKey.sign(signatureHash)
17023 input.signatures[i] = signature
17024
17025 return true
17026 }, this), 'privateKey cannot sign for this input')
17027 }
17028
17029 module.exports = TransactionBuilder
17030
17031 }).call(this,require("buffer").Buffer)
17032 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17033 (function (Buffer){
17034 var assert = require('assert')
17035 var bufferutils = require('./bufferutils')
17036 var typeForce = require('typeforce')
17037 var networks = require('./networks')
17038 var randomBytes = require('randombytes')
17039
17040 var Address = require('./address')
17041 var HDNode = require('./hdnode')
17042 var TransactionBuilder = require('./transaction_builder')
17043 var Script = require('./script')
17044
17045 function Wallet (seed, network) {
17046 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17047
17048 seed = seed || randomBytes(32)
17049 network = network || networks.bitcoin
17050
17051 // Stored in a closure to make accidental serialization less likely
17052 var masterKey = HDNode.fromSeedBuffer(seed, network)
17053
17054 // HD first-level child derivation method should be hardened
17055 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17056 var accountZero = masterKey.deriveHardened(0)
17057 var externalAccount = accountZero.derive(0)
17058 var internalAccount = accountZero.derive(1)
17059
17060 this.addresses = []
17061 this.changeAddresses = []
17062 this.network = network
17063 this.unspents = []
17064
17065 // FIXME: remove in 2.0.0
17066 this.unspentMap = {}
17067
17068 // FIXME: remove in 2.0.0
17069 var me = this
17070 this.newMasterKey = function (seed) {
17071 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17072
17073 seed = seed || randomBytes(32)
17074 masterKey = HDNode.fromSeedBuffer(seed, network)
17075
17076 accountZero = masterKey.deriveHardened(0)
17077 externalAccount = accountZero.derive(0)
17078 internalAccount = accountZero.derive(1)
17079
17080 me.addresses = []
17081 me.changeAddresses = []
17082
17083 me.unspents = []
17084 me.unspentMap = {}
17085 }
17086
17087 this.getMasterKey = function () {
17088 return masterKey
17089 }
17090 this.getAccountZero = function () {
17091 return accountZero
17092 }
17093 this.getExternalAccount = function () {
17094 return externalAccount
17095 }
17096 this.getInternalAccount = function () {
17097 return internalAccount
17098 }
17099 }
17100
17101 Wallet.prototype.createTransaction = function (to, value, options) {
17102 // FIXME: remove in 2.0.0
17103 if (typeof options !== 'object') {
17104 if (options !== undefined) {
17105 console.warn('Non options object parameters are deprecated, use options object instead')
17106
17107 options = {
17108 fixedFee: arguments[2],
17109 changeAddress: arguments[3]
17110 }
17111 }
17112 }
17113
17114 options = options || {}
17115
17116 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17117
17118 var changeAddress = options.changeAddress
17119 var fixedFee = options.fixedFee
17120 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17121
17122 // filter by minConf, then pending and sort by descending value
17123 var unspents = this.unspents.filter(function (unspent) {
17124 return unspent.confirmations >= minConf
17125 }).filter(function (unspent) {
17126 return !unspent.pending
17127 }).sort(function (o1, o2) {
17128 return o2.value - o1.value
17129 })
17130
17131 var accum = 0
17132 var addresses = []
17133 var subTotal = value
17134
17135 var txb = new TransactionBuilder()
17136 txb.addOutput(to, value)
17137
17138 for (var i = 0; i < unspents.length; ++i) {
17139 var unspent = unspents[i]
17140 addresses.push(unspent.address)
17141
17142 txb.addInput(unspent.txHash, unspent.index)
17143
17144 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17145
17146 accum += unspent.value
17147 subTotal = value + fee
17148
17149 if (accum >= subTotal) {
17150 var change = accum - subTotal
17151
17152 if (change > this.network.dustThreshold) {
17153 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17154 }
17155
17156 break
17157 }
17158 }
17159
17160 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17161
17162 return this.signWith(txb, addresses).build()
17163 }
17164
17165 // FIXME: remove in 2.0.0
17166 Wallet.prototype.processPendingTx = function (tx) {
17167 this.__processTx(tx, true)
17168 }
17169
17170 // FIXME: remove in 2.0.0
17171 Wallet.prototype.processConfirmedTx = function (tx) {
17172 this.__processTx(tx, false)
17173 }
17174
17175 // FIXME: remove in 2.0.0
17176 Wallet.prototype.__processTx = function (tx, isPending) {
17177 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17178
17179 var txId = tx.getId()
17180 var txHash = tx.getHash()
17181
17182 tx.outs.forEach(function (txOut, i) {
17183 var address
17184
17185 try {
17186 address = Address.fromOutputScript(txOut.script, this.network).toString()
17187 } catch (e) {
17188 if (!(e.message.match(/has no matching Address/)))
17189 throw e
17190 }
17191
17192 var myAddresses = this.addresses.concat(this.changeAddresses)
17193 if (myAddresses.indexOf(address) > -1) {
17194 var lookup = txId + ':' + i
17195 if (lookup in this.unspentMap) return
17196
17197 // its unique, add it
17198 var unspent = {
17199 address: address,
17200 confirmations: 0, // no way to determine this without more information
17201 index: i,
17202 txHash: txHash,
17203 txId: txId,
17204 value: txOut.value,
17205 pending: isPending
17206 }
17207
17208 this.unspentMap[lookup] = unspent
17209 this.unspents.push(unspent)
17210 }
17211 }, this)
17212
17213 tx.ins.forEach(function (txIn) {
17214 // copy and convert to big-endian hex
17215 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17216
17217 var lookup = txInId + ':' + txIn.index
17218 if (!(lookup in this.unspentMap)) return
17219
17220 var unspent = this.unspentMap[lookup]
17221
17222 if (isPending) {
17223 unspent.pending = true
17224 unspent.spent = true
17225 } else {
17226 delete this.unspentMap[lookup]
17227
17228 this.unspents = this.unspents.filter(function (unspent2) {
17229 return unspent !== unspent2
17230 })
17231 }
17232 }, this)
17233 }
17234
17235 Wallet.prototype.generateAddress = function () {
17236 var k = this.addresses.length
17237 var address = this.getExternalAccount().derive(k).getAddress()
17238
17239 this.addresses.push(address.toString())
17240
17241 return this.getReceiveAddress()
17242 }
17243
17244 Wallet.prototype.generateChangeAddress = function () {
17245 var k = this.changeAddresses.length
17246 var address = this.getInternalAccount().derive(k).getAddress()
17247
17248 this.changeAddresses.push(address.toString())
17249
17250 return this.getChangeAddress()
17251 }
17252
17253 Wallet.prototype.getAddress = function () {
17254 if (this.addresses.length === 0) {
17255 this.generateAddress()
17256 }
17257
17258 return this.addresses[this.addresses.length - 1]
17259 }
17260
17261 Wallet.prototype.getBalance = function (minConf) {
17262 minConf = minConf || 0
17263
17264 return this.unspents.filter(function (unspent) {
17265 return unspent.confirmations >= minConf
17266
17267 // FIXME: remove spent filter in 2.0.0
17268 }).filter(function (unspent) {
17269 return !unspent.spent
17270 }).reduce(function (accum, unspent) {
17271 return accum + unspent.value
17272 }, 0)
17273 }
17274
17275 Wallet.prototype.getChangeAddress = function () {
17276 if (this.changeAddresses.length === 0) {
17277 this.generateChangeAddress()
17278 }
17279
17280 return this.changeAddresses[this.changeAddresses.length - 1]
17281 }
17282
17283 Wallet.prototype.getInternalPrivateKey = function (index) {
17284 return this.getInternalAccount().derive(index).privKey
17285 }
17286
17287 Wallet.prototype.getPrivateKey = function (index) {
17288 return this.getExternalAccount().derive(index).privKey
17289 }
17290
17291 Wallet.prototype.getPrivateKeyForAddress = function (address) {
17292 var index
17293
17294 if ((index = this.addresses.indexOf(address)) > -1) {
17295 return this.getPrivateKey(index)
17296 }
17297
17298 if ((index = this.changeAddresses.indexOf(address)) > -1) {
17299 return this.getInternalPrivateKey(index)
17300 }
17301
17302 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
17303 }
17304
17305 Wallet.prototype.getUnspentOutputs = function (minConf) {
17306 minConf = minConf || 0
17307
17308 return this.unspents.filter(function (unspent) {
17309 return unspent.confirmations >= minConf
17310
17311 // FIXME: remove spent filter in 2.0.0
17312 }).filter(function (unspent) {
17313 return !unspent.spent
17314 }).map(function (unspent) {
17315 return {
17316 address: unspent.address,
17317 confirmations: unspent.confirmations,
17318 index: unspent.index,
17319 txId: unspent.txId,
17320 value: unspent.value,
17321
17322 // FIXME: remove in 2.0.0
17323 hash: unspent.txId,
17324 pending: unspent.pending
17325 }
17326 })
17327 }
17328
17329 Wallet.prototype.setUnspentOutputs = function (unspents) {
17330 this.unspentMap = {}
17331 this.unspents = unspents.map(function (unspent) {
17332 // FIXME: remove unspent.hash in 2.0.0
17333 var txId = unspent.txId || unspent.hash
17334 var index = unspent.index
17335
17336 // FIXME: remove in 2.0.0
17337 if (unspent.hash !== undefined) {
17338 console.warn('unspent.hash is deprecated, use unspent.txId instead')
17339 }
17340
17341 // FIXME: remove in 2.0.0
17342 if (index === undefined) {
17343 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
17344 index = unspent.outputIndex
17345 }
17346
17347 typeForce('String', txId)
17348 typeForce('Number', index)
17349 typeForce('Number', unspent.value)
17350
17351 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
17352 assert.doesNotThrow(function () {
17353 Address.fromBase58Check(unspent.address)
17354 }, 'Expected Base58 Address, got ' + unspent.address)
17355 assert(isFinite(index), 'Expected finite index, got ' + index)
17356
17357 // FIXME: remove branch in 2.0.0
17358 if (unspent.confirmations !== undefined) {
17359 typeForce('Number', unspent.confirmations)
17360 }
17361
17362 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
17363
17364 unspent = {
17365 address: unspent.address,
17366 confirmations: unspent.confirmations || 0,
17367 index: index,
17368 txHash: txHash,
17369 txId: txId,
17370 value: unspent.value,
17371
17372 // FIXME: remove in 2.0.0
17373 pending: unspent.pending || false
17374 }
17375
17376 // FIXME: remove in 2.0.0
17377 this.unspentMap[txId + ':' + index] = unspent
17378
17379 return unspent
17380 }, this)
17381 }
17382
17383 Wallet.prototype.signWith = function (tx, addresses) {
17384 addresses.forEach(function (address, i) {
17385 var privKey = this.getPrivateKeyForAddress(address)
17386
17387 tx.sign(i, privKey)
17388 }, this)
17389
17390 return tx
17391 }
17392
17393 function estimatePaddedFee (tx, network) {
17394 var tmpTx = tx.clone()
17395 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
17396
17397 return network.estimateFee(tmpTx)
17398 }
17399
17400 // FIXME: 1.0.0 shims, remove in 2.0.0
17401 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
17402 Wallet.prototype.createTx = Wallet.prototype.createTransaction
17403
17404 module.exports = Wallet
17405
17406 }).call(this,require("buffer").Buffer)
17407 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
17408 });</script>
17409 <script>bitcoin.networks.shadow = {
17410 magicPrefix: '\x19ShadowCash Signed Message:\n',
17411 bip32: {
17412 public: 0xEE80286A,
17413 private: 0xEE8031E8
17414 },
17415 pubKeyHash: 0x3f,
17416 scriptHash: 0x7d,
17417 wif: 0xbf,
17418 dustThreshold: 0,
17419 feePerKb: 1000,
17420 estimateFee: function() { return "unused in this app" },
17421 };
17422
17423 bitcoin.networks.shadowtn = {
17424 magicPrefix: '\x19ShadowCash Signed Message:\n',
17425 bip32: {
17426 public: 0x76C0FDFB,
17427 private: 0x76C1077A
17428 },
17429 pubKeyHash: 0x7f,
17430 scriptHash: 0xc4,
17431 wif: 0xff,
17432 dustThreshold: 0,
17433 feePerKb: 1000,
17434 estimateFee: function() { return "unused in this app" },
17435 };
17436
17437 bitcoin.networks.clam = {
17438 bip32: {
17439 public: 0xa8c26d64,
17440 private: 0xa8c17826
17441 },
17442 pubKeyHash: 0x89,
17443 wif: 0x85,
17444 };
17445
17446 bitcoin.networks.dash = {
17447 bip32: {
17448 public: 0x0488b21e,
17449 private: 0x0488ade4
17450 },
17451 pubKeyHash: 0x4c,
17452 scriptHash: 0x10,
17453 wif: 0xcc,
17454 };
17455
17456 bitcoin.networks.namecoin = {
17457 bip32: {
17458 public: 0x0488b21e,
17459 private: 0x0488ade4
17460 },
17461 pubKeyHash: 0x34,
17462 //scriptHash: 0x10,
17463 wif: 0x80,
17464 };
17465
17466 bitcoin.networks.peercoin = {
17467 bip32: {
17468 public: 0x0488b21e,
17469 private: 0x0488ade4
17470 },
17471 pubKeyHash: 0x37,
17472 //scriptHash: 0x10,
17473 wif: 0xb7,
17474 };
17475
17476 </script>
17477 <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){
17478 (function (global){
17479 'use strict';
17480
17481 // compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
17482 // original notice:
17483
17484 /*!
17485 * The buffer module from node.js, for the browser.
17486 *
17487 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
17488 * @license MIT
17489 */
17490 function compare(a, b) {
17491 if (a === b) {
17492 return 0;
17493 }
17494
17495 var x = a.length;
17496 var y = b.length;
17497
17498 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17499 if (a[i] !== b[i]) {
17500 x = a[i];
17501 y = b[i];
17502 break;
17503 }
17504 }
17505
17506 if (x < y) {
17507 return -1;
17508 }
17509 if (y < x) {
17510 return 1;
17511 }
17512 return 0;
17513 }
17514 function isBuffer(b) {
17515 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
17516 return global.Buffer.isBuffer(b);
17517 }
17518 return !!(b != null && b._isBuffer);
17519 }
17520
17521 // based on node assert, original notice:
17522
17523 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
17524 //
17525 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
17526 //
17527 // Originally from narwhal.js (http://narwhaljs.org)
17528 // Copyright (c) 2009 Thomas Robinson <280north.com>
17529 //
17530 // Permission is hereby granted, free of charge, to any person obtaining a copy
17531 // of this software and associated documentation files (the 'Software'), to
17532 // deal in the Software without restriction, including without limitation the
17533 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17534 // sell copies of the Software, and to permit persons to whom the Software is
17535 // furnished to do so, subject to the following conditions:
17536 //
17537 // The above copyright notice and this permission notice shall be included in
17538 // all copies or substantial portions of the Software.
17539 //
17540 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17541 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17542 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17543 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
17544 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
17545 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17546
17547 var util = require('util/');
17548 var hasOwn = Object.prototype.hasOwnProperty;
17549 var pSlice = Array.prototype.slice;
17550 var functionsHaveNames = (function () {
17551 return function foo() {}.name === 'foo';
17552 }());
17553 function pToString (obj) {
17554 return Object.prototype.toString.call(obj);
17555 }
17556 function isView(arrbuf) {
17557 if (isBuffer(arrbuf)) {
17558 return false;
17559 }
17560 if (typeof global.ArrayBuffer !== 'function') {
17561 return false;
17562 }
17563 if (typeof ArrayBuffer.isView === 'function') {
17564 return ArrayBuffer.isView(arrbuf);
17565 }
17566 if (!arrbuf) {
17567 return false;
17568 }
17569 if (arrbuf instanceof DataView) {
17570 return true;
17571 }
17572 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
17573 return true;
17574 }
17575 return false;
17576 }
17577 // 1. The assert module provides functions that throw
17578 // AssertionError's when particular conditions are not met. The
17579 // assert module must conform to the following interface.
17580
17581 var assert = module.exports = ok;
17582
17583 // 2. The AssertionError is defined in assert.
17584 // new assert.AssertionError({ message: message,
17585 // actual: actual,
17586 // expected: expected })
17587
17588 var regex = /\s*function\s+([^\(\s]*)\s*/;
17589 // based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
17590 function getName(func) {
17591 if (!util.isFunction(func)) {
17592 return;
17593 }
17594 if (functionsHaveNames) {
17595 return func.name;
17596 }
17597 var str = func.toString();
17598 var match = str.match(regex);
17599 return match && match[1];
17600 }
17601 assert.AssertionError = function AssertionError(options) {
17602 this.name = 'AssertionError';
17603 this.actual = options.actual;
17604 this.expected = options.expected;
17605 this.operator = options.operator;
17606 if (options.message) {
17607 this.message = options.message;
17608 this.generatedMessage = false;
17609 } else {
17610 this.message = getMessage(this);
17611 this.generatedMessage = true;
17612 }
17613 var stackStartFunction = options.stackStartFunction || fail;
17614 if (Error.captureStackTrace) {
17615 Error.captureStackTrace(this, stackStartFunction);
17616 } else {
17617 // non v8 browsers so we can have a stacktrace
17618 var err = new Error();
17619 if (err.stack) {
17620 var out = err.stack;
17621
17622 // try to strip useless frames
17623 var fn_name = getName(stackStartFunction);
17624 var idx = out.indexOf('\n' + fn_name);
17625 if (idx >= 0) {
17626 // once we have located the function frame
17627 // we need to strip out everything before it (and its line)
17628 var next_line = out.indexOf('\n', idx + 1);
17629 out = out.substring(next_line + 1);
17630 }
17631
17632 this.stack = out;
17633 }
17634 }
17635 };
17636
17637 // assert.AssertionError instanceof Error
17638 util.inherits(assert.AssertionError, Error);
17639
17640 function truncate(s, n) {
17641 if (typeof s === 'string') {
17642 return s.length < n ? s : s.slice(0, n);
17643 } else {
17644 return s;
17645 }
17646 }
17647 function inspect(something) {
17648 if (functionsHaveNames || !util.isFunction(something)) {
17649 return util.inspect(something);
17650 }
17651 var rawname = getName(something);
17652 var name = rawname ? ': ' + rawname : '';
17653 return '[Function' + name + ']';
17654 }
17655 function getMessage(self) {
17656 return truncate(inspect(self.actual), 128) + ' ' +
17657 self.operator + ' ' +
17658 truncate(inspect(self.expected), 128);
17659 }
17660
17661 // At present only the three keys mentioned above are used and
17662 // understood by the spec. Implementations or sub modules can pass
17663 // other keys to the AssertionError's constructor - they will be
17664 // ignored.
17665
17666 // 3. All of the following functions must throw an AssertionError
17667 // when a corresponding condition is not met, with a message that
17668 // may be undefined if not provided. All assertion methods provide
17669 // both the actual and expected values to the assertion error for
17670 // display purposes.
17671
17672 function fail(actual, expected, message, operator, stackStartFunction) {
17673 throw new assert.AssertionError({
17674 message: message,
17675 actual: actual,
17676 expected: expected,
17677 operator: operator,
17678 stackStartFunction: stackStartFunction
17679 });
17680 }
17681
17682 // EXTENSION! allows for well behaved errors defined elsewhere.
17683 assert.fail = fail;
17684
17685 // 4. Pure assertion tests whether a value is truthy, as determined
17686 // by !!guard.
17687 // assert.ok(guard, message_opt);
17688 // This statement is equivalent to assert.equal(true, !!guard,
17689 // message_opt);. To test strictly for the value true, use
17690 // assert.strictEqual(true, guard, message_opt);.
17691
17692 function ok(value, message) {
17693 if (!value) fail(value, true, message, '==', assert.ok);
17694 }
17695 assert.ok = ok;
17696
17697 // 5. The equality assertion tests shallow, coercive equality with
17698 // ==.
17699 // assert.equal(actual, expected, message_opt);
17700
17701 assert.equal = function equal(actual, expected, message) {
17702 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
17703 };
17704
17705 // 6. The non-equality assertion tests for whether two objects are not equal
17706 // with != assert.notEqual(actual, expected, message_opt);
17707
17708 assert.notEqual = function notEqual(actual, expected, message) {
17709 if (actual == expected) {
17710 fail(actual, expected, message, '!=', assert.notEqual);
17711 }
17712 };
17713
17714 // 7. The equivalence assertion tests a deep equality relation.
17715 // assert.deepEqual(actual, expected, message_opt);
17716
17717 assert.deepEqual = function deepEqual(actual, expected, message) {
17718 if (!_deepEqual(actual, expected, false)) {
17719 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
17720 }
17721 };
17722
17723 assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
17724 if (!_deepEqual(actual, expected, true)) {
17725 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
17726 }
17727 };
17728
17729 function _deepEqual(actual, expected, strict, memos) {
17730 // 7.1. All identical values are equivalent, as determined by ===.
17731 if (actual === expected) {
17732 return true;
17733 } else if (isBuffer(actual) && isBuffer(expected)) {
17734 return compare(actual, expected) === 0;
17735
17736 // 7.2. If the expected value is a Date object, the actual value is
17737 // equivalent if it is also a Date object that refers to the same time.
17738 } else if (util.isDate(actual) && util.isDate(expected)) {
17739 return actual.getTime() === expected.getTime();
17740
17741 // 7.3 If the expected value is a RegExp object, the actual value is
17742 // equivalent if it is also a RegExp object with the same source and
17743 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
17744 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
17745 return actual.source === expected.source &&
17746 actual.global === expected.global &&
17747 actual.multiline === expected.multiline &&
17748 actual.lastIndex === expected.lastIndex &&
17749 actual.ignoreCase === expected.ignoreCase;
17750
17751 // 7.4. Other pairs that do not both pass typeof value == 'object',
17752 // equivalence is determined by ==.
17753 } else if ((actual === null || typeof actual !== 'object') &&
17754 (expected === null || typeof expected !== 'object')) {
17755 return strict ? actual === expected : actual == expected;
17756
17757 // If both values are instances of typed arrays, wrap their underlying
17758 // ArrayBuffers in a Buffer each to increase performance
17759 // This optimization requires the arrays to have the same type as checked by
17760 // Object.prototype.toString (aka pToString). Never perform binary
17761 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
17762 // bit patterns are not identical.
17763 } else if (isView(actual) && isView(expected) &&
17764 pToString(actual) === pToString(expected) &&
17765 !(actual instanceof Float32Array ||
17766 actual instanceof Float64Array)) {
17767 return compare(new Uint8Array(actual.buffer),
17768 new Uint8Array(expected.buffer)) === 0;
17769
17770 // 7.5 For all other Object pairs, including Array objects, equivalence is
17771 // determined by having the same number of owned properties (as verified
17772 // with Object.prototype.hasOwnProperty.call), the same set of keys
17773 // (although not necessarily the same order), equivalent values for every
17774 // corresponding key, and an identical 'prototype' property. Note: this
17775 // accounts for both named and indexed properties on Arrays.
17776 } else if (isBuffer(actual) !== isBuffer(expected)) {
17777 return false;
17778 } else {
17779 memos = memos || {actual: [], expected: []};
17780
17781 var actualIndex = memos.actual.indexOf(actual);
17782 if (actualIndex !== -1) {
17783 if (actualIndex === memos.expected.indexOf(expected)) {
17784 return true;
17785 }
17786 }
17787
17788 memos.actual.push(actual);
17789 memos.expected.push(expected);
17790
17791 return objEquiv(actual, expected, strict, memos);
17792 }
17793 }
17794
17795 function isArguments(object) {
17796 return Object.prototype.toString.call(object) == '[object Arguments]';
17797 }
17798
17799 function objEquiv(a, b, strict, actualVisitedObjects) {
17800 if (a === null || a === undefined || b === null || b === undefined)
17801 return false;
17802 // if one is a primitive, the other must be same
17803 if (util.isPrimitive(a) || util.isPrimitive(b))
17804 return a === b;
17805 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
17806 return false;
17807 var aIsArgs = isArguments(a);
17808 var bIsArgs = isArguments(b);
17809 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
17810 return false;
17811 if (aIsArgs) {
17812 a = pSlice.call(a);
17813 b = pSlice.call(b);
17814 return _deepEqual(a, b, strict);
17815 }
17816 var ka = objectKeys(a);
17817 var kb = objectKeys(b);
17818 var key, i;
17819 // having the same number of owned properties (keys incorporates
17820 // hasOwnProperty)
17821 if (ka.length !== kb.length)
17822 return false;
17823 //the same set of keys (although not necessarily the same order),
17824 ka.sort();
17825 kb.sort();
17826 //~~~cheap key test
17827 for (i = ka.length - 1; i >= 0; i--) {
17828 if (ka[i] !== kb[i])
17829 return false;
17830 }
17831 //equivalent values for every corresponding key, and
17832 //~~~possibly expensive deep test
17833 for (i = ka.length - 1; i >= 0; i--) {
17834 key = ka[i];
17835 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
17836 return false;
17837 }
17838 return true;
17839 }
17840
17841 // 8. The non-equivalence assertion tests for any deep inequality.
17842 // assert.notDeepEqual(actual, expected, message_opt);
17843
17844 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
17845 if (_deepEqual(actual, expected, false)) {
17846 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
17847 }
17848 };
17849
17850 assert.notDeepStrictEqual = notDeepStrictEqual;
17851 function notDeepStrictEqual(actual, expected, message) {
17852 if (_deepEqual(actual, expected, true)) {
17853 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
17854 }
17855 }
17856
17857
17858 // 9. The strict equality assertion tests strict equality, as determined by ===.
17859 // assert.strictEqual(actual, expected, message_opt);
17860
17861 assert.strictEqual = function strictEqual(actual, expected, message) {
17862 if (actual !== expected) {
17863 fail(actual, expected, message, '===', assert.strictEqual);
17864 }
17865 };
17866
17867 // 10. The strict non-equality assertion tests for strict inequality, as
17868 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
17869
17870 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
17871 if (actual === expected) {
17872 fail(actual, expected, message, '!==', assert.notStrictEqual);
17873 }
17874 };
17875
17876 function expectedException(actual, expected) {
17877 if (!actual || !expected) {
17878 return false;
17879 }
17880
17881 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
17882 return expected.test(actual);
17883 }
17884
17885 try {
17886 if (actual instanceof expected) {
17887 return true;
17888 }
17889 } catch (e) {
17890 // Ignore. The instanceof check doesn't work for arrow functions.
17891 }
17892
17893 if (Error.isPrototypeOf(expected)) {
17894 return false;
17895 }
17896
17897 return expected.call({}, actual) === true;
17898 }
17899
17900 function _tryBlock(block) {
17901 var error;
17902 try {
17903 block();
17904 } catch (e) {
17905 error = e;
17906 }
17907 return error;
17908 }
17909
17910 function _throws(shouldThrow, block, expected, message) {
17911 var actual;
17912
17913 if (typeof block !== 'function') {
17914 throw new TypeError('"block" argument must be a function');
17915 }
17916
17917 if (typeof expected === 'string') {
17918 message = expected;
17919 expected = null;
17920 }
17921
17922 actual = _tryBlock(block);
17923
17924 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
17925 (message ? ' ' + message : '.');
17926
17927 if (shouldThrow && !actual) {
17928 fail(actual, expected, 'Missing expected exception' + message);
17929 }
17930
17931 var userProvidedMessage = typeof message === 'string';
17932 var isUnwantedException = !shouldThrow && util.isError(actual);
17933 var isUnexpectedException = !shouldThrow && actual && !expected;
17934
17935 if ((isUnwantedException &&
17936 userProvidedMessage &&
17937 expectedException(actual, expected)) ||
17938 isUnexpectedException) {
17939 fail(actual, expected, 'Got unwanted exception' + message);
17940 }
17941
17942 if ((shouldThrow && actual && expected &&
17943 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
17944 throw actual;
17945 }
17946 }
17947
17948 // 11. Expected to throw an error:
17949 // assert.throws(block, Error_opt, message_opt);
17950
17951 assert.throws = function(block, /*optional*/error, /*optional*/message) {
17952 _throws(true, block, error, message);
17953 };
17954
17955 // EXTENSION! This is annoying to write outside this module.
17956 assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
17957 _throws(false, block, error, message);
17958 };
17959
17960 assert.ifError = function(err) { if (err) throw err; };
17961
17962 var objectKeys = Object.keys || function (obj) {
17963 var keys = [];
17964 for (var key in obj) {
17965 if (hasOwn.call(obj, key)) keys.push(key);
17966 }
17967 return keys;
17968 };
17969
17970 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
17971 },{"util/":30}],2:[function(require,module,exports){
17972 'use strict'
17973
17974 exports.byteLength = byteLength
17975 exports.toByteArray = toByteArray
17976 exports.fromByteArray = fromByteArray
17977
17978 var lookup = []
17979 var revLookup = []
17980 var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
17981
17982 var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
17983 for (var i = 0, len = code.length; i < len; ++i) {
17984 lookup[i] = code[i]
17985 revLookup[code.charCodeAt(i)] = i
17986 }
17987
17988 revLookup['-'.charCodeAt(0)] = 62
17989 revLookup['_'.charCodeAt(0)] = 63
17990
17991 function placeHoldersCount (b64) {
17992 var len = b64.length
17993 if (len % 4 > 0) {
17994 throw new Error('Invalid string. Length must be a multiple of 4')
17995 }
17996
17997 // the number of equal signs (place holders)
17998 // if there are two placeholders, than the two characters before it
17999 // represent one byte
18000 // if there is only one, then the three characters before it represent 2 bytes
18001 // this is just a cheap hack to not do indexOf twice
18002 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
18003 }
18004
18005 function byteLength (b64) {
18006 // base64 is 4/3 + up to two characters of the original data
18007 return b64.length * 3 / 4 - placeHoldersCount(b64)
18008 }
18009
18010 function toByteArray (b64) {
18011 var i, j, l, tmp, placeHolders, arr
18012 var len = b64.length
18013 placeHolders = placeHoldersCount(b64)
18014
18015 arr = new Arr(len * 3 / 4 - placeHolders)
18016
18017 // if there are placeholders, only get up to the last complete 4 chars
18018 l = placeHolders > 0 ? len - 4 : len
18019
18020 var L = 0
18021
18022 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18023 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18024 arr[L++] = (tmp >> 16) & 0xFF
18025 arr[L++] = (tmp >> 8) & 0xFF
18026 arr[L++] = tmp & 0xFF
18027 }
18028
18029 if (placeHolders === 2) {
18030 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18031 arr[L++] = tmp & 0xFF
18032 } else if (placeHolders === 1) {
18033 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18034 arr[L++] = (tmp >> 8) & 0xFF
18035 arr[L++] = tmp & 0xFF
18036 }
18037
18038 return arr
18039 }
18040
18041 function tripletToBase64 (num) {
18042 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
18043 }
18044
18045 function encodeChunk (uint8, start, end) {
18046 var tmp
18047 var output = []
18048 for (var i = start; i < end; i += 3) {
18049 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18050 output.push(tripletToBase64(tmp))
18051 }
18052 return output.join('')
18053 }
18054
18055 function fromByteArray (uint8) {
18056 var tmp
18057 var len = uint8.length
18058 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18059 var output = ''
18060 var parts = []
18061 var maxChunkLength = 16383 // must be multiple of 3
18062
18063 // go through the array every three bytes, we'll deal with trailing stuff later
18064 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18065 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18066 }
18067
18068 // pad the end with zeros, but make sure to not forget the extra bytes
18069 if (extraBytes === 1) {
18070 tmp = uint8[len - 1]
18071 output += lookup[tmp >> 2]
18072 output += lookup[(tmp << 4) & 0x3F]
18073 output += '=='
18074 } else if (extraBytes === 2) {
18075 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18076 output += lookup[tmp >> 10]
18077 output += lookup[(tmp >> 4) & 0x3F]
18078 output += lookup[(tmp << 2) & 0x3F]
18079 output += '='
18080 }
18081
18082 parts.push(output)
18083
18084 return parts.join('')
18085 }
18086
18087 },{}],3:[function(require,module,exports){
18088
18089 },{}],4:[function(require,module,exports){
18090 (function (global){
18091 'use strict';
18092
18093 var buffer = require('buffer');
18094 var Buffer = buffer.Buffer;
18095 var SlowBuffer = buffer.SlowBuffer;
18096 var MAX_LEN = buffer.kMaxLength || 2147483647;
18097 exports.alloc = function alloc(size, fill, encoding) {
18098 if (typeof Buffer.alloc === 'function') {
18099 return Buffer.alloc(size, fill, encoding);
18100 }
18101 if (typeof encoding === 'number') {
18102 throw new TypeError('encoding must not be number');
18103 }
18104 if (typeof size !== 'number') {
18105 throw new TypeError('size must be a number');
18106 }
18107 if (size > MAX_LEN) {
18108 throw new RangeError('size is too large');
18109 }
18110 var enc = encoding;
18111 var _fill = fill;
18112 if (_fill === undefined) {
18113 enc = undefined;
18114 _fill = 0;
18115 }
18116 var buf = new Buffer(size);
18117 if (typeof _fill === 'string') {
18118 var fillBuf = new Buffer(_fill, enc);
18119 var flen = fillBuf.length;
18120 var i = -1;
18121 while (++i < size) {
18122 buf[i] = fillBuf[i % flen];
18123 }
18124 } else {
18125 buf.fill(_fill);
18126 }
18127 return buf;
18128 }
18129 exports.allocUnsafe = function allocUnsafe(size) {
18130 if (typeof Buffer.allocUnsafe === 'function') {
18131 return Buffer.allocUnsafe(size);
18132 }
18133 if (typeof size !== 'number') {
18134 throw new TypeError('size must be a number');
18135 }
18136 if (size > MAX_LEN) {
18137 throw new RangeError('size is too large');
18138 }
18139 return new Buffer(size);
18140 }
18141 exports.from = function from(value, encodingOrOffset, length) {
18142 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18143 return Buffer.from(value, encodingOrOffset, length);
18144 }
18145 if (typeof value === 'number') {
18146 throw new TypeError('"value" argument must not be a number');
18147 }
18148 if (typeof value === 'string') {
18149 return new Buffer(value, encodingOrOffset);
18150 }
18151 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18152 var offset = encodingOrOffset;
18153 if (arguments.length === 1) {
18154 return new Buffer(value);
18155 }
18156 if (typeof offset === 'undefined') {
18157 offset = 0;
18158 }
18159 var len = length;
18160 if (typeof len === 'undefined') {
18161 len = value.byteLength - offset;
18162 }
18163 if (offset >= value.byteLength) {
18164 throw new RangeError('\'offset\' is out of bounds');
18165 }
18166 if (len > value.byteLength - offset) {
18167 throw new RangeError('\'length\' is out of bounds');
18168 }
18169 return new Buffer(value.slice(offset, offset + len));
18170 }
18171 if (Buffer.isBuffer(value)) {
18172 var out = new Buffer(value.length);
18173 value.copy(out, 0, 0, value.length);
18174 return out;
18175 }
18176 if (value) {
18177 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18178 return new Buffer(value);
18179 }
18180 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18181 return new Buffer(value.data);
18182 }
18183 }
18184
18185 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
18186 }
18187 exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18188 if (typeof Buffer.allocUnsafeSlow === 'function') {
18189 return Buffer.allocUnsafeSlow(size);
18190 }
18191 if (typeof size !== 'number') {
18192 throw new TypeError('size must be a number');
18193 }
18194 if (size >= MAX_LEN) {
18195 throw new RangeError('size is too large');
18196 }
18197 return new SlowBuffer(size);
18198 }
18199
18200 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18201 },{"buffer":5}],5:[function(require,module,exports){
18202 /*!
18203 * The buffer module from node.js, for the browser.
18204 *
18205 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18206 * @license MIT
18207 */
18208 /* eslint-disable no-proto */
18209
18210 'use strict'
18211
18212 var base64 = require('base64-js')
18213 var ieee754 = require('ieee754')
18214
18215 exports.Buffer = Buffer
18216 exports.SlowBuffer = SlowBuffer
18217 exports.INSPECT_MAX_BYTES = 50
18218
18219 var K_MAX_LENGTH = 0x7fffffff
18220 exports.kMaxLength = K_MAX_LENGTH
18221
18222 /**
18223 * If `Buffer.TYPED_ARRAY_SUPPORT`:
18224 * === true Use Uint8Array implementation (fastest)
18225 * === false Print warning and recommend using `buffer` v4.x which has an Object
18226 * implementation (most compatible, even IE6)
18227 *
18228 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
18229 * Opera 11.6+, iOS 4.2+.
18230 *
18231 * We report that the browser does not support typed arrays if the are not subclassable
18232 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
18233 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
18234 * for __proto__ and has a buggy typed array implementation.
18235 */
18236 Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
18237
18238 if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
18239 typeof console.error === 'function') {
18240 console.error(
18241 'This browser lacks typed array (Uint8Array) support which is required by ' +
18242 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
18243 )
18244 }
18245
18246 function typedArraySupport () {
18247 // Can typed array instances can be augmented?
18248 try {
18249 var arr = new Uint8Array(1)
18250 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
18251 return arr.foo() === 42
18252 } catch (e) {
18253 return false
18254 }
18255 }
18256
18257 function createBuffer (length) {
18258 if (length > K_MAX_LENGTH) {
18259 throw new RangeError('Invalid typed array length')
18260 }
18261 // Return an augmented `Uint8Array` instance
18262 var buf = new Uint8Array(length)
18263 buf.__proto__ = Buffer.prototype
18264 return buf
18265 }
18266
18267 /**
18268 * The Buffer constructor returns instances of `Uint8Array` that have their
18269 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
18270 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
18271 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
18272 * returns a single octet.
18273 *
18274 * The `Uint8Array` prototype remains unmodified.
18275 */
18276
18277 function Buffer (arg, encodingOrOffset, length) {
18278 // Common case.
18279 if (typeof arg === 'number') {
18280 if (typeof encodingOrOffset === 'string') {
18281 throw new Error(
18282 'If encoding is specified then the first argument must be a string'
18283 )
18284 }
18285 return allocUnsafe(arg)
18286 }
18287 return from(arg, encodingOrOffset, length)
18288 }
18289
18290 // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
18291 if (typeof Symbol !== 'undefined' && Symbol.species &&
18292 Buffer[Symbol.species] === Buffer) {
18293 Object.defineProperty(Buffer, Symbol.species, {
18294 value: null,
18295 configurable: true,
18296 enumerable: false,
18297 writable: false
18298 })
18299 }
18300
18301 Buffer.poolSize = 8192 // not used by this implementation
18302
18303 function from (value, encodingOrOffset, length) {
18304 if (typeof value === 'number') {
18305 throw new TypeError('"value" argument must not be a number')
18306 }
18307
18308 if (value instanceof ArrayBuffer) {
18309 return fromArrayBuffer(value, encodingOrOffset, length)
18310 }
18311
18312 if (typeof value === 'string') {
18313 return fromString(value, encodingOrOffset)
18314 }
18315
18316 return fromObject(value)
18317 }
18318
18319 /**
18320 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
18321 * if value is a number.
18322 * Buffer.from(str[, encoding])
18323 * Buffer.from(array)
18324 * Buffer.from(buffer)
18325 * Buffer.from(arrayBuffer[, byteOffset[, length]])
18326 **/
18327 Buffer.from = function (value, encodingOrOffset, length) {
18328 return from(value, encodingOrOffset, length)
18329 }
18330
18331 // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
18332 // https://github.com/feross/buffer/pull/148
18333 Buffer.prototype.__proto__ = Uint8Array.prototype
18334 Buffer.__proto__ = Uint8Array
18335
18336 function assertSize (size) {
18337 if (typeof size !== 'number') {
18338 throw new TypeError('"size" argument must be a number')
18339 } else if (size < 0) {
18340 throw new RangeError('"size" argument must not be negative')
18341 }
18342 }
18343
18344 function alloc (size, fill, encoding) {
18345 assertSize(size)
18346 if (size <= 0) {
18347 return createBuffer(size)
18348 }
18349 if (fill !== undefined) {
18350 // Only pay attention to encoding if it's a string. This
18351 // prevents accidentally sending in a number that would
18352 // be interpretted as a start offset.
18353 return typeof encoding === 'string'
18354 ? createBuffer(size).fill(fill, encoding)
18355 : createBuffer(size).fill(fill)
18356 }
18357 return createBuffer(size)
18358 }
18359
18360 /**
18361 * Creates a new filled Buffer instance.
18362 * alloc(size[, fill[, encoding]])
18363 **/
18364 Buffer.alloc = function (size, fill, encoding) {
18365 return alloc(size, fill, encoding)
18366 }
18367
18368 function allocUnsafe (size) {
18369 assertSize(size)
18370 return createBuffer(size < 0 ? 0 : checked(size) | 0)
18371 }
18372
18373 /**
18374 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
18375 * */
18376 Buffer.allocUnsafe = function (size) {
18377 return allocUnsafe(size)
18378 }
18379 /**
18380 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
18381 */
18382 Buffer.allocUnsafeSlow = function (size) {
18383 return allocUnsafe(size)
18384 }
18385
18386 function fromString (string, encoding) {
18387 if (typeof encoding !== 'string' || encoding === '') {
18388 encoding = 'utf8'
18389 }
18390
18391 if (!Buffer.isEncoding(encoding)) {
18392 throw new TypeError('"encoding" must be a valid string encoding')
18393 }
18394
18395 var length = byteLength(string, encoding) | 0
18396 var buf = createBuffer(length)
18397
18398 var actual = buf.write(string, encoding)
18399
18400 if (actual !== length) {
18401 // Writing a hex string, for example, that contains invalid characters will
18402 // cause everything after the first invalid character to be ignored. (e.g.
18403 // 'abxxcd' will be treated as 'ab')
18404 buf = buf.slice(0, actual)
18405 }
18406
18407 return buf
18408 }
18409
18410 function fromArrayLike (array) {
18411 var length = array.length < 0 ? 0 : checked(array.length) | 0
18412 var buf = createBuffer(length)
18413 for (var i = 0; i < length; i += 1) {
18414 buf[i] = array[i] & 255
18415 }
18416 return buf
18417 }
18418
18419 function fromArrayBuffer (array, byteOffset, length) {
18420 if (byteOffset < 0 || array.byteLength < byteOffset) {
18421 throw new RangeError('\'offset\' is out of bounds')
18422 }
18423
18424 if (array.byteLength < byteOffset + (length || 0)) {
18425 throw new RangeError('\'length\' is out of bounds')
18426 }
18427
18428 var buf
18429 if (byteOffset === undefined && length === undefined) {
18430 buf = new Uint8Array(array)
18431 } else if (length === undefined) {
18432 buf = new Uint8Array(array, byteOffset)
18433 } else {
18434 buf = new Uint8Array(array, byteOffset, length)
18435 }
18436
18437 // Return an augmented `Uint8Array` instance
18438 buf.__proto__ = Buffer.prototype
18439 return buf
18440 }
18441
18442 function fromObject (obj) {
18443 if (Buffer.isBuffer(obj)) {
18444 var len = checked(obj.length) | 0
18445 var buf = createBuffer(len)
18446
18447 if (buf.length === 0) {
18448 return buf
18449 }
18450
18451 obj.copy(buf, 0, 0, len)
18452 return buf
18453 }
18454
18455 if (obj) {
18456 if (ArrayBuffer.isView(obj) || 'length' in obj) {
18457 if (typeof obj.length !== 'number' || isnan(obj.length)) {
18458 return createBuffer(0)
18459 }
18460 return fromArrayLike(obj)
18461 }
18462
18463 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
18464 return fromArrayLike(obj.data)
18465 }
18466 }
18467
18468 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
18469 }
18470
18471 function checked (length) {
18472 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
18473 // length is NaN (which is otherwise coerced to zero.)
18474 if (length >= K_MAX_LENGTH) {
18475 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
18476 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
18477 }
18478 return length | 0
18479 }
18480
18481 function SlowBuffer (length) {
18482 if (+length != length) { // eslint-disable-line eqeqeq
18483 length = 0
18484 }
18485 return Buffer.alloc(+length)
18486 }
18487
18488 Buffer.isBuffer = function isBuffer (b) {
18489 return b != null && b._isBuffer === true
18490 }
18491
18492 Buffer.compare = function compare (a, b) {
18493 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
18494 throw new TypeError('Arguments must be Buffers')
18495 }
18496
18497 if (a === b) return 0
18498
18499 var x = a.length
18500 var y = b.length
18501
18502 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18503 if (a[i] !== b[i]) {
18504 x = a[i]
18505 y = b[i]
18506 break
18507 }
18508 }
18509
18510 if (x < y) return -1
18511 if (y < x) return 1
18512 return 0
18513 }
18514
18515 Buffer.isEncoding = function isEncoding (encoding) {
18516 switch (String(encoding).toLowerCase()) {
18517 case 'hex':
18518 case 'utf8':
18519 case 'utf-8':
18520 case 'ascii':
18521 case 'latin1':
18522 case 'binary':
18523 case 'base64':
18524 case 'ucs2':
18525 case 'ucs-2':
18526 case 'utf16le':
18527 case 'utf-16le':
18528 return true
18529 default:
18530 return false
18531 }
18532 }
18533
18534 Buffer.concat = function concat (list, length) {
18535 if (!Array.isArray(list)) {
18536 throw new TypeError('"list" argument must be an Array of Buffers')
18537 }
18538
18539 if (list.length === 0) {
18540 return Buffer.alloc(0)
18541 }
18542
18543 var i
18544 if (length === undefined) {
18545 length = 0
18546 for (i = 0; i < list.length; ++i) {
18547 length += list[i].length
18548 }
18549 }
18550
18551 var buffer = Buffer.allocUnsafe(length)
18552 var pos = 0
18553 for (i = 0; i < list.length; ++i) {
18554 var buf = list[i]
18555 if (!Buffer.isBuffer(buf)) {
18556 throw new TypeError('"list" argument must be an Array of Buffers')
18557 }
18558 buf.copy(buffer, pos)
18559 pos += buf.length
18560 }
18561 return buffer
18562 }
18563
18564 function byteLength (string, encoding) {
18565 if (Buffer.isBuffer(string)) {
18566 return string.length
18567 }
18568 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
18569 return string.byteLength
18570 }
18571 if (typeof string !== 'string') {
18572 string = '' + string
18573 }
18574
18575 var len = string.length
18576 if (len === 0) return 0
18577
18578 // Use a for loop to avoid recursion
18579 var loweredCase = false
18580 for (;;) {
18581 switch (encoding) {
18582 case 'ascii':
18583 case 'latin1':
18584 case 'binary':
18585 return len
18586 case 'utf8':
18587 case 'utf-8':
18588 case undefined:
18589 return utf8ToBytes(string).length
18590 case 'ucs2':
18591 case 'ucs-2':
18592 case 'utf16le':
18593 case 'utf-16le':
18594 return len * 2
18595 case 'hex':
18596 return len >>> 1
18597 case 'base64':
18598 return base64ToBytes(string).length
18599 default:
18600 if (loweredCase) return utf8ToBytes(string).length // assume utf8
18601 encoding = ('' + encoding).toLowerCase()
18602 loweredCase = true
18603 }
18604 }
18605 }
18606 Buffer.byteLength = byteLength
18607
18608 function slowToString (encoding, start, end) {
18609 var loweredCase = false
18610
18611 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
18612 // property of a typed array.
18613
18614 // This behaves neither like String nor Uint8Array in that we set start/end
18615 // to their upper/lower bounds if the value passed is out of range.
18616 // undefined is handled specially as per ECMA-262 6th Edition,
18617 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
18618 if (start === undefined || start < 0) {
18619 start = 0
18620 }
18621 // Return early if start > this.length. Done here to prevent potential uint32
18622 // coercion fail below.
18623 if (start > this.length) {
18624 return ''
18625 }
18626
18627 if (end === undefined || end > this.length) {
18628 end = this.length
18629 }
18630
18631 if (end <= 0) {
18632 return ''
18633 }
18634
18635 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
18636 end >>>= 0
18637 start >>>= 0
18638
18639 if (end <= start) {
18640 return ''
18641 }
18642
18643 if (!encoding) encoding = 'utf8'
18644
18645 while (true) {
18646 switch (encoding) {
18647 case 'hex':
18648 return hexSlice(this, start, end)
18649
18650 case 'utf8':
18651 case 'utf-8':
18652 return utf8Slice(this, start, end)
18653
18654 case 'ascii':
18655 return asciiSlice(this, start, end)
18656
18657 case 'latin1':
18658 case 'binary':
18659 return latin1Slice(this, start, end)
18660
18661 case 'base64':
18662 return base64Slice(this, start, end)
18663
18664 case 'ucs2':
18665 case 'ucs-2':
18666 case 'utf16le':
18667 case 'utf-16le':
18668 return utf16leSlice(this, start, end)
18669
18670 default:
18671 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
18672 encoding = (encoding + '').toLowerCase()
18673 loweredCase = true
18674 }
18675 }
18676 }
18677
18678 // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
18679 // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
18680 // reliably in a browserify context because there could be multiple different
18681 // copies of the 'buffer' package in use. This method works even for Buffer
18682 // instances that were created from another copy of the `buffer` package.
18683 // See: https://github.com/feross/buffer/issues/154
18684 Buffer.prototype._isBuffer = true
18685
18686 function swap (b, n, m) {
18687 var i = b[n]
18688 b[n] = b[m]
18689 b[m] = i
18690 }
18691
18692 Buffer.prototype.swap16 = function swap16 () {
18693 var len = this.length
18694 if (len % 2 !== 0) {
18695 throw new RangeError('Buffer size must be a multiple of 16-bits')
18696 }
18697 for (var i = 0; i < len; i += 2) {
18698 swap(this, i, i + 1)
18699 }
18700 return this
18701 }
18702
18703 Buffer.prototype.swap32 = function swap32 () {
18704 var len = this.length
18705 if (len % 4 !== 0) {
18706 throw new RangeError('Buffer size must be a multiple of 32-bits')
18707 }
18708 for (var i = 0; i < len; i += 4) {
18709 swap(this, i, i + 3)
18710 swap(this, i + 1, i + 2)
18711 }
18712 return this
18713 }
18714
18715 Buffer.prototype.swap64 = function swap64 () {
18716 var len = this.length
18717 if (len % 8 !== 0) {
18718 throw new RangeError('Buffer size must be a multiple of 64-bits')
18719 }
18720 for (var i = 0; i < len; i += 8) {
18721 swap(this, i, i + 7)
18722 swap(this, i + 1, i + 6)
18723 swap(this, i + 2, i + 5)
18724 swap(this, i + 3, i + 4)
18725 }
18726 return this
18727 }
18728
18729 Buffer.prototype.toString = function toString () {
18730 var length = this.length
18731 if (length === 0) return ''
18732 if (arguments.length === 0) return utf8Slice(this, 0, length)
18733 return slowToString.apply(this, arguments)
18734 }
18735
18736 Buffer.prototype.equals = function equals (b) {
18737 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
18738 if (this === b) return true
18739 return Buffer.compare(this, b) === 0
18740 }
18741
18742 Buffer.prototype.inspect = function inspect () {
18743 var str = ''
18744 var max = exports.INSPECT_MAX_BYTES
18745 if (this.length > 0) {
18746 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
18747 if (this.length > max) str += ' ... '
18748 }
18749 return '<Buffer ' + str + '>'
18750 }
18751
18752 Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
18753 if (!Buffer.isBuffer(target)) {
18754 throw new TypeError('Argument must be a Buffer')
18755 }
18756
18757 if (start === undefined) {
18758 start = 0
18759 }
18760 if (end === undefined) {
18761 end = target ? target.length : 0
18762 }
18763 if (thisStart === undefined) {
18764 thisStart = 0
18765 }
18766 if (thisEnd === undefined) {
18767 thisEnd = this.length
18768 }
18769
18770 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
18771 throw new RangeError('out of range index')
18772 }
18773
18774 if (thisStart >= thisEnd && start >= end) {
18775 return 0
18776 }
18777 if (thisStart >= thisEnd) {
18778 return -1
18779 }
18780 if (start >= end) {
18781 return 1
18782 }
18783
18784 start >>>= 0
18785 end >>>= 0
18786 thisStart >>>= 0
18787 thisEnd >>>= 0
18788
18789 if (this === target) return 0
18790
18791 var x = thisEnd - thisStart
18792 var y = end - start
18793 var len = Math.min(x, y)
18794
18795 var thisCopy = this.slice(thisStart, thisEnd)
18796 var targetCopy = target.slice(start, end)
18797
18798 for (var i = 0; i < len; ++i) {
18799 if (thisCopy[i] !== targetCopy[i]) {
18800 x = thisCopy[i]
18801 y = targetCopy[i]
18802 break
18803 }
18804 }
18805
18806 if (x < y) return -1
18807 if (y < x) return 1
18808 return 0
18809 }
18810
18811 // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
18812 // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
18813 //
18814 // Arguments:
18815 // - buffer - a Buffer to search
18816 // - val - a string, Buffer, or number
18817 // - byteOffset - an index into `buffer`; will be clamped to an int32
18818 // - encoding - an optional encoding, relevant is val is a string
18819 // - dir - true for indexOf, false for lastIndexOf
18820 function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
18821 // Empty buffer means no match
18822 if (buffer.length === 0) return -1
18823
18824 // Normalize byteOffset
18825 if (typeof byteOffset === 'string') {
18826 encoding = byteOffset
18827 byteOffset = 0
18828 } else if (byteOffset > 0x7fffffff) {
18829 byteOffset = 0x7fffffff
18830 } else if (byteOffset < -0x80000000) {
18831 byteOffset = -0x80000000
18832 }
18833 byteOffset = +byteOffset // Coerce to Number.
18834 if (isNaN(byteOffset)) {
18835 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
18836 byteOffset = dir ? 0 : (buffer.length - 1)
18837 }
18838
18839 // Normalize byteOffset: negative offsets start from the end of the buffer
18840 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
18841 if (byteOffset >= buffer.length) {
18842 if (dir) return -1
18843 else byteOffset = buffer.length - 1
18844 } else if (byteOffset < 0) {
18845 if (dir) byteOffset = 0
18846 else return -1
18847 }
18848
18849 // Normalize val
18850 if (typeof val === 'string') {
18851 val = Buffer.from(val, encoding)
18852 }
18853
18854 // Finally, search either indexOf (if dir is true) or lastIndexOf
18855 if (Buffer.isBuffer(val)) {
18856 // Special case: looking for empty string/buffer always fails
18857 if (val.length === 0) {
18858 return -1
18859 }
18860 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
18861 } else if (typeof val === 'number') {
18862 val = val & 0xFF // Search for a byte value [0-255]
18863 if (typeof Uint8Array.prototype.indexOf === 'function') {
18864 if (dir) {
18865 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
18866 } else {
18867 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
18868 }
18869 }
18870 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
18871 }
18872
18873 throw new TypeError('val must be string, number or Buffer')
18874 }
18875
18876 function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
18877 var indexSize = 1
18878 var arrLength = arr.length
18879 var valLength = val.length
18880
18881 if (encoding !== undefined) {
18882 encoding = String(encoding).toLowerCase()
18883 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
18884 encoding === 'utf16le' || encoding === 'utf-16le') {
18885 if (arr.length < 2 || val.length < 2) {
18886 return -1
18887 }
18888 indexSize = 2
18889 arrLength /= 2
18890 valLength /= 2
18891 byteOffset /= 2
18892 }
18893 }
18894
18895 function read (buf, i) {
18896 if (indexSize === 1) {
18897 return buf[i]
18898 } else {
18899 return buf.readUInt16BE(i * indexSize)
18900 }
18901 }
18902
18903 var i
18904 if (dir) {
18905 var foundIndex = -1
18906 for (i = byteOffset; i < arrLength; i++) {
18907 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
18908 if (foundIndex === -1) foundIndex = i
18909 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
18910 } else {
18911 if (foundIndex !== -1) i -= i - foundIndex
18912 foundIndex = -1
18913 }
18914 }
18915 } else {
18916 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
18917 for (i = byteOffset; i >= 0; i--) {
18918 var found = true
18919 for (var j = 0; j < valLength; j++) {
18920 if (read(arr, i + j) !== read(val, j)) {
18921 found = false
18922 break
18923 }
18924 }
18925 if (found) return i
18926 }
18927 }
18928
18929 return -1
18930 }
18931
18932 Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
18933 return this.indexOf(val, byteOffset, encoding) !== -1
18934 }
18935
18936 Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
18937 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
18938 }
18939
18940 Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
18941 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
18942 }
18943
18944 function hexWrite (buf, string, offset, length) {
18945 offset = Number(offset) || 0
18946 var remaining = buf.length - offset
18947 if (!length) {
18948 length = remaining
18949 } else {
18950 length = Number(length)
18951 if (length > remaining) {
18952 length = remaining
18953 }
18954 }
18955
18956 // must be an even number of digits
18957 var strLen = string.length
18958 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
18959
18960 if (length > strLen / 2) {
18961 length = strLen / 2
18962 }
18963 for (var i = 0; i < length; ++i) {
18964 var parsed = parseInt(string.substr(i * 2, 2), 16)
18965 if (isNaN(parsed)) return i
18966 buf[offset + i] = parsed
18967 }
18968 return i
18969 }
18970
18971 function utf8Write (buf, string, offset, length) {
18972 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
18973 }
18974
18975 function asciiWrite (buf, string, offset, length) {
18976 return blitBuffer(asciiToBytes(string), buf, offset, length)
18977 }
18978
18979 function latin1Write (buf, string, offset, length) {
18980 return asciiWrite(buf, string, offset, length)
18981 }
18982
18983 function base64Write (buf, string, offset, length) {
18984 return blitBuffer(base64ToBytes(string), buf, offset, length)
18985 }
18986
18987 function ucs2Write (buf, string, offset, length) {
18988 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
18989 }
18990
18991 Buffer.prototype.write = function write (string, offset, length, encoding) {
18992 // Buffer#write(string)
18993 if (offset === undefined) {
18994 encoding = 'utf8'
18995 length = this.length
18996 offset = 0
18997 // Buffer#write(string, encoding)
18998 } else if (length === undefined && typeof offset === 'string') {
18999 encoding = offset
19000 length = this.length
19001 offset = 0
19002 // Buffer#write(string, offset[, length][, encoding])
19003 } else if (isFinite(offset)) {
19004 offset = offset >>> 0
19005 if (isFinite(length)) {
19006 length = length >>> 0
19007 if (encoding === undefined) encoding = 'utf8'
19008 } else {
19009 encoding = length
19010 length = undefined
19011 }
19012 } else {
19013 throw new Error(
19014 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19015 )
19016 }
19017
19018 var remaining = this.length - offset
19019 if (length === undefined || length > remaining) length = remaining
19020
19021 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19022 throw new RangeError('Attempt to write outside buffer bounds')
19023 }
19024
19025 if (!encoding) encoding = 'utf8'
19026
19027 var loweredCase = false
19028 for (;;) {
19029 switch (encoding) {
19030 case 'hex':
19031 return hexWrite(this, string, offset, length)
19032
19033 case 'utf8':
19034 case 'utf-8':
19035 return utf8Write(this, string, offset, length)
19036
19037 case 'ascii':
19038 return asciiWrite(this, string, offset, length)
19039
19040 case 'latin1':
19041 case 'binary':
19042 return latin1Write(this, string, offset, length)
19043
19044 case 'base64':
19045 // Warning: maxLength not taken into account in base64Write
19046 return base64Write(this, string, offset, length)
19047
19048 case 'ucs2':
19049 case 'ucs-2':
19050 case 'utf16le':
19051 case 'utf-16le':
19052 return ucs2Write(this, string, offset, length)
19053
19054 default:
19055 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19056 encoding = ('' + encoding).toLowerCase()
19057 loweredCase = true
19058 }
19059 }
19060 }
19061
19062 Buffer.prototype.toJSON = function toJSON () {
19063 return {
19064 type: 'Buffer',
19065 data: Array.prototype.slice.call(this._arr || this, 0)
19066 }
19067 }
19068
19069 function base64Slice (buf, start, end) {
19070 if (start === 0 && end === buf.length) {
19071 return base64.fromByteArray(buf)
19072 } else {
19073 return base64.fromByteArray(buf.slice(start, end))
19074 }
19075 }
19076
19077 function utf8Slice (buf, start, end) {
19078 end = Math.min(buf.length, end)
19079 var res = []
19080
19081 var i = start
19082 while (i < end) {
19083 var firstByte = buf[i]
19084 var codePoint = null
19085 var bytesPerSequence = (firstByte > 0xEF) ? 4
19086 : (firstByte > 0xDF) ? 3
19087 : (firstByte > 0xBF) ? 2
19088 : 1
19089
19090 if (i + bytesPerSequence <= end) {
19091 var secondByte, thirdByte, fourthByte, tempCodePoint
19092
19093 switch (bytesPerSequence) {
19094 case 1:
19095 if (firstByte < 0x80) {
19096 codePoint = firstByte
19097 }
19098 break
19099 case 2:
19100 secondByte = buf[i + 1]
19101 if ((secondByte & 0xC0) === 0x80) {
19102 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19103 if (tempCodePoint > 0x7F) {
19104 codePoint = tempCodePoint
19105 }
19106 }
19107 break
19108 case 3:
19109 secondByte = buf[i + 1]
19110 thirdByte = buf[i + 2]
19111 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19112 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19113 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19114 codePoint = tempCodePoint
19115 }
19116 }
19117 break
19118 case 4:
19119 secondByte = buf[i + 1]
19120 thirdByte = buf[i + 2]
19121 fourthByte = buf[i + 3]
19122 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19123 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19124 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19125 codePoint = tempCodePoint
19126 }
19127 }
19128 }
19129 }
19130
19131 if (codePoint === null) {
19132 // we did not generate a valid codePoint so insert a
19133 // replacement char (U+FFFD) and advance only 1 byte
19134 codePoint = 0xFFFD
19135 bytesPerSequence = 1
19136 } else if (codePoint > 0xFFFF) {
19137 // encode to utf16 (surrogate pair dance)
19138 codePoint -= 0x10000
19139 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19140 codePoint = 0xDC00 | codePoint & 0x3FF
19141 }
19142
19143 res.push(codePoint)
19144 i += bytesPerSequence
19145 }
19146
19147 return decodeCodePointsArray(res)
19148 }
19149
19150 // Based on http://stackoverflow.com/a/22747272/680742, the browser with
19151 // the lowest limit is Chrome, with 0x10000 args.
19152 // We go 1 magnitude less, for safety
19153 var MAX_ARGUMENTS_LENGTH = 0x1000
19154
19155 function decodeCodePointsArray (codePoints) {
19156 var len = codePoints.length
19157 if (len <= MAX_ARGUMENTS_LENGTH) {
19158 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
19159 }
19160
19161 // Decode in chunks to avoid "call stack size exceeded".
19162 var res = ''
19163 var i = 0
19164 while (i < len) {
19165 res += String.fromCharCode.apply(
19166 String,
19167 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19168 )
19169 }
19170 return res
19171 }
19172
19173 function asciiSlice (buf, start, end) {
19174 var ret = ''
19175 end = Math.min(buf.length, end)
19176
19177 for (var i = start; i < end; ++i) {
19178 ret += String.fromCharCode(buf[i] & 0x7F)
19179 }
19180 return ret
19181 }
19182
19183 function latin1Slice (buf, start, end) {
19184 var ret = ''
19185 end = Math.min(buf.length, end)
19186
19187 for (var i = start; i < end; ++i) {
19188 ret += String.fromCharCode(buf[i])
19189 }
19190 return ret
19191 }
19192
19193 function hexSlice (buf, start, end) {
19194 var len = buf.length
19195
19196 if (!start || start < 0) start = 0
19197 if (!end || end < 0 || end > len) end = len
19198
19199 var out = ''
19200 for (var i = start; i < end; ++i) {
19201 out += toHex(buf[i])
19202 }
19203 return out
19204 }
19205
19206 function utf16leSlice (buf, start, end) {
19207 var bytes = buf.slice(start, end)
19208 var res = ''
19209 for (var i = 0; i < bytes.length; i += 2) {
19210 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
19211 }
19212 return res
19213 }
19214
19215 Buffer.prototype.slice = function slice (start, end) {
19216 var len = this.length
19217 start = ~~start
19218 end = end === undefined ? len : ~~end
19219
19220 if (start < 0) {
19221 start += len
19222 if (start < 0) start = 0
19223 } else if (start > len) {
19224 start = len
19225 }
19226
19227 if (end < 0) {
19228 end += len
19229 if (end < 0) end = 0
19230 } else if (end > len) {
19231 end = len
19232 }
19233
19234 if (end < start) end = start
19235
19236 var newBuf = this.subarray(start, end)
19237 // Return an augmented `Uint8Array` instance
19238 newBuf.__proto__ = Buffer.prototype
19239 return newBuf
19240 }
19241
19242 /*
19243 * Need to make sure that buffer isn't trying to write out of bounds.
19244 */
19245 function checkOffset (offset, ext, length) {
19246 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
19247 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
19248 }
19249
19250 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
19251 offset = offset >>> 0
19252 byteLength = byteLength >>> 0
19253 if (!noAssert) checkOffset(offset, byteLength, this.length)
19254
19255 var val = this[offset]
19256 var mul = 1
19257 var i = 0
19258 while (++i < byteLength && (mul *= 0x100)) {
19259 val += this[offset + i] * mul
19260 }
19261
19262 return val
19263 }
19264
19265 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
19266 offset = offset >>> 0
19267 byteLength = byteLength >>> 0
19268 if (!noAssert) {
19269 checkOffset(offset, byteLength, this.length)
19270 }
19271
19272 var val = this[offset + --byteLength]
19273 var mul = 1
19274 while (byteLength > 0 && (mul *= 0x100)) {
19275 val += this[offset + --byteLength] * mul
19276 }
19277
19278 return val
19279 }
19280
19281 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
19282 offset = offset >>> 0
19283 if (!noAssert) checkOffset(offset, 1, this.length)
19284 return this[offset]
19285 }
19286
19287 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
19288 offset = offset >>> 0
19289 if (!noAssert) checkOffset(offset, 2, this.length)
19290 return this[offset] | (this[offset + 1] << 8)
19291 }
19292
19293 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
19294 offset = offset >>> 0
19295 if (!noAssert) checkOffset(offset, 2, this.length)
19296 return (this[offset] << 8) | this[offset + 1]
19297 }
19298
19299 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
19300 offset = offset >>> 0
19301 if (!noAssert) checkOffset(offset, 4, this.length)
19302
19303 return ((this[offset]) |
19304 (this[offset + 1] << 8) |
19305 (this[offset + 2] << 16)) +
19306 (this[offset + 3] * 0x1000000)
19307 }
19308
19309 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
19310 offset = offset >>> 0
19311 if (!noAssert) checkOffset(offset, 4, this.length)
19312
19313 return (this[offset] * 0x1000000) +
19314 ((this[offset + 1] << 16) |
19315 (this[offset + 2] << 8) |
19316 this[offset + 3])
19317 }
19318
19319 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
19320 offset = offset >>> 0
19321 byteLength = byteLength >>> 0
19322 if (!noAssert) checkOffset(offset, byteLength, this.length)
19323
19324 var val = this[offset]
19325 var mul = 1
19326 var i = 0
19327 while (++i < byteLength && (mul *= 0x100)) {
19328 val += this[offset + i] * mul
19329 }
19330 mul *= 0x80
19331
19332 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19333
19334 return val
19335 }
19336
19337 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
19338 offset = offset >>> 0
19339 byteLength = byteLength >>> 0
19340 if (!noAssert) checkOffset(offset, byteLength, this.length)
19341
19342 var i = byteLength
19343 var mul = 1
19344 var val = this[offset + --i]
19345 while (i > 0 && (mul *= 0x100)) {
19346 val += this[offset + --i] * mul
19347 }
19348 mul *= 0x80
19349
19350 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19351
19352 return val
19353 }
19354
19355 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
19356 offset = offset >>> 0
19357 if (!noAssert) checkOffset(offset, 1, this.length)
19358 if (!(this[offset] & 0x80)) return (this[offset])
19359 return ((0xff - this[offset] + 1) * -1)
19360 }
19361
19362 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
19363 offset = offset >>> 0
19364 if (!noAssert) checkOffset(offset, 2, this.length)
19365 var val = this[offset] | (this[offset + 1] << 8)
19366 return (val & 0x8000) ? val | 0xFFFF0000 : val
19367 }
19368
19369 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
19370 offset = offset >>> 0
19371 if (!noAssert) checkOffset(offset, 2, this.length)
19372 var val = this[offset + 1] | (this[offset] << 8)
19373 return (val & 0x8000) ? val | 0xFFFF0000 : val
19374 }
19375
19376 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
19377 offset = offset >>> 0
19378 if (!noAssert) checkOffset(offset, 4, this.length)
19379
19380 return (this[offset]) |
19381 (this[offset + 1] << 8) |
19382 (this[offset + 2] << 16) |
19383 (this[offset + 3] << 24)
19384 }
19385
19386 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
19387 offset = offset >>> 0
19388 if (!noAssert) checkOffset(offset, 4, this.length)
19389
19390 return (this[offset] << 24) |
19391 (this[offset + 1] << 16) |
19392 (this[offset + 2] << 8) |
19393 (this[offset + 3])
19394 }
19395
19396 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
19397 offset = offset >>> 0
19398 if (!noAssert) checkOffset(offset, 4, this.length)
19399 return ieee754.read(this, offset, true, 23, 4)
19400 }
19401
19402 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
19403 offset = offset >>> 0
19404 if (!noAssert) checkOffset(offset, 4, this.length)
19405 return ieee754.read(this, offset, false, 23, 4)
19406 }
19407
19408 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
19409 offset = offset >>> 0
19410 if (!noAssert) checkOffset(offset, 8, this.length)
19411 return ieee754.read(this, offset, true, 52, 8)
19412 }
19413
19414 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
19415 offset = offset >>> 0
19416 if (!noAssert) checkOffset(offset, 8, this.length)
19417 return ieee754.read(this, offset, false, 52, 8)
19418 }
19419
19420 function checkInt (buf, value, offset, ext, max, min) {
19421 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
19422 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
19423 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19424 }
19425
19426 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
19427 value = +value
19428 offset = offset >>> 0
19429 byteLength = byteLength >>> 0
19430 if (!noAssert) {
19431 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19432 checkInt(this, value, offset, byteLength, maxBytes, 0)
19433 }
19434
19435 var mul = 1
19436 var i = 0
19437 this[offset] = value & 0xFF
19438 while (++i < byteLength && (mul *= 0x100)) {
19439 this[offset + i] = (value / mul) & 0xFF
19440 }
19441
19442 return offset + byteLength
19443 }
19444
19445 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
19446 value = +value
19447 offset = offset >>> 0
19448 byteLength = byteLength >>> 0
19449 if (!noAssert) {
19450 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19451 checkInt(this, value, offset, byteLength, maxBytes, 0)
19452 }
19453
19454 var i = byteLength - 1
19455 var mul = 1
19456 this[offset + i] = value & 0xFF
19457 while (--i >= 0 && (mul *= 0x100)) {
19458 this[offset + i] = (value / mul) & 0xFF
19459 }
19460
19461 return offset + byteLength
19462 }
19463
19464 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
19465 value = +value
19466 offset = offset >>> 0
19467 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
19468 this[offset] = (value & 0xff)
19469 return offset + 1
19470 }
19471
19472 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
19473 value = +value
19474 offset = offset >>> 0
19475 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19476 this[offset] = (value & 0xff)
19477 this[offset + 1] = (value >>> 8)
19478 return offset + 2
19479 }
19480
19481 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
19482 value = +value
19483 offset = offset >>> 0
19484 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19485 this[offset] = (value >>> 8)
19486 this[offset + 1] = (value & 0xff)
19487 return offset + 2
19488 }
19489
19490 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
19491 value = +value
19492 offset = offset >>> 0
19493 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19494 this[offset + 3] = (value >>> 24)
19495 this[offset + 2] = (value >>> 16)
19496 this[offset + 1] = (value >>> 8)
19497 this[offset] = (value & 0xff)
19498 return offset + 4
19499 }
19500
19501 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
19502 value = +value
19503 offset = offset >>> 0
19504 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19505 this[offset] = (value >>> 24)
19506 this[offset + 1] = (value >>> 16)
19507 this[offset + 2] = (value >>> 8)
19508 this[offset + 3] = (value & 0xff)
19509 return offset + 4
19510 }
19511
19512 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19513 value = +value
19514 offset = offset >>> 0
19515 if (!noAssert) {
19516 var limit = Math.pow(2, (8 * byteLength) - 1)
19517
19518 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19519 }
19520
19521 var i = 0
19522 var mul = 1
19523 var sub = 0
19524 this[offset] = value & 0xFF
19525 while (++i < byteLength && (mul *= 0x100)) {
19526 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
19527 sub = 1
19528 }
19529 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19530 }
19531
19532 return offset + byteLength
19533 }
19534
19535 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
19536 value = +value
19537 offset = offset >>> 0
19538 if (!noAssert) {
19539 var limit = Math.pow(2, (8 * byteLength) - 1)
19540
19541 checkInt(this, value, offset, byteLength, limit - 1, -limit)
19542 }
19543
19544 var i = byteLength - 1
19545 var mul = 1
19546 var sub = 0
19547 this[offset + i] = value & 0xFF
19548 while (--i >= 0 && (mul *= 0x100)) {
19549 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
19550 sub = 1
19551 }
19552 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
19553 }
19554
19555 return offset + byteLength
19556 }
19557
19558 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
19559 value = +value
19560 offset = offset >>> 0
19561 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
19562 if (value < 0) value = 0xff + value + 1
19563 this[offset] = (value & 0xff)
19564 return offset + 1
19565 }
19566
19567 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
19568 value = +value
19569 offset = offset >>> 0
19570 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19571 this[offset] = (value & 0xff)
19572 this[offset + 1] = (value >>> 8)
19573 return offset + 2
19574 }
19575
19576 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
19577 value = +value
19578 offset = offset >>> 0
19579 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
19580 this[offset] = (value >>> 8)
19581 this[offset + 1] = (value & 0xff)
19582 return offset + 2
19583 }
19584
19585 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
19586 value = +value
19587 offset = offset >>> 0
19588 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19589 this[offset] = (value & 0xff)
19590 this[offset + 1] = (value >>> 8)
19591 this[offset + 2] = (value >>> 16)
19592 this[offset + 3] = (value >>> 24)
19593 return offset + 4
19594 }
19595
19596 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
19597 value = +value
19598 offset = offset >>> 0
19599 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
19600 if (value < 0) value = 0xffffffff + value + 1
19601 this[offset] = (value >>> 24)
19602 this[offset + 1] = (value >>> 16)
19603 this[offset + 2] = (value >>> 8)
19604 this[offset + 3] = (value & 0xff)
19605 return offset + 4
19606 }
19607
19608 function checkIEEE754 (buf, value, offset, ext, max, min) {
19609 if (offset + ext > buf.length) throw new RangeError('Index out of range')
19610 if (offset < 0) throw new RangeError('Index out of range')
19611 }
19612
19613 function writeFloat (buf, value, offset, littleEndian, noAssert) {
19614 value = +value
19615 offset = offset >>> 0
19616 if (!noAssert) {
19617 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
19618 }
19619 ieee754.write(buf, value, offset, littleEndian, 23, 4)
19620 return offset + 4
19621 }
19622
19623 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
19624 return writeFloat(this, value, offset, true, noAssert)
19625 }
19626
19627 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
19628 return writeFloat(this, value, offset, false, noAssert)
19629 }
19630
19631 function writeDouble (buf, value, offset, littleEndian, noAssert) {
19632 value = +value
19633 offset = offset >>> 0
19634 if (!noAssert) {
19635 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
19636 }
19637 ieee754.write(buf, value, offset, littleEndian, 52, 8)
19638 return offset + 8
19639 }
19640
19641 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
19642 return writeDouble(this, value, offset, true, noAssert)
19643 }
19644
19645 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
19646 return writeDouble(this, value, offset, false, noAssert)
19647 }
19648
19649 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
19650 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
19651 if (!start) start = 0
19652 if (!end && end !== 0) end = this.length
19653 if (targetStart >= target.length) targetStart = target.length
19654 if (!targetStart) targetStart = 0
19655 if (end > 0 && end < start) end = start
19656
19657 // Copy 0 bytes; we're done
19658 if (end === start) return 0
19659 if (target.length === 0 || this.length === 0) return 0
19660
19661 // Fatal error conditions
19662 if (targetStart < 0) {
19663 throw new RangeError('targetStart out of bounds')
19664 }
19665 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
19666 if (end < 0) throw new RangeError('sourceEnd out of bounds')
19667
19668 // Are we oob?
19669 if (end > this.length) end = this.length
19670 if (target.length - targetStart < end - start) {
19671 end = target.length - targetStart + start
19672 }
19673
19674 var len = end - start
19675 var i
19676
19677 if (this === target && start < targetStart && targetStart < end) {
19678 // descending copy from end
19679 for (i = len - 1; i >= 0; --i) {
19680 target[i + targetStart] = this[i + start]
19681 }
19682 } else if (len < 1000) {
19683 // ascending copy from start
19684 for (i = 0; i < len; ++i) {
19685 target[i + targetStart] = this[i + start]
19686 }
19687 } else {
19688 Uint8Array.prototype.set.call(
19689 target,
19690 this.subarray(start, start + len),
19691 targetStart
19692 )
19693 }
19694
19695 return len
19696 }
19697
19698 // Usage:
19699 // buffer.fill(number[, offset[, end]])
19700 // buffer.fill(buffer[, offset[, end]])
19701 // buffer.fill(string[, offset[, end]][, encoding])
19702 Buffer.prototype.fill = function fill (val, start, end, encoding) {
19703 // Handle string cases:
19704 if (typeof val === 'string') {
19705 if (typeof start === 'string') {
19706 encoding = start
19707 start = 0
19708 end = this.length
19709 } else if (typeof end === 'string') {
19710 encoding = end
19711 end = this.length
19712 }
19713 if (val.length === 1) {
19714 var code = val.charCodeAt(0)
19715 if (code < 256) {
19716 val = code
19717 }
19718 }
19719 if (encoding !== undefined && typeof encoding !== 'string') {
19720 throw new TypeError('encoding must be a string')
19721 }
19722 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
19723 throw new TypeError('Unknown encoding: ' + encoding)
19724 }
19725 } else if (typeof val === 'number') {
19726 val = val & 255
19727 }
19728
19729 // Invalid ranges are not set to a default, so can range check early.
19730 if (start < 0 || this.length < start || this.length < end) {
19731 throw new RangeError('Out of range index')
19732 }
19733
19734 if (end <= start) {
19735 return this
19736 }
19737
19738 start = start >>> 0
19739 end = end === undefined ? this.length : end >>> 0
19740
19741 if (!val) val = 0
19742
19743 var i
19744 if (typeof val === 'number') {
19745 for (i = start; i < end; ++i) {
19746 this[i] = val
19747 }
19748 } else {
19749 var bytes = Buffer.isBuffer(val)
19750 ? val
19751 : new Buffer(val, encoding)
19752 var len = bytes.length
19753 for (i = 0; i < end - start; ++i) {
19754 this[i + start] = bytes[i % len]
19755 }
19756 }
19757
19758 return this
19759 }
19760
19761 // HELPER FUNCTIONS
19762 // ================
19763
19764 var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
19765
19766 function base64clean (str) {
19767 // Node strips out invalid characters like \n and \t from the string, base64-js does not
19768 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
19769 // Node converts strings with length < 2 to ''
19770 if (str.length < 2) return ''
19771 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
19772 while (str.length % 4 !== 0) {
19773 str = str + '='
19774 }
19775 return str
19776 }
19777
19778 function stringtrim (str) {
19779 if (str.trim) return str.trim()
19780 return str.replace(/^\s+|\s+$/g, '')
19781 }
19782
19783 function toHex (n) {
19784 if (n < 16) return '0' + n.toString(16)
19785 return n.toString(16)
19786 }
19787
19788 function utf8ToBytes (string, units) {
19789 units = units || Infinity
19790 var codePoint
19791 var length = string.length
19792 var leadSurrogate = null
19793 var bytes = []
19794
19795 for (var i = 0; i < length; ++i) {
19796 codePoint = string.charCodeAt(i)
19797
19798 // is surrogate component
19799 if (codePoint > 0xD7FF && codePoint < 0xE000) {
19800 // last char was a lead
19801 if (!leadSurrogate) {
19802 // no lead yet
19803 if (codePoint > 0xDBFF) {
19804 // unexpected trail
19805 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19806 continue
19807 } else if (i + 1 === length) {
19808 // unpaired lead
19809 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19810 continue
19811 }
19812
19813 // valid lead
19814 leadSurrogate = codePoint
19815
19816 continue
19817 }
19818
19819 // 2 leads in a row
19820 if (codePoint < 0xDC00) {
19821 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19822 leadSurrogate = codePoint
19823 continue
19824 }
19825
19826 // valid surrogate pair
19827 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
19828 } else if (leadSurrogate) {
19829 // valid bmp char, but last char was a lead
19830 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
19831 }
19832
19833 leadSurrogate = null
19834
19835 // encode utf8
19836 if (codePoint < 0x80) {
19837 if ((units -= 1) < 0) break
19838 bytes.push(codePoint)
19839 } else if (codePoint < 0x800) {
19840 if ((units -= 2) < 0) break
19841 bytes.push(
19842 codePoint >> 0x6 | 0xC0,
19843 codePoint & 0x3F | 0x80
19844 )
19845 } else if (codePoint < 0x10000) {
19846 if ((units -= 3) < 0) break
19847 bytes.push(
19848 codePoint >> 0xC | 0xE0,
19849 codePoint >> 0x6 & 0x3F | 0x80,
19850 codePoint & 0x3F | 0x80
19851 )
19852 } else if (codePoint < 0x110000) {
19853 if ((units -= 4) < 0) break
19854 bytes.push(
19855 codePoint >> 0x12 | 0xF0,
19856 codePoint >> 0xC & 0x3F | 0x80,
19857 codePoint >> 0x6 & 0x3F | 0x80,
19858 codePoint & 0x3F | 0x80
19859 )
19860 } else {
19861 throw new Error('Invalid code point')
19862 }
19863 }
19864
19865 return bytes
19866 }
19867
19868 function asciiToBytes (str) {
19869 var byteArray = []
19870 for (var i = 0; i < str.length; ++i) {
19871 // Node's code seems to be doing this and not & 0x7F..
19872 byteArray.push(str.charCodeAt(i) & 0xFF)
19873 }
19874 return byteArray
19875 }
19876
19877 function utf16leToBytes (str, units) {
19878 var c, hi, lo
19879 var byteArray = []
19880 for (var i = 0; i < str.length; ++i) {
19881 if ((units -= 2) < 0) break
19882
19883 c = str.charCodeAt(i)
19884 hi = c >> 8
19885 lo = c % 256
19886 byteArray.push(lo)
19887 byteArray.push(hi)
19888 }
19889
19890 return byteArray
19891 }
19892
19893 function base64ToBytes (str) {
19894 return base64.toByteArray(base64clean(str))
19895 }
19896
19897 function blitBuffer (src, dst, offset, length) {
19898 for (var i = 0; i < length; ++i) {
19899 if ((i + offset >= dst.length) || (i >= src.length)) break
19900 dst[i + offset] = src[i]
19901 }
19902 return i
19903 }
19904
19905 function isnan (val) {
19906 return val !== val // eslint-disable-line no-self-compare
19907 }
19908
19909 },{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
19910 (function (Buffer){
19911 // Copyright Joyent, Inc. and other Node contributors.
19912 //
19913 // Permission is hereby granted, free of charge, to any person obtaining a
19914 // copy of this software and associated documentation files (the
19915 // "Software"), to deal in the Software without restriction, including
19916 // without limitation the rights to use, copy, modify, merge, publish,
19917 // distribute, sublicense, and/or sell copies of the Software, and to permit
19918 // persons to whom the Software is furnished to do so, subject to the
19919 // following conditions:
19920 //
19921 // The above copyright notice and this permission notice shall be included
19922 // in all copies or substantial portions of the Software.
19923 //
19924 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19925 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19926 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
19927 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
19928 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19929 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
19930 // USE OR OTHER DEALINGS IN THE SOFTWARE.
19931
19932 // NOTE: These type checking functions intentionally don't use `instanceof`
19933 // because it is fragile and can be easily faked with `Object.create()`.
19934
19935 function isArray(arg) {
19936 if (Array.isArray) {
19937 return Array.isArray(arg);
19938 }
19939 return objectToString(arg) === '[object Array]';
19940 }
19941 exports.isArray = isArray;
19942
19943 function isBoolean(arg) {
19944 return typeof arg === 'boolean';
19945 }
19946 exports.isBoolean = isBoolean;
19947
19948 function isNull(arg) {
19949 return arg === null;
19950 }
19951 exports.isNull = isNull;
19952
19953 function isNullOrUndefined(arg) {
19954 return arg == null;
19955 }
19956 exports.isNullOrUndefined = isNullOrUndefined;
19957
19958 function isNumber(arg) {
19959 return typeof arg === 'number';
19960 }
19961 exports.isNumber = isNumber;
19962
19963 function isString(arg) {
19964 return typeof arg === 'string';
19965 }
19966 exports.isString = isString;
19967
19968 function isSymbol(arg) {
19969 return typeof arg === 'symbol';
19970 }
19971 exports.isSymbol = isSymbol;
19972
19973 function isUndefined(arg) {
19974 return arg === void 0;
19975 }
19976 exports.isUndefined = isUndefined;
19977
19978 function isRegExp(re) {
19979 return objectToString(re) === '[object RegExp]';
19980 }
19981 exports.isRegExp = isRegExp;
19982
19983 function isObject(arg) {
19984 return typeof arg === 'object' && arg !== null;
19985 }
19986 exports.isObject = isObject;
19987
19988 function isDate(d) {
19989 return objectToString(d) === '[object Date]';
19990 }
19991 exports.isDate = isDate;
19992
19993 function isError(e) {
19994 return (objectToString(e) === '[object Error]' || e instanceof Error);
19995 }
19996 exports.isError = isError;
19997
19998 function isFunction(arg) {
19999 return typeof arg === 'function';
20000 }
20001 exports.isFunction = isFunction;
20002
20003 function isPrimitive(arg) {
20004 return arg === null ||
20005 typeof arg === 'boolean' ||
20006 typeof arg === 'number' ||
20007 typeof arg === 'string' ||
20008 typeof arg === 'symbol' || // ES6 symbol
20009 typeof arg === 'undefined';
20010 }
20011 exports.isPrimitive = isPrimitive;
20012
20013 exports.isBuffer = Buffer.isBuffer;
20014
20015 function objectToString(o) {
20016 return Object.prototype.toString.call(o);
20017 }
20018
20019 }).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20020 },{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20021 // Copyright Joyent, Inc. and other Node contributors.
20022 //
20023 // Permission is hereby granted, free of charge, to any person obtaining a
20024 // copy of this software and associated documentation files (the
20025 // "Software"), to deal in the Software without restriction, including
20026 // without limitation the rights to use, copy, modify, merge, publish,
20027 // distribute, sublicense, and/or sell copies of the Software, and to permit
20028 // persons to whom the Software is furnished to do so, subject to the
20029 // following conditions:
20030 //
20031 // The above copyright notice and this permission notice shall be included
20032 // in all copies or substantial portions of the Software.
20033 //
20034 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20035 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20036 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20037 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20038 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20039 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20040 // USE OR OTHER DEALINGS IN THE SOFTWARE.
20041
20042 function EventEmitter() {
20043 this._events = this._events || {};
20044 this._maxListeners = this._maxListeners || undefined;
20045 }
20046 module.exports = EventEmitter;
20047
20048 // Backwards-compat with node 0.10.x
20049 EventEmitter.EventEmitter = EventEmitter;
20050
20051 EventEmitter.prototype._events = undefined;
20052 EventEmitter.prototype._maxListeners = undefined;
20053
20054 // By default EventEmitters will print a warning if more than 10 listeners are
20055 // added to it. This is a useful default which helps finding memory leaks.
20056 EventEmitter.defaultMaxListeners = 10;
20057
20058 // Obviously not all Emitters should be limited to 10. This function allows
20059 // that to be increased. Set to zero for unlimited.
20060 EventEmitter.prototype.setMaxListeners = function(n) {
20061 if (!isNumber(n) || n < 0 || isNaN(n))
20062 throw TypeError('n must be a positive number');
20063 this._maxListeners = n;
20064 return this;
20065 };
20066
20067 EventEmitter.prototype.emit = function(type) {
20068 var er, handler, len, args, i, listeners;
20069
20070 if (!this._events)
20071 this._events = {};
20072
20073 // If there is no 'error' event listener then throw.
20074 if (type === 'error') {
20075 if (!this._events.error ||
20076 (isObject(this._events.error) && !this._events.error.length)) {
20077 er = arguments[1];
20078 if (er instanceof Error) {
20079 throw er; // Unhandled 'error' event
20080 } else {
20081 // At least give some kind of context to the user
20082 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20083 err.context = er;
20084 throw err;
20085 }
20086 }
20087 }
20088
20089 handler = this._events[type];
20090
20091 if (isUndefined(handler))
20092 return false;
20093
20094 if (isFunction(handler)) {
20095 switch (arguments.length) {
20096 // fast cases
20097 case 1:
20098 handler.call(this);
20099 break;
20100 case 2:
20101 handler.call(this, arguments[1]);
20102 break;
20103 case 3:
20104 handler.call(this, arguments[1], arguments[2]);
20105 break;
20106 // slower
20107 default:
20108 args = Array.prototype.slice.call(arguments, 1);
20109 handler.apply(this, args);
20110 }
20111 } else if (isObject(handler)) {
20112 args = Array.prototype.slice.call(arguments, 1);
20113 listeners = handler.slice();
20114 len = listeners.length;
20115 for (i = 0; i < len; i++)
20116 listeners[i].apply(this, args);
20117 }
20118
20119 return true;
20120 };
20121
20122 EventEmitter.prototype.addListener = function(type, listener) {
20123 var m;
20124
20125 if (!isFunction(listener))
20126 throw TypeError('listener must be a function');
20127
20128 if (!this._events)
20129 this._events = {};
20130
20131 // To avoid recursion in the case that type === "newListener"! Before
20132 // adding it to the listeners, first emit "newListener".
20133 if (this._events.newListener)
20134 this.emit('newListener', type,
20135 isFunction(listener.listener) ?
20136 listener.listener : listener);
20137
20138 if (!this._events[type])
20139 // Optimize the case of one listener. Don't need the extra array object.
20140 this._events[type] = listener;
20141 else if (isObject(this._events[type]))
20142 // If we've already got an array, just append.
20143 this._events[type].push(listener);
20144 else
20145 // Adding the second element, need to change to array.
20146 this._events[type] = [this._events[type], listener];
20147
20148 // Check for listener leak
20149 if (isObject(this._events[type]) && !this._events[type].warned) {
20150 if (!isUndefined(this._maxListeners)) {
20151 m = this._maxListeners;
20152 } else {
20153 m = EventEmitter.defaultMaxListeners;
20154 }
20155
20156 if (m && m > 0 && this._events[type].length > m) {
20157 this._events[type].warned = true;
20158 console.error('(node) warning: possible EventEmitter memory ' +
20159 'leak detected. %d listeners added. ' +
20160 'Use emitter.setMaxListeners() to increase limit.',
20161 this._events[type].length);
20162 if (typeof console.trace === 'function') {
20163 // not supported in IE 10
20164 console.trace();
20165 }
20166 }
20167 }
20168
20169 return this;
20170 };
20171
20172 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
20173
20174 EventEmitter.prototype.once = function(type, listener) {
20175 if (!isFunction(listener))
20176 throw TypeError('listener must be a function');
20177
20178 var fired = false;
20179
20180 function g() {
20181 this.removeListener(type, g);
20182
20183 if (!fired) {
20184 fired = true;
20185 listener.apply(this, arguments);
20186 }
20187 }
20188
20189 g.listener = listener;
20190 this.on(type, g);
20191
20192 return this;
20193 };
20194
20195 // emits a 'removeListener' event iff the listener was removed
20196 EventEmitter.prototype.removeListener = function(type, listener) {
20197 var list, position, length, i;
20198
20199 if (!isFunction(listener))
20200 throw TypeError('listener must be a function');
20201
20202 if (!this._events || !this._events[type])
20203 return this;
20204
20205 list = this._events[type];
20206 length = list.length;
20207 position = -1;
20208
20209 if (list === listener ||
20210 (isFunction(list.listener) && list.listener === listener)) {
20211 delete this._events[type];
20212 if (this._events.removeListener)
20213 this.emit('removeListener', type, listener);
20214
20215 } else if (isObject(list)) {
20216 for (i = length; i-- > 0;) {
20217 if (list[i] === listener ||
20218 (list[i].listener && list[i].listener === listener)) {
20219 position = i;
20220 break;
20221 }
20222 }
20223
20224 if (position < 0)
20225 return this;
20226
20227 if (list.length === 1) {
20228 list.length = 0;
20229 delete this._events[type];
20230 } else {
20231 list.splice(position, 1);
20232 }
20233
20234 if (this._events.removeListener)
20235 this.emit('removeListener', type, listener);
20236 }
20237
20238 return this;
20239 };
20240
20241 EventEmitter.prototype.removeAllListeners = function(type) {
20242 var key, listeners;
20243
20244 if (!this._events)
20245 return this;
20246
20247 // not listening for removeListener, no need to emit
20248 if (!this._events.removeListener) {
20249 if (arguments.length === 0)
20250 this._events = {};
20251 else if (this._events[type])
20252 delete this._events[type];
20253 return this;
20254 }
20255
20256 // emit removeListener for all listeners on all events
20257 if (arguments.length === 0) {
20258 for (key in this._events) {
20259 if (key === 'removeListener') continue;
20260 this.removeAllListeners(key);
20261 }
20262 this.removeAllListeners('removeListener');
20263 this._events = {};
20264 return this;
20265 }
20266
20267 listeners = this._events[type];
20268
20269 if (isFunction(listeners)) {
20270 this.removeListener(type, listeners);
20271 } else if (listeners) {
20272 // LIFO order
20273 while (listeners.length)
20274 this.removeListener(type, listeners[listeners.length - 1]);
20275 }
20276 delete this._events[type];
20277
20278 return this;
20279 };
20280
20281 EventEmitter.prototype.listeners = function(type) {
20282 var ret;
20283 if (!this._events || !this._events[type])
20284 ret = [];
20285 else if (isFunction(this._events[type]))
20286 ret = [this._events[type]];
20287 else
20288 ret = this._events[type].slice();
20289 return ret;
20290 };
20291
20292 EventEmitter.prototype.listenerCount = function(type) {
20293 if (this._events) {
20294 var evlistener = this._events[type];
20295
20296 if (isFunction(evlistener))
20297 return 1;
20298 else if (evlistener)
20299 return evlistener.length;
20300 }
20301 return 0;
20302 };
20303
20304 EventEmitter.listenerCount = function(emitter, type) {
20305 return emitter.listenerCount(type);
20306 };
20307
20308 function isFunction(arg) {
20309 return typeof arg === 'function';
20310 }
20311
20312 function isNumber(arg) {
20313 return typeof arg === 'number';
20314 }
20315
20316 function isObject(arg) {
20317 return typeof arg === 'object' && arg !== null;
20318 }
20319
20320 function isUndefined(arg) {
20321 return arg === void 0;
20322 }
20323
20324 },{}],8:[function(require,module,exports){
20325 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20326 var e, m
20327 var eLen = nBytes * 8 - mLen - 1
20328 var eMax = (1 << eLen) - 1
20329 var eBias = eMax >> 1
20330 var nBits = -7
20331 var i = isLE ? (nBytes - 1) : 0
20332 var d = isLE ? -1 : 1
20333 var s = buffer[offset + i]
20334
20335 i += d
20336
20337 e = s & ((1 << (-nBits)) - 1)
20338 s >>= (-nBits)
20339 nBits += eLen
20340 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20341
20342 m = e & ((1 << (-nBits)) - 1)
20343 e >>= (-nBits)
20344 nBits += mLen
20345 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
20346
20347 if (e === 0) {
20348 e = 1 - eBias
20349 } else if (e === eMax) {
20350 return m ? NaN : ((s ? -1 : 1) * Infinity)
20351 } else {
20352 m = m + Math.pow(2, mLen)
20353 e = e - eBias
20354 }
20355 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
20356 }
20357
20358 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20359 var e, m, c
20360 var eLen = nBytes * 8 - mLen - 1
20361 var eMax = (1 << eLen) - 1
20362 var eBias = eMax >> 1
20363 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20364 var i = isLE ? 0 : (nBytes - 1)
20365 var d = isLE ? 1 : -1
20366 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
20367
20368 value = Math.abs(value)
20369
20370 if (isNaN(value) || value === Infinity) {
20371 m = isNaN(value) ? 1 : 0
20372 e = eMax
20373 } else {
20374 e = Math.floor(Math.log(value) / Math.LN2)
20375 if (value * (c = Math.pow(2, -e)) < 1) {
20376 e--
20377 c *= 2
20378 }
20379 if (e + eBias >= 1) {
20380 value += rt / c
20381 } else {
20382 value += rt * Math.pow(2, 1 - eBias)
20383 }
20384 if (value * c >= 2) {
20385 e++
20386 c /= 2
20387 }
20388
20389 if (e + eBias >= eMax) {
20390 m = 0
20391 e = eMax
20392 } else if (e + eBias >= 1) {
20393 m = (value * c - 1) * Math.pow(2, mLen)
20394 e = e + eBias
20395 } else {
20396 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20397 e = 0
20398 }
20399 }
20400
20401 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
20402
20403 e = (e << mLen) | m
20404 eLen += mLen
20405 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
20406
20407 buffer[offset + i - d] |= s * 128
20408 }
20409
20410 },{}],9:[function(require,module,exports){
20411 if (typeof Object.create === 'function') {
20412 // implementation from standard node.js 'util' module
20413 module.exports = function inherits(ctor, superCtor) {
20414 ctor.super_ = superCtor
20415 ctor.prototype = Object.create(superCtor.prototype, {
20416 constructor: {
20417 value: ctor,
20418 enumerable: false,
20419 writable: true,
20420 configurable: true
20421 }
20422 });
20423 };
20424 } else {
20425 // old school shim for old browsers
20426 module.exports = function inherits(ctor, superCtor) {
20427 ctor.super_ = superCtor
20428 var TempCtor = function () {}
20429 TempCtor.prototype = superCtor.prototype
20430 ctor.prototype = new TempCtor()
20431 ctor.prototype.constructor = ctor
20432 }
20433 }
20434
20435 },{}],10:[function(require,module,exports){
20436 /*!
20437 * Determine if an object is a Buffer
20438 *
20439 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20440 * @license MIT
20441 */
20442
20443 // The _isBuffer check is for Safari 5-7 support, because it's missing
20444 // Object.prototype.constructor. Remove this eventually
20445 module.exports = function (obj) {
20446 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
20447 }
20448
20449 function isBuffer (obj) {
20450 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20451 }
20452
20453 // For Node v0.10 support. Remove this eventually.
20454 function isSlowBuffer (obj) {
20455 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20456 }
20457
20458 },{}],11:[function(require,module,exports){
20459 var toString = {}.toString;
20460
20461 module.exports = Array.isArray || function (arr) {
20462 return toString.call(arr) == '[object Array]';
20463 };
20464
20465 },{}],12:[function(require,module,exports){
20466 (function (process){
20467 'use strict';
20468
20469 if (!process.version ||
20470 process.version.indexOf('v0.') === 0 ||
20471 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
20472 module.exports = nextTick;
20473 } else {
20474 module.exports = process.nextTick;
20475 }
20476
20477 function nextTick(fn, arg1, arg2, arg3) {
20478 if (typeof fn !== 'function') {
20479 throw new TypeError('"callback" argument must be a function');
20480 }
20481 var len = arguments.length;
20482 var args, i;
20483 switch (len) {
20484 case 0:
20485 case 1:
20486 return process.nextTick(fn);
20487 case 2:
20488 return process.nextTick(function afterTickOne() {
20489 fn.call(null, arg1);
20490 });
20491 case 3:
20492 return process.nextTick(function afterTickTwo() {
20493 fn.call(null, arg1, arg2);
20494 });
20495 case 4:
20496 return process.nextTick(function afterTickThree() {
20497 fn.call(null, arg1, arg2, arg3);
20498 });
20499 default:
20500 args = new Array(len - 1);
20501 i = 0;
20502 while (i < args.length) {
20503 args[i++] = arguments[i];
20504 }
20505 return process.nextTick(function afterTick() {
20506 fn.apply(null, args);
20507 });
20508 }
20509 }
20510
20511 }).call(this,require('_process'))
20512 },{"_process":13}],13:[function(require,module,exports){
20513 // shim for using process in browser
20514 var process = module.exports = {};
20515
20516 // cached from whatever global is present so that test runners that stub it
20517 // don't break things. But we need to wrap it in a try catch in case it is
20518 // wrapped in strict mode code which doesn't define any globals. It's inside a
20519 // function because try/catches deoptimize in certain engines.
20520
20521 var cachedSetTimeout;
20522 var cachedClearTimeout;
20523
20524 function defaultSetTimout() {
20525 throw new Error('setTimeout has not been defined');
20526 }
20527 function defaultClearTimeout () {
20528 throw new Error('clearTimeout has not been defined');
20529 }
20530 (function () {
20531 try {
20532 if (typeof setTimeout === 'function') {
20533 cachedSetTimeout = setTimeout;
20534 } else {
20535 cachedSetTimeout = defaultSetTimout;
20536 }
20537 } catch (e) {
20538 cachedSetTimeout = defaultSetTimout;
20539 }
20540 try {
20541 if (typeof clearTimeout === 'function') {
20542 cachedClearTimeout = clearTimeout;
20543 } else {
20544 cachedClearTimeout = defaultClearTimeout;
20545 }
20546 } catch (e) {
20547 cachedClearTimeout = defaultClearTimeout;
20548 }
20549 } ())
20550 function runTimeout(fun) {
20551 if (cachedSetTimeout === setTimeout) {
20552 //normal enviroments in sane situations
20553 return setTimeout(fun, 0);
20554 }
20555 // if setTimeout wasn't available but was latter defined
20556 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
20557 cachedSetTimeout = setTimeout;
20558 return setTimeout(fun, 0);
20559 }
20560 try {
20561 // when when somebody has screwed with setTimeout but no I.E. maddness
20562 return cachedSetTimeout(fun, 0);
20563 } catch(e){
20564 try {
20565 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20566 return cachedSetTimeout.call(null, fun, 0);
20567 } catch(e){
20568 // 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
20569 return cachedSetTimeout.call(this, fun, 0);
20570 }
20571 }
20572
20573
20574 }
20575 function runClearTimeout(marker) {
20576 if (cachedClearTimeout === clearTimeout) {
20577 //normal enviroments in sane situations
20578 return clearTimeout(marker);
20579 }
20580 // if clearTimeout wasn't available but was latter defined
20581 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
20582 cachedClearTimeout = clearTimeout;
20583 return clearTimeout(marker);
20584 }
20585 try {
20586 // when when somebody has screwed with setTimeout but no I.E. maddness
20587 return cachedClearTimeout(marker);
20588 } catch (e){
20589 try {
20590 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
20591 return cachedClearTimeout.call(null, marker);
20592 } catch (e){
20593 // 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.
20594 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
20595 return cachedClearTimeout.call(this, marker);
20596 }
20597 }
20598
20599
20600
20601 }
20602 var queue = [];
20603 var draining = false;
20604 var currentQueue;
20605 var queueIndex = -1;
20606
20607 function cleanUpNextTick() {
20608 if (!draining || !currentQueue) {
20609 return;
20610 }
20611 draining = false;
20612 if (currentQueue.length) {
20613 queue = currentQueue.concat(queue);
20614 } else {
20615 queueIndex = -1;
20616 }
20617 if (queue.length) {
20618 drainQueue();
20619 }
20620 }
20621
20622 function drainQueue() {
20623 if (draining) {
20624 return;
20625 }
20626 var timeout = runTimeout(cleanUpNextTick);
20627 draining = true;
20628
20629 var len = queue.length;
20630 while(len) {
20631 currentQueue = queue;
20632 queue = [];
20633 while (++queueIndex < len) {
20634 if (currentQueue) {
20635 currentQueue[queueIndex].run();
20636 }
20637 }
20638 queueIndex = -1;
20639 len = queue.length;
20640 }
20641 currentQueue = null;
20642 draining = false;
20643 runClearTimeout(timeout);
20644 }
20645
20646 process.nextTick = function (fun) {
20647 var args = new Array(arguments.length - 1);
20648 if (arguments.length > 1) {
20649 for (var i = 1; i < arguments.length; i++) {
20650 args[i - 1] = arguments[i];
20651 }
20652 }
20653 queue.push(new Item(fun, args));
20654 if (queue.length === 1 && !draining) {
20655 runTimeout(drainQueue);
20656 }
20657 };
20658
20659 // v8 likes predictible objects
20660 function Item(fun, array) {
20661 this.fun = fun;
20662 this.array = array;
20663 }
20664 Item.prototype.run = function () {
20665 this.fun.apply(null, this.array);
20666 };
20667 process.title = 'browser';
20668 process.browser = true;
20669 process.env = {};
20670 process.argv = [];
20671 process.version = ''; // empty string to avoid regexp issues
20672 process.versions = {};
20673
20674 function noop() {}
20675
20676 process.on = noop;
20677 process.addListener = noop;
20678 process.once = noop;
20679 process.off = noop;
20680 process.removeListener = noop;
20681 process.removeAllListeners = noop;
20682 process.emit = noop;
20683
20684 process.binding = function (name) {
20685 throw new Error('process.binding is not supported');
20686 };
20687
20688 process.cwd = function () { return '/' };
20689 process.chdir = function (dir) {
20690 throw new Error('process.chdir is not supported');
20691 };
20692 process.umask = function() { return 0; };
20693
20694 },{}],14:[function(require,module,exports){
20695 module.exports = require("./lib/_stream_duplex.js")
20696
20697 },{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
20698 // a duplex stream is just a stream that is both readable and writable.
20699 // Since JS doesn't have multiple prototypal inheritance, this class
20700 // prototypally inherits from Readable, and then parasitically from
20701 // Writable.
20702
20703 'use strict';
20704
20705 /*<replacement>*/
20706
20707 var objectKeys = Object.keys || function (obj) {
20708 var keys = [];
20709 for (var key in obj) {
20710 keys.push(key);
20711 }return keys;
20712 };
20713 /*</replacement>*/
20714
20715 module.exports = Duplex;
20716
20717 /*<replacement>*/
20718 var processNextTick = require('process-nextick-args');
20719 /*</replacement>*/
20720
20721 /*<replacement>*/
20722 var util = require('core-util-is');
20723 util.inherits = require('inherits');
20724 /*</replacement>*/
20725
20726 var Readable = require('./_stream_readable');
20727 var Writable = require('./_stream_writable');
20728
20729 util.inherits(Duplex, Readable);
20730
20731 var keys = objectKeys(Writable.prototype);
20732 for (var v = 0; v < keys.length; v++) {
20733 var method = keys[v];
20734 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
20735 }
20736
20737 function Duplex(options) {
20738 if (!(this instanceof Duplex)) return new Duplex(options);
20739
20740 Readable.call(this, options);
20741 Writable.call(this, options);
20742
20743 if (options && options.readable === false) this.readable = false;
20744
20745 if (options && options.writable === false) this.writable = false;
20746
20747 this.allowHalfOpen = true;
20748 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
20749
20750 this.once('end', onend);
20751 }
20752
20753 // the no-half-open enforcer
20754 function onend() {
20755 // if we allow half-open state, or if the writable side ended,
20756 // then we're ok.
20757 if (this.allowHalfOpen || this._writableState.ended) return;
20758
20759 // no more data can be written.
20760 // But allow more writes to happen in this tick.
20761 processNextTick(onEndNT, this);
20762 }
20763
20764 function onEndNT(self) {
20765 self.end();
20766 }
20767
20768 function forEach(xs, f) {
20769 for (var i = 0, l = xs.length; i < l; i++) {
20770 f(xs[i], i);
20771 }
20772 }
20773 },{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
20774 // a passthrough stream.
20775 // basically just the most minimal sort of Transform stream.
20776 // Every written chunk gets output as-is.
20777
20778 'use strict';
20779
20780 module.exports = PassThrough;
20781
20782 var Transform = require('./_stream_transform');
20783
20784 /*<replacement>*/
20785 var util = require('core-util-is');
20786 util.inherits = require('inherits');
20787 /*</replacement>*/
20788
20789 util.inherits(PassThrough, Transform);
20790
20791 function PassThrough(options) {
20792 if (!(this instanceof PassThrough)) return new PassThrough(options);
20793
20794 Transform.call(this, options);
20795 }
20796
20797 PassThrough.prototype._transform = function (chunk, encoding, cb) {
20798 cb(null, chunk);
20799 };
20800 },{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
20801 (function (process){
20802 'use strict';
20803
20804 module.exports = Readable;
20805
20806 /*<replacement>*/
20807 var processNextTick = require('process-nextick-args');
20808 /*</replacement>*/
20809
20810 /*<replacement>*/
20811 var isArray = require('isarray');
20812 /*</replacement>*/
20813
20814 /*<replacement>*/
20815 var Duplex;
20816 /*</replacement>*/
20817
20818 Readable.ReadableState = ReadableState;
20819
20820 /*<replacement>*/
20821 var EE = require('events').EventEmitter;
20822
20823 var EElistenerCount = function (emitter, type) {
20824 return emitter.listeners(type).length;
20825 };
20826 /*</replacement>*/
20827
20828 /*<replacement>*/
20829 var Stream;
20830 (function () {
20831 try {
20832 Stream = require('st' + 'ream');
20833 } catch (_) {} finally {
20834 if (!Stream) Stream = require('events').EventEmitter;
20835 }
20836 })();
20837 /*</replacement>*/
20838
20839 var Buffer = require('buffer').Buffer;
20840 /*<replacement>*/
20841 var bufferShim = require('buffer-shims');
20842 /*</replacement>*/
20843
20844 /*<replacement>*/
20845 var util = require('core-util-is');
20846 util.inherits = require('inherits');
20847 /*</replacement>*/
20848
20849 /*<replacement>*/
20850 var debugUtil = require('util');
20851 var debug = void 0;
20852 if (debugUtil && debugUtil.debuglog) {
20853 debug = debugUtil.debuglog('stream');
20854 } else {
20855 debug = function () {};
20856 }
20857 /*</replacement>*/
20858
20859 var BufferList = require('./internal/streams/BufferList');
20860 var StringDecoder;
20861
20862 util.inherits(Readable, Stream);
20863
20864 function prependListener(emitter, event, fn) {
20865 // Sadly this is not cacheable as some libraries bundle their own
20866 // event emitter implementation with them.
20867 if (typeof emitter.prependListener === 'function') {
20868 return emitter.prependListener(event, fn);
20869 } else {
20870 // This is a hack to make sure that our error handler is attached before any
20871 // userland ones. NEVER DO THIS. This is here only because this code needs
20872 // to continue to work with older versions of Node.js that do not include
20873 // the prependListener() method. The goal is to eventually remove this hack.
20874 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]];
20875 }
20876 }
20877
20878 function ReadableState(options, stream) {
20879 Duplex = Duplex || require('./_stream_duplex');
20880
20881 options = options || {};
20882
20883 // object stream flag. Used to make read(n) ignore n and to
20884 // make all the buffer merging and length checks go away
20885 this.objectMode = !!options.objectMode;
20886
20887 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
20888
20889 // the point at which it stops calling _read() to fill the buffer
20890 // Note: 0 is a valid value, means "don't call _read preemptively ever"
20891 var hwm = options.highWaterMark;
20892 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
20893 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
20894
20895 // cast to ints.
20896 this.highWaterMark = ~ ~this.highWaterMark;
20897
20898 // A linked list is used to store data chunks instead of an array because the
20899 // linked list can remove elements from the beginning faster than
20900 // array.shift()
20901 this.buffer = new BufferList();
20902 this.length = 0;
20903 this.pipes = null;
20904 this.pipesCount = 0;
20905 this.flowing = null;
20906 this.ended = false;
20907 this.endEmitted = false;
20908 this.reading = false;
20909
20910 // a flag to be able to tell if the onwrite cb is called immediately,
20911 // or on a later tick. We set this to true at first, because any
20912 // actions that shouldn't happen until "later" should generally also
20913 // not happen before the first write call.
20914 this.sync = true;
20915
20916 // whenever we return null, then we set a flag to say
20917 // that we're awaiting a 'readable' event emission.
20918 this.needReadable = false;
20919 this.emittedReadable = false;
20920 this.readableListening = false;
20921 this.resumeScheduled = false;
20922
20923 // Crypto is kind of old and crusty. Historically, its default string
20924 // encoding is 'binary' so we have to make this configurable.
20925 // Everything else in the universe uses 'utf8', though.
20926 this.defaultEncoding = options.defaultEncoding || 'utf8';
20927
20928 // when piping, we only care about 'readable' events that happen
20929 // after read()ing all the bytes and not getting any pushback.
20930 this.ranOut = false;
20931
20932 // the number of writers that are awaiting a drain event in .pipe()s
20933 this.awaitDrain = 0;
20934
20935 // if true, a maybeReadMore has been scheduled
20936 this.readingMore = false;
20937
20938 this.decoder = null;
20939 this.encoding = null;
20940 if (options.encoding) {
20941 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
20942 this.decoder = new StringDecoder(options.encoding);
20943 this.encoding = options.encoding;
20944 }
20945 }
20946
20947 function Readable(options) {
20948 Duplex = Duplex || require('./_stream_duplex');
20949
20950 if (!(this instanceof Readable)) return new Readable(options);
20951
20952 this._readableState = new ReadableState(options, this);
20953
20954 // legacy
20955 this.readable = true;
20956
20957 if (options && typeof options.read === 'function') this._read = options.read;
20958
20959 Stream.call(this);
20960 }
20961
20962 // Manually shove something into the read() buffer.
20963 // This returns true if the highWaterMark has not been hit yet,
20964 // similar to how Writable.write() returns true if you should
20965 // write() some more.
20966 Readable.prototype.push = function (chunk, encoding) {
20967 var state = this._readableState;
20968
20969 if (!state.objectMode && typeof chunk === 'string') {
20970 encoding = encoding || state.defaultEncoding;
20971 if (encoding !== state.encoding) {
20972 chunk = bufferShim.from(chunk, encoding);
20973 encoding = '';
20974 }
20975 }
20976
20977 return readableAddChunk(this, state, chunk, encoding, false);
20978 };
20979
20980 // Unshift should *always* be something directly out of read()
20981 Readable.prototype.unshift = function (chunk) {
20982 var state = this._readableState;
20983 return readableAddChunk(this, state, chunk, '', true);
20984 };
20985
20986 Readable.prototype.isPaused = function () {
20987 return this._readableState.flowing === false;
20988 };
20989
20990 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
20991 var er = chunkInvalid(state, chunk);
20992 if (er) {
20993 stream.emit('error', er);
20994 } else if (chunk === null) {
20995 state.reading = false;
20996 onEofChunk(stream, state);
20997 } else if (state.objectMode || chunk && chunk.length > 0) {
20998 if (state.ended && !addToFront) {
20999 var e = new Error('stream.push() after EOF');
21000 stream.emit('error', e);
21001 } else if (state.endEmitted && addToFront) {
21002 var _e = new Error('stream.unshift() after end event');
21003 stream.emit('error', _e);
21004 } else {
21005 var skipAdd;
21006 if (state.decoder && !addToFront && !encoding) {
21007 chunk = state.decoder.write(chunk);
21008 skipAdd = !state.objectMode && chunk.length === 0;
21009 }
21010
21011 if (!addToFront) state.reading = false;
21012
21013 // Don't add to the buffer if we've decoded to an empty string chunk and
21014 // we're not in object mode
21015 if (!skipAdd) {
21016 // if we want the data now, just emit it.
21017 if (state.flowing && state.length === 0 && !state.sync) {
21018 stream.emit('data', chunk);
21019 stream.read(0);
21020 } else {
21021 // update the buffer info.
21022 state.length += state.objectMode ? 1 : chunk.length;
21023 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
21024
21025 if (state.needReadable) emitReadable(stream);
21026 }
21027 }
21028
21029 maybeReadMore(stream, state);
21030 }
21031 } else if (!addToFront) {
21032 state.reading = false;
21033 }
21034
21035 return needMoreData(state);
21036 }
21037
21038 // if it's past the high water mark, we can push in some more.
21039 // Also, if we have no data yet, we can stand some
21040 // more bytes. This is to work around cases where hwm=0,
21041 // such as the repl. Also, if the push() triggered a
21042 // readable event, and the user called read(largeNumber) such that
21043 // needReadable was set, then we ought to push more, so that another
21044 // 'readable' event will be triggered.
21045 function needMoreData(state) {
21046 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21047 }
21048
21049 // backwards compatibility.
21050 Readable.prototype.setEncoding = function (enc) {
21051 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21052 this._readableState.decoder = new StringDecoder(enc);
21053 this._readableState.encoding = enc;
21054 return this;
21055 };
21056
21057 // Don't raise the hwm > 8MB
21058 var MAX_HWM = 0x800000;
21059 function computeNewHighWaterMark(n) {
21060 if (n >= MAX_HWM) {
21061 n = MAX_HWM;
21062 } else {
21063 // Get the next highest power of 2 to prevent increasing hwm excessively in
21064 // tiny amounts
21065 n--;
21066 n |= n >>> 1;
21067 n |= n >>> 2;
21068 n |= n >>> 4;
21069 n |= n >>> 8;
21070 n |= n >>> 16;
21071 n++;
21072 }
21073 return n;
21074 }
21075
21076 // This function is designed to be inlinable, so please take care when making
21077 // changes to the function body.
21078 function howMuchToRead(n, state) {
21079 if (n <= 0 || state.length === 0 && state.ended) return 0;
21080 if (state.objectMode) return 1;
21081 if (n !== n) {
21082 // Only flow one buffer at a time
21083 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21084 }
21085 // If we're asking for more than the current hwm, then raise the hwm.
21086 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21087 if (n <= state.length) return n;
21088 // Don't have enough
21089 if (!state.ended) {
21090 state.needReadable = true;
21091 return 0;
21092 }
21093 return state.length;
21094 }
21095
21096 // you can override either this method, or the async _read(n) below.
21097 Readable.prototype.read = function (n) {
21098 debug('read', n);
21099 n = parseInt(n, 10);
21100 var state = this._readableState;
21101 var nOrig = n;
21102
21103 if (n !== 0) state.emittedReadable = false;
21104
21105 // if we're doing read(0) to trigger a readable event, but we
21106 // already have a bunch of data in the buffer, then just trigger
21107 // the 'readable' event and move on.
21108 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21109 debug('read: emitReadable', state.length, state.ended);
21110 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21111 return null;
21112 }
21113
21114 n = howMuchToRead(n, state);
21115
21116 // if we've ended, and we're now clear, then finish it up.
21117 if (n === 0 && state.ended) {
21118 if (state.length === 0) endReadable(this);
21119 return null;
21120 }
21121
21122 // All the actual chunk generation logic needs to be
21123 // *below* the call to _read. The reason is that in certain
21124 // synthetic stream cases, such as passthrough streams, _read
21125 // may be a completely synchronous operation which may change
21126 // the state of the read buffer, providing enough data when
21127 // before there was *not* enough.
21128 //
21129 // So, the steps are:
21130 // 1. Figure out what the state of things will be after we do
21131 // a read from the buffer.
21132 //
21133 // 2. If that resulting state will trigger a _read, then call _read.
21134 // Note that this may be asynchronous, or synchronous. Yes, it is
21135 // deeply ugly to write APIs this way, but that still doesn't mean
21136 // that the Readable class should behave improperly, as streams are
21137 // designed to be sync/async agnostic.
21138 // Take note if the _read call is sync or async (ie, if the read call
21139 // has returned yet), so that we know whether or not it's safe to emit
21140 // 'readable' etc.
21141 //
21142 // 3. Actually pull the requested chunks out of the buffer and return.
21143
21144 // if we need a readable event, then we need to do some reading.
21145 var doRead = state.needReadable;
21146 debug('need readable', doRead);
21147
21148 // if we currently have less than the highWaterMark, then also read some
21149 if (state.length === 0 || state.length - n < state.highWaterMark) {
21150 doRead = true;
21151 debug('length less than watermark', doRead);
21152 }
21153
21154 // however, if we've ended, then there's no point, and if we're already
21155 // reading, then it's unnecessary.
21156 if (state.ended || state.reading) {
21157 doRead = false;
21158 debug('reading or ended', doRead);
21159 } else if (doRead) {
21160 debug('do read');
21161 state.reading = true;
21162 state.sync = true;
21163 // if the length is currently zero, then we *need* a readable event.
21164 if (state.length === 0) state.needReadable = true;
21165 // call internal read method
21166 this._read(state.highWaterMark);
21167 state.sync = false;
21168 // If _read pushed data synchronously, then `reading` will be false,
21169 // and we need to re-evaluate how much data we can return to the user.
21170 if (!state.reading) n = howMuchToRead(nOrig, state);
21171 }
21172
21173 var ret;
21174 if (n > 0) ret = fromList(n, state);else ret = null;
21175
21176 if (ret === null) {
21177 state.needReadable = true;
21178 n = 0;
21179 } else {
21180 state.length -= n;
21181 }
21182
21183 if (state.length === 0) {
21184 // If we have nothing in the buffer, then we want to know
21185 // as soon as we *do* get something into the buffer.
21186 if (!state.ended) state.needReadable = true;
21187
21188 // If we tried to read() past the EOF, then emit end on the next tick.
21189 if (nOrig !== n && state.ended) endReadable(this);
21190 }
21191
21192 if (ret !== null) this.emit('data', ret);
21193
21194 return ret;
21195 };
21196
21197 function chunkInvalid(state, chunk) {
21198 var er = null;
21199 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21200 er = new TypeError('Invalid non-string/buffer chunk');
21201 }
21202 return er;
21203 }
21204
21205 function onEofChunk(stream, state) {
21206 if (state.ended) return;
21207 if (state.decoder) {
21208 var chunk = state.decoder.end();
21209 if (chunk && chunk.length) {
21210 state.buffer.push(chunk);
21211 state.length += state.objectMode ? 1 : chunk.length;
21212 }
21213 }
21214 state.ended = true;
21215
21216 // emit 'readable' now to make sure it gets picked up.
21217 emitReadable(stream);
21218 }
21219
21220 // Don't emit readable right away in sync mode, because this can trigger
21221 // another read() call => stack overflow. This way, it might trigger
21222 // a nextTick recursion warning, but that's not so bad.
21223 function emitReadable(stream) {
21224 var state = stream._readableState;
21225 state.needReadable = false;
21226 if (!state.emittedReadable) {
21227 debug('emitReadable', state.flowing);
21228 state.emittedReadable = true;
21229 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
21230 }
21231 }
21232
21233 function emitReadable_(stream) {
21234 debug('emit readable');
21235 stream.emit('readable');
21236 flow(stream);
21237 }
21238
21239 // at this point, the user has presumably seen the 'readable' event,
21240 // and called read() to consume some data. that may have triggered
21241 // in turn another _read(n) call, in which case reading = true if
21242 // it's in progress.
21243 // However, if we're not ended, or reading, and the length < hwm,
21244 // then go ahead and try to read some more preemptively.
21245 function maybeReadMore(stream, state) {
21246 if (!state.readingMore) {
21247 state.readingMore = true;
21248 processNextTick(maybeReadMore_, stream, state);
21249 }
21250 }
21251
21252 function maybeReadMore_(stream, state) {
21253 var len = state.length;
21254 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
21255 debug('maybeReadMore read 0');
21256 stream.read(0);
21257 if (len === state.length)
21258 // didn't get any data, stop spinning.
21259 break;else len = state.length;
21260 }
21261 state.readingMore = false;
21262 }
21263
21264 // abstract method. to be overridden in specific implementation classes.
21265 // call cb(er, data) where data is <= n in length.
21266 // for virtual (non-string, non-buffer) streams, "length" is somewhat
21267 // arbitrary, and perhaps not very meaningful.
21268 Readable.prototype._read = function (n) {
21269 this.emit('error', new Error('_read() is not implemented'));
21270 };
21271
21272 Readable.prototype.pipe = function (dest, pipeOpts) {
21273 var src = this;
21274 var state = this._readableState;
21275
21276 switch (state.pipesCount) {
21277 case 0:
21278 state.pipes = dest;
21279 break;
21280 case 1:
21281 state.pipes = [state.pipes, dest];
21282 break;
21283 default:
21284 state.pipes.push(dest);
21285 break;
21286 }
21287 state.pipesCount += 1;
21288 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
21289
21290 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
21291
21292 var endFn = doEnd ? onend : cleanup;
21293 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
21294
21295 dest.on('unpipe', onunpipe);
21296 function onunpipe(readable) {
21297 debug('onunpipe');
21298 if (readable === src) {
21299 cleanup();
21300 }
21301 }
21302
21303 function onend() {
21304 debug('onend');
21305 dest.end();
21306 }
21307
21308 // when the dest drains, it reduces the awaitDrain counter
21309 // on the source. This would be more elegant with a .once()
21310 // handler in flow(), but adding and removing repeatedly is
21311 // too slow.
21312 var ondrain = pipeOnDrain(src);
21313 dest.on('drain', ondrain);
21314
21315 var cleanedUp = false;
21316 function cleanup() {
21317 debug('cleanup');
21318 // cleanup event handlers once the pipe is broken
21319 dest.removeListener('close', onclose);
21320 dest.removeListener('finish', onfinish);
21321 dest.removeListener('drain', ondrain);
21322 dest.removeListener('error', onerror);
21323 dest.removeListener('unpipe', onunpipe);
21324 src.removeListener('end', onend);
21325 src.removeListener('end', cleanup);
21326 src.removeListener('data', ondata);
21327
21328 cleanedUp = true;
21329
21330 // if the reader is waiting for a drain event from this
21331 // specific writer, then it would cause it to never start
21332 // flowing again.
21333 // So, if this is awaiting a drain, then we just call it now.
21334 // If we don't know, then assume that we are waiting for one.
21335 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
21336 }
21337
21338 // If the user pushes more data while we're writing to dest then we'll end up
21339 // in ondata again. However, we only want to increase awaitDrain once because
21340 // dest will only emit one 'drain' event for the multiple writes.
21341 // => Introduce a guard on increasing awaitDrain.
21342 var increasedAwaitDrain = false;
21343 src.on('data', ondata);
21344 function ondata(chunk) {
21345 debug('ondata');
21346 increasedAwaitDrain = false;
21347 var ret = dest.write(chunk);
21348 if (false === ret && !increasedAwaitDrain) {
21349 // If the user unpiped during `dest.write()`, it is possible
21350 // to get stuck in a permanently paused state if that write
21351 // also returned false.
21352 // => Check whether `dest` is still a piping destination.
21353 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
21354 debug('false write response, pause', src._readableState.awaitDrain);
21355 src._readableState.awaitDrain++;
21356 increasedAwaitDrain = true;
21357 }
21358 src.pause();
21359 }
21360 }
21361
21362 // if the dest has an error, then stop piping into it.
21363 // however, don't suppress the throwing behavior for this.
21364 function onerror(er) {
21365 debug('onerror', er);
21366 unpipe();
21367 dest.removeListener('error', onerror);
21368 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
21369 }
21370
21371 // Make sure our error handler is attached before userland ones.
21372 prependListener(dest, 'error', onerror);
21373
21374 // Both close and finish should trigger unpipe, but only once.
21375 function onclose() {
21376 dest.removeListener('finish', onfinish);
21377 unpipe();
21378 }
21379 dest.once('close', onclose);
21380 function onfinish() {
21381 debug('onfinish');
21382 dest.removeListener('close', onclose);
21383 unpipe();
21384 }
21385 dest.once('finish', onfinish);
21386
21387 function unpipe() {
21388 debug('unpipe');
21389 src.unpipe(dest);
21390 }
21391
21392 // tell the dest that it's being piped to
21393 dest.emit('pipe', src);
21394
21395 // start the flow if it hasn't been started already.
21396 if (!state.flowing) {
21397 debug('pipe resume');
21398 src.resume();
21399 }
21400
21401 return dest;
21402 };
21403
21404 function pipeOnDrain(src) {
21405 return function () {
21406 var state = src._readableState;
21407 debug('pipeOnDrain', state.awaitDrain);
21408 if (state.awaitDrain) state.awaitDrain--;
21409 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
21410 state.flowing = true;
21411 flow(src);
21412 }
21413 };
21414 }
21415
21416 Readable.prototype.unpipe = function (dest) {
21417 var state = this._readableState;
21418
21419 // if we're not piping anywhere, then do nothing.
21420 if (state.pipesCount === 0) return this;
21421
21422 // just one destination. most common case.
21423 if (state.pipesCount === 1) {
21424 // passed in one, but it's not the right one.
21425 if (dest && dest !== state.pipes) return this;
21426
21427 if (!dest) dest = state.pipes;
21428
21429 // got a match.
21430 state.pipes = null;
21431 state.pipesCount = 0;
21432 state.flowing = false;
21433 if (dest) dest.emit('unpipe', this);
21434 return this;
21435 }
21436
21437 // slow case. multiple pipe destinations.
21438
21439 if (!dest) {
21440 // remove all.
21441 var dests = state.pipes;
21442 var len = state.pipesCount;
21443 state.pipes = null;
21444 state.pipesCount = 0;
21445 state.flowing = false;
21446
21447 for (var i = 0; i < len; i++) {
21448 dests[i].emit('unpipe', this);
21449 }return this;
21450 }
21451
21452 // try to find the right one.
21453 var index = indexOf(state.pipes, dest);
21454 if (index === -1) return this;
21455
21456 state.pipes.splice(index, 1);
21457 state.pipesCount -= 1;
21458 if (state.pipesCount === 1) state.pipes = state.pipes[0];
21459
21460 dest.emit('unpipe', this);
21461
21462 return this;
21463 };
21464
21465 // set up data events if they are asked for
21466 // Ensure readable listeners eventually get something
21467 Readable.prototype.on = function (ev, fn) {
21468 var res = Stream.prototype.on.call(this, ev, fn);
21469
21470 if (ev === 'data') {
21471 // Start flowing on next tick if stream isn't explicitly paused
21472 if (this._readableState.flowing !== false) this.resume();
21473 } else if (ev === 'readable') {
21474 var state = this._readableState;
21475 if (!state.endEmitted && !state.readableListening) {
21476 state.readableListening = state.needReadable = true;
21477 state.emittedReadable = false;
21478 if (!state.reading) {
21479 processNextTick(nReadingNextTick, this);
21480 } else if (state.length) {
21481 emitReadable(this, state);
21482 }
21483 }
21484 }
21485
21486 return res;
21487 };
21488 Readable.prototype.addListener = Readable.prototype.on;
21489
21490 function nReadingNextTick(self) {
21491 debug('readable nexttick read 0');
21492 self.read(0);
21493 }
21494
21495 // pause() and resume() are remnants of the legacy readable stream API
21496 // If the user uses them, then switch into old mode.
21497 Readable.prototype.resume = function () {
21498 var state = this._readableState;
21499 if (!state.flowing) {
21500 debug('resume');
21501 state.flowing = true;
21502 resume(this, state);
21503 }
21504 return this;
21505 };
21506
21507 function resume(stream, state) {
21508 if (!state.resumeScheduled) {
21509 state.resumeScheduled = true;
21510 processNextTick(resume_, stream, state);
21511 }
21512 }
21513
21514 function resume_(stream, state) {
21515 if (!state.reading) {
21516 debug('resume read 0');
21517 stream.read(0);
21518 }
21519
21520 state.resumeScheduled = false;
21521 state.awaitDrain = 0;
21522 stream.emit('resume');
21523 flow(stream);
21524 if (state.flowing && !state.reading) stream.read(0);
21525 }
21526
21527 Readable.prototype.pause = function () {
21528 debug('call pause flowing=%j', this._readableState.flowing);
21529 if (false !== this._readableState.flowing) {
21530 debug('pause');
21531 this._readableState.flowing = false;
21532 this.emit('pause');
21533 }
21534 return this;
21535 };
21536
21537 function flow(stream) {
21538 var state = stream._readableState;
21539 debug('flow', state.flowing);
21540 while (state.flowing && stream.read() !== null) {}
21541 }
21542
21543 // wrap an old-style stream as the async data source.
21544 // This is *not* part of the readable stream interface.
21545 // It is an ugly unfortunate mess of history.
21546 Readable.prototype.wrap = function (stream) {
21547 var state = this._readableState;
21548 var paused = false;
21549
21550 var self = this;
21551 stream.on('end', function () {
21552 debug('wrapped end');
21553 if (state.decoder && !state.ended) {
21554 var chunk = state.decoder.end();
21555 if (chunk && chunk.length) self.push(chunk);
21556 }
21557
21558 self.push(null);
21559 });
21560
21561 stream.on('data', function (chunk) {
21562 debug('wrapped data');
21563 if (state.decoder) chunk = state.decoder.write(chunk);
21564
21565 // don't skip over falsy values in objectMode
21566 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
21567
21568 var ret = self.push(chunk);
21569 if (!ret) {
21570 paused = true;
21571 stream.pause();
21572 }
21573 });
21574
21575 // proxy all the other methods.
21576 // important when wrapping filters and duplexes.
21577 for (var i in stream) {
21578 if (this[i] === undefined && typeof stream[i] === 'function') {
21579 this[i] = function (method) {
21580 return function () {
21581 return stream[method].apply(stream, arguments);
21582 };
21583 }(i);
21584 }
21585 }
21586
21587 // proxy certain important events.
21588 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
21589 forEach(events, function (ev) {
21590 stream.on(ev, self.emit.bind(self, ev));
21591 });
21592
21593 // when we try to consume some more bytes, simply unpause the
21594 // underlying stream.
21595 self._read = function (n) {
21596 debug('wrapped _read', n);
21597 if (paused) {
21598 paused = false;
21599 stream.resume();
21600 }
21601 };
21602
21603 return self;
21604 };
21605
21606 // exposed for testing purposes only.
21607 Readable._fromList = fromList;
21608
21609 // Pluck off n bytes from an array of buffers.
21610 // Length is the combined lengths of all the buffers in the list.
21611 // This function is designed to be inlinable, so please take care when making
21612 // changes to the function body.
21613 function fromList(n, state) {
21614 // nothing buffered
21615 if (state.length === 0) return null;
21616
21617 var ret;
21618 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
21619 // read it all, truncate the list
21620 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);
21621 state.buffer.clear();
21622 } else {
21623 // read part of list
21624 ret = fromListPartial(n, state.buffer, state.decoder);
21625 }
21626
21627 return ret;
21628 }
21629
21630 // Extracts only enough buffered data to satisfy the amount requested.
21631 // This function is designed to be inlinable, so please take care when making
21632 // changes to the function body.
21633 function fromListPartial(n, list, hasStrings) {
21634 var ret;
21635 if (n < list.head.data.length) {
21636 // slice is the same for buffers and strings
21637 ret = list.head.data.slice(0, n);
21638 list.head.data = list.head.data.slice(n);
21639 } else if (n === list.head.data.length) {
21640 // first chunk is a perfect match
21641 ret = list.shift();
21642 } else {
21643 // result spans more than one buffer
21644 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
21645 }
21646 return ret;
21647 }
21648
21649 // Copies a specified amount of characters from the list of buffered data
21650 // chunks.
21651 // This function is designed to be inlinable, so please take care when making
21652 // changes to the function body.
21653 function copyFromBufferString(n, list) {
21654 var p = list.head;
21655 var c = 1;
21656 var ret = p.data;
21657 n -= ret.length;
21658 while (p = p.next) {
21659 var str = p.data;
21660 var nb = n > str.length ? str.length : n;
21661 if (nb === str.length) ret += str;else ret += str.slice(0, n);
21662 n -= nb;
21663 if (n === 0) {
21664 if (nb === str.length) {
21665 ++c;
21666 if (p.next) list.head = p.next;else list.head = list.tail = null;
21667 } else {
21668 list.head = p;
21669 p.data = str.slice(nb);
21670 }
21671 break;
21672 }
21673 ++c;
21674 }
21675 list.length -= c;
21676 return ret;
21677 }
21678
21679 // Copies a specified amount of bytes from the list of buffered data chunks.
21680 // This function is designed to be inlinable, so please take care when making
21681 // changes to the function body.
21682 function copyFromBuffer(n, list) {
21683 var ret = bufferShim.allocUnsafe(n);
21684 var p = list.head;
21685 var c = 1;
21686 p.data.copy(ret);
21687 n -= p.data.length;
21688 while (p = p.next) {
21689 var buf = p.data;
21690 var nb = n > buf.length ? buf.length : n;
21691 buf.copy(ret, ret.length - n, 0, nb);
21692 n -= nb;
21693 if (n === 0) {
21694 if (nb === buf.length) {
21695 ++c;
21696 if (p.next) list.head = p.next;else list.head = list.tail = null;
21697 } else {
21698 list.head = p;
21699 p.data = buf.slice(nb);
21700 }
21701 break;
21702 }
21703 ++c;
21704 }
21705 list.length -= c;
21706 return ret;
21707 }
21708
21709 function endReadable(stream) {
21710 var state = stream._readableState;
21711
21712 // If we get here before consuming all the bytes, then that is a
21713 // bug in node. Should never happen.
21714 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
21715
21716 if (!state.endEmitted) {
21717 state.ended = true;
21718 processNextTick(endReadableNT, state, stream);
21719 }
21720 }
21721
21722 function endReadableNT(state, stream) {
21723 // Check that we didn't get one last unshift.
21724 if (!state.endEmitted && state.length === 0) {
21725 state.endEmitted = true;
21726 stream.readable = false;
21727 stream.emit('end');
21728 }
21729 }
21730
21731 function forEach(xs, f) {
21732 for (var i = 0, l = xs.length; i < l; i++) {
21733 f(xs[i], i);
21734 }
21735 }
21736
21737 function indexOf(xs, x) {
21738 for (var i = 0, l = xs.length; i < l; i++) {
21739 if (xs[i] === x) return i;
21740 }
21741 return -1;
21742 }
21743 }).call(this,require('_process'))
21744 },{"./_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){
21745 // a transform stream is a readable/writable stream where you do
21746 // something with the data. Sometimes it's called a "filter",
21747 // but that's not a great name for it, since that implies a thing where
21748 // some bits pass through, and others are simply ignored. (That would
21749 // be a valid example of a transform, of course.)
21750 //
21751 // While the output is causally related to the input, it's not a
21752 // necessarily symmetric or synchronous transformation. For example,
21753 // a zlib stream might take multiple plain-text writes(), and then
21754 // emit a single compressed chunk some time in the future.
21755 //
21756 // Here's how this works:
21757 //
21758 // The Transform stream has all the aspects of the readable and writable
21759 // stream classes. When you write(chunk), that calls _write(chunk,cb)
21760 // internally, and returns false if there's a lot of pending writes
21761 // buffered up. When you call read(), that calls _read(n) until
21762 // there's enough pending readable data buffered up.
21763 //
21764 // In a transform stream, the written data is placed in a buffer. When
21765 // _read(n) is called, it transforms the queued up data, calling the
21766 // buffered _write cb's as it consumes chunks. If consuming a single
21767 // written chunk would result in multiple output chunks, then the first
21768 // outputted bit calls the readcb, and subsequent chunks just go into
21769 // the read buffer, and will cause it to emit 'readable' if necessary.
21770 //
21771 // This way, back-pressure is actually determined by the reading side,
21772 // since _read has to be called to start processing a new chunk. However,
21773 // a pathological inflate type of transform can cause excessive buffering
21774 // here. For example, imagine a stream where every byte of input is
21775 // interpreted as an integer from 0-255, and then results in that many
21776 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
21777 // 1kb of data being output. In this case, you could write a very small
21778 // amount of input, and end up with a very large amount of output. In
21779 // such a pathological inflating mechanism, there'd be no way to tell
21780 // the system to stop doing the transform. A single 4MB write could
21781 // cause the system to run out of memory.
21782 //
21783 // However, even in such a pathological case, only a single written chunk
21784 // would be consumed, and then the rest would wait (un-transformed) until
21785 // the results of the previous transformed chunk were consumed.
21786
21787 'use strict';
21788
21789 module.exports = Transform;
21790
21791 var Duplex = require('./_stream_duplex');
21792
21793 /*<replacement>*/
21794 var util = require('core-util-is');
21795 util.inherits = require('inherits');
21796 /*</replacement>*/
21797
21798 util.inherits(Transform, Duplex);
21799
21800 function TransformState(stream) {
21801 this.afterTransform = function (er, data) {
21802 return afterTransform(stream, er, data);
21803 };
21804
21805 this.needTransform = false;
21806 this.transforming = false;
21807 this.writecb = null;
21808 this.writechunk = null;
21809 this.writeencoding = null;
21810 }
21811
21812 function afterTransform(stream, er, data) {
21813 var ts = stream._transformState;
21814 ts.transforming = false;
21815
21816 var cb = ts.writecb;
21817
21818 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
21819
21820 ts.writechunk = null;
21821 ts.writecb = null;
21822
21823 if (data !== null && data !== undefined) stream.push(data);
21824
21825 cb(er);
21826
21827 var rs = stream._readableState;
21828 rs.reading = false;
21829 if (rs.needReadable || rs.length < rs.highWaterMark) {
21830 stream._read(rs.highWaterMark);
21831 }
21832 }
21833
21834 function Transform(options) {
21835 if (!(this instanceof Transform)) return new Transform(options);
21836
21837 Duplex.call(this, options);
21838
21839 this._transformState = new TransformState(this);
21840
21841 var stream = this;
21842
21843 // start out asking for a readable event once data is transformed.
21844 this._readableState.needReadable = true;
21845
21846 // we have implemented the _read method, and done the other things
21847 // that Readable wants before the first _read call, so unset the
21848 // sync guard flag.
21849 this._readableState.sync = false;
21850
21851 if (options) {
21852 if (typeof options.transform === 'function') this._transform = options.transform;
21853
21854 if (typeof options.flush === 'function') this._flush = options.flush;
21855 }
21856
21857 // When the writable side finishes, then flush out anything remaining.
21858 this.once('prefinish', function () {
21859 if (typeof this._flush === 'function') this._flush(function (er, data) {
21860 done(stream, er, data);
21861 });else done(stream);
21862 });
21863 }
21864
21865 Transform.prototype.push = function (chunk, encoding) {
21866 this._transformState.needTransform = false;
21867 return Duplex.prototype.push.call(this, chunk, encoding);
21868 };
21869
21870 // This is the part where you do stuff!
21871 // override this function in implementation classes.
21872 // 'chunk' is an input chunk.
21873 //
21874 // Call `push(newChunk)` to pass along transformed output
21875 // to the readable side. You may call 'push' zero or more times.
21876 //
21877 // Call `cb(err)` when you are done with this chunk. If you pass
21878 // an error, then that'll put the hurt on the whole operation. If you
21879 // never call cb(), then you'll never get another chunk.
21880 Transform.prototype._transform = function (chunk, encoding, cb) {
21881 throw new Error('_transform() is not implemented');
21882 };
21883
21884 Transform.prototype._write = function (chunk, encoding, cb) {
21885 var ts = this._transformState;
21886 ts.writecb = cb;
21887 ts.writechunk = chunk;
21888 ts.writeencoding = encoding;
21889 if (!ts.transforming) {
21890 var rs = this._readableState;
21891 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
21892 }
21893 };
21894
21895 // Doesn't matter what the args are here.
21896 // _transform does all the work.
21897 // That we got here means that the readable side wants more data.
21898 Transform.prototype._read = function (n) {
21899 var ts = this._transformState;
21900
21901 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
21902 ts.transforming = true;
21903 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
21904 } else {
21905 // mark that we need a transform, so that any data that comes in
21906 // will get processed, now that we've asked for it.
21907 ts.needTransform = true;
21908 }
21909 };
21910
21911 function done(stream, er, data) {
21912 if (er) return stream.emit('error', er);
21913
21914 if (data !== null && data !== undefined) stream.push(data);
21915
21916 // if there's nothing in the write buffer, then that means
21917 // that nothing more will ever be provided
21918 var ws = stream._writableState;
21919 var ts = stream._transformState;
21920
21921 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
21922
21923 if (ts.transforming) throw new Error('Calling transform done when still transforming');
21924
21925 return stream.push(null);
21926 }
21927 },{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
21928 (function (process){
21929 // A bit simpler than readable streams.
21930 // Implement an async ._write(chunk, encoding, cb), and it'll handle all
21931 // the drain event emission and buffering.
21932
21933 'use strict';
21934
21935 module.exports = Writable;
21936
21937 /*<replacement>*/
21938 var processNextTick = require('process-nextick-args');
21939 /*</replacement>*/
21940
21941 /*<replacement>*/
21942 var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
21943 /*</replacement>*/
21944
21945 /*<replacement>*/
21946 var Duplex;
21947 /*</replacement>*/
21948
21949 Writable.WritableState = WritableState;
21950
21951 /*<replacement>*/
21952 var util = require('core-util-is');
21953 util.inherits = require('inherits');
21954 /*</replacement>*/
21955
21956 /*<replacement>*/
21957 var internalUtil = {
21958 deprecate: require('util-deprecate')
21959 };
21960 /*</replacement>*/
21961
21962 /*<replacement>*/
21963 var Stream;
21964 (function () {
21965 try {
21966 Stream = require('st' + 'ream');
21967 } catch (_) {} finally {
21968 if (!Stream) Stream = require('events').EventEmitter;
21969 }
21970 })();
21971 /*</replacement>*/
21972
21973 var Buffer = require('buffer').Buffer;
21974 /*<replacement>*/
21975 var bufferShim = require('buffer-shims');
21976 /*</replacement>*/
21977
21978 util.inherits(Writable, Stream);
21979
21980 function nop() {}
21981
21982 function WriteReq(chunk, encoding, cb) {
21983 this.chunk = chunk;
21984 this.encoding = encoding;
21985 this.callback = cb;
21986 this.next = null;
21987 }
21988
21989 function WritableState(options, stream) {
21990 Duplex = Duplex || require('./_stream_duplex');
21991
21992 options = options || {};
21993
21994 // object stream flag to indicate whether or not this stream
21995 // contains buffers or objects.
21996 this.objectMode = !!options.objectMode;
21997
21998 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
21999
22000 // the point at which write() starts returning false
22001 // Note: 0 is a valid value, means that we always return false if
22002 // the entire buffer is not flushed immediately on write()
22003 var hwm = options.highWaterMark;
22004 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22005 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
22006
22007 // cast to ints.
22008 this.highWaterMark = ~ ~this.highWaterMark;
22009
22010 // drain event flag.
22011 this.needDrain = false;
22012 // at the start of calling end()
22013 this.ending = false;
22014 // when end() has been called, and returned
22015 this.ended = false;
22016 // when 'finish' is emitted
22017 this.finished = false;
22018
22019 // should we decode strings into buffers before passing to _write?
22020 // this is here so that some node-core streams can optimize string
22021 // handling at a lower level.
22022 var noDecode = options.decodeStrings === false;
22023 this.decodeStrings = !noDecode;
22024
22025 // Crypto is kind of old and crusty. Historically, its default string
22026 // encoding is 'binary' so we have to make this configurable.
22027 // Everything else in the universe uses 'utf8', though.
22028 this.defaultEncoding = options.defaultEncoding || 'utf8';
22029
22030 // not an actual buffer we keep track of, but a measurement
22031 // of how much we're waiting to get pushed to some underlying
22032 // socket or file.
22033 this.length = 0;
22034
22035 // a flag to see when we're in the middle of a write.
22036 this.writing = false;
22037
22038 // when true all writes will be buffered until .uncork() call
22039 this.corked = 0;
22040
22041 // a flag to be able to tell if the onwrite cb is called immediately,
22042 // or on a later tick. We set this to true at first, because any
22043 // actions that shouldn't happen until "later" should generally also
22044 // not happen before the first write call.
22045 this.sync = true;
22046
22047 // a flag to know if we're processing previously buffered items, which
22048 // may call the _write() callback in the same tick, so that we don't
22049 // end up in an overlapped onwrite situation.
22050 this.bufferProcessing = false;
22051
22052 // the callback that's passed to _write(chunk,cb)
22053 this.onwrite = function (er) {
22054 onwrite(stream, er);
22055 };
22056
22057 // the callback that the user supplies to write(chunk,encoding,cb)
22058 this.writecb = null;
22059
22060 // the amount that is being written when _write is called.
22061 this.writelen = 0;
22062
22063 this.bufferedRequest = null;
22064 this.lastBufferedRequest = null;
22065
22066 // number of pending user-supplied write callbacks
22067 // this must be 0 before 'finish' can be emitted
22068 this.pendingcb = 0;
22069
22070 // emit prefinish if the only thing we're waiting for is _write cbs
22071 // This is relevant for synchronous Transform streams
22072 this.prefinished = false;
22073
22074 // True if the error was already emitted and should not be thrown again
22075 this.errorEmitted = false;
22076
22077 // count buffered requests
22078 this.bufferedRequestCount = 0;
22079
22080 // allocate the first CorkedRequest, there is always
22081 // one allocated and free to use, and we maintain at most two
22082 this.corkedRequestsFree = new CorkedRequest(this);
22083 }
22084
22085 WritableState.prototype.getBuffer = function getBuffer() {
22086 var current = this.bufferedRequest;
22087 var out = [];
22088 while (current) {
22089 out.push(current);
22090 current = current.next;
22091 }
22092 return out;
22093 };
22094
22095 (function () {
22096 try {
22097 Object.defineProperty(WritableState.prototype, 'buffer', {
22098 get: internalUtil.deprecate(function () {
22099 return this.getBuffer();
22100 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22101 });
22102 } catch (_) {}
22103 })();
22104
22105 // Test _writableState for inheritance to account for Duplex streams,
22106 // whose prototype chain only points to Readable.
22107 var realHasInstance;
22108 if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22109 realHasInstance = Function.prototype[Symbol.hasInstance];
22110 Object.defineProperty(Writable, Symbol.hasInstance, {
22111 value: function (object) {
22112 if (realHasInstance.call(this, object)) return true;
22113
22114 return object && object._writableState instanceof WritableState;
22115 }
22116 });
22117 } else {
22118 realHasInstance = function (object) {
22119 return object instanceof this;
22120 };
22121 }
22122
22123 function Writable(options) {
22124 Duplex = Duplex || require('./_stream_duplex');
22125
22126 // Writable ctor is applied to Duplexes, too.
22127 // `realHasInstance` is necessary because using plain `instanceof`
22128 // would return false, as no `_writableState` property is attached.
22129
22130 // Trying to use the custom `instanceof` for Writable here will also break the
22131 // Node.js LazyTransform implementation, which has a non-trivial getter for
22132 // `_writableState` that would lead to infinite recursion.
22133 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22134 return new Writable(options);
22135 }
22136
22137 this._writableState = new WritableState(options, this);
22138
22139 // legacy.
22140 this.writable = true;
22141
22142 if (options) {
22143 if (typeof options.write === 'function') this._write = options.write;
22144
22145 if (typeof options.writev === 'function') this._writev = options.writev;
22146 }
22147
22148 Stream.call(this);
22149 }
22150
22151 // Otherwise people can pipe Writable streams, which is just wrong.
22152 Writable.prototype.pipe = function () {
22153 this.emit('error', new Error('Cannot pipe, not readable'));
22154 };
22155
22156 function writeAfterEnd(stream, cb) {
22157 var er = new Error('write after end');
22158 // TODO: defer error events consistently everywhere, not just the cb
22159 stream.emit('error', er);
22160 processNextTick(cb, er);
22161 }
22162
22163 // If we get something that is not a buffer, string, null, or undefined,
22164 // and we're not in objectMode, then that's an error.
22165 // Otherwise stream chunks are all considered to be of length=1, and the
22166 // watermarks determine how many objects to keep in the buffer, rather than
22167 // how many bytes or characters.
22168 function validChunk(stream, state, chunk, cb) {
22169 var valid = true;
22170 var er = false;
22171 // Always throw error if a null is written
22172 // if we are not in object mode then throw
22173 // if it is not a buffer, string, or undefined.
22174 if (chunk === null) {
22175 er = new TypeError('May not write null values to stream');
22176 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22177 er = new TypeError('Invalid non-string/buffer chunk');
22178 }
22179 if (er) {
22180 stream.emit('error', er);
22181 processNextTick(cb, er);
22182 valid = false;
22183 }
22184 return valid;
22185 }
22186
22187 Writable.prototype.write = function (chunk, encoding, cb) {
22188 var state = this._writableState;
22189 var ret = false;
22190
22191 if (typeof encoding === 'function') {
22192 cb = encoding;
22193 encoding = null;
22194 }
22195
22196 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
22197
22198 if (typeof cb !== 'function') cb = nop;
22199
22200 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22201 state.pendingcb++;
22202 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22203 }
22204
22205 return ret;
22206 };
22207
22208 Writable.prototype.cork = function () {
22209 var state = this._writableState;
22210
22211 state.corked++;
22212 };
22213
22214 Writable.prototype.uncork = function () {
22215 var state = this._writableState;
22216
22217 if (state.corked) {
22218 state.corked--;
22219
22220 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
22221 }
22222 };
22223
22224 Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
22225 // node::ParseEncoding() requires lower case.
22226 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
22227 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);
22228 this._writableState.defaultEncoding = encoding;
22229 return this;
22230 };
22231
22232 function decodeChunk(state, chunk, encoding) {
22233 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
22234 chunk = bufferShim.from(chunk, encoding);
22235 }
22236 return chunk;
22237 }
22238
22239 // if we're already writing something, then just put this
22240 // in the queue, and wait our turn. Otherwise, call _write
22241 // If we return false, then we need a drain event, so set that flag.
22242 function writeOrBuffer(stream, state, chunk, encoding, cb) {
22243 chunk = decodeChunk(state, chunk, encoding);
22244
22245 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
22246 var len = state.objectMode ? 1 : chunk.length;
22247
22248 state.length += len;
22249
22250 var ret = state.length < state.highWaterMark;
22251 // we must ensure that previous needDrain will not be reset to false.
22252 if (!ret) state.needDrain = true;
22253
22254 if (state.writing || state.corked) {
22255 var last = state.lastBufferedRequest;
22256 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
22257 if (last) {
22258 last.next = state.lastBufferedRequest;
22259 } else {
22260 state.bufferedRequest = state.lastBufferedRequest;
22261 }
22262 state.bufferedRequestCount += 1;
22263 } else {
22264 doWrite(stream, state, false, len, chunk, encoding, cb);
22265 }
22266
22267 return ret;
22268 }
22269
22270 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
22271 state.writelen = len;
22272 state.writecb = cb;
22273 state.writing = true;
22274 state.sync = true;
22275 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
22276 state.sync = false;
22277 }
22278
22279 function onwriteError(stream, state, sync, er, cb) {
22280 --state.pendingcb;
22281 if (sync) processNextTick(cb, er);else cb(er);
22282
22283 stream._writableState.errorEmitted = true;
22284 stream.emit('error', er);
22285 }
22286
22287 function onwriteStateUpdate(state) {
22288 state.writing = false;
22289 state.writecb = null;
22290 state.length -= state.writelen;
22291 state.writelen = 0;
22292 }
22293
22294 function onwrite(stream, er) {
22295 var state = stream._writableState;
22296 var sync = state.sync;
22297 var cb = state.writecb;
22298
22299 onwriteStateUpdate(state);
22300
22301 if (er) onwriteError(stream, state, sync, er, cb);else {
22302 // Check if we're actually ready to finish, but don't emit yet
22303 var finished = needFinish(state);
22304
22305 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
22306 clearBuffer(stream, state);
22307 }
22308
22309 if (sync) {
22310 /*<replacement>*/
22311 asyncWrite(afterWrite, stream, state, finished, cb);
22312 /*</replacement>*/
22313 } else {
22314 afterWrite(stream, state, finished, cb);
22315 }
22316 }
22317 }
22318
22319 function afterWrite(stream, state, finished, cb) {
22320 if (!finished) onwriteDrain(stream, state);
22321 state.pendingcb--;
22322 cb();
22323 finishMaybe(stream, state);
22324 }
22325
22326 // Must force callback to be called on nextTick, so that we don't
22327 // emit 'drain' before the write() consumer gets the 'false' return
22328 // value, and has a chance to attach a 'drain' listener.
22329 function onwriteDrain(stream, state) {
22330 if (state.length === 0 && state.needDrain) {
22331 state.needDrain = false;
22332 stream.emit('drain');
22333 }
22334 }
22335
22336 // if there's something in the buffer waiting, then process it
22337 function clearBuffer(stream, state) {
22338 state.bufferProcessing = true;
22339 var entry = state.bufferedRequest;
22340
22341 if (stream._writev && entry && entry.next) {
22342 // Fast case, write everything using _writev()
22343 var l = state.bufferedRequestCount;
22344 var buffer = new Array(l);
22345 var holder = state.corkedRequestsFree;
22346 holder.entry = entry;
22347
22348 var count = 0;
22349 while (entry) {
22350 buffer[count] = entry;
22351 entry = entry.next;
22352 count += 1;
22353 }
22354
22355 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
22356
22357 // doWrite is almost always async, defer these to save a bit of time
22358 // as the hot path ends with doWrite
22359 state.pendingcb++;
22360 state.lastBufferedRequest = null;
22361 if (holder.next) {
22362 state.corkedRequestsFree = holder.next;
22363 holder.next = null;
22364 } else {
22365 state.corkedRequestsFree = new CorkedRequest(state);
22366 }
22367 } else {
22368 // Slow case, write chunks one-by-one
22369 while (entry) {
22370 var chunk = entry.chunk;
22371 var encoding = entry.encoding;
22372 var cb = entry.callback;
22373 var len = state.objectMode ? 1 : chunk.length;
22374
22375 doWrite(stream, state, false, len, chunk, encoding, cb);
22376 entry = entry.next;
22377 // if we didn't call the onwrite immediately, then
22378 // it means that we need to wait until it does.
22379 // also, that means that the chunk and cb are currently
22380 // being processed, so move the buffer counter past them.
22381 if (state.writing) {
22382 break;
22383 }
22384 }
22385
22386 if (entry === null) state.lastBufferedRequest = null;
22387 }
22388
22389 state.bufferedRequestCount = 0;
22390 state.bufferedRequest = entry;
22391 state.bufferProcessing = false;
22392 }
22393
22394 Writable.prototype._write = function (chunk, encoding, cb) {
22395 cb(new Error('_write() is not implemented'));
22396 };
22397
22398 Writable.prototype._writev = null;
22399
22400 Writable.prototype.end = function (chunk, encoding, cb) {
22401 var state = this._writableState;
22402
22403 if (typeof chunk === 'function') {
22404 cb = chunk;
22405 chunk = null;
22406 encoding = null;
22407 } else if (typeof encoding === 'function') {
22408 cb = encoding;
22409 encoding = null;
22410 }
22411
22412 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
22413
22414 // .end() fully uncorks
22415 if (state.corked) {
22416 state.corked = 1;
22417 this.uncork();
22418 }
22419
22420 // ignore unnecessary end() calls.
22421 if (!state.ending && !state.finished) endWritable(this, state, cb);
22422 };
22423
22424 function needFinish(state) {
22425 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
22426 }
22427
22428 function prefinish(stream, state) {
22429 if (!state.prefinished) {
22430 state.prefinished = true;
22431 stream.emit('prefinish');
22432 }
22433 }
22434
22435 function finishMaybe(stream, state) {
22436 var need = needFinish(state);
22437 if (need) {
22438 if (state.pendingcb === 0) {
22439 prefinish(stream, state);
22440 state.finished = true;
22441 stream.emit('finish');
22442 } else {
22443 prefinish(stream, state);
22444 }
22445 }
22446 return need;
22447 }
22448
22449 function endWritable(stream, state, cb) {
22450 state.ending = true;
22451 finishMaybe(stream, state);
22452 if (cb) {
22453 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
22454 }
22455 state.ended = true;
22456 stream.writable = false;
22457 }
22458
22459 // It seems a linked list but it is not
22460 // there will be only 2 of these for each stream
22461 function CorkedRequest(state) {
22462 var _this = this;
22463
22464 this.next = null;
22465 this.entry = null;
22466
22467 this.finish = function (err) {
22468 var entry = _this.entry;
22469 _this.entry = null;
22470 while (entry) {
22471 var cb = entry.callback;
22472 state.pendingcb--;
22473 cb(err);
22474 entry = entry.next;
22475 }
22476 if (state.corkedRequestsFree) {
22477 state.corkedRequestsFree.next = _this;
22478 } else {
22479 state.corkedRequestsFree = _this;
22480 }
22481 };
22482 }
22483 }).call(this,require('_process'))
22484 },{"./_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){
22485 'use strict';
22486
22487 var Buffer = require('buffer').Buffer;
22488 /*<replacement>*/
22489 var bufferShim = require('buffer-shims');
22490 /*</replacement>*/
22491
22492 module.exports = BufferList;
22493
22494 function BufferList() {
22495 this.head = null;
22496 this.tail = null;
22497 this.length = 0;
22498 }
22499
22500 BufferList.prototype.push = function (v) {
22501 var entry = { data: v, next: null };
22502 if (this.length > 0) this.tail.next = entry;else this.head = entry;
22503 this.tail = entry;
22504 ++this.length;
22505 };
22506
22507 BufferList.prototype.unshift = function (v) {
22508 var entry = { data: v, next: this.head };
22509 if (this.length === 0) this.tail = entry;
22510 this.head = entry;
22511 ++this.length;
22512 };
22513
22514 BufferList.prototype.shift = function () {
22515 if (this.length === 0) return;
22516 var ret = this.head.data;
22517 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
22518 --this.length;
22519 return ret;
22520 };
22521
22522 BufferList.prototype.clear = function () {
22523 this.head = this.tail = null;
22524 this.length = 0;
22525 };
22526
22527 BufferList.prototype.join = function (s) {
22528 if (this.length === 0) return '';
22529 var p = this.head;
22530 var ret = '' + p.data;
22531 while (p = p.next) {
22532 ret += s + p.data;
22533 }return ret;
22534 };
22535
22536 BufferList.prototype.concat = function (n) {
22537 if (this.length === 0) return bufferShim.alloc(0);
22538 if (this.length === 1) return this.head.data;
22539 var ret = bufferShim.allocUnsafe(n >>> 0);
22540 var p = this.head;
22541 var i = 0;
22542 while (p) {
22543 p.data.copy(ret, i);
22544 i += p.data.length;
22545 p = p.next;
22546 }
22547 return ret;
22548 };
22549 },{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
22550 module.exports = require("./lib/_stream_passthrough.js")
22551
22552 },{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
22553 (function (process){
22554 var Stream = (function (){
22555 try {
22556 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
22557 } catch(_){}
22558 }());
22559 exports = module.exports = require('./lib/_stream_readable.js');
22560 exports.Stream = Stream || exports;
22561 exports.Readable = exports;
22562 exports.Writable = require('./lib/_stream_writable.js');
22563 exports.Duplex = require('./lib/_stream_duplex.js');
22564 exports.Transform = require('./lib/_stream_transform.js');
22565 exports.PassThrough = require('./lib/_stream_passthrough.js');
22566
22567 if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
22568 module.exports = Stream;
22569 }
22570
22571 }).call(this,require('_process'))
22572 },{"./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){
22573 module.exports = require("./lib/_stream_transform.js")
22574
22575 },{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
22576 module.exports = require("./lib/_stream_writable.js")
22577
22578 },{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
22579 // Copyright Joyent, Inc. and other Node contributors.
22580 //
22581 // Permission is hereby granted, free of charge, to any person obtaining a
22582 // copy of this software and associated documentation files (the
22583 // "Software"), to deal in the Software without restriction, including
22584 // without limitation the rights to use, copy, modify, merge, publish,
22585 // distribute, sublicense, and/or sell copies of the Software, and to permit
22586 // persons to whom the Software is furnished to do so, subject to the
22587 // following conditions:
22588 //
22589 // The above copyright notice and this permission notice shall be included
22590 // in all copies or substantial portions of the Software.
22591 //
22592 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22593 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22594 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22595 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22596 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22597 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22598 // USE OR OTHER DEALINGS IN THE SOFTWARE.
22599
22600 module.exports = Stream;
22601
22602 var EE = require('events').EventEmitter;
22603 var inherits = require('inherits');
22604
22605 inherits(Stream, EE);
22606 Stream.Readable = require('readable-stream/readable.js');
22607 Stream.Writable = require('readable-stream/writable.js');
22608 Stream.Duplex = require('readable-stream/duplex.js');
22609 Stream.Transform = require('readable-stream/transform.js');
22610 Stream.PassThrough = require('readable-stream/passthrough.js');
22611
22612 // Backwards-compat with node 0.4.x
22613 Stream.Stream = Stream;
22614
22615
22616
22617 // old-style streams. Note that the pipe method (the only relevant
22618 // part of this class) is overridden in the Readable class.
22619
22620 function Stream() {
22621 EE.call(this);
22622 }
22623
22624 Stream.prototype.pipe = function(dest, options) {
22625 var source = this;
22626
22627 function ondata(chunk) {
22628 if (dest.writable) {
22629 if (false === dest.write(chunk) && source.pause) {
22630 source.pause();
22631 }
22632 }
22633 }
22634
22635 source.on('data', ondata);
22636
22637 function ondrain() {
22638 if (source.readable && source.resume) {
22639 source.resume();
22640 }
22641 }
22642
22643 dest.on('drain', ondrain);
22644
22645 // If the 'end' option is not supplied, dest.end() will be called when
22646 // source gets the 'end' or 'close' events. Only dest.end() once.
22647 if (!dest._isStdio && (!options || options.end !== false)) {
22648 source.on('end', onend);
22649 source.on('close', onclose);
22650 }
22651
22652 var didOnEnd = false;
22653 function onend() {
22654 if (didOnEnd) return;
22655 didOnEnd = true;
22656
22657 dest.end();
22658 }
22659
22660
22661 function onclose() {
22662 if (didOnEnd) return;
22663 didOnEnd = true;
22664
22665 if (typeof dest.destroy === 'function') dest.destroy();
22666 }
22667
22668 // don't leave dangling pipes when there are errors.
22669 function onerror(er) {
22670 cleanup();
22671 if (EE.listenerCount(this, 'error') === 0) {
22672 throw er; // Unhandled stream error in pipe.
22673 }
22674 }
22675
22676 source.on('error', onerror);
22677 dest.on('error', onerror);
22678
22679 // remove all the event listeners that were added.
22680 function cleanup() {
22681 source.removeListener('data', ondata);
22682 dest.removeListener('drain', ondrain);
22683
22684 source.removeListener('end', onend);
22685 source.removeListener('close', onclose);
22686
22687 source.removeListener('error', onerror);
22688 dest.removeListener('error', onerror);
22689
22690 source.removeListener('end', cleanup);
22691 source.removeListener('close', cleanup);
22692
22693 dest.removeListener('close', cleanup);
22694 }
22695
22696 source.on('end', cleanup);
22697 source.on('close', cleanup);
22698
22699 dest.on('close', cleanup);
22700
22701 dest.emit('pipe', source);
22702
22703 // Allow for unix-like usage: A.pipe(B).pipe(C)
22704 return dest;
22705 };
22706
22707 },{"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){
22708 // Copyright Joyent, Inc. and other Node contributors.
22709 //
22710 // Permission is hereby granted, free of charge, to any person obtaining a
22711 // copy of this software and associated documentation files (the
22712 // "Software"), to deal in the Software without restriction, including
22713 // without limitation the rights to use, copy, modify, merge, publish,
22714 // distribute, sublicense, and/or sell copies of the Software, and to permit
22715 // persons to whom the Software is furnished to do so, subject to the
22716 // following conditions:
22717 //
22718 // The above copyright notice and this permission notice shall be included
22719 // in all copies or substantial portions of the Software.
22720 //
22721 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22722 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22723 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22724 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22725 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22726 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22727 // USE OR OTHER DEALINGS IN THE SOFTWARE.
22728
22729 var Buffer = require('buffer').Buffer;
22730
22731 var isBufferEncoding = Buffer.isEncoding
22732 || function(encoding) {
22733 switch (encoding && encoding.toLowerCase()) {
22734 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;
22735 default: return false;
22736 }
22737 }
22738
22739
22740 function assertEncoding(encoding) {
22741 if (encoding && !isBufferEncoding(encoding)) {
22742 throw new Error('Unknown encoding: ' + encoding);
22743 }
22744 }
22745
22746 // StringDecoder provides an interface for efficiently splitting a series of
22747 // buffers into a series of JS strings without breaking apart multi-byte
22748 // characters. CESU-8 is handled as part of the UTF-8 encoding.
22749 //
22750 // @TODO Handling all encodings inside a single object makes it very difficult
22751 // to reason about this code, so it should be split up in the future.
22752 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
22753 // points as used by CESU-8.
22754 var StringDecoder = exports.StringDecoder = function(encoding) {
22755 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
22756 assertEncoding(encoding);
22757 switch (this.encoding) {
22758 case 'utf8':
22759 // CESU-8 represents each of Surrogate Pair by 3-bytes
22760 this.surrogateSize = 3;
22761 break;
22762 case 'ucs2':
22763 case 'utf16le':
22764 // UTF-16 represents each of Surrogate Pair by 2-bytes
22765 this.surrogateSize = 2;
22766 this.detectIncompleteChar = utf16DetectIncompleteChar;
22767 break;
22768 case 'base64':
22769 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
22770 this.surrogateSize = 3;
22771 this.detectIncompleteChar = base64DetectIncompleteChar;
22772 break;
22773 default:
22774 this.write = passThroughWrite;
22775 return;
22776 }
22777
22778 // Enough space to store all bytes of a single character. UTF-8 needs 4
22779 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
22780 this.charBuffer = new Buffer(6);
22781 // Number of bytes received for the current incomplete multi-byte character.
22782 this.charReceived = 0;
22783 // Number of bytes expected for the current incomplete multi-byte character.
22784 this.charLength = 0;
22785 };
22786
22787
22788 // write decodes the given buffer and returns it as JS string that is
22789 // guaranteed to not contain any partial multi-byte characters. Any partial
22790 // character found at the end of the buffer is buffered up, and will be
22791 // returned when calling write again with the remaining bytes.
22792 //
22793 // Note: Converting a Buffer containing an orphan surrogate to a String
22794 // currently works, but converting a String to a Buffer (via `new Buffer`, or
22795 // Buffer#write) will replace incomplete surrogates with the unicode
22796 // replacement character. See https://codereview.chromium.org/121173009/ .
22797 StringDecoder.prototype.write = function(buffer) {
22798 var charStr = '';
22799 // if our last write ended with an incomplete multibyte character
22800 while (this.charLength) {
22801 // determine how many remaining bytes this buffer has to offer for this char
22802 var available = (buffer.length >= this.charLength - this.charReceived) ?
22803 this.charLength - this.charReceived :
22804 buffer.length;
22805
22806 // add the new bytes to the char buffer
22807 buffer.copy(this.charBuffer, this.charReceived, 0, available);
22808 this.charReceived += available;
22809
22810 if (this.charReceived < this.charLength) {
22811 // still not enough chars in this buffer? wait for more ...
22812 return '';
22813 }
22814
22815 // remove bytes belonging to the current character from the buffer
22816 buffer = buffer.slice(available, buffer.length);
22817
22818 // get the character that was split
22819 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
22820
22821 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22822 var charCode = charStr.charCodeAt(charStr.length - 1);
22823 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22824 this.charLength += this.surrogateSize;
22825 charStr = '';
22826 continue;
22827 }
22828 this.charReceived = this.charLength = 0;
22829
22830 // if there are no more bytes in this buffer, just emit our char
22831 if (buffer.length === 0) {
22832 return charStr;
22833 }
22834 break;
22835 }
22836
22837 // determine and set charLength / charReceived
22838 this.detectIncompleteChar(buffer);
22839
22840 var end = buffer.length;
22841 if (this.charLength) {
22842 // buffer the incomplete character bytes we got
22843 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
22844 end -= this.charReceived;
22845 }
22846
22847 charStr += buffer.toString(this.encoding, 0, end);
22848
22849 var end = charStr.length - 1;
22850 var charCode = charStr.charCodeAt(end);
22851 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
22852 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
22853 var size = this.surrogateSize;
22854 this.charLength += size;
22855 this.charReceived += size;
22856 this.charBuffer.copy(this.charBuffer, size, 0, size);
22857 buffer.copy(this.charBuffer, 0, 0, size);
22858 return charStr.substring(0, end);
22859 }
22860
22861 // or just emit the charStr
22862 return charStr;
22863 };
22864
22865 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
22866 // the end of the given buffer. If so, it sets this.charLength to the byte
22867 // length that character, and sets this.charReceived to the number of bytes
22868 // that are available for this character.
22869 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
22870 // determine how many bytes we have to check at the end of this buffer
22871 var i = (buffer.length >= 3) ? 3 : buffer.length;
22872
22873 // Figure out if one of the last i bytes of our buffer announces an
22874 // incomplete char.
22875 for (; i > 0; i--) {
22876 var c = buffer[buffer.length - i];
22877
22878 // See http://en.wikipedia.org/wiki/UTF-8#Description
22879
22880 // 110XXXXX
22881 if (i == 1 && c >> 5 == 0x06) {
22882 this.charLength = 2;
22883 break;
22884 }
22885
22886 // 1110XXXX
22887 if (i <= 2 && c >> 4 == 0x0E) {
22888 this.charLength = 3;
22889 break;
22890 }
22891
22892 // 11110XXX
22893 if (i <= 3 && c >> 3 == 0x1E) {
22894 this.charLength = 4;
22895 break;
22896 }
22897 }
22898 this.charReceived = i;
22899 };
22900
22901 StringDecoder.prototype.end = function(buffer) {
22902 var res = '';
22903 if (buffer && buffer.length)
22904 res = this.write(buffer);
22905
22906 if (this.charReceived) {
22907 var cr = this.charReceived;
22908 var buf = this.charBuffer;
22909 var enc = this.encoding;
22910 res += buf.slice(0, cr).toString(enc);
22911 }
22912
22913 return res;
22914 };
22915
22916 function passThroughWrite(buffer) {
22917 return buffer.toString(this.encoding);
22918 }
22919
22920 function utf16DetectIncompleteChar(buffer) {
22921 this.charReceived = buffer.length % 2;
22922 this.charLength = this.charReceived ? 2 : 0;
22923 }
22924
22925 function base64DetectIncompleteChar(buffer) {
22926 this.charReceived = buffer.length % 3;
22927 this.charLength = this.charReceived ? 3 : 0;
22928 }
22929
22930 },{"buffer":5}],27:[function(require,module,exports){
22931 (function (global){
22932
22933 /**
22934 * Module exports.
22935 */
22936
22937 module.exports = deprecate;
22938
22939 /**
22940 * Mark that a method should not be used.
22941 * Returns a modified function which warns once by default.
22942 *
22943 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
22944 *
22945 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
22946 * will throw an Error when invoked.
22947 *
22948 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
22949 * will invoke `console.trace()` instead of `console.error()`.
22950 *
22951 * @param {Function} fn - the function to deprecate
22952 * @param {String} msg - the string to print to the console when `fn` is invoked
22953 * @returns {Function} a new "deprecated" version of `fn`
22954 * @api public
22955 */
22956
22957 function deprecate (fn, msg) {
22958 if (config('noDeprecation')) {
22959 return fn;
22960 }
22961
22962 var warned = false;
22963 function deprecated() {
22964 if (!warned) {
22965 if (config('throwDeprecation')) {
22966 throw new Error(msg);
22967 } else if (config('traceDeprecation')) {
22968 console.trace(msg);
22969 } else {
22970 console.warn(msg);
22971 }
22972 warned = true;
22973 }
22974 return fn.apply(this, arguments);
22975 }
22976
22977 return deprecated;
22978 }
22979
22980 /**
22981 * Checks `localStorage` for boolean values for the given `name`.
22982 *
22983 * @param {String} name
22984 * @returns {Boolean}
22985 * @api private
22986 */
22987
22988 function config (name) {
22989 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
22990 try {
22991 if (!global.localStorage) return false;
22992 } catch (_) {
22993 return false;
22994 }
22995 var val = global.localStorage[name];
22996 if (null == val) return false;
22997 return String(val).toLowerCase() === 'true';
22998 }
22999
23000 }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23001 },{}],28:[function(require,module,exports){
23002 arguments[4][9][0].apply(exports,arguments)
23003 },{"dup":9}],29:[function(require,module,exports){
23004 module.exports = function isBuffer(arg) {
23005 return arg && typeof arg === 'object'
23006 && typeof arg.copy === 'function'
23007 && typeof arg.fill === 'function'
23008 && typeof arg.readUInt8 === 'function';
23009 }
23010 },{}],30:[function(require,module,exports){
23011 (function (process,global){
23012 // Copyright Joyent, Inc. and other Node contributors.
23013 //
23014 // Permission is hereby granted, free of charge, to any person obtaining a
23015 // copy of this software and associated documentation files (the
23016 // "Software"), to deal in the Software without restriction, including
23017 // without limitation the rights to use, copy, modify, merge, publish,
23018 // distribute, sublicense, and/or sell copies of the Software, and to permit
23019 // persons to whom the Software is furnished to do so, subject to the
23020 // following conditions:
23021 //
23022 // The above copyright notice and this permission notice shall be included
23023 // in all copies or substantial portions of the Software.
23024 //
23025 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23026 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23027 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23028 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23029 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23030 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23031 // USE OR OTHER DEALINGS IN THE SOFTWARE.
23032
23033 var formatRegExp = /%[sdj%]/g;
23034 exports.format = function(f) {
23035 if (!isString(f)) {
23036 var objects = [];
23037 for (var i = 0; i < arguments.length; i++) {
23038 objects.push(inspect(arguments[i]));
23039 }
23040 return objects.join(' ');
23041 }
23042
23043 var i = 1;
23044 var args = arguments;
23045 var len = args.length;
23046 var str = String(f).replace(formatRegExp, function(x) {
23047 if (x === '%%') return '%';
23048 if (i >= len) return x;
23049 switch (x) {
23050 case '%s': return String(args[i++]);
23051 case '%d': return Number(args[i++]);
23052 case '%j':
23053 try {
23054 return JSON.stringify(args[i++]);
23055 } catch (_) {
23056 return '[Circular]';
23057 }
23058 default:
23059 return x;
23060 }
23061 });
23062 for (var x = args[i]; i < len; x = args[++i]) {
23063 if (isNull(x) || !isObject(x)) {
23064 str += ' ' + x;
23065 } else {
23066 str += ' ' + inspect(x);
23067 }
23068 }
23069 return str;
23070 };
23071
23072
23073 // Mark that a method should not be used.
23074 // Returns a modified function which warns once by default.
23075 // If --no-deprecation is set, then it is a no-op.
23076 exports.deprecate = function(fn, msg) {
23077 // Allow for deprecating things in the process of starting up.
23078 if (isUndefined(global.process)) {
23079 return function() {
23080 return exports.deprecate(fn, msg).apply(this, arguments);
23081 };
23082 }
23083
23084 if (process.noDeprecation === true) {
23085 return fn;
23086 }
23087
23088 var warned = false;
23089 function deprecated() {
23090 if (!warned) {
23091 if (process.throwDeprecation) {
23092 throw new Error(msg);
23093 } else if (process.traceDeprecation) {
23094 console.trace(msg);
23095 } else {
23096 console.error(msg);
23097 }
23098 warned = true;
23099 }
23100 return fn.apply(this, arguments);
23101 }
23102
23103 return deprecated;
23104 };
23105
23106
23107 var debugs = {};
23108 var debugEnviron;
23109 exports.debuglog = function(set) {
23110 if (isUndefined(debugEnviron))
23111 debugEnviron = process.env.NODE_DEBUG || '';
23112 set = set.toUpperCase();
23113 if (!debugs[set]) {
23114 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23115 var pid = process.pid;
23116 debugs[set] = function() {
23117 var msg = exports.format.apply(exports, arguments);
23118 console.error('%s %d: %s', set, pid, msg);
23119 };
23120 } else {
23121 debugs[set] = function() {};
23122 }
23123 }
23124 return debugs[set];
23125 };
23126
23127
23128 /**
23129 * Echos the value of a value. Trys to print the value out
23130 * in the best way possible given the different types.
23131 *
23132 * @param {Object} obj The object to print out.
23133 * @param {Object} opts Optional options object that alters the output.
23134 */
23135 /* legacy: obj, showHidden, depth, colors*/
23136 function inspect(obj, opts) {
23137 // default options
23138 var ctx = {
23139 seen: [],
23140 stylize: stylizeNoColor
23141 };
23142 // legacy...
23143 if (arguments.length >= 3) ctx.depth = arguments[2];
23144 if (arguments.length >= 4) ctx.colors = arguments[3];
23145 if (isBoolean(opts)) {
23146 // legacy...
23147 ctx.showHidden = opts;
23148 } else if (opts) {
23149 // got an "options" object
23150 exports._extend(ctx, opts);
23151 }
23152 // set default options
23153 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23154 if (isUndefined(ctx.depth)) ctx.depth = 2;
23155 if (isUndefined(ctx.colors)) ctx.colors = false;
23156 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23157 if (ctx.colors) ctx.stylize = stylizeWithColor;
23158 return formatValue(ctx, obj, ctx.depth);
23159 }
23160 exports.inspect = inspect;
23161
23162
23163 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23164 inspect.colors = {
23165 'bold' : [1, 22],
23166 'italic' : [3, 23],
23167 'underline' : [4, 24],
23168 'inverse' : [7, 27],
23169 'white' : [37, 39],
23170 'grey' : [90, 39],
23171 'black' : [30, 39],
23172 'blue' : [34, 39],
23173 'cyan' : [36, 39],
23174 'green' : [32, 39],
23175 'magenta' : [35, 39],
23176 'red' : [31, 39],
23177 'yellow' : [33, 39]
23178 };
23179
23180 // Don't use 'blue' not visible on cmd.exe
23181 inspect.styles = {
23182 'special': 'cyan',
23183 'number': 'yellow',
23184 'boolean': 'yellow',
23185 'undefined': 'grey',
23186 'null': 'bold',
23187 'string': 'green',
23188 'date': 'magenta',
23189 // "name": intentionally not styling
23190 'regexp': 'red'
23191 };
23192
23193
23194 function stylizeWithColor(str, styleType) {
23195 var style = inspect.styles[styleType];
23196
23197 if (style) {
23198 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23199 '\u001b[' + inspect.colors[style][1] + 'm';
23200 } else {
23201 return str;
23202 }
23203 }
23204
23205
23206 function stylizeNoColor(str, styleType) {
23207 return str;
23208 }
23209
23210
23211 function arrayToHash(array) {
23212 var hash = {};
23213
23214 array.forEach(function(val, idx) {
23215 hash[val] = true;
23216 });
23217
23218 return hash;
23219 }
23220
23221
23222 function formatValue(ctx, value, recurseTimes) {
23223 // Provide a hook for user-specified inspect functions.
23224 // Check that value is an object with an inspect function on it
23225 if (ctx.customInspect &&
23226 value &&
23227 isFunction(value.inspect) &&
23228 // Filter out the util module, it's inspect function is special
23229 value.inspect !== exports.inspect &&
23230 // Also filter out any prototype objects using the circular check.
23231 !(value.constructor && value.constructor.prototype === value)) {
23232 var ret = value.inspect(recurseTimes, ctx);
23233 if (!isString(ret)) {
23234 ret = formatValue(ctx, ret, recurseTimes);
23235 }
23236 return ret;
23237 }
23238
23239 // Primitive types cannot have properties
23240 var primitive = formatPrimitive(ctx, value);
23241 if (primitive) {
23242 return primitive;
23243 }
23244
23245 // Look up the keys of the object.
23246 var keys = Object.keys(value);
23247 var visibleKeys = arrayToHash(keys);
23248
23249 if (ctx.showHidden) {
23250 keys = Object.getOwnPropertyNames(value);
23251 }
23252
23253 // IE doesn't make error fields non-enumerable
23254 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
23255 if (isError(value)
23256 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
23257 return formatError(value);
23258 }
23259
23260 // Some type of object without properties can be shortcutted.
23261 if (keys.length === 0) {
23262 if (isFunction(value)) {
23263 var name = value.name ? ': ' + value.name : '';
23264 return ctx.stylize('[Function' + name + ']', 'special');
23265 }
23266 if (isRegExp(value)) {
23267 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23268 }
23269 if (isDate(value)) {
23270 return ctx.stylize(Date.prototype.toString.call(value), 'date');
23271 }
23272 if (isError(value)) {
23273 return formatError(value);
23274 }
23275 }
23276
23277 var base = '', array = false, braces = ['{', '}'];
23278
23279 // Make Array say that they are Array
23280 if (isArray(value)) {
23281 array = true;
23282 braces = ['[', ']'];
23283 }
23284
23285 // Make functions say that they are functions
23286 if (isFunction(value)) {
23287 var n = value.name ? ': ' + value.name : '';
23288 base = ' [Function' + n + ']';
23289 }
23290
23291 // Make RegExps say that they are RegExps
23292 if (isRegExp(value)) {
23293 base = ' ' + RegExp.prototype.toString.call(value);
23294 }
23295
23296 // Make dates with properties first say the date
23297 if (isDate(value)) {
23298 base = ' ' + Date.prototype.toUTCString.call(value);
23299 }
23300
23301 // Make error with message first say the error
23302 if (isError(value)) {
23303 base = ' ' + formatError(value);
23304 }
23305
23306 if (keys.length === 0 && (!array || value.length == 0)) {
23307 return braces[0] + base + braces[1];
23308 }
23309
23310 if (recurseTimes < 0) {
23311 if (isRegExp(value)) {
23312 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23313 } else {
23314 return ctx.stylize('[Object]', 'special');
23315 }
23316 }
23317
23318 ctx.seen.push(value);
23319
23320 var output;
23321 if (array) {
23322 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
23323 } else {
23324 output = keys.map(function(key) {
23325 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
23326 });
23327 }
23328
23329 ctx.seen.pop();
23330
23331 return reduceToSingleString(output, base, braces);
23332 }
23333
23334
23335 function formatPrimitive(ctx, value) {
23336 if (isUndefined(value))
23337 return ctx.stylize('undefined', 'undefined');
23338 if (isString(value)) {
23339 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
23340 .replace(/'/g, "\\'")
23341 .replace(/\\"/g, '"') + '\'';
23342 return ctx.stylize(simple, 'string');
23343 }
23344 if (isNumber(value))
23345 return ctx.stylize('' + value, 'number');
23346 if (isBoolean(value))
23347 return ctx.stylize('' + value, 'boolean');
23348 // For some reason typeof null is "object", so special case here.
23349 if (isNull(value))
23350 return ctx.stylize('null', 'null');
23351 }
23352
23353
23354 function formatError(value) {
23355 return '[' + Error.prototype.toString.call(value) + ']';
23356 }
23357
23358
23359 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
23360 var output = [];
23361 for (var i = 0, l = value.length; i < l; ++i) {
23362 if (hasOwnProperty(value, String(i))) {
23363 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23364 String(i), true));
23365 } else {
23366 output.push('');
23367 }
23368 }
23369 keys.forEach(function(key) {
23370 if (!key.match(/^\d+$/)) {
23371 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23372 key, true));
23373 }
23374 });
23375 return output;
23376 }
23377
23378
23379 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
23380 var name, str, desc;
23381 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
23382 if (desc.get) {
23383 if (desc.set) {
23384 str = ctx.stylize('[Getter/Setter]', 'special');
23385 } else {
23386 str = ctx.stylize('[Getter]', 'special');
23387 }
23388 } else {
23389 if (desc.set) {
23390 str = ctx.stylize('[Setter]', 'special');
23391 }
23392 }
23393 if (!hasOwnProperty(visibleKeys, key)) {
23394 name = '[' + key + ']';
23395 }
23396 if (!str) {
23397 if (ctx.seen.indexOf(desc.value) < 0) {
23398 if (isNull(recurseTimes)) {
23399 str = formatValue(ctx, desc.value, null);
23400 } else {
23401 str = formatValue(ctx, desc.value, recurseTimes - 1);
23402 }
23403 if (str.indexOf('\n') > -1) {
23404 if (array) {
23405 str = str.split('\n').map(function(line) {
23406 return ' ' + line;
23407 }).join('\n').substr(2);
23408 } else {
23409 str = '\n' + str.split('\n').map(function(line) {
23410 return ' ' + line;
23411 }).join('\n');
23412 }
23413 }
23414 } else {
23415 str = ctx.stylize('[Circular]', 'special');
23416 }
23417 }
23418 if (isUndefined(name)) {
23419 if (array && key.match(/^\d+$/)) {
23420 return str;
23421 }
23422 name = JSON.stringify('' + key);
23423 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
23424 name = name.substr(1, name.length - 2);
23425 name = ctx.stylize(name, 'name');
23426 } else {
23427 name = name.replace(/'/g, "\\'")
23428 .replace(/\\"/g, '"')
23429 .replace(/(^"|"$)/g, "'");
23430 name = ctx.stylize(name, 'string');
23431 }
23432 }
23433
23434 return name + ': ' + str;
23435 }
23436
23437
23438 function reduceToSingleString(output, base, braces) {
23439 var numLinesEst = 0;
23440 var length = output.reduce(function(prev, cur) {
23441 numLinesEst++;
23442 if (cur.indexOf('\n') >= 0) numLinesEst++;
23443 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
23444 }, 0);
23445
23446 if (length > 60) {
23447 return braces[0] +
23448 (base === '' ? '' : base + '\n ') +
23449 ' ' +
23450 output.join(',\n ') +
23451 ' ' +
23452 braces[1];
23453 }
23454
23455 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
23456 }
23457
23458
23459 // NOTE: These type checking functions intentionally don't use `instanceof`
23460 // because it is fragile and can be easily faked with `Object.create()`.
23461 function isArray(ar) {
23462 return Array.isArray(ar);
23463 }
23464 exports.isArray = isArray;
23465
23466 function isBoolean(arg) {
23467 return typeof arg === 'boolean';
23468 }
23469 exports.isBoolean = isBoolean;
23470
23471 function isNull(arg) {
23472 return arg === null;
23473 }
23474 exports.isNull = isNull;
23475
23476 function isNullOrUndefined(arg) {
23477 return arg == null;
23478 }
23479 exports.isNullOrUndefined = isNullOrUndefined;
23480
23481 function isNumber(arg) {
23482 return typeof arg === 'number';
23483 }
23484 exports.isNumber = isNumber;
23485
23486 function isString(arg) {
23487 return typeof arg === 'string';
23488 }
23489 exports.isString = isString;
23490
23491 function isSymbol(arg) {
23492 return typeof arg === 'symbol';
23493 }
23494 exports.isSymbol = isSymbol;
23495
23496 function isUndefined(arg) {
23497 return arg === void 0;
23498 }
23499 exports.isUndefined = isUndefined;
23500
23501 function isRegExp(re) {
23502 return isObject(re) && objectToString(re) === '[object RegExp]';
23503 }
23504 exports.isRegExp = isRegExp;
23505
23506 function isObject(arg) {
23507 return typeof arg === 'object' && arg !== null;
23508 }
23509 exports.isObject = isObject;
23510
23511 function isDate(d) {
23512 return isObject(d) && objectToString(d) === '[object Date]';
23513 }
23514 exports.isDate = isDate;
23515
23516 function isError(e) {
23517 return isObject(e) &&
23518 (objectToString(e) === '[object Error]' || e instanceof Error);
23519 }
23520 exports.isError = isError;
23521
23522 function isFunction(arg) {
23523 return typeof arg === 'function';
23524 }
23525 exports.isFunction = isFunction;
23526
23527 function isPrimitive(arg) {
23528 return arg === null ||
23529 typeof arg === 'boolean' ||
23530 typeof arg === 'number' ||
23531 typeof arg === 'string' ||
23532 typeof arg === 'symbol' || // ES6 symbol
23533 typeof arg === 'undefined';
23534 }
23535 exports.isPrimitive = isPrimitive;
23536
23537 exports.isBuffer = require('./support/isBuffer');
23538
23539 function objectToString(o) {
23540 return Object.prototype.toString.call(o);
23541 }
23542
23543
23544 function pad(n) {
23545 return n < 10 ? '0' + n.toString(10) : n.toString(10);
23546 }
23547
23548
23549 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
23550 'Oct', 'Nov', 'Dec'];
23551
23552 // 26 Feb 16:19:34
23553 function timestamp() {
23554 var d = new Date();
23555 var time = [pad(d.getHours()),
23556 pad(d.getMinutes()),
23557 pad(d.getSeconds())].join(':');
23558 return [d.getDate(), months[d.getMonth()], time].join(' ');
23559 }
23560
23561
23562 // log is just a thin wrapper to console.log that prepends a timestamp
23563 exports.log = function() {
23564 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
23565 };
23566
23567
23568 /**
23569 * Inherit the prototype methods from one constructor into another.
23570 *
23571 * The Function.prototype.inherits from lang.js rewritten as a standalone
23572 * function (not on Function.prototype). NOTE: If this file is to be loaded
23573 * during bootstrapping this function needs to be rewritten using some native
23574 * functions as prototype setup using normal JavaScript does not work as
23575 * expected during bootstrapping (see mirror.js in r114903).
23576 *
23577 * @param {function} ctor Constructor function which needs to inherit the
23578 * prototype.
23579 * @param {function} superCtor Constructor function to inherit prototype from.
23580 */
23581 exports.inherits = require('inherits');
23582
23583 exports._extend = function(origin, add) {
23584 // Don't do anything if add isn't an object
23585 if (!add || !isObject(add)) return origin;
23586
23587 var keys = Object.keys(add);
23588 var i = keys.length;
23589 while (i--) {
23590 origin[keys[i]] = add[keys[i]];
23591 }
23592 return origin;
23593 };
23594
23595 function hasOwnProperty(obj, prop) {
23596 return Object.prototype.hasOwnProperty.call(obj, prop);
23597 }
23598
23599 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23600 },{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
23601 (function (Buffer){
23602 const createKeccakHash = require('keccak')
23603 const secp256k1 = require('secp256k1')
23604 const assert = require('assert')
23605 const rlp = require('rlp')
23606 const BN = require('bn.js')
23607 const createHash = require('create-hash')
23608 Object.assign(exports, require('ethjs-util'))
23609
23610 /**
23611 * the max integer that this VM can handle (a ```BN```)
23612 * @var {BN} MAX_INTEGER
23613 */
23614 exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
23615
23616 /**
23617 * 2^256 (a ```BN```)
23618 * @var {BN} TWO_POW256
23619 */
23620 exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
23621
23622 /**
23623 * SHA3-256 hash of null (a ```String```)
23624 * @var {String} SHA3_NULL_S
23625 */
23626 exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
23627
23628 /**
23629 * SHA3-256 hash of null (a ```Buffer```)
23630 * @var {Buffer} SHA3_NULL
23631 */
23632 exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
23633
23634 /**
23635 * SHA3-256 of an RLP of an empty array (a ```String```)
23636 * @var {String} SHA3_RLP_ARRAY_S
23637 */
23638 exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
23639
23640 /**
23641 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
23642 * @var {Buffer} SHA3_RLP_ARRAY
23643 */
23644 exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
23645
23646 /**
23647 * SHA3-256 hash of the RLP of null (a ```String```)
23648 * @var {String} SHA3_RLP_S
23649 */
23650 exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
23651
23652 /**
23653 * SHA3-256 hash of the RLP of null (a ```Buffer```)
23654 * @var {Buffer} SHA3_RLP
23655 */
23656 exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
23657
23658 /**
23659 * [`BN`](https://github.com/indutny/bn.js)
23660 * @var {Function}
23661 */
23662 exports.BN = BN
23663
23664 /**
23665 * [`rlp`](https://github.com/ethereumjs/rlp)
23666 * @var {Function}
23667 */
23668 exports.rlp = rlp
23669
23670 /**
23671 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
23672 * @var {Object}
23673 */
23674 exports.secp256k1 = secp256k1
23675
23676 /**
23677 * Returns a buffer filled with 0s
23678 * @method zeros
23679 * @param {Number} bytes the number of bytes the buffer should be
23680 * @return {Buffer}
23681 */
23682 exports.zeros = function (bytes) {
23683 return Buffer.allocUnsafe(bytes).fill(0)
23684 }
23685
23686 /**
23687 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23688 * Or it truncates the beginning if it exceeds.
23689 * @method lsetLength
23690 * @param {Buffer|Array} msg the value to pad
23691 * @param {Number} length the number of bytes the output should be
23692 * @param {Boolean} [right=false] whether to start padding form the left or right
23693 * @return {Buffer|Array}
23694 */
23695 exports.setLengthLeft = exports.setLength = function (msg, length, right) {
23696 var buf = exports.zeros(length)
23697 msg = exports.toBuffer(msg)
23698 if (right) {
23699 if (msg.length < length) {
23700 msg.copy(buf)
23701 return buf
23702 }
23703 return msg.slice(0, length)
23704 } else {
23705 if (msg.length < length) {
23706 msg.copy(buf, length - msg.length)
23707 return buf
23708 }
23709 return msg.slice(-length)
23710 }
23711 }
23712
23713 /**
23714 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
23715 * Or it truncates the beginning if it exceeds.
23716 * @param {Buffer|Array} msg the value to pad
23717 * @param {Number} length the number of bytes the output should be
23718 * @return {Buffer|Array}
23719 */
23720 exports.setLengthRight = function (msg, length) {
23721 return exports.setLength(msg, length, true)
23722 }
23723
23724 /**
23725 * Trims leading zeros from a `Buffer` or an `Array`
23726 * @param {Buffer|Array|String} a
23727 * @return {Buffer|Array|String}
23728 */
23729 exports.unpad = exports.stripZeros = function (a) {
23730 a = exports.stripHexPrefix(a)
23731 var first = a[0]
23732 while (a.length > 0 && first.toString() === '0') {
23733 a = a.slice(1)
23734 first = a[0]
23735 }
23736 return a
23737 }
23738 /**
23739 * 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.
23740 * @param {*} v the value
23741 */
23742 exports.toBuffer = function (v) {
23743 if (!Buffer.isBuffer(v)) {
23744 if (Array.isArray(v)) {
23745 v = Buffer.from(v)
23746 } else if (typeof v === 'string') {
23747 if (exports.isHexPrefixed(v)) {
23748 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
23749 } else {
23750 v = Buffer.from(v)
23751 }
23752 } else if (typeof v === 'number') {
23753 v = exports.intToBuffer(v)
23754 } else if (v === null || v === undefined) {
23755 v = Buffer.allocUnsafe(0)
23756 } else if (v.toArray) {
23757 // converts a BN to a Buffer
23758 v = Buffer.from(v.toArray())
23759 } else {
23760 throw new Error('invalid type')
23761 }
23762 }
23763 return v
23764 }
23765
23766 /**
23767 * Converts a `Buffer` to a `Number`
23768 * @param {Buffer} buf
23769 * @return {Number}
23770 * @throws If the input number exceeds 53 bits.
23771 */
23772 exports.bufferToInt = function (buf) {
23773 return new BN(exports.toBuffer(buf)).toNumber()
23774 }
23775
23776 /**
23777 * Converts a `Buffer` into a hex `String`
23778 * @param {Buffer} buf
23779 * @return {String}
23780 */
23781 exports.bufferToHex = function (buf) {
23782 buf = exports.toBuffer(buf)
23783 return '0x' + buf.toString('hex')
23784 }
23785
23786 /**
23787 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
23788 * @param {Buffer} num
23789 * @return {BN}
23790 */
23791 exports.fromSigned = function (num) {
23792 return new BN(num).fromTwos(256)
23793 }
23794
23795 /**
23796 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
23797 * @param {BN} num
23798 * @return {Buffer}
23799 */
23800 exports.toUnsigned = function (num) {
23801 return Buffer.from(num.toTwos(256).toArray())
23802 }
23803
23804 /**
23805 * Creates SHA-3 hash of the input
23806 * @param {Buffer|Array|String|Number} a the input data
23807 * @param {Number} [bits=256] the SHA width
23808 * @return {Buffer}
23809 */
23810 exports.sha3 = function (a, bits) {
23811 a = exports.toBuffer(a)
23812 if (!bits) bits = 256
23813
23814 return createKeccakHash('keccak' + bits).update(a).digest()
23815 }
23816
23817 /**
23818 * Creates SHA256 hash of the input
23819 * @param {Buffer|Array|String|Number} a the input data
23820 * @return {Buffer}
23821 */
23822 exports.sha256 = function (a) {
23823 a = exports.toBuffer(a)
23824 return createHash('sha256').update(a).digest()
23825 }
23826
23827 /**
23828 * Creates RIPEMD160 hash of the input
23829 * @param {Buffer|Array|String|Number} a the input data
23830 * @param {Boolean} padded whether it should be padded to 256 bits or not
23831 * @return {Buffer}
23832 */
23833 exports.ripemd160 = function (a, padded) {
23834 a = exports.toBuffer(a)
23835 var hash = createHash('rmd160').update(a).digest()
23836 if (padded === true) {
23837 return exports.setLength(hash, 32)
23838 } else {
23839 return hash
23840 }
23841 }
23842
23843 /**
23844 * Creates SHA-3 hash of the RLP encoded version of the input
23845 * @param {Buffer|Array|String|Number} a the input data
23846 * @return {Buffer}
23847 */
23848 exports.rlphash = function (a) {
23849 return exports.sha3(rlp.encode(a))
23850 }
23851
23852 /**
23853 * Checks if the private key satisfies the rules of the curve secp256k1.
23854 * @param {Buffer} privateKey
23855 * @return {Boolean}
23856 */
23857 exports.isValidPrivate = function (privateKey) {
23858 return secp256k1.privateKeyVerify(privateKey)
23859 }
23860
23861 /**
23862 * Checks if the public key satisfies the rules of the curve secp256k1
23863 * and the requirements of Ethereum.
23864 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
23865 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23866 * @return {Boolean}
23867 */
23868 exports.isValidPublic = function (publicKey, sanitize) {
23869 if (publicKey.length === 64) {
23870 // Convert to SEC1 for secp256k1
23871 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
23872 }
23873
23874 if (!sanitize) {
23875 return false
23876 }
23877
23878 return secp256k1.publicKeyVerify(publicKey)
23879 }
23880
23881 /**
23882 * Returns the ethereum address of a given public key.
23883 * Accepts "Ethereum public keys" and SEC1 encoded keys.
23884 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
23885 * @param {Boolean} [sanitize=false] Accept public keys in other formats
23886 * @return {Buffer}
23887 */
23888 exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
23889 pubKey = exports.toBuffer(pubKey)
23890 if (sanitize && (pubKey.length !== 64)) {
23891 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
23892 }
23893 assert(pubKey.length === 64)
23894 // Only take the lower 160bits of the hash
23895 return exports.sha3(pubKey).slice(-20)
23896 }
23897
23898 /**
23899 * Returns the ethereum public key of a given private key
23900 * @param {Buffer} privateKey A private key must be 256 bits wide
23901 * @return {Buffer}
23902 */
23903 var privateToPublic = exports.privateToPublic = function (privateKey) {
23904 privateKey = exports.toBuffer(privateKey)
23905 // skip the type flag and use the X, Y points
23906 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
23907 }
23908
23909 /**
23910 * Converts a public key to the Ethereum format.
23911 * @param {Buffer} publicKey
23912 * @return {Buffer}
23913 */
23914 exports.importPublic = function (publicKey) {
23915 publicKey = exports.toBuffer(publicKey)
23916 if (publicKey.length !== 64) {
23917 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
23918 }
23919 return publicKey
23920 }
23921
23922 /**
23923 * ECDSA sign
23924 * @param {Buffer} msgHash
23925 * @param {Buffer} privateKey
23926 * @return {Object}
23927 */
23928 exports.ecsign = function (msgHash, privateKey) {
23929 var sig = secp256k1.sign(msgHash, privateKey)
23930
23931 var ret = {}
23932 ret.r = sig.signature.slice(0, 32)
23933 ret.s = sig.signature.slice(32, 64)
23934 ret.v = sig.recovery + 27
23935 return ret
23936 }
23937
23938 /**
23939 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
23940 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
23941 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
23942 * used to produce the signature.
23943 * @param message
23944 * @returns {Buffer} hash
23945 */
23946 exports.hashPersonalMessage = function (message) {
23947 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
23948 return exports.sha3(Buffer.concat([prefix, message]))
23949 }
23950
23951 /**
23952 * ECDSA public key recovery from signature
23953 * @param {Buffer} msgHash
23954 * @param {Number} v
23955 * @param {Buffer} r
23956 * @param {Buffer} s
23957 * @return {Buffer} publicKey
23958 */
23959 exports.ecrecover = function (msgHash, v, r, s) {
23960 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
23961 var recovery = v - 27
23962 if (recovery !== 0 && recovery !== 1) {
23963 throw new Error('Invalid signature v value')
23964 }
23965 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
23966 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
23967 }
23968
23969 /**
23970 * Convert signature parameters into the format of `eth_sign` RPC method
23971 * @param {Number} v
23972 * @param {Buffer} r
23973 * @param {Buffer} s
23974 * @return {String} sig
23975 */
23976 exports.toRpcSig = function (v, r, s) {
23977 // NOTE: with potential introduction of chainId this might need to be updated
23978 if (v !== 27 && v !== 28) {
23979 throw new Error('Invalid recovery id')
23980 }
23981
23982 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
23983 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
23984 return exports.bufferToHex(Buffer.concat([
23985 exports.setLengthLeft(r, 32),
23986 exports.setLengthLeft(s, 32),
23987 exports.toBuffer(v - 27)
23988 ]))
23989 }
23990
23991 /**
23992 * Convert signature format of the `eth_sign` RPC method to signature parameters
23993 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
23994 * @param {String} sig
23995 * @return {Object}
23996 */
23997 exports.fromRpcSig = function (sig) {
23998 sig = exports.toBuffer(sig)
23999
24000 // NOTE: with potential introduction of chainId this might need to be updated
24001 if (sig.length !== 65) {
24002 throw new Error('Invalid signature length')
24003 }
24004
24005 var v = sig[64]
24006 // support both versions of `eth_sign` responses
24007 if (v < 27) {
24008 v += 27
24009 }
24010
24011 return {
24012 v: v,
24013 r: sig.slice(0, 32),
24014 s: sig.slice(32, 64)
24015 }
24016 }
24017
24018 /**
24019 * Returns the ethereum address of a given private key
24020 * @param {Buffer} privateKey A private key must be 256 bits wide
24021 * @return {Buffer}
24022 */
24023 exports.privateToAddress = function (privateKey) {
24024 return exports.publicToAddress(privateToPublic(privateKey))
24025 }
24026
24027 /**
24028 * Checks if the address is a valid. Accepts checksummed addresses too
24029 * @param {String} address
24030 * @return {Boolean}
24031 */
24032 exports.isValidAddress = function (address) {
24033 return /^0x[0-9a-fA-F]{40}$/i.test(address)
24034 }
24035
24036 /**
24037 * Returns a checksummed address
24038 * @param {String} address
24039 * @return {String}
24040 */
24041 exports.toChecksumAddress = function (address) {
24042 address = exports.stripHexPrefix(address).toLowerCase()
24043 var hash = exports.sha3(address).toString('hex')
24044 var ret = '0x'
24045
24046 for (var i = 0; i < address.length; i++) {
24047 if (parseInt(hash[i], 16) >= 8) {
24048 ret += address[i].toUpperCase()
24049 } else {
24050 ret += address[i]
24051 }
24052 }
24053
24054 return ret
24055 }
24056
24057 /**
24058 * Checks if the address is a valid checksummed address
24059 * @param {Buffer} address
24060 * @return {Boolean}
24061 */
24062 exports.isValidChecksumAddress = function (address) {
24063 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
24064 }
24065
24066 /**
24067 * Generates an address of a newly created contract
24068 * @param {Buffer} from the address which is creating this new address
24069 * @param {Buffer} nonce the nonce of the from account
24070 * @return {Buffer}
24071 */
24072 exports.generateAddress = function (from, nonce) {
24073 from = exports.toBuffer(from)
24074 nonce = new BN(nonce)
24075
24076 if (nonce.isZero()) {
24077 // in RLP we want to encode null in the case of zero nonce
24078 // read the RLP documentation for an answer if you dare
24079 nonce = null
24080 } else {
24081 nonce = Buffer.from(nonce.toArray())
24082 }
24083
24084 // Only take the lower 160bits of the hash
24085 return exports.rlphash([from, nonce]).slice(-20)
24086 }
24087
24088 /**
24089 * Returns true if the supplied address belongs to a precompiled account
24090 * @param {Buffer|String} address
24091 * @return {Boolean}
24092 */
24093 exports.isPrecompiled = function (address) {
24094 var a = exports.unpad(address)
24095 return a.length === 1 && a[0] > 0 && a[0] < 5
24096 }
24097
24098 /**
24099 * Adds "0x" to a given `String` if it does not already start with "0x"
24100 * @param {String} str
24101 * @return {String}
24102 */
24103 exports.addHexPrefix = function (str) {
24104 if (typeof str !== 'string') {
24105 return str
24106 }
24107
24108 return exports.isHexPrefixed(str) ? str : '0x' + str
24109 }
24110
24111 /**
24112 * Validate ECDSA signature
24113 * @method isValidSignature
24114 * @param {Buffer} v
24115 * @param {Buffer} r
24116 * @param {Buffer} s
24117 * @param {Boolean} [homestead=true]
24118 * @return {Boolean}
24119 */
24120
24121 exports.isValidSignature = function (v, r, s, homestead) {
24122 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24123 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24124
24125 if (r.length !== 32 || s.length !== 32) {
24126 return false
24127 }
24128
24129 if (v !== 27 && v !== 28) {
24130 return false
24131 }
24132
24133 r = new BN(r)
24134 s = new BN(s)
24135
24136 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24137 return false
24138 }
24139
24140 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24141 return false
24142 }
24143
24144 return true
24145 }
24146
24147 /**
24148 * Converts a `Buffer` or `Array` to JSON
24149 * @param {Buffer|Array} ba
24150 * @return {Array|String|null}
24151 */
24152 exports.baToJSON = function (ba) {
24153 if (Buffer.isBuffer(ba)) {
24154 return '0x' + ba.toString('hex')
24155 } else if (ba instanceof Array) {
24156 var array = []
24157 for (var i = 0; i < ba.length; i++) {
24158 array.push(exports.baToJSON(ba[i]))
24159 }
24160 return array
24161 }
24162 }
24163
24164 /**
24165 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24166 * @param {Object} self the `Object` to define properties on
24167 * @param {Array} fields an array fields to define. Fields can contain:
24168 * * `name` - the name of the properties
24169 * * `length` - the number of bytes the field can have
24170 * * `allowLess` - if the field can be less than the length
24171 * * `allowEmpty`
24172 * @param {*} data data to be validated against the definitions
24173 */
24174 exports.defineProperties = function (self, fields, data) {
24175 self.raw = []
24176 self._fields = []
24177
24178 // attach the `toJSON`
24179 self.toJSON = function (label) {
24180 if (label) {
24181 var obj = {}
24182 self._fields.forEach(function (field) {
24183 obj[field] = '0x' + self[field].toString('hex')
24184 })
24185 return obj
24186 }
24187 return exports.baToJSON(this.raw)
24188 }
24189
24190 self.serialize = function serialize () {
24191 return rlp.encode(self.raw)
24192 }
24193
24194 fields.forEach(function (field, i) {
24195 self._fields.push(field.name)
24196 function getter () {
24197 return self.raw[i]
24198 }
24199 function setter (v) {
24200 v = exports.toBuffer(v)
24201
24202 if (v.toString('hex') === '00' && !field.allowZero) {
24203 v = Buffer.allocUnsafe(0)
24204 }
24205
24206 if (field.allowLess && field.length) {
24207 v = exports.stripZeros(v)
24208 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24209 } else if (!(field.allowZero && v.length === 0) && field.length) {
24210 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
24211 }
24212
24213 self.raw[i] = v
24214 }
24215
24216 Object.defineProperty(self, field.name, {
24217 enumerable: true,
24218 configurable: true,
24219 get: getter,
24220 set: setter
24221 })
24222
24223 if (field.default) {
24224 self[field.name] = field.default
24225 }
24226
24227 // attach alias
24228 if (field.alias) {
24229 Object.defineProperty(self, field.alias, {
24230 enumerable: false,
24231 configurable: true,
24232 set: setter,
24233 get: getter
24234 })
24235 }
24236 })
24237
24238 // if the constuctor is passed data
24239 if (data) {
24240 if (typeof data === 'string') {
24241 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
24242 }
24243
24244 if (Buffer.isBuffer(data)) {
24245 data = rlp.decode(data)
24246 }
24247
24248 if (Array.isArray(data)) {
24249 if (data.length > self._fields.length) {
24250 throw (new Error('wrong number of fields in data'))
24251 }
24252
24253 // make sure all the items are buffers
24254 data.forEach(function (d, i) {
24255 self[self._fields[i]] = exports.toBuffer(d)
24256 })
24257 } else if (typeof data === 'object') {
24258 const keys = Object.keys(data)
24259 fields.forEach(function (field) {
24260 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
24261 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
24262 })
24263 } else {
24264 throw new Error('invalid data')
24265 }
24266 }
24267 }
24268
24269 }).call(this,require("buffer").Buffer)
24270 },{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
24271 (function (Buffer){
24272 // Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
24273 // Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24274 // NOTE: SIGHASH byte ignored AND restricted, truncate before use
24275
24276 function check (buffer) {
24277 if (buffer.length < 8) return false
24278 if (buffer.length > 72) return false
24279 if (buffer[0] !== 0x30) return false
24280 if (buffer[1] !== buffer.length - 2) return false
24281 if (buffer[2] !== 0x02) return false
24282
24283 var lenR = buffer[3]
24284 if (lenR === 0) return false
24285 if (5 + lenR >= buffer.length) return false
24286 if (buffer[4 + lenR] !== 0x02) return false
24287
24288 var lenS = buffer[5 + lenR]
24289 if (lenS === 0) return false
24290 if ((6 + lenR + lenS) !== buffer.length) return false
24291
24292 if (buffer[4] & 0x80) return false
24293 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
24294
24295 if (buffer[lenR + 6] & 0x80) return false
24296 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
24297 return true
24298 }
24299
24300 function decode (buffer) {
24301 if (buffer.length < 8) throw new Error('DER sequence length is too short')
24302 if (buffer.length > 72) throw new Error('DER sequence length is too long')
24303 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
24304 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
24305 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
24306
24307 var lenR = buffer[3]
24308 if (lenR === 0) throw new Error('R length is zero')
24309 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
24310 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
24311
24312 var lenS = buffer[5 + lenR]
24313 if (lenS === 0) throw new Error('S length is zero')
24314 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
24315
24316 if (buffer[4] & 0x80) throw new Error('R value is negative')
24317 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
24318
24319 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
24320 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
24321
24322 // non-BIP66 - extract R, S values
24323 return {
24324 r: buffer.slice(4, 4 + lenR),
24325 s: buffer.slice(6 + lenR)
24326 }
24327 }
24328
24329 /*
24330 * Expects r and s to be positive DER integers.
24331 *
24332 * The DER format uses the most significant bit as a sign bit (& 0x80).
24333 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
24334 *
24335 * Examples:
24336 *
24337 * 0 => 0x00
24338 * 1 => 0x01
24339 * -1 => 0xff
24340 * 127 => 0x7f
24341 * -127 => 0x81
24342 * 128 => 0x0080
24343 * -128 => 0x80
24344 * 255 => 0x00ff
24345 * -255 => 0xff01
24346 * 16300 => 0x3fac
24347 * -16300 => 0xc054
24348 * 62300 => 0x00f35c
24349 * -62300 => 0xff0ca4
24350 */
24351 function encode (r, s) {
24352 var lenR = r.length
24353 var lenS = s.length
24354 if (lenR === 0) throw new Error('R length is zero')
24355 if (lenS === 0) throw new Error('S length is zero')
24356 if (lenR > 33) throw new Error('R length is too long')
24357 if (lenS > 33) throw new Error('S length is too long')
24358 if (r[0] & 0x80) throw new Error('R value is negative')
24359 if (s[0] & 0x80) throw new Error('S value is negative')
24360 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
24361 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
24362
24363 var signature = new Buffer(6 + lenR + lenS)
24364
24365 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24366 signature[0] = 0x30
24367 signature[1] = signature.length - 2
24368 signature[2] = 0x02
24369 signature[3] = r.length
24370 r.copy(signature, 4)
24371 signature[4 + lenR] = 0x02
24372 signature[5 + lenR] = s.length
24373 s.copy(signature, 6 + lenR)
24374
24375 return signature
24376 }
24377
24378 module.exports = {
24379 check: check,
24380 decode: decode,
24381 encode: encode
24382 }
24383
24384 }).call(this,require("buffer").Buffer)
24385 },{"buffer":5}],33:[function(require,module,exports){
24386 (function (module, exports) {
24387 'use strict';
24388
24389 // Utils
24390 function assert (val, msg) {
24391 if (!val) throw new Error(msg || 'Assertion failed');
24392 }
24393
24394 // Could use `inherits` module, but don't want to move from single file
24395 // architecture yet.
24396 function inherits (ctor, superCtor) {
24397 ctor.super_ = superCtor;
24398 var TempCtor = function () {};
24399 TempCtor.prototype = superCtor.prototype;
24400 ctor.prototype = new TempCtor();
24401 ctor.prototype.constructor = ctor;
24402 }
24403
24404 // BN
24405
24406 function BN (number, base, endian) {
24407 if (BN.isBN(number)) {
24408 return number;
24409 }
24410
24411 this.negative = 0;
24412 this.words = null;
24413 this.length = 0;
24414
24415 // Reduction context
24416 this.red = null;
24417
24418 if (number !== null) {
24419 if (base === 'le' || base === 'be') {
24420 endian = base;
24421 base = 10;
24422 }
24423
24424 this._init(number || 0, base || 10, endian || 'be');
24425 }
24426 }
24427 if (typeof module === 'object') {
24428 module.exports = BN;
24429 } else {
24430 exports.BN = BN;
24431 }
24432
24433 BN.BN = BN;
24434 BN.wordSize = 26;
24435
24436 var Buffer;
24437 try {
24438 Buffer = require('buf' + 'fer').Buffer;
24439 } catch (e) {
24440 }
24441
24442 BN.isBN = function isBN (num) {
24443 if (num instanceof BN) {
24444 return true;
24445 }
24446
24447 return num !== null && typeof num === 'object' &&
24448 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
24449 };
24450
24451 BN.max = function max (left, right) {
24452 if (left.cmp(right) > 0) return left;
24453 return right;
24454 };
24455
24456 BN.min = function min (left, right) {
24457 if (left.cmp(right) < 0) return left;
24458 return right;
24459 };
24460
24461 BN.prototype._init = function init (number, base, endian) {
24462 if (typeof number === 'number') {
24463 return this._initNumber(number, base, endian);
24464 }
24465
24466 if (typeof number === 'object') {
24467 return this._initArray(number, base, endian);
24468 }
24469
24470 if (base === 'hex') {
24471 base = 16;
24472 }
24473 assert(base === (base | 0) && base >= 2 && base <= 36);
24474
24475 number = number.toString().replace(/\s+/g, '');
24476 var start = 0;
24477 if (number[0] === '-') {
24478 start++;
24479 }
24480
24481 if (base === 16) {
24482 this._parseHex(number, start);
24483 } else {
24484 this._parseBase(number, base, start);
24485 }
24486
24487 if (number[0] === '-') {
24488 this.negative = 1;
24489 }
24490
24491 this.strip();
24492
24493 if (endian !== 'le') return;
24494
24495 this._initArray(this.toArray(), base, endian);
24496 };
24497
24498 BN.prototype._initNumber = function _initNumber (number, base, endian) {
24499 if (number < 0) {
24500 this.negative = 1;
24501 number = -number;
24502 }
24503 if (number < 0x4000000) {
24504 this.words = [ number & 0x3ffffff ];
24505 this.length = 1;
24506 } else if (number < 0x10000000000000) {
24507 this.words = [
24508 number & 0x3ffffff,
24509 (number / 0x4000000) & 0x3ffffff
24510 ];
24511 this.length = 2;
24512 } else {
24513 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
24514 this.words = [
24515 number & 0x3ffffff,
24516 (number / 0x4000000) & 0x3ffffff,
24517 1
24518 ];
24519 this.length = 3;
24520 }
24521
24522 if (endian !== 'le') return;
24523
24524 // Reverse the bytes
24525 this._initArray(this.toArray(), base, endian);
24526 };
24527
24528 BN.prototype._initArray = function _initArray (number, base, endian) {
24529 // Perhaps a Uint8Array
24530 assert(typeof number.length === 'number');
24531 if (number.length <= 0) {
24532 this.words = [ 0 ];
24533 this.length = 1;
24534 return this;
24535 }
24536
24537 this.length = Math.ceil(number.length / 3);
24538 this.words = new Array(this.length);
24539 for (var i = 0; i < this.length; i++) {
24540 this.words[i] = 0;
24541 }
24542
24543 var j, w;
24544 var off = 0;
24545 if (endian === 'be') {
24546 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
24547 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
24548 this.words[j] |= (w << off) & 0x3ffffff;
24549 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24550 off += 24;
24551 if (off >= 26) {
24552 off -= 26;
24553 j++;
24554 }
24555 }
24556 } else if (endian === 'le') {
24557 for (i = 0, j = 0; i < number.length; i += 3) {
24558 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
24559 this.words[j] |= (w << off) & 0x3ffffff;
24560 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
24561 off += 24;
24562 if (off >= 26) {
24563 off -= 26;
24564 j++;
24565 }
24566 }
24567 }
24568 return this.strip();
24569 };
24570
24571 function parseHex (str, start, end) {
24572 var r = 0;
24573 var len = Math.min(str.length, end);
24574 for (var i = start; i < len; i++) {
24575 var c = str.charCodeAt(i) - 48;
24576
24577 r <<= 4;
24578
24579 // 'a' - 'f'
24580 if (c >= 49 && c <= 54) {
24581 r |= c - 49 + 0xa;
24582
24583 // 'A' - 'F'
24584 } else if (c >= 17 && c <= 22) {
24585 r |= c - 17 + 0xa;
24586
24587 // '0' - '9'
24588 } else {
24589 r |= c & 0xf;
24590 }
24591 }
24592 return r;
24593 }
24594
24595 BN.prototype._parseHex = function _parseHex (number, start) {
24596 // Create possibly bigger array to ensure that it fits the number
24597 this.length = Math.ceil((number.length - start) / 6);
24598 this.words = new Array(this.length);
24599 for (var i = 0; i < this.length; i++) {
24600 this.words[i] = 0;
24601 }
24602
24603 var j, w;
24604 // Scan 24-bit chunks and add them to the number
24605 var off = 0;
24606 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
24607 w = parseHex(number, i, i + 6);
24608 this.words[j] |= (w << off) & 0x3ffffff;
24609 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
24610 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24611 off += 24;
24612 if (off >= 26) {
24613 off -= 26;
24614 j++;
24615 }
24616 }
24617 if (i + 6 !== start) {
24618 w = parseHex(number, start, i + 6);
24619 this.words[j] |= (w << off) & 0x3ffffff;
24620 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
24621 }
24622 this.strip();
24623 };
24624
24625 function parseBase (str, start, end, mul) {
24626 var r = 0;
24627 var len = Math.min(str.length, end);
24628 for (var i = start; i < len; i++) {
24629 var c = str.charCodeAt(i) - 48;
24630
24631 r *= mul;
24632
24633 // 'a'
24634 if (c >= 49) {
24635 r += c - 49 + 0xa;
24636
24637 // 'A'
24638 } else if (c >= 17) {
24639 r += c - 17 + 0xa;
24640
24641 // '0' - '9'
24642 } else {
24643 r += c;
24644 }
24645 }
24646 return r;
24647 }
24648
24649 BN.prototype._parseBase = function _parseBase (number, base, start) {
24650 // Initialize as zero
24651 this.words = [ 0 ];
24652 this.length = 1;
24653
24654 // Find length of limb in base
24655 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
24656 limbLen++;
24657 }
24658 limbLen--;
24659 limbPow = (limbPow / base) | 0;
24660
24661 var total = number.length - start;
24662 var mod = total % limbLen;
24663 var end = Math.min(total, total - mod) + start;
24664
24665 var word = 0;
24666 for (var i = start; i < end; i += limbLen) {
24667 word = parseBase(number, i, i + limbLen, base);
24668
24669 this.imuln(limbPow);
24670 if (this.words[0] + word < 0x4000000) {
24671 this.words[0] += word;
24672 } else {
24673 this._iaddn(word);
24674 }
24675 }
24676
24677 if (mod !== 0) {
24678 var pow = 1;
24679 word = parseBase(number, i, number.length, base);
24680
24681 for (i = 0; i < mod; i++) {
24682 pow *= base;
24683 }
24684
24685 this.imuln(pow);
24686 if (this.words[0] + word < 0x4000000) {
24687 this.words[0] += word;
24688 } else {
24689 this._iaddn(word);
24690 }
24691 }
24692 };
24693
24694 BN.prototype.copy = function copy (dest) {
24695 dest.words = new Array(this.length);
24696 for (var i = 0; i < this.length; i++) {
24697 dest.words[i] = this.words[i];
24698 }
24699 dest.length = this.length;
24700 dest.negative = this.negative;
24701 dest.red = this.red;
24702 };
24703
24704 BN.prototype.clone = function clone () {
24705 var r = new BN(null);
24706 this.copy(r);
24707 return r;
24708 };
24709
24710 BN.prototype._expand = function _expand (size) {
24711 while (this.length < size) {
24712 this.words[this.length++] = 0;
24713 }
24714 return this;
24715 };
24716
24717 // Remove leading `0` from `this`
24718 BN.prototype.strip = function strip () {
24719 while (this.length > 1 && this.words[this.length - 1] === 0) {
24720 this.length--;
24721 }
24722 return this._normSign();
24723 };
24724
24725 BN.prototype._normSign = function _normSign () {
24726 // -0 = 0
24727 if (this.length === 1 && this.words[0] === 0) {
24728 this.negative = 0;
24729 }
24730 return this;
24731 };
24732
24733 BN.prototype.inspect = function inspect () {
24734 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
24735 };
24736
24737 /*
24738
24739 var zeros = [];
24740 var groupSizes = [];
24741 var groupBases = [];
24742
24743 var s = '';
24744 var i = -1;
24745 while (++i < BN.wordSize) {
24746 zeros[i] = s;
24747 s += '0';
24748 }
24749 groupSizes[0] = 0;
24750 groupSizes[1] = 0;
24751 groupBases[0] = 0;
24752 groupBases[1] = 0;
24753 var base = 2 - 1;
24754 while (++base < 36 + 1) {
24755 var groupSize = 0;
24756 var groupBase = 1;
24757 while (groupBase < (1 << BN.wordSize) / base) {
24758 groupBase *= base;
24759 groupSize += 1;
24760 }
24761 groupSizes[base] = groupSize;
24762 groupBases[base] = groupBase;
24763 }
24764
24765 */
24766
24767 var zeros = [
24768 '',
24769 '0',
24770 '00',
24771 '000',
24772 '0000',
24773 '00000',
24774 '000000',
24775 '0000000',
24776 '00000000',
24777 '000000000',
24778 '0000000000',
24779 '00000000000',
24780 '000000000000',
24781 '0000000000000',
24782 '00000000000000',
24783 '000000000000000',
24784 '0000000000000000',
24785 '00000000000000000',
24786 '000000000000000000',
24787 '0000000000000000000',
24788 '00000000000000000000',
24789 '000000000000000000000',
24790 '0000000000000000000000',
24791 '00000000000000000000000',
24792 '000000000000000000000000',
24793 '0000000000000000000000000'
24794 ];
24795
24796 var groupSizes = [
24797 0, 0,
24798 25, 16, 12, 11, 10, 9, 8,
24799 8, 7, 7, 7, 7, 6, 6,
24800 6, 6, 6, 6, 6, 5, 5,
24801 5, 5, 5, 5, 5, 5, 5,
24802 5, 5, 5, 5, 5, 5, 5
24803 ];
24804
24805 var groupBases = [
24806 0, 0,
24807 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
24808 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
24809 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
24810 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
24811 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
24812 ];
24813
24814 BN.prototype.toString = function toString (base, padding) {
24815 base = base || 10;
24816 padding = padding | 0 || 1;
24817
24818 var out;
24819 if (base === 16 || base === 'hex') {
24820 out = '';
24821 var off = 0;
24822 var carry = 0;
24823 for (var i = 0; i < this.length; i++) {
24824 var w = this.words[i];
24825 var word = (((w << off) | carry) & 0xffffff).toString(16);
24826 carry = (w >>> (24 - off)) & 0xffffff;
24827 if (carry !== 0 || i !== this.length - 1) {
24828 out = zeros[6 - word.length] + word + out;
24829 } else {
24830 out = word + out;
24831 }
24832 off += 2;
24833 if (off >= 26) {
24834 off -= 26;
24835 i--;
24836 }
24837 }
24838 if (carry !== 0) {
24839 out = carry.toString(16) + out;
24840 }
24841 while (out.length % padding !== 0) {
24842 out = '0' + out;
24843 }
24844 if (this.negative !== 0) {
24845 out = '-' + out;
24846 }
24847 return out;
24848 }
24849
24850 if (base === (base | 0) && base >= 2 && base <= 36) {
24851 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
24852 var groupSize = groupSizes[base];
24853 // var groupBase = Math.pow(base, groupSize);
24854 var groupBase = groupBases[base];
24855 out = '';
24856 var c = this.clone();
24857 c.negative = 0;
24858 while (!c.isZero()) {
24859 var r = c.modn(groupBase).toString(base);
24860 c = c.idivn(groupBase);
24861
24862 if (!c.isZero()) {
24863 out = zeros[groupSize - r.length] + r + out;
24864 } else {
24865 out = r + out;
24866 }
24867 }
24868 if (this.isZero()) {
24869 out = '0' + out;
24870 }
24871 while (out.length % padding !== 0) {
24872 out = '0' + out;
24873 }
24874 if (this.negative !== 0) {
24875 out = '-' + out;
24876 }
24877 return out;
24878 }
24879
24880 assert(false, 'Base should be between 2 and 36');
24881 };
24882
24883 BN.prototype.toNumber = function toNumber () {
24884 var ret = this.words[0];
24885 if (this.length === 2) {
24886 ret += this.words[1] * 0x4000000;
24887 } else if (this.length === 3 && this.words[2] === 0x01) {
24888 // NOTE: at this stage it is known that the top bit is set
24889 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
24890 } else if (this.length > 2) {
24891 assert(false, 'Number can only safely store up to 53 bits');
24892 }
24893 return (this.negative !== 0) ? -ret : ret;
24894 };
24895
24896 BN.prototype.toJSON = function toJSON () {
24897 return this.toString(16);
24898 };
24899
24900 BN.prototype.toBuffer = function toBuffer (endian, length) {
24901 assert(typeof Buffer !== 'undefined');
24902 return this.toArrayLike(Buffer, endian, length);
24903 };
24904
24905 BN.prototype.toArray = function toArray (endian, length) {
24906 return this.toArrayLike(Array, endian, length);
24907 };
24908
24909 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
24910 var byteLength = this.byteLength();
24911 var reqLength = length || Math.max(1, byteLength);
24912 assert(byteLength <= reqLength, 'byte array longer than desired length');
24913 assert(reqLength > 0, 'Requested array length <= 0');
24914
24915 this.strip();
24916 var littleEndian = endian === 'le';
24917 var res = new ArrayType(reqLength);
24918
24919 var b, i;
24920 var q = this.clone();
24921 if (!littleEndian) {
24922 // Assume big-endian
24923 for (i = 0; i < reqLength - byteLength; i++) {
24924 res[i] = 0;
24925 }
24926
24927 for (i = 0; !q.isZero(); i++) {
24928 b = q.andln(0xff);
24929 q.iushrn(8);
24930
24931 res[reqLength - i - 1] = b;
24932 }
24933 } else {
24934 for (i = 0; !q.isZero(); i++) {
24935 b = q.andln(0xff);
24936 q.iushrn(8);
24937
24938 res[i] = b;
24939 }
24940
24941 for (; i < reqLength; i++) {
24942 res[i] = 0;
24943 }
24944 }
24945
24946 return res;
24947 };
24948
24949 if (Math.clz32) {
24950 BN.prototype._countBits = function _countBits (w) {
24951 return 32 - Math.clz32(w);
24952 };
24953 } else {
24954 BN.prototype._countBits = function _countBits (w) {
24955 var t = w;
24956 var r = 0;
24957 if (t >= 0x1000) {
24958 r += 13;
24959 t >>>= 13;
24960 }
24961 if (t >= 0x40) {
24962 r += 7;
24963 t >>>= 7;
24964 }
24965 if (t >= 0x8) {
24966 r += 4;
24967 t >>>= 4;
24968 }
24969 if (t >= 0x02) {
24970 r += 2;
24971 t >>>= 2;
24972 }
24973 return r + t;
24974 };
24975 }
24976
24977 BN.prototype._zeroBits = function _zeroBits (w) {
24978 // Short-cut
24979 if (w === 0) return 26;
24980
24981 var t = w;
24982 var r = 0;
24983 if ((t & 0x1fff) === 0) {
24984 r += 13;
24985 t >>>= 13;
24986 }
24987 if ((t & 0x7f) === 0) {
24988 r += 7;
24989 t >>>= 7;
24990 }
24991 if ((t & 0xf) === 0) {
24992 r += 4;
24993 t >>>= 4;
24994 }
24995 if ((t & 0x3) === 0) {
24996 r += 2;
24997 t >>>= 2;
24998 }
24999 if ((t & 0x1) === 0) {
25000 r++;
25001 }
25002 return r;
25003 };
25004
25005 // Return number of used bits in a BN
25006 BN.prototype.bitLength = function bitLength () {
25007 var w = this.words[this.length - 1];
25008 var hi = this._countBits(w);
25009 return (this.length - 1) * 26 + hi;
25010 };
25011
25012 function toBitArray (num) {
25013 var w = new Array(num.bitLength());
25014
25015 for (var bit = 0; bit < w.length; bit++) {
25016 var off = (bit / 26) | 0;
25017 var wbit = bit % 26;
25018
25019 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
25020 }
25021
25022 return w;
25023 }
25024
25025 // Number of trailing zero bits
25026 BN.prototype.zeroBits = function zeroBits () {
25027 if (this.isZero()) return 0;
25028
25029 var r = 0;
25030 for (var i = 0; i < this.length; i++) {
25031 var b = this._zeroBits(this.words[i]);
25032 r += b;
25033 if (b !== 26) break;
25034 }
25035 return r;
25036 };
25037
25038 BN.prototype.byteLength = function byteLength () {
25039 return Math.ceil(this.bitLength() / 8);
25040 };
25041
25042 BN.prototype.toTwos = function toTwos (width) {
25043 if (this.negative !== 0) {
25044 return this.abs().inotn(width).iaddn(1);
25045 }
25046 return this.clone();
25047 };
25048
25049 BN.prototype.fromTwos = function fromTwos (width) {
25050 if (this.testn(width - 1)) {
25051 return this.notn(width).iaddn(1).ineg();
25052 }
25053 return this.clone();
25054 };
25055
25056 BN.prototype.isNeg = function isNeg () {
25057 return this.negative !== 0;
25058 };
25059
25060 // Return negative clone of `this`
25061 BN.prototype.neg = function neg () {
25062 return this.clone().ineg();
25063 };
25064
25065 BN.prototype.ineg = function ineg () {
25066 if (!this.isZero()) {
25067 this.negative ^= 1;
25068 }
25069
25070 return this;
25071 };
25072
25073 // Or `num` with `this` in-place
25074 BN.prototype.iuor = function iuor (num) {
25075 while (this.length < num.length) {
25076 this.words[this.length++] = 0;
25077 }
25078
25079 for (var i = 0; i < num.length; i++) {
25080 this.words[i] = this.words[i] | num.words[i];
25081 }
25082
25083 return this.strip();
25084 };
25085
25086 BN.prototype.ior = function ior (num) {
25087 assert((this.negative | num.negative) === 0);
25088 return this.iuor(num);
25089 };
25090
25091 // Or `num` with `this`
25092 BN.prototype.or = function or (num) {
25093 if (this.length > num.length) return this.clone().ior(num);
25094 return num.clone().ior(this);
25095 };
25096
25097 BN.prototype.uor = function uor (num) {
25098 if (this.length > num.length) return this.clone().iuor(num);
25099 return num.clone().iuor(this);
25100 };
25101
25102 // And `num` with `this` in-place
25103 BN.prototype.iuand = function iuand (num) {
25104 // b = min-length(num, this)
25105 var b;
25106 if (this.length > num.length) {
25107 b = num;
25108 } else {
25109 b = this;
25110 }
25111
25112 for (var i = 0; i < b.length; i++) {
25113 this.words[i] = this.words[i] & num.words[i];
25114 }
25115
25116 this.length = b.length;
25117
25118 return this.strip();
25119 };
25120
25121 BN.prototype.iand = function iand (num) {
25122 assert((this.negative | num.negative) === 0);
25123 return this.iuand(num);
25124 };
25125
25126 // And `num` with `this`
25127 BN.prototype.and = function and (num) {
25128 if (this.length > num.length) return this.clone().iand(num);
25129 return num.clone().iand(this);
25130 };
25131
25132 BN.prototype.uand = function uand (num) {
25133 if (this.length > num.length) return this.clone().iuand(num);
25134 return num.clone().iuand(this);
25135 };
25136
25137 // Xor `num` with `this` in-place
25138 BN.prototype.iuxor = function iuxor (num) {
25139 // a.length > b.length
25140 var a;
25141 var b;
25142 if (this.length > num.length) {
25143 a = this;
25144 b = num;
25145 } else {
25146 a = num;
25147 b = this;
25148 }
25149
25150 for (var i = 0; i < b.length; i++) {
25151 this.words[i] = a.words[i] ^ b.words[i];
25152 }
25153
25154 if (this !== a) {
25155 for (; i < a.length; i++) {
25156 this.words[i] = a.words[i];
25157 }
25158 }
25159
25160 this.length = a.length;
25161
25162 return this.strip();
25163 };
25164
25165 BN.prototype.ixor = function ixor (num) {
25166 assert((this.negative | num.negative) === 0);
25167 return this.iuxor(num);
25168 };
25169
25170 // Xor `num` with `this`
25171 BN.prototype.xor = function xor (num) {
25172 if (this.length > num.length) return this.clone().ixor(num);
25173 return num.clone().ixor(this);
25174 };
25175
25176 BN.prototype.uxor = function uxor (num) {
25177 if (this.length > num.length) return this.clone().iuxor(num);
25178 return num.clone().iuxor(this);
25179 };
25180
25181 // Not ``this`` with ``width`` bitwidth
25182 BN.prototype.inotn = function inotn (width) {
25183 assert(typeof width === 'number' && width >= 0);
25184
25185 var bytesNeeded = Math.ceil(width / 26) | 0;
25186 var bitsLeft = width % 26;
25187
25188 // Extend the buffer with leading zeroes
25189 this._expand(bytesNeeded);
25190
25191 if (bitsLeft > 0) {
25192 bytesNeeded--;
25193 }
25194
25195 // Handle complete words
25196 for (var i = 0; i < bytesNeeded; i++) {
25197 this.words[i] = ~this.words[i] & 0x3ffffff;
25198 }
25199
25200 // Handle the residue
25201 if (bitsLeft > 0) {
25202 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
25203 }
25204
25205 // And remove leading zeroes
25206 return this.strip();
25207 };
25208
25209 BN.prototype.notn = function notn (width) {
25210 return this.clone().inotn(width);
25211 };
25212
25213 // Set `bit` of `this`
25214 BN.prototype.setn = function setn (bit, val) {
25215 assert(typeof bit === 'number' && bit >= 0);
25216
25217 var off = (bit / 26) | 0;
25218 var wbit = bit % 26;
25219
25220 this._expand(off + 1);
25221
25222 if (val) {
25223 this.words[off] = this.words[off] | (1 << wbit);
25224 } else {
25225 this.words[off] = this.words[off] & ~(1 << wbit);
25226 }
25227
25228 return this.strip();
25229 };
25230
25231 // Add `num` to `this` in-place
25232 BN.prototype.iadd = function iadd (num) {
25233 var r;
25234
25235 // negative + positive
25236 if (this.negative !== 0 && num.negative === 0) {
25237 this.negative = 0;
25238 r = this.isub(num);
25239 this.negative ^= 1;
25240 return this._normSign();
25241
25242 // positive + negative
25243 } else if (this.negative === 0 && num.negative !== 0) {
25244 num.negative = 0;
25245 r = this.isub(num);
25246 num.negative = 1;
25247 return r._normSign();
25248 }
25249
25250 // a.length > b.length
25251 var a, b;
25252 if (this.length > num.length) {
25253 a = this;
25254 b = num;
25255 } else {
25256 a = num;
25257 b = this;
25258 }
25259
25260 var carry = 0;
25261 for (var i = 0; i < b.length; i++) {
25262 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
25263 this.words[i] = r & 0x3ffffff;
25264 carry = r >>> 26;
25265 }
25266 for (; carry !== 0 && i < a.length; i++) {
25267 r = (a.words[i] | 0) + carry;
25268 this.words[i] = r & 0x3ffffff;
25269 carry = r >>> 26;
25270 }
25271
25272 this.length = a.length;
25273 if (carry !== 0) {
25274 this.words[this.length] = carry;
25275 this.length++;
25276 // Copy the rest of the words
25277 } else if (a !== this) {
25278 for (; i < a.length; i++) {
25279 this.words[i] = a.words[i];
25280 }
25281 }
25282
25283 return this;
25284 };
25285
25286 // Add `num` to `this`
25287 BN.prototype.add = function add (num) {
25288 var res;
25289 if (num.negative !== 0 && this.negative === 0) {
25290 num.negative = 0;
25291 res = this.sub(num);
25292 num.negative ^= 1;
25293 return res;
25294 } else if (num.negative === 0 && this.negative !== 0) {
25295 this.negative = 0;
25296 res = num.sub(this);
25297 this.negative = 1;
25298 return res;
25299 }
25300
25301 if (this.length > num.length) return this.clone().iadd(num);
25302
25303 return num.clone().iadd(this);
25304 };
25305
25306 // Subtract `num` from `this` in-place
25307 BN.prototype.isub = function isub (num) {
25308 // this - (-num) = this + num
25309 if (num.negative !== 0) {
25310 num.negative = 0;
25311 var r = this.iadd(num);
25312 num.negative = 1;
25313 return r._normSign();
25314
25315 // -this - num = -(this + num)
25316 } else if (this.negative !== 0) {
25317 this.negative = 0;
25318 this.iadd(num);
25319 this.negative = 1;
25320 return this._normSign();
25321 }
25322
25323 // At this point both numbers are positive
25324 var cmp = this.cmp(num);
25325
25326 // Optimization - zeroify
25327 if (cmp === 0) {
25328 this.negative = 0;
25329 this.length = 1;
25330 this.words[0] = 0;
25331 return this;
25332 }
25333
25334 // a > b
25335 var a, b;
25336 if (cmp > 0) {
25337 a = this;
25338 b = num;
25339 } else {
25340 a = num;
25341 b = this;
25342 }
25343
25344 var carry = 0;
25345 for (var i = 0; i < b.length; i++) {
25346 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
25347 carry = r >> 26;
25348 this.words[i] = r & 0x3ffffff;
25349 }
25350 for (; carry !== 0 && i < a.length; i++) {
25351 r = (a.words[i] | 0) + carry;
25352 carry = r >> 26;
25353 this.words[i] = r & 0x3ffffff;
25354 }
25355
25356 // Copy rest of the words
25357 if (carry === 0 && i < a.length && a !== this) {
25358 for (; i < a.length; i++) {
25359 this.words[i] = a.words[i];
25360 }
25361 }
25362
25363 this.length = Math.max(this.length, i);
25364
25365 if (a !== this) {
25366 this.negative = 1;
25367 }
25368
25369 return this.strip();
25370 };
25371
25372 // Subtract `num` from `this`
25373 BN.prototype.sub = function sub (num) {
25374 return this.clone().isub(num);
25375 };
25376
25377 function smallMulTo (self, num, out) {
25378 out.negative = num.negative ^ self.negative;
25379 var len = (self.length + num.length) | 0;
25380 out.length = len;
25381 len = (len - 1) | 0;
25382
25383 // Peel one iteration (compiler can't do it, because of code complexity)
25384 var a = self.words[0] | 0;
25385 var b = num.words[0] | 0;
25386 var r = a * b;
25387
25388 var lo = r & 0x3ffffff;
25389 var carry = (r / 0x4000000) | 0;
25390 out.words[0] = lo;
25391
25392 for (var k = 1; k < len; k++) {
25393 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25394 // note that ncarry could be >= 0x3ffffff
25395 var ncarry = carry >>> 26;
25396 var rword = carry & 0x3ffffff;
25397 var maxJ = Math.min(k, num.length - 1);
25398 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25399 var i = (k - j) | 0;
25400 a = self.words[i] | 0;
25401 b = num.words[j] | 0;
25402 r = a * b + rword;
25403 ncarry += (r / 0x4000000) | 0;
25404 rword = r & 0x3ffffff;
25405 }
25406 out.words[k] = rword | 0;
25407 carry = ncarry | 0;
25408 }
25409 if (carry !== 0) {
25410 out.words[k] = carry | 0;
25411 } else {
25412 out.length--;
25413 }
25414
25415 return out.strip();
25416 }
25417
25418 // TODO(indutny): it may be reasonable to omit it for users who don't need
25419 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
25420 // multiplication (like elliptic secp256k1).
25421 var comb10MulTo = function comb10MulTo (self, num, out) {
25422 var a = self.words;
25423 var b = num.words;
25424 var o = out.words;
25425 var c = 0;
25426 var lo;
25427 var mid;
25428 var hi;
25429 var a0 = a[0] | 0;
25430 var al0 = a0 & 0x1fff;
25431 var ah0 = a0 >>> 13;
25432 var a1 = a[1] | 0;
25433 var al1 = a1 & 0x1fff;
25434 var ah1 = a1 >>> 13;
25435 var a2 = a[2] | 0;
25436 var al2 = a2 & 0x1fff;
25437 var ah2 = a2 >>> 13;
25438 var a3 = a[3] | 0;
25439 var al3 = a3 & 0x1fff;
25440 var ah3 = a3 >>> 13;
25441 var a4 = a[4] | 0;
25442 var al4 = a4 & 0x1fff;
25443 var ah4 = a4 >>> 13;
25444 var a5 = a[5] | 0;
25445 var al5 = a5 & 0x1fff;
25446 var ah5 = a5 >>> 13;
25447 var a6 = a[6] | 0;
25448 var al6 = a6 & 0x1fff;
25449 var ah6 = a6 >>> 13;
25450 var a7 = a[7] | 0;
25451 var al7 = a7 & 0x1fff;
25452 var ah7 = a7 >>> 13;
25453 var a8 = a[8] | 0;
25454 var al8 = a8 & 0x1fff;
25455 var ah8 = a8 >>> 13;
25456 var a9 = a[9] | 0;
25457 var al9 = a9 & 0x1fff;
25458 var ah9 = a9 >>> 13;
25459 var b0 = b[0] | 0;
25460 var bl0 = b0 & 0x1fff;
25461 var bh0 = b0 >>> 13;
25462 var b1 = b[1] | 0;
25463 var bl1 = b1 & 0x1fff;
25464 var bh1 = b1 >>> 13;
25465 var b2 = b[2] | 0;
25466 var bl2 = b2 & 0x1fff;
25467 var bh2 = b2 >>> 13;
25468 var b3 = b[3] | 0;
25469 var bl3 = b3 & 0x1fff;
25470 var bh3 = b3 >>> 13;
25471 var b4 = b[4] | 0;
25472 var bl4 = b4 & 0x1fff;
25473 var bh4 = b4 >>> 13;
25474 var b5 = b[5] | 0;
25475 var bl5 = b5 & 0x1fff;
25476 var bh5 = b5 >>> 13;
25477 var b6 = b[6] | 0;
25478 var bl6 = b6 & 0x1fff;
25479 var bh6 = b6 >>> 13;
25480 var b7 = b[7] | 0;
25481 var bl7 = b7 & 0x1fff;
25482 var bh7 = b7 >>> 13;
25483 var b8 = b[8] | 0;
25484 var bl8 = b8 & 0x1fff;
25485 var bh8 = b8 >>> 13;
25486 var b9 = b[9] | 0;
25487 var bl9 = b9 & 0x1fff;
25488 var bh9 = b9 >>> 13;
25489
25490 out.negative = self.negative ^ num.negative;
25491 out.length = 19;
25492 /* k = 0 */
25493 lo = Math.imul(al0, bl0);
25494 mid = Math.imul(al0, bh0);
25495 mid = (mid + Math.imul(ah0, bl0)) | 0;
25496 hi = Math.imul(ah0, bh0);
25497 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25498 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
25499 w0 &= 0x3ffffff;
25500 /* k = 1 */
25501 lo = Math.imul(al1, bl0);
25502 mid = Math.imul(al1, bh0);
25503 mid = (mid + Math.imul(ah1, bl0)) | 0;
25504 hi = Math.imul(ah1, bh0);
25505 lo = (lo + Math.imul(al0, bl1)) | 0;
25506 mid = (mid + Math.imul(al0, bh1)) | 0;
25507 mid = (mid + Math.imul(ah0, bl1)) | 0;
25508 hi = (hi + Math.imul(ah0, bh1)) | 0;
25509 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25510 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
25511 w1 &= 0x3ffffff;
25512 /* k = 2 */
25513 lo = Math.imul(al2, bl0);
25514 mid = Math.imul(al2, bh0);
25515 mid = (mid + Math.imul(ah2, bl0)) | 0;
25516 hi = Math.imul(ah2, bh0);
25517 lo = (lo + Math.imul(al1, bl1)) | 0;
25518 mid = (mid + Math.imul(al1, bh1)) | 0;
25519 mid = (mid + Math.imul(ah1, bl1)) | 0;
25520 hi = (hi + Math.imul(ah1, bh1)) | 0;
25521 lo = (lo + Math.imul(al0, bl2)) | 0;
25522 mid = (mid + Math.imul(al0, bh2)) | 0;
25523 mid = (mid + Math.imul(ah0, bl2)) | 0;
25524 hi = (hi + Math.imul(ah0, bh2)) | 0;
25525 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25526 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
25527 w2 &= 0x3ffffff;
25528 /* k = 3 */
25529 lo = Math.imul(al3, bl0);
25530 mid = Math.imul(al3, bh0);
25531 mid = (mid + Math.imul(ah3, bl0)) | 0;
25532 hi = Math.imul(ah3, bh0);
25533 lo = (lo + Math.imul(al2, bl1)) | 0;
25534 mid = (mid + Math.imul(al2, bh1)) | 0;
25535 mid = (mid + Math.imul(ah2, bl1)) | 0;
25536 hi = (hi + Math.imul(ah2, bh1)) | 0;
25537 lo = (lo + Math.imul(al1, bl2)) | 0;
25538 mid = (mid + Math.imul(al1, bh2)) | 0;
25539 mid = (mid + Math.imul(ah1, bl2)) | 0;
25540 hi = (hi + Math.imul(ah1, bh2)) | 0;
25541 lo = (lo + Math.imul(al0, bl3)) | 0;
25542 mid = (mid + Math.imul(al0, bh3)) | 0;
25543 mid = (mid + Math.imul(ah0, bl3)) | 0;
25544 hi = (hi + Math.imul(ah0, bh3)) | 0;
25545 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25546 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
25547 w3 &= 0x3ffffff;
25548 /* k = 4 */
25549 lo = Math.imul(al4, bl0);
25550 mid = Math.imul(al4, bh0);
25551 mid = (mid + Math.imul(ah4, bl0)) | 0;
25552 hi = Math.imul(ah4, bh0);
25553 lo = (lo + Math.imul(al3, bl1)) | 0;
25554 mid = (mid + Math.imul(al3, bh1)) | 0;
25555 mid = (mid + Math.imul(ah3, bl1)) | 0;
25556 hi = (hi + Math.imul(ah3, bh1)) | 0;
25557 lo = (lo + Math.imul(al2, bl2)) | 0;
25558 mid = (mid + Math.imul(al2, bh2)) | 0;
25559 mid = (mid + Math.imul(ah2, bl2)) | 0;
25560 hi = (hi + Math.imul(ah2, bh2)) | 0;
25561 lo = (lo + Math.imul(al1, bl3)) | 0;
25562 mid = (mid + Math.imul(al1, bh3)) | 0;
25563 mid = (mid + Math.imul(ah1, bl3)) | 0;
25564 hi = (hi + Math.imul(ah1, bh3)) | 0;
25565 lo = (lo + Math.imul(al0, bl4)) | 0;
25566 mid = (mid + Math.imul(al0, bh4)) | 0;
25567 mid = (mid + Math.imul(ah0, bl4)) | 0;
25568 hi = (hi + Math.imul(ah0, bh4)) | 0;
25569 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25570 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
25571 w4 &= 0x3ffffff;
25572 /* k = 5 */
25573 lo = Math.imul(al5, bl0);
25574 mid = Math.imul(al5, bh0);
25575 mid = (mid + Math.imul(ah5, bl0)) | 0;
25576 hi = Math.imul(ah5, bh0);
25577 lo = (lo + Math.imul(al4, bl1)) | 0;
25578 mid = (mid + Math.imul(al4, bh1)) | 0;
25579 mid = (mid + Math.imul(ah4, bl1)) | 0;
25580 hi = (hi + Math.imul(ah4, bh1)) | 0;
25581 lo = (lo + Math.imul(al3, bl2)) | 0;
25582 mid = (mid + Math.imul(al3, bh2)) | 0;
25583 mid = (mid + Math.imul(ah3, bl2)) | 0;
25584 hi = (hi + Math.imul(ah3, bh2)) | 0;
25585 lo = (lo + Math.imul(al2, bl3)) | 0;
25586 mid = (mid + Math.imul(al2, bh3)) | 0;
25587 mid = (mid + Math.imul(ah2, bl3)) | 0;
25588 hi = (hi + Math.imul(ah2, bh3)) | 0;
25589 lo = (lo + Math.imul(al1, bl4)) | 0;
25590 mid = (mid + Math.imul(al1, bh4)) | 0;
25591 mid = (mid + Math.imul(ah1, bl4)) | 0;
25592 hi = (hi + Math.imul(ah1, bh4)) | 0;
25593 lo = (lo + Math.imul(al0, bl5)) | 0;
25594 mid = (mid + Math.imul(al0, bh5)) | 0;
25595 mid = (mid + Math.imul(ah0, bl5)) | 0;
25596 hi = (hi + Math.imul(ah0, bh5)) | 0;
25597 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25598 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
25599 w5 &= 0x3ffffff;
25600 /* k = 6 */
25601 lo = Math.imul(al6, bl0);
25602 mid = Math.imul(al6, bh0);
25603 mid = (mid + Math.imul(ah6, bl0)) | 0;
25604 hi = Math.imul(ah6, bh0);
25605 lo = (lo + Math.imul(al5, bl1)) | 0;
25606 mid = (mid + Math.imul(al5, bh1)) | 0;
25607 mid = (mid + Math.imul(ah5, bl1)) | 0;
25608 hi = (hi + Math.imul(ah5, bh1)) | 0;
25609 lo = (lo + Math.imul(al4, bl2)) | 0;
25610 mid = (mid + Math.imul(al4, bh2)) | 0;
25611 mid = (mid + Math.imul(ah4, bl2)) | 0;
25612 hi = (hi + Math.imul(ah4, bh2)) | 0;
25613 lo = (lo + Math.imul(al3, bl3)) | 0;
25614 mid = (mid + Math.imul(al3, bh3)) | 0;
25615 mid = (mid + Math.imul(ah3, bl3)) | 0;
25616 hi = (hi + Math.imul(ah3, bh3)) | 0;
25617 lo = (lo + Math.imul(al2, bl4)) | 0;
25618 mid = (mid + Math.imul(al2, bh4)) | 0;
25619 mid = (mid + Math.imul(ah2, bl4)) | 0;
25620 hi = (hi + Math.imul(ah2, bh4)) | 0;
25621 lo = (lo + Math.imul(al1, bl5)) | 0;
25622 mid = (mid + Math.imul(al1, bh5)) | 0;
25623 mid = (mid + Math.imul(ah1, bl5)) | 0;
25624 hi = (hi + Math.imul(ah1, bh5)) | 0;
25625 lo = (lo + Math.imul(al0, bl6)) | 0;
25626 mid = (mid + Math.imul(al0, bh6)) | 0;
25627 mid = (mid + Math.imul(ah0, bl6)) | 0;
25628 hi = (hi + Math.imul(ah0, bh6)) | 0;
25629 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25630 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
25631 w6 &= 0x3ffffff;
25632 /* k = 7 */
25633 lo = Math.imul(al7, bl0);
25634 mid = Math.imul(al7, bh0);
25635 mid = (mid + Math.imul(ah7, bl0)) | 0;
25636 hi = Math.imul(ah7, bh0);
25637 lo = (lo + Math.imul(al6, bl1)) | 0;
25638 mid = (mid + Math.imul(al6, bh1)) | 0;
25639 mid = (mid + Math.imul(ah6, bl1)) | 0;
25640 hi = (hi + Math.imul(ah6, bh1)) | 0;
25641 lo = (lo + Math.imul(al5, bl2)) | 0;
25642 mid = (mid + Math.imul(al5, bh2)) | 0;
25643 mid = (mid + Math.imul(ah5, bl2)) | 0;
25644 hi = (hi + Math.imul(ah5, bh2)) | 0;
25645 lo = (lo + Math.imul(al4, bl3)) | 0;
25646 mid = (mid + Math.imul(al4, bh3)) | 0;
25647 mid = (mid + Math.imul(ah4, bl3)) | 0;
25648 hi = (hi + Math.imul(ah4, bh3)) | 0;
25649 lo = (lo + Math.imul(al3, bl4)) | 0;
25650 mid = (mid + Math.imul(al3, bh4)) | 0;
25651 mid = (mid + Math.imul(ah3, bl4)) | 0;
25652 hi = (hi + Math.imul(ah3, bh4)) | 0;
25653 lo = (lo + Math.imul(al2, bl5)) | 0;
25654 mid = (mid + Math.imul(al2, bh5)) | 0;
25655 mid = (mid + Math.imul(ah2, bl5)) | 0;
25656 hi = (hi + Math.imul(ah2, bh5)) | 0;
25657 lo = (lo + Math.imul(al1, bl6)) | 0;
25658 mid = (mid + Math.imul(al1, bh6)) | 0;
25659 mid = (mid + Math.imul(ah1, bl6)) | 0;
25660 hi = (hi + Math.imul(ah1, bh6)) | 0;
25661 lo = (lo + Math.imul(al0, bl7)) | 0;
25662 mid = (mid + Math.imul(al0, bh7)) | 0;
25663 mid = (mid + Math.imul(ah0, bl7)) | 0;
25664 hi = (hi + Math.imul(ah0, bh7)) | 0;
25665 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25666 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
25667 w7 &= 0x3ffffff;
25668 /* k = 8 */
25669 lo = Math.imul(al8, bl0);
25670 mid = Math.imul(al8, bh0);
25671 mid = (mid + Math.imul(ah8, bl0)) | 0;
25672 hi = Math.imul(ah8, bh0);
25673 lo = (lo + Math.imul(al7, bl1)) | 0;
25674 mid = (mid + Math.imul(al7, bh1)) | 0;
25675 mid = (mid + Math.imul(ah7, bl1)) | 0;
25676 hi = (hi + Math.imul(ah7, bh1)) | 0;
25677 lo = (lo + Math.imul(al6, bl2)) | 0;
25678 mid = (mid + Math.imul(al6, bh2)) | 0;
25679 mid = (mid + Math.imul(ah6, bl2)) | 0;
25680 hi = (hi + Math.imul(ah6, bh2)) | 0;
25681 lo = (lo + Math.imul(al5, bl3)) | 0;
25682 mid = (mid + Math.imul(al5, bh3)) | 0;
25683 mid = (mid + Math.imul(ah5, bl3)) | 0;
25684 hi = (hi + Math.imul(ah5, bh3)) | 0;
25685 lo = (lo + Math.imul(al4, bl4)) | 0;
25686 mid = (mid + Math.imul(al4, bh4)) | 0;
25687 mid = (mid + Math.imul(ah4, bl4)) | 0;
25688 hi = (hi + Math.imul(ah4, bh4)) | 0;
25689 lo = (lo + Math.imul(al3, bl5)) | 0;
25690 mid = (mid + Math.imul(al3, bh5)) | 0;
25691 mid = (mid + Math.imul(ah3, bl5)) | 0;
25692 hi = (hi + Math.imul(ah3, bh5)) | 0;
25693 lo = (lo + Math.imul(al2, bl6)) | 0;
25694 mid = (mid + Math.imul(al2, bh6)) | 0;
25695 mid = (mid + Math.imul(ah2, bl6)) | 0;
25696 hi = (hi + Math.imul(ah2, bh6)) | 0;
25697 lo = (lo + Math.imul(al1, bl7)) | 0;
25698 mid = (mid + Math.imul(al1, bh7)) | 0;
25699 mid = (mid + Math.imul(ah1, bl7)) | 0;
25700 hi = (hi + Math.imul(ah1, bh7)) | 0;
25701 lo = (lo + Math.imul(al0, bl8)) | 0;
25702 mid = (mid + Math.imul(al0, bh8)) | 0;
25703 mid = (mid + Math.imul(ah0, bl8)) | 0;
25704 hi = (hi + Math.imul(ah0, bh8)) | 0;
25705 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25706 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
25707 w8 &= 0x3ffffff;
25708 /* k = 9 */
25709 lo = Math.imul(al9, bl0);
25710 mid = Math.imul(al9, bh0);
25711 mid = (mid + Math.imul(ah9, bl0)) | 0;
25712 hi = Math.imul(ah9, bh0);
25713 lo = (lo + Math.imul(al8, bl1)) | 0;
25714 mid = (mid + Math.imul(al8, bh1)) | 0;
25715 mid = (mid + Math.imul(ah8, bl1)) | 0;
25716 hi = (hi + Math.imul(ah8, bh1)) | 0;
25717 lo = (lo + Math.imul(al7, bl2)) | 0;
25718 mid = (mid + Math.imul(al7, bh2)) | 0;
25719 mid = (mid + Math.imul(ah7, bl2)) | 0;
25720 hi = (hi + Math.imul(ah7, bh2)) | 0;
25721 lo = (lo + Math.imul(al6, bl3)) | 0;
25722 mid = (mid + Math.imul(al6, bh3)) | 0;
25723 mid = (mid + Math.imul(ah6, bl3)) | 0;
25724 hi = (hi + Math.imul(ah6, bh3)) | 0;
25725 lo = (lo + Math.imul(al5, bl4)) | 0;
25726 mid = (mid + Math.imul(al5, bh4)) | 0;
25727 mid = (mid + Math.imul(ah5, bl4)) | 0;
25728 hi = (hi + Math.imul(ah5, bh4)) | 0;
25729 lo = (lo + Math.imul(al4, bl5)) | 0;
25730 mid = (mid + Math.imul(al4, bh5)) | 0;
25731 mid = (mid + Math.imul(ah4, bl5)) | 0;
25732 hi = (hi + Math.imul(ah4, bh5)) | 0;
25733 lo = (lo + Math.imul(al3, bl6)) | 0;
25734 mid = (mid + Math.imul(al3, bh6)) | 0;
25735 mid = (mid + Math.imul(ah3, bl6)) | 0;
25736 hi = (hi + Math.imul(ah3, bh6)) | 0;
25737 lo = (lo + Math.imul(al2, bl7)) | 0;
25738 mid = (mid + Math.imul(al2, bh7)) | 0;
25739 mid = (mid + Math.imul(ah2, bl7)) | 0;
25740 hi = (hi + Math.imul(ah2, bh7)) | 0;
25741 lo = (lo + Math.imul(al1, bl8)) | 0;
25742 mid = (mid + Math.imul(al1, bh8)) | 0;
25743 mid = (mid + Math.imul(ah1, bl8)) | 0;
25744 hi = (hi + Math.imul(ah1, bh8)) | 0;
25745 lo = (lo + Math.imul(al0, bl9)) | 0;
25746 mid = (mid + Math.imul(al0, bh9)) | 0;
25747 mid = (mid + Math.imul(ah0, bl9)) | 0;
25748 hi = (hi + Math.imul(ah0, bh9)) | 0;
25749 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25750 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
25751 w9 &= 0x3ffffff;
25752 /* k = 10 */
25753 lo = Math.imul(al9, bl1);
25754 mid = Math.imul(al9, bh1);
25755 mid = (mid + Math.imul(ah9, bl1)) | 0;
25756 hi = Math.imul(ah9, bh1);
25757 lo = (lo + Math.imul(al8, bl2)) | 0;
25758 mid = (mid + Math.imul(al8, bh2)) | 0;
25759 mid = (mid + Math.imul(ah8, bl2)) | 0;
25760 hi = (hi + Math.imul(ah8, bh2)) | 0;
25761 lo = (lo + Math.imul(al7, bl3)) | 0;
25762 mid = (mid + Math.imul(al7, bh3)) | 0;
25763 mid = (mid + Math.imul(ah7, bl3)) | 0;
25764 hi = (hi + Math.imul(ah7, bh3)) | 0;
25765 lo = (lo + Math.imul(al6, bl4)) | 0;
25766 mid = (mid + Math.imul(al6, bh4)) | 0;
25767 mid = (mid + Math.imul(ah6, bl4)) | 0;
25768 hi = (hi + Math.imul(ah6, bh4)) | 0;
25769 lo = (lo + Math.imul(al5, bl5)) | 0;
25770 mid = (mid + Math.imul(al5, bh5)) | 0;
25771 mid = (mid + Math.imul(ah5, bl5)) | 0;
25772 hi = (hi + Math.imul(ah5, bh5)) | 0;
25773 lo = (lo + Math.imul(al4, bl6)) | 0;
25774 mid = (mid + Math.imul(al4, bh6)) | 0;
25775 mid = (mid + Math.imul(ah4, bl6)) | 0;
25776 hi = (hi + Math.imul(ah4, bh6)) | 0;
25777 lo = (lo + Math.imul(al3, bl7)) | 0;
25778 mid = (mid + Math.imul(al3, bh7)) | 0;
25779 mid = (mid + Math.imul(ah3, bl7)) | 0;
25780 hi = (hi + Math.imul(ah3, bh7)) | 0;
25781 lo = (lo + Math.imul(al2, bl8)) | 0;
25782 mid = (mid + Math.imul(al2, bh8)) | 0;
25783 mid = (mid + Math.imul(ah2, bl8)) | 0;
25784 hi = (hi + Math.imul(ah2, bh8)) | 0;
25785 lo = (lo + Math.imul(al1, bl9)) | 0;
25786 mid = (mid + Math.imul(al1, bh9)) | 0;
25787 mid = (mid + Math.imul(ah1, bl9)) | 0;
25788 hi = (hi + Math.imul(ah1, bh9)) | 0;
25789 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25790 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
25791 w10 &= 0x3ffffff;
25792 /* k = 11 */
25793 lo = Math.imul(al9, bl2);
25794 mid = Math.imul(al9, bh2);
25795 mid = (mid + Math.imul(ah9, bl2)) | 0;
25796 hi = Math.imul(ah9, bh2);
25797 lo = (lo + Math.imul(al8, bl3)) | 0;
25798 mid = (mid + Math.imul(al8, bh3)) | 0;
25799 mid = (mid + Math.imul(ah8, bl3)) | 0;
25800 hi = (hi + Math.imul(ah8, bh3)) | 0;
25801 lo = (lo + Math.imul(al7, bl4)) | 0;
25802 mid = (mid + Math.imul(al7, bh4)) | 0;
25803 mid = (mid + Math.imul(ah7, bl4)) | 0;
25804 hi = (hi + Math.imul(ah7, bh4)) | 0;
25805 lo = (lo + Math.imul(al6, bl5)) | 0;
25806 mid = (mid + Math.imul(al6, bh5)) | 0;
25807 mid = (mid + Math.imul(ah6, bl5)) | 0;
25808 hi = (hi + Math.imul(ah6, bh5)) | 0;
25809 lo = (lo + Math.imul(al5, bl6)) | 0;
25810 mid = (mid + Math.imul(al5, bh6)) | 0;
25811 mid = (mid + Math.imul(ah5, bl6)) | 0;
25812 hi = (hi + Math.imul(ah5, bh6)) | 0;
25813 lo = (lo + Math.imul(al4, bl7)) | 0;
25814 mid = (mid + Math.imul(al4, bh7)) | 0;
25815 mid = (mid + Math.imul(ah4, bl7)) | 0;
25816 hi = (hi + Math.imul(ah4, bh7)) | 0;
25817 lo = (lo + Math.imul(al3, bl8)) | 0;
25818 mid = (mid + Math.imul(al3, bh8)) | 0;
25819 mid = (mid + Math.imul(ah3, bl8)) | 0;
25820 hi = (hi + Math.imul(ah3, bh8)) | 0;
25821 lo = (lo + Math.imul(al2, bl9)) | 0;
25822 mid = (mid + Math.imul(al2, bh9)) | 0;
25823 mid = (mid + Math.imul(ah2, bl9)) | 0;
25824 hi = (hi + Math.imul(ah2, bh9)) | 0;
25825 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25826 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
25827 w11 &= 0x3ffffff;
25828 /* k = 12 */
25829 lo = Math.imul(al9, bl3);
25830 mid = Math.imul(al9, bh3);
25831 mid = (mid + Math.imul(ah9, bl3)) | 0;
25832 hi = Math.imul(ah9, bh3);
25833 lo = (lo + Math.imul(al8, bl4)) | 0;
25834 mid = (mid + Math.imul(al8, bh4)) | 0;
25835 mid = (mid + Math.imul(ah8, bl4)) | 0;
25836 hi = (hi + Math.imul(ah8, bh4)) | 0;
25837 lo = (lo + Math.imul(al7, bl5)) | 0;
25838 mid = (mid + Math.imul(al7, bh5)) | 0;
25839 mid = (mid + Math.imul(ah7, bl5)) | 0;
25840 hi = (hi + Math.imul(ah7, bh5)) | 0;
25841 lo = (lo + Math.imul(al6, bl6)) | 0;
25842 mid = (mid + Math.imul(al6, bh6)) | 0;
25843 mid = (mid + Math.imul(ah6, bl6)) | 0;
25844 hi = (hi + Math.imul(ah6, bh6)) | 0;
25845 lo = (lo + Math.imul(al5, bl7)) | 0;
25846 mid = (mid + Math.imul(al5, bh7)) | 0;
25847 mid = (mid + Math.imul(ah5, bl7)) | 0;
25848 hi = (hi + Math.imul(ah5, bh7)) | 0;
25849 lo = (lo + Math.imul(al4, bl8)) | 0;
25850 mid = (mid + Math.imul(al4, bh8)) | 0;
25851 mid = (mid + Math.imul(ah4, bl8)) | 0;
25852 hi = (hi + Math.imul(ah4, bh8)) | 0;
25853 lo = (lo + Math.imul(al3, bl9)) | 0;
25854 mid = (mid + Math.imul(al3, bh9)) | 0;
25855 mid = (mid + Math.imul(ah3, bl9)) | 0;
25856 hi = (hi + Math.imul(ah3, bh9)) | 0;
25857 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25858 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
25859 w12 &= 0x3ffffff;
25860 /* k = 13 */
25861 lo = Math.imul(al9, bl4);
25862 mid = Math.imul(al9, bh4);
25863 mid = (mid + Math.imul(ah9, bl4)) | 0;
25864 hi = Math.imul(ah9, bh4);
25865 lo = (lo + Math.imul(al8, bl5)) | 0;
25866 mid = (mid + Math.imul(al8, bh5)) | 0;
25867 mid = (mid + Math.imul(ah8, bl5)) | 0;
25868 hi = (hi + Math.imul(ah8, bh5)) | 0;
25869 lo = (lo + Math.imul(al7, bl6)) | 0;
25870 mid = (mid + Math.imul(al7, bh6)) | 0;
25871 mid = (mid + Math.imul(ah7, bl6)) | 0;
25872 hi = (hi + Math.imul(ah7, bh6)) | 0;
25873 lo = (lo + Math.imul(al6, bl7)) | 0;
25874 mid = (mid + Math.imul(al6, bh7)) | 0;
25875 mid = (mid + Math.imul(ah6, bl7)) | 0;
25876 hi = (hi + Math.imul(ah6, bh7)) | 0;
25877 lo = (lo + Math.imul(al5, bl8)) | 0;
25878 mid = (mid + Math.imul(al5, bh8)) | 0;
25879 mid = (mid + Math.imul(ah5, bl8)) | 0;
25880 hi = (hi + Math.imul(ah5, bh8)) | 0;
25881 lo = (lo + Math.imul(al4, bl9)) | 0;
25882 mid = (mid + Math.imul(al4, bh9)) | 0;
25883 mid = (mid + Math.imul(ah4, bl9)) | 0;
25884 hi = (hi + Math.imul(ah4, bh9)) | 0;
25885 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25886 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
25887 w13 &= 0x3ffffff;
25888 /* k = 14 */
25889 lo = Math.imul(al9, bl5);
25890 mid = Math.imul(al9, bh5);
25891 mid = (mid + Math.imul(ah9, bl5)) | 0;
25892 hi = Math.imul(ah9, bh5);
25893 lo = (lo + Math.imul(al8, bl6)) | 0;
25894 mid = (mid + Math.imul(al8, bh6)) | 0;
25895 mid = (mid + Math.imul(ah8, bl6)) | 0;
25896 hi = (hi + Math.imul(ah8, bh6)) | 0;
25897 lo = (lo + Math.imul(al7, bl7)) | 0;
25898 mid = (mid + Math.imul(al7, bh7)) | 0;
25899 mid = (mid + Math.imul(ah7, bl7)) | 0;
25900 hi = (hi + Math.imul(ah7, bh7)) | 0;
25901 lo = (lo + Math.imul(al6, bl8)) | 0;
25902 mid = (mid + Math.imul(al6, bh8)) | 0;
25903 mid = (mid + Math.imul(ah6, bl8)) | 0;
25904 hi = (hi + Math.imul(ah6, bh8)) | 0;
25905 lo = (lo + Math.imul(al5, bl9)) | 0;
25906 mid = (mid + Math.imul(al5, bh9)) | 0;
25907 mid = (mid + Math.imul(ah5, bl9)) | 0;
25908 hi = (hi + Math.imul(ah5, bh9)) | 0;
25909 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25910 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
25911 w14 &= 0x3ffffff;
25912 /* k = 15 */
25913 lo = Math.imul(al9, bl6);
25914 mid = Math.imul(al9, bh6);
25915 mid = (mid + Math.imul(ah9, bl6)) | 0;
25916 hi = Math.imul(ah9, bh6);
25917 lo = (lo + Math.imul(al8, bl7)) | 0;
25918 mid = (mid + Math.imul(al8, bh7)) | 0;
25919 mid = (mid + Math.imul(ah8, bl7)) | 0;
25920 hi = (hi + Math.imul(ah8, bh7)) | 0;
25921 lo = (lo + Math.imul(al7, bl8)) | 0;
25922 mid = (mid + Math.imul(al7, bh8)) | 0;
25923 mid = (mid + Math.imul(ah7, bl8)) | 0;
25924 hi = (hi + Math.imul(ah7, bh8)) | 0;
25925 lo = (lo + Math.imul(al6, bl9)) | 0;
25926 mid = (mid + Math.imul(al6, bh9)) | 0;
25927 mid = (mid + Math.imul(ah6, bl9)) | 0;
25928 hi = (hi + Math.imul(ah6, bh9)) | 0;
25929 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25930 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
25931 w15 &= 0x3ffffff;
25932 /* k = 16 */
25933 lo = Math.imul(al9, bl7);
25934 mid = Math.imul(al9, bh7);
25935 mid = (mid + Math.imul(ah9, bl7)) | 0;
25936 hi = Math.imul(ah9, bh7);
25937 lo = (lo + Math.imul(al8, bl8)) | 0;
25938 mid = (mid + Math.imul(al8, bh8)) | 0;
25939 mid = (mid + Math.imul(ah8, bl8)) | 0;
25940 hi = (hi + Math.imul(ah8, bh8)) | 0;
25941 lo = (lo + Math.imul(al7, bl9)) | 0;
25942 mid = (mid + Math.imul(al7, bh9)) | 0;
25943 mid = (mid + Math.imul(ah7, bl9)) | 0;
25944 hi = (hi + Math.imul(ah7, bh9)) | 0;
25945 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25946 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
25947 w16 &= 0x3ffffff;
25948 /* k = 17 */
25949 lo = Math.imul(al9, bl8);
25950 mid = Math.imul(al9, bh8);
25951 mid = (mid + Math.imul(ah9, bl8)) | 0;
25952 hi = Math.imul(ah9, bh8);
25953 lo = (lo + Math.imul(al8, bl9)) | 0;
25954 mid = (mid + Math.imul(al8, bh9)) | 0;
25955 mid = (mid + Math.imul(ah8, bl9)) | 0;
25956 hi = (hi + Math.imul(ah8, bh9)) | 0;
25957 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25958 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
25959 w17 &= 0x3ffffff;
25960 /* k = 18 */
25961 lo = Math.imul(al9, bl9);
25962 mid = Math.imul(al9, bh9);
25963 mid = (mid + Math.imul(ah9, bl9)) | 0;
25964 hi = Math.imul(ah9, bh9);
25965 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25966 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
25967 w18 &= 0x3ffffff;
25968 o[0] = w0;
25969 o[1] = w1;
25970 o[2] = w2;
25971 o[3] = w3;
25972 o[4] = w4;
25973 o[5] = w5;
25974 o[6] = w6;
25975 o[7] = w7;
25976 o[8] = w8;
25977 o[9] = w9;
25978 o[10] = w10;
25979 o[11] = w11;
25980 o[12] = w12;
25981 o[13] = w13;
25982 o[14] = w14;
25983 o[15] = w15;
25984 o[16] = w16;
25985 o[17] = w17;
25986 o[18] = w18;
25987 if (c !== 0) {
25988 o[19] = c;
25989 out.length++;
25990 }
25991 return out;
25992 };
25993
25994 // Polyfill comb
25995 if (!Math.imul) {
25996 comb10MulTo = smallMulTo;
25997 }
25998
25999 function bigMulTo (self, num, out) {
26000 out.negative = num.negative ^ self.negative;
26001 out.length = self.length + num.length;
26002
26003 var carry = 0;
26004 var hncarry = 0;
26005 for (var k = 0; k < out.length - 1; k++) {
26006 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26007 // note that ncarry could be >= 0x3ffffff
26008 var ncarry = hncarry;
26009 hncarry = 0;
26010 var rword = carry & 0x3ffffff;
26011 var maxJ = Math.min(k, num.length - 1);
26012 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26013 var i = k - j;
26014 var a = self.words[i] | 0;
26015 var b = num.words[j] | 0;
26016 var r = a * b;
26017
26018 var lo = r & 0x3ffffff;
26019 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26020 lo = (lo + rword) | 0;
26021 rword = lo & 0x3ffffff;
26022 ncarry = (ncarry + (lo >>> 26)) | 0;
26023
26024 hncarry += ncarry >>> 26;
26025 ncarry &= 0x3ffffff;
26026 }
26027 out.words[k] = rword;
26028 carry = ncarry;
26029 ncarry = hncarry;
26030 }
26031 if (carry !== 0) {
26032 out.words[k] = carry;
26033 } else {
26034 out.length--;
26035 }
26036
26037 return out.strip();
26038 }
26039
26040 function jumboMulTo (self, num, out) {
26041 var fftm = new FFTM();
26042 return fftm.mulp(self, num, out);
26043 }
26044
26045 BN.prototype.mulTo = function mulTo (num, out) {
26046 var res;
26047 var len = this.length + num.length;
26048 if (this.length === 10 && num.length === 10) {
26049 res = comb10MulTo(this, num, out);
26050 } else if (len < 63) {
26051 res = smallMulTo(this, num, out);
26052 } else if (len < 1024) {
26053 res = bigMulTo(this, num, out);
26054 } else {
26055 res = jumboMulTo(this, num, out);
26056 }
26057
26058 return res;
26059 };
26060
26061 // Cooley-Tukey algorithm for FFT
26062 // slightly revisited to rely on looping instead of recursion
26063
26064 function FFTM (x, y) {
26065 this.x = x;
26066 this.y = y;
26067 }
26068
26069 FFTM.prototype.makeRBT = function makeRBT (N) {
26070 var t = new Array(N);
26071 var l = BN.prototype._countBits(N) - 1;
26072 for (var i = 0; i < N; i++) {
26073 t[i] = this.revBin(i, l, N);
26074 }
26075
26076 return t;
26077 };
26078
26079 // Returns binary-reversed representation of `x`
26080 FFTM.prototype.revBin = function revBin (x, l, N) {
26081 if (x === 0 || x === N - 1) return x;
26082
26083 var rb = 0;
26084 for (var i = 0; i < l; i++) {
26085 rb |= (x & 1) << (l - i - 1);
26086 x >>= 1;
26087 }
26088
26089 return rb;
26090 };
26091
26092 // Performs "tweedling" phase, therefore 'emulating'
26093 // behaviour of the recursive algorithm
26094 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26095 for (var i = 0; i < N; i++) {
26096 rtws[i] = rws[rbt[i]];
26097 itws[i] = iws[rbt[i]];
26098 }
26099 };
26100
26101 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26102 this.permute(rbt, rws, iws, rtws, itws, N);
26103
26104 for (var s = 1; s < N; s <<= 1) {
26105 var l = s << 1;
26106
26107 var rtwdf = Math.cos(2 * Math.PI / l);
26108 var itwdf = Math.sin(2 * Math.PI / l);
26109
26110 for (var p = 0; p < N; p += l) {
26111 var rtwdf_ = rtwdf;
26112 var itwdf_ = itwdf;
26113
26114 for (var j = 0; j < s; j++) {
26115 var re = rtws[p + j];
26116 var ie = itws[p + j];
26117
26118 var ro = rtws[p + j + s];
26119 var io = itws[p + j + s];
26120
26121 var rx = rtwdf_ * ro - itwdf_ * io;
26122
26123 io = rtwdf_ * io + itwdf_ * ro;
26124 ro = rx;
26125
26126 rtws[p + j] = re + ro;
26127 itws[p + j] = ie + io;
26128
26129 rtws[p + j + s] = re - ro;
26130 itws[p + j + s] = ie - io;
26131
26132 /* jshint maxdepth : false */
26133 if (j !== l) {
26134 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26135
26136 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26137 rtwdf_ = rx;
26138 }
26139 }
26140 }
26141 }
26142 };
26143
26144 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26145 var N = Math.max(m, n) | 1;
26146 var odd = N & 1;
26147 var i = 0;
26148 for (N = N / 2 | 0; N; N = N >>> 1) {
26149 i++;
26150 }
26151
26152 return 1 << i + 1 + odd;
26153 };
26154
26155 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26156 if (N <= 1) return;
26157
26158 for (var i = 0; i < N / 2; i++) {
26159 var t = rws[i];
26160
26161 rws[i] = rws[N - i - 1];
26162 rws[N - i - 1] = t;
26163
26164 t = iws[i];
26165
26166 iws[i] = -iws[N - i - 1];
26167 iws[N - i - 1] = -t;
26168 }
26169 };
26170
26171 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26172 var carry = 0;
26173 for (var i = 0; i < N / 2; i++) {
26174 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26175 Math.round(ws[2 * i] / N) +
26176 carry;
26177
26178 ws[i] = w & 0x3ffffff;
26179
26180 if (w < 0x4000000) {
26181 carry = 0;
26182 } else {
26183 carry = w / 0x4000000 | 0;
26184 }
26185 }
26186
26187 return ws;
26188 };
26189
26190 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26191 var carry = 0;
26192 for (var i = 0; i < len; i++) {
26193 carry = carry + (ws[i] | 0);
26194
26195 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26196 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26197 }
26198
26199 // Pad with zeroes
26200 for (i = 2 * len; i < N; ++i) {
26201 rws[i] = 0;
26202 }
26203
26204 assert(carry === 0);
26205 assert((carry & ~0x1fff) === 0);
26206 };
26207
26208 FFTM.prototype.stub = function stub (N) {
26209 var ph = new Array(N);
26210 for (var i = 0; i < N; i++) {
26211 ph[i] = 0;
26212 }
26213
26214 return ph;
26215 };
26216
26217 FFTM.prototype.mulp = function mulp (x, y, out) {
26218 var N = 2 * this.guessLen13b(x.length, y.length);
26219
26220 var rbt = this.makeRBT(N);
26221
26222 var _ = this.stub(N);
26223
26224 var rws = new Array(N);
26225 var rwst = new Array(N);
26226 var iwst = new Array(N);
26227
26228 var nrws = new Array(N);
26229 var nrwst = new Array(N);
26230 var niwst = new Array(N);
26231
26232 var rmws = out.words;
26233 rmws.length = N;
26234
26235 this.convert13b(x.words, x.length, rws, N);
26236 this.convert13b(y.words, y.length, nrws, N);
26237
26238 this.transform(rws, _, rwst, iwst, N, rbt);
26239 this.transform(nrws, _, nrwst, niwst, N, rbt);
26240
26241 for (var i = 0; i < N; i++) {
26242 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
26243 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
26244 rwst[i] = rx;
26245 }
26246
26247 this.conjugate(rwst, iwst, N);
26248 this.transform(rwst, iwst, rmws, _, N, rbt);
26249 this.conjugate(rmws, _, N);
26250 this.normalize13b(rmws, N);
26251
26252 out.negative = x.negative ^ y.negative;
26253 out.length = x.length + y.length;
26254 return out.strip();
26255 };
26256
26257 // Multiply `this` by `num`
26258 BN.prototype.mul = function mul (num) {
26259 var out = new BN(null);
26260 out.words = new Array(this.length + num.length);
26261 return this.mulTo(num, out);
26262 };
26263
26264 // Multiply employing FFT
26265 BN.prototype.mulf = function mulf (num) {
26266 var out = new BN(null);
26267 out.words = new Array(this.length + num.length);
26268 return jumboMulTo(this, num, out);
26269 };
26270
26271 // In-place Multiplication
26272 BN.prototype.imul = function imul (num) {
26273 return this.clone().mulTo(num, this);
26274 };
26275
26276 BN.prototype.imuln = function imuln (num) {
26277 assert(typeof num === 'number');
26278 assert(num < 0x4000000);
26279
26280 // Carry
26281 var carry = 0;
26282 for (var i = 0; i < this.length; i++) {
26283 var w = (this.words[i] | 0) * num;
26284 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
26285 carry >>= 26;
26286 carry += (w / 0x4000000) | 0;
26287 // NOTE: lo is 27bit maximum
26288 carry += lo >>> 26;
26289 this.words[i] = lo & 0x3ffffff;
26290 }
26291
26292 if (carry !== 0) {
26293 this.words[i] = carry;
26294 this.length++;
26295 }
26296
26297 return this;
26298 };
26299
26300 BN.prototype.muln = function muln (num) {
26301 return this.clone().imuln(num);
26302 };
26303
26304 // `this` * `this`
26305 BN.prototype.sqr = function sqr () {
26306 return this.mul(this);
26307 };
26308
26309 // `this` * `this` in-place
26310 BN.prototype.isqr = function isqr () {
26311 return this.imul(this.clone());
26312 };
26313
26314 // Math.pow(`this`, `num`)
26315 BN.prototype.pow = function pow (num) {
26316 var w = toBitArray(num);
26317 if (w.length === 0) return new BN(1);
26318
26319 // Skip leading zeroes
26320 var res = this;
26321 for (var i = 0; i < w.length; i++, res = res.sqr()) {
26322 if (w[i] !== 0) break;
26323 }
26324
26325 if (++i < w.length) {
26326 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
26327 if (w[i] === 0) continue;
26328
26329 res = res.mul(q);
26330 }
26331 }
26332
26333 return res;
26334 };
26335
26336 // Shift-left in-place
26337 BN.prototype.iushln = function iushln (bits) {
26338 assert(typeof bits === 'number' && bits >= 0);
26339 var r = bits % 26;
26340 var s = (bits - r) / 26;
26341 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
26342 var i;
26343
26344 if (r !== 0) {
26345 var carry = 0;
26346
26347 for (i = 0; i < this.length; i++) {
26348 var newCarry = this.words[i] & carryMask;
26349 var c = ((this.words[i] | 0) - newCarry) << r;
26350 this.words[i] = c | carry;
26351 carry = newCarry >>> (26 - r);
26352 }
26353
26354 if (carry) {
26355 this.words[i] = carry;
26356 this.length++;
26357 }
26358 }
26359
26360 if (s !== 0) {
26361 for (i = this.length - 1; i >= 0; i--) {
26362 this.words[i + s] = this.words[i];
26363 }
26364
26365 for (i = 0; i < s; i++) {
26366 this.words[i] = 0;
26367 }
26368
26369 this.length += s;
26370 }
26371
26372 return this.strip();
26373 };
26374
26375 BN.prototype.ishln = function ishln (bits) {
26376 // TODO(indutny): implement me
26377 assert(this.negative === 0);
26378 return this.iushln(bits);
26379 };
26380
26381 // Shift-right in-place
26382 // NOTE: `hint` is a lowest bit before trailing zeroes
26383 // NOTE: if `extended` is present - it will be filled with destroyed bits
26384 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
26385 assert(typeof bits === 'number' && bits >= 0);
26386 var h;
26387 if (hint) {
26388 h = (hint - (hint % 26)) / 26;
26389 } else {
26390 h = 0;
26391 }
26392
26393 var r = bits % 26;
26394 var s = Math.min((bits - r) / 26, this.length);
26395 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26396 var maskedWords = extended;
26397
26398 h -= s;
26399 h = Math.max(0, h);
26400
26401 // Extended mode, copy masked part
26402 if (maskedWords) {
26403 for (var i = 0; i < s; i++) {
26404 maskedWords.words[i] = this.words[i];
26405 }
26406 maskedWords.length = s;
26407 }
26408
26409 if (s === 0) {
26410 // No-op, we should not move anything at all
26411 } else if (this.length > s) {
26412 this.length -= s;
26413 for (i = 0; i < this.length; i++) {
26414 this.words[i] = this.words[i + s];
26415 }
26416 } else {
26417 this.words[0] = 0;
26418 this.length = 1;
26419 }
26420
26421 var carry = 0;
26422 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
26423 var word = this.words[i] | 0;
26424 this.words[i] = (carry << (26 - r)) | (word >>> r);
26425 carry = word & mask;
26426 }
26427
26428 // Push carried bits as a mask
26429 if (maskedWords && carry !== 0) {
26430 maskedWords.words[maskedWords.length++] = carry;
26431 }
26432
26433 if (this.length === 0) {
26434 this.words[0] = 0;
26435 this.length = 1;
26436 }
26437
26438 return this.strip();
26439 };
26440
26441 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
26442 // TODO(indutny): implement me
26443 assert(this.negative === 0);
26444 return this.iushrn(bits, hint, extended);
26445 };
26446
26447 // Shift-left
26448 BN.prototype.shln = function shln (bits) {
26449 return this.clone().ishln(bits);
26450 };
26451
26452 BN.prototype.ushln = function ushln (bits) {
26453 return this.clone().iushln(bits);
26454 };
26455
26456 // Shift-right
26457 BN.prototype.shrn = function shrn (bits) {
26458 return this.clone().ishrn(bits);
26459 };
26460
26461 BN.prototype.ushrn = function ushrn (bits) {
26462 return this.clone().iushrn(bits);
26463 };
26464
26465 // Test if n bit is set
26466 BN.prototype.testn = function testn (bit) {
26467 assert(typeof bit === 'number' && bit >= 0);
26468 var r = bit % 26;
26469 var s = (bit - r) / 26;
26470 var q = 1 << r;
26471
26472 // Fast case: bit is much higher than all existing words
26473 if (this.length <= s) return false;
26474
26475 // Check bit and return
26476 var w = this.words[s];
26477
26478 return !!(w & q);
26479 };
26480
26481 // Return only lowers bits of number (in-place)
26482 BN.prototype.imaskn = function imaskn (bits) {
26483 assert(typeof bits === 'number' && bits >= 0);
26484 var r = bits % 26;
26485 var s = (bits - r) / 26;
26486
26487 assert(this.negative === 0, 'imaskn works only with positive numbers');
26488
26489 if (this.length <= s) {
26490 return this;
26491 }
26492
26493 if (r !== 0) {
26494 s++;
26495 }
26496 this.length = Math.min(s, this.length);
26497
26498 if (r !== 0) {
26499 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26500 this.words[this.length - 1] &= mask;
26501 }
26502
26503 return this.strip();
26504 };
26505
26506 // Return only lowers bits of number
26507 BN.prototype.maskn = function maskn (bits) {
26508 return this.clone().imaskn(bits);
26509 };
26510
26511 // Add plain number `num` to `this`
26512 BN.prototype.iaddn = function iaddn (num) {
26513 assert(typeof num === 'number');
26514 assert(num < 0x4000000);
26515 if (num < 0) return this.isubn(-num);
26516
26517 // Possible sign change
26518 if (this.negative !== 0) {
26519 if (this.length === 1 && (this.words[0] | 0) < num) {
26520 this.words[0] = num - (this.words[0] | 0);
26521 this.negative = 0;
26522 return this;
26523 }
26524
26525 this.negative = 0;
26526 this.isubn(num);
26527 this.negative = 1;
26528 return this;
26529 }
26530
26531 // Add without checks
26532 return this._iaddn(num);
26533 };
26534
26535 BN.prototype._iaddn = function _iaddn (num) {
26536 this.words[0] += num;
26537
26538 // Carry
26539 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
26540 this.words[i] -= 0x4000000;
26541 if (i === this.length - 1) {
26542 this.words[i + 1] = 1;
26543 } else {
26544 this.words[i + 1]++;
26545 }
26546 }
26547 this.length = Math.max(this.length, i + 1);
26548
26549 return this;
26550 };
26551
26552 // Subtract plain number `num` from `this`
26553 BN.prototype.isubn = function isubn (num) {
26554 assert(typeof num === 'number');
26555 assert(num < 0x4000000);
26556 if (num < 0) return this.iaddn(-num);
26557
26558 if (this.negative !== 0) {
26559 this.negative = 0;
26560 this.iaddn(num);
26561 this.negative = 1;
26562 return this;
26563 }
26564
26565 this.words[0] -= num;
26566
26567 if (this.length === 1 && this.words[0] < 0) {
26568 this.words[0] = -this.words[0];
26569 this.negative = 1;
26570 } else {
26571 // Carry
26572 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
26573 this.words[i] += 0x4000000;
26574 this.words[i + 1] -= 1;
26575 }
26576 }
26577
26578 return this.strip();
26579 };
26580
26581 BN.prototype.addn = function addn (num) {
26582 return this.clone().iaddn(num);
26583 };
26584
26585 BN.prototype.subn = function subn (num) {
26586 return this.clone().isubn(num);
26587 };
26588
26589 BN.prototype.iabs = function iabs () {
26590 this.negative = 0;
26591
26592 return this;
26593 };
26594
26595 BN.prototype.abs = function abs () {
26596 return this.clone().iabs();
26597 };
26598
26599 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
26600 var len = num.length + shift;
26601 var i;
26602
26603 this._expand(len);
26604
26605 var w;
26606 var carry = 0;
26607 for (i = 0; i < num.length; i++) {
26608 w = (this.words[i + shift] | 0) + carry;
26609 var right = (num.words[i] | 0) * mul;
26610 w -= right & 0x3ffffff;
26611 carry = (w >> 26) - ((right / 0x4000000) | 0);
26612 this.words[i + shift] = w & 0x3ffffff;
26613 }
26614 for (; i < this.length - shift; i++) {
26615 w = (this.words[i + shift] | 0) + carry;
26616 carry = w >> 26;
26617 this.words[i + shift] = w & 0x3ffffff;
26618 }
26619
26620 if (carry === 0) return this.strip();
26621
26622 // Subtraction overflow
26623 assert(carry === -1);
26624 carry = 0;
26625 for (i = 0; i < this.length; i++) {
26626 w = -(this.words[i] | 0) + carry;
26627 carry = w >> 26;
26628 this.words[i] = w & 0x3ffffff;
26629 }
26630 this.negative = 1;
26631
26632 return this.strip();
26633 };
26634
26635 BN.prototype._wordDiv = function _wordDiv (num, mode) {
26636 var shift = this.length - num.length;
26637
26638 var a = this.clone();
26639 var b = num;
26640
26641 // Normalize
26642 var bhi = b.words[b.length - 1] | 0;
26643 var bhiBits = this._countBits(bhi);
26644 shift = 26 - bhiBits;
26645 if (shift !== 0) {
26646 b = b.ushln(shift);
26647 a.iushln(shift);
26648 bhi = b.words[b.length - 1] | 0;
26649 }
26650
26651 // Initialize quotient
26652 var m = a.length - b.length;
26653 var q;
26654
26655 if (mode !== 'mod') {
26656 q = new BN(null);
26657 q.length = m + 1;
26658 q.words = new Array(q.length);
26659 for (var i = 0; i < q.length; i++) {
26660 q.words[i] = 0;
26661 }
26662 }
26663
26664 var diff = a.clone()._ishlnsubmul(b, 1, m);
26665 if (diff.negative === 0) {
26666 a = diff;
26667 if (q) {
26668 q.words[m] = 1;
26669 }
26670 }
26671
26672 for (var j = m - 1; j >= 0; j--) {
26673 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
26674 (a.words[b.length + j - 1] | 0);
26675
26676 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
26677 // (0x7ffffff)
26678 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
26679
26680 a._ishlnsubmul(b, qj, j);
26681 while (a.negative !== 0) {
26682 qj--;
26683 a.negative = 0;
26684 a._ishlnsubmul(b, 1, j);
26685 if (!a.isZero()) {
26686 a.negative ^= 1;
26687 }
26688 }
26689 if (q) {
26690 q.words[j] = qj;
26691 }
26692 }
26693 if (q) {
26694 q.strip();
26695 }
26696 a.strip();
26697
26698 // Denormalize
26699 if (mode !== 'div' && shift !== 0) {
26700 a.iushrn(shift);
26701 }
26702
26703 return {
26704 div: q || null,
26705 mod: a
26706 };
26707 };
26708
26709 // NOTE: 1) `mode` can be set to `mod` to request mod only,
26710 // to `div` to request div only, or be absent to
26711 // request both div & mod
26712 // 2) `positive` is true if unsigned mod is requested
26713 BN.prototype.divmod = function divmod (num, mode, positive) {
26714 assert(!num.isZero());
26715
26716 if (this.isZero()) {
26717 return {
26718 div: new BN(0),
26719 mod: new BN(0)
26720 };
26721 }
26722
26723 var div, mod, res;
26724 if (this.negative !== 0 && num.negative === 0) {
26725 res = this.neg().divmod(num, mode);
26726
26727 if (mode !== 'mod') {
26728 div = res.div.neg();
26729 }
26730
26731 if (mode !== 'div') {
26732 mod = res.mod.neg();
26733 if (positive && mod.negative !== 0) {
26734 mod.iadd(num);
26735 }
26736 }
26737
26738 return {
26739 div: div,
26740 mod: mod
26741 };
26742 }
26743
26744 if (this.negative === 0 && num.negative !== 0) {
26745 res = this.divmod(num.neg(), mode);
26746
26747 if (mode !== 'mod') {
26748 div = res.div.neg();
26749 }
26750
26751 return {
26752 div: div,
26753 mod: res.mod
26754 };
26755 }
26756
26757 if ((this.negative & num.negative) !== 0) {
26758 res = this.neg().divmod(num.neg(), mode);
26759
26760 if (mode !== 'div') {
26761 mod = res.mod.neg();
26762 if (positive && mod.negative !== 0) {
26763 mod.isub(num);
26764 }
26765 }
26766
26767 return {
26768 div: res.div,
26769 mod: mod
26770 };
26771 }
26772
26773 // Both numbers are positive at this point
26774
26775 // Strip both numbers to approximate shift value
26776 if (num.length > this.length || this.cmp(num) < 0) {
26777 return {
26778 div: new BN(0),
26779 mod: this
26780 };
26781 }
26782
26783 // Very short reduction
26784 if (num.length === 1) {
26785 if (mode === 'div') {
26786 return {
26787 div: this.divn(num.words[0]),
26788 mod: null
26789 };
26790 }
26791
26792 if (mode === 'mod') {
26793 return {
26794 div: null,
26795 mod: new BN(this.modn(num.words[0]))
26796 };
26797 }
26798
26799 return {
26800 div: this.divn(num.words[0]),
26801 mod: new BN(this.modn(num.words[0]))
26802 };
26803 }
26804
26805 return this._wordDiv(num, mode);
26806 };
26807
26808 // Find `this` / `num`
26809 BN.prototype.div = function div (num) {
26810 return this.divmod(num, 'div', false).div;
26811 };
26812
26813 // Find `this` % `num`
26814 BN.prototype.mod = function mod (num) {
26815 return this.divmod(num, 'mod', false).mod;
26816 };
26817
26818 BN.prototype.umod = function umod (num) {
26819 return this.divmod(num, 'mod', true).mod;
26820 };
26821
26822 // Find Round(`this` / `num`)
26823 BN.prototype.divRound = function divRound (num) {
26824 var dm = this.divmod(num);
26825
26826 // Fast case - exact division
26827 if (dm.mod.isZero()) return dm.div;
26828
26829 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
26830
26831 var half = num.ushrn(1);
26832 var r2 = num.andln(1);
26833 var cmp = mod.cmp(half);
26834
26835 // Round down
26836 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
26837
26838 // Round up
26839 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
26840 };
26841
26842 BN.prototype.modn = function modn (num) {
26843 assert(num <= 0x3ffffff);
26844 var p = (1 << 26) % num;
26845
26846 var acc = 0;
26847 for (var i = this.length - 1; i >= 0; i--) {
26848 acc = (p * acc + (this.words[i] | 0)) % num;
26849 }
26850
26851 return acc;
26852 };
26853
26854 // In-place division by number
26855 BN.prototype.idivn = function idivn (num) {
26856 assert(num <= 0x3ffffff);
26857
26858 var carry = 0;
26859 for (var i = this.length - 1; i >= 0; i--) {
26860 var w = (this.words[i] | 0) + carry * 0x4000000;
26861 this.words[i] = (w / num) | 0;
26862 carry = w % num;
26863 }
26864
26865 return this.strip();
26866 };
26867
26868 BN.prototype.divn = function divn (num) {
26869 return this.clone().idivn(num);
26870 };
26871
26872 BN.prototype.egcd = function egcd (p) {
26873 assert(p.negative === 0);
26874 assert(!p.isZero());
26875
26876 var x = this;
26877 var y = p.clone();
26878
26879 if (x.negative !== 0) {
26880 x = x.umod(p);
26881 } else {
26882 x = x.clone();
26883 }
26884
26885 // A * x + B * y = x
26886 var A = new BN(1);
26887 var B = new BN(0);
26888
26889 // C * x + D * y = y
26890 var C = new BN(0);
26891 var D = new BN(1);
26892
26893 var g = 0;
26894
26895 while (x.isEven() && y.isEven()) {
26896 x.iushrn(1);
26897 y.iushrn(1);
26898 ++g;
26899 }
26900
26901 var yp = y.clone();
26902 var xp = x.clone();
26903
26904 while (!x.isZero()) {
26905 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26906 if (i > 0) {
26907 x.iushrn(i);
26908 while (i-- > 0) {
26909 if (A.isOdd() || B.isOdd()) {
26910 A.iadd(yp);
26911 B.isub(xp);
26912 }
26913
26914 A.iushrn(1);
26915 B.iushrn(1);
26916 }
26917 }
26918
26919 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26920 if (j > 0) {
26921 y.iushrn(j);
26922 while (j-- > 0) {
26923 if (C.isOdd() || D.isOdd()) {
26924 C.iadd(yp);
26925 D.isub(xp);
26926 }
26927
26928 C.iushrn(1);
26929 D.iushrn(1);
26930 }
26931 }
26932
26933 if (x.cmp(y) >= 0) {
26934 x.isub(y);
26935 A.isub(C);
26936 B.isub(D);
26937 } else {
26938 y.isub(x);
26939 C.isub(A);
26940 D.isub(B);
26941 }
26942 }
26943
26944 return {
26945 a: C,
26946 b: D,
26947 gcd: y.iushln(g)
26948 };
26949 };
26950
26951 // This is reduced incarnation of the binary EEA
26952 // above, designated to invert members of the
26953 // _prime_ fields F(p) at a maximal speed
26954 BN.prototype._invmp = function _invmp (p) {
26955 assert(p.negative === 0);
26956 assert(!p.isZero());
26957
26958 var a = this;
26959 var b = p.clone();
26960
26961 if (a.negative !== 0) {
26962 a = a.umod(p);
26963 } else {
26964 a = a.clone();
26965 }
26966
26967 var x1 = new BN(1);
26968 var x2 = new BN(0);
26969
26970 var delta = b.clone();
26971
26972 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
26973 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
26974 if (i > 0) {
26975 a.iushrn(i);
26976 while (i-- > 0) {
26977 if (x1.isOdd()) {
26978 x1.iadd(delta);
26979 }
26980
26981 x1.iushrn(1);
26982 }
26983 }
26984
26985 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
26986 if (j > 0) {
26987 b.iushrn(j);
26988 while (j-- > 0) {
26989 if (x2.isOdd()) {
26990 x2.iadd(delta);
26991 }
26992
26993 x2.iushrn(1);
26994 }
26995 }
26996
26997 if (a.cmp(b) >= 0) {
26998 a.isub(b);
26999 x1.isub(x2);
27000 } else {
27001 b.isub(a);
27002 x2.isub(x1);
27003 }
27004 }
27005
27006 var res;
27007 if (a.cmpn(1) === 0) {
27008 res = x1;
27009 } else {
27010 res = x2;
27011 }
27012
27013 if (res.cmpn(0) < 0) {
27014 res.iadd(p);
27015 }
27016
27017 return res;
27018 };
27019
27020 BN.prototype.gcd = function gcd (num) {
27021 if (this.isZero()) return num.abs();
27022 if (num.isZero()) return this.abs();
27023
27024 var a = this.clone();
27025 var b = num.clone();
27026 a.negative = 0;
27027 b.negative = 0;
27028
27029 // Remove common factor of two
27030 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27031 a.iushrn(1);
27032 b.iushrn(1);
27033 }
27034
27035 do {
27036 while (a.isEven()) {
27037 a.iushrn(1);
27038 }
27039 while (b.isEven()) {
27040 b.iushrn(1);
27041 }
27042
27043 var r = a.cmp(b);
27044 if (r < 0) {
27045 // Swap `a` and `b` to make `a` always bigger than `b`
27046 var t = a;
27047 a = b;
27048 b = t;
27049 } else if (r === 0 || b.cmpn(1) === 0) {
27050 break;
27051 }
27052
27053 a.isub(b);
27054 } while (true);
27055
27056 return b.iushln(shift);
27057 };
27058
27059 // Invert number in the field F(num)
27060 BN.prototype.invm = function invm (num) {
27061 return this.egcd(num).a.umod(num);
27062 };
27063
27064 BN.prototype.isEven = function isEven () {
27065 return (this.words[0] & 1) === 0;
27066 };
27067
27068 BN.prototype.isOdd = function isOdd () {
27069 return (this.words[0] & 1) === 1;
27070 };
27071
27072 // And first word and num
27073 BN.prototype.andln = function andln (num) {
27074 return this.words[0] & num;
27075 };
27076
27077 // Increment at the bit position in-line
27078 BN.prototype.bincn = function bincn (bit) {
27079 assert(typeof bit === 'number');
27080 var r = bit % 26;
27081 var s = (bit - r) / 26;
27082 var q = 1 << r;
27083
27084 // Fast case: bit is much higher than all existing words
27085 if (this.length <= s) {
27086 this._expand(s + 1);
27087 this.words[s] |= q;
27088 return this;
27089 }
27090
27091 // Add bit and propagate, if needed
27092 var carry = q;
27093 for (var i = s; carry !== 0 && i < this.length; i++) {
27094 var w = this.words[i] | 0;
27095 w += carry;
27096 carry = w >>> 26;
27097 w &= 0x3ffffff;
27098 this.words[i] = w;
27099 }
27100 if (carry !== 0) {
27101 this.words[i] = carry;
27102 this.length++;
27103 }
27104 return this;
27105 };
27106
27107 BN.prototype.isZero = function isZero () {
27108 return this.length === 1 && this.words[0] === 0;
27109 };
27110
27111 BN.prototype.cmpn = function cmpn (num) {
27112 var negative = num < 0;
27113
27114 if (this.negative !== 0 && !negative) return -1;
27115 if (this.negative === 0 && negative) return 1;
27116
27117 this.strip();
27118
27119 var res;
27120 if (this.length > 1) {
27121 res = 1;
27122 } else {
27123 if (negative) {
27124 num = -num;
27125 }
27126
27127 assert(num <= 0x3ffffff, 'Number is too big');
27128
27129 var w = this.words[0] | 0;
27130 res = w === num ? 0 : w < num ? -1 : 1;
27131 }
27132 if (this.negative !== 0) return -res | 0;
27133 return res;
27134 };
27135
27136 // Compare two numbers and return:
27137 // 1 - if `this` > `num`
27138 // 0 - if `this` == `num`
27139 // -1 - if `this` < `num`
27140 BN.prototype.cmp = function cmp (num) {
27141 if (this.negative !== 0 && num.negative === 0) return -1;
27142 if (this.negative === 0 && num.negative !== 0) return 1;
27143
27144 var res = this.ucmp(num);
27145 if (this.negative !== 0) return -res | 0;
27146 return res;
27147 };
27148
27149 // Unsigned comparison
27150 BN.prototype.ucmp = function ucmp (num) {
27151 // At this point both numbers have the same sign
27152 if (this.length > num.length) return 1;
27153 if (this.length < num.length) return -1;
27154
27155 var res = 0;
27156 for (var i = this.length - 1; i >= 0; i--) {
27157 var a = this.words[i] | 0;
27158 var b = num.words[i] | 0;
27159
27160 if (a === b) continue;
27161 if (a < b) {
27162 res = -1;
27163 } else if (a > b) {
27164 res = 1;
27165 }
27166 break;
27167 }
27168 return res;
27169 };
27170
27171 BN.prototype.gtn = function gtn (num) {
27172 return this.cmpn(num) === 1;
27173 };
27174
27175 BN.prototype.gt = function gt (num) {
27176 return this.cmp(num) === 1;
27177 };
27178
27179 BN.prototype.gten = function gten (num) {
27180 return this.cmpn(num) >= 0;
27181 };
27182
27183 BN.prototype.gte = function gte (num) {
27184 return this.cmp(num) >= 0;
27185 };
27186
27187 BN.prototype.ltn = function ltn (num) {
27188 return this.cmpn(num) === -1;
27189 };
27190
27191 BN.prototype.lt = function lt (num) {
27192 return this.cmp(num) === -1;
27193 };
27194
27195 BN.prototype.lten = function lten (num) {
27196 return this.cmpn(num) <= 0;
27197 };
27198
27199 BN.prototype.lte = function lte (num) {
27200 return this.cmp(num) <= 0;
27201 };
27202
27203 BN.prototype.eqn = function eqn (num) {
27204 return this.cmpn(num) === 0;
27205 };
27206
27207 BN.prototype.eq = function eq (num) {
27208 return this.cmp(num) === 0;
27209 };
27210
27211 //
27212 // A reduce context, could be using montgomery or something better, depending
27213 // on the `m` itself.
27214 //
27215 BN.red = function red (num) {
27216 return new Red(num);
27217 };
27218
27219 BN.prototype.toRed = function toRed (ctx) {
27220 assert(!this.red, 'Already a number in reduction context');
27221 assert(this.negative === 0, 'red works only with positives');
27222 return ctx.convertTo(this)._forceRed(ctx);
27223 };
27224
27225 BN.prototype.fromRed = function fromRed () {
27226 assert(this.red, 'fromRed works only with numbers in reduction context');
27227 return this.red.convertFrom(this);
27228 };
27229
27230 BN.prototype._forceRed = function _forceRed (ctx) {
27231 this.red = ctx;
27232 return this;
27233 };
27234
27235 BN.prototype.forceRed = function forceRed (ctx) {
27236 assert(!this.red, 'Already a number in reduction context');
27237 return this._forceRed(ctx);
27238 };
27239
27240 BN.prototype.redAdd = function redAdd (num) {
27241 assert(this.red, 'redAdd works only with red numbers');
27242 return this.red.add(this, num);
27243 };
27244
27245 BN.prototype.redIAdd = function redIAdd (num) {
27246 assert(this.red, 'redIAdd works only with red numbers');
27247 return this.red.iadd(this, num);
27248 };
27249
27250 BN.prototype.redSub = function redSub (num) {
27251 assert(this.red, 'redSub works only with red numbers');
27252 return this.red.sub(this, num);
27253 };
27254
27255 BN.prototype.redISub = function redISub (num) {
27256 assert(this.red, 'redISub works only with red numbers');
27257 return this.red.isub(this, num);
27258 };
27259
27260 BN.prototype.redShl = function redShl (num) {
27261 assert(this.red, 'redShl works only with red numbers');
27262 return this.red.shl(this, num);
27263 };
27264
27265 BN.prototype.redMul = function redMul (num) {
27266 assert(this.red, 'redMul works only with red numbers');
27267 this.red._verify2(this, num);
27268 return this.red.mul(this, num);
27269 };
27270
27271 BN.prototype.redIMul = function redIMul (num) {
27272 assert(this.red, 'redMul works only with red numbers');
27273 this.red._verify2(this, num);
27274 return this.red.imul(this, num);
27275 };
27276
27277 BN.prototype.redSqr = function redSqr () {
27278 assert(this.red, 'redSqr works only with red numbers');
27279 this.red._verify1(this);
27280 return this.red.sqr(this);
27281 };
27282
27283 BN.prototype.redISqr = function redISqr () {
27284 assert(this.red, 'redISqr works only with red numbers');
27285 this.red._verify1(this);
27286 return this.red.isqr(this);
27287 };
27288
27289 // Square root over p
27290 BN.prototype.redSqrt = function redSqrt () {
27291 assert(this.red, 'redSqrt works only with red numbers');
27292 this.red._verify1(this);
27293 return this.red.sqrt(this);
27294 };
27295
27296 BN.prototype.redInvm = function redInvm () {
27297 assert(this.red, 'redInvm works only with red numbers');
27298 this.red._verify1(this);
27299 return this.red.invm(this);
27300 };
27301
27302 // Return negative clone of `this` % `red modulo`
27303 BN.prototype.redNeg = function redNeg () {
27304 assert(this.red, 'redNeg works only with red numbers');
27305 this.red._verify1(this);
27306 return this.red.neg(this);
27307 };
27308
27309 BN.prototype.redPow = function redPow (num) {
27310 assert(this.red && !num.red, 'redPow(normalNum)');
27311 this.red._verify1(this);
27312 return this.red.pow(this, num);
27313 };
27314
27315 // Prime numbers with efficient reduction
27316 var primes = {
27317 k256: null,
27318 p224: null,
27319 p192: null,
27320 p25519: null
27321 };
27322
27323 // Pseudo-Mersenne prime
27324 function MPrime (name, p) {
27325 // P = 2 ^ N - K
27326 this.name = name;
27327 this.p = new BN(p, 16);
27328 this.n = this.p.bitLength();
27329 this.k = new BN(1).iushln(this.n).isub(this.p);
27330
27331 this.tmp = this._tmp();
27332 }
27333
27334 MPrime.prototype._tmp = function _tmp () {
27335 var tmp = new BN(null);
27336 tmp.words = new Array(Math.ceil(this.n / 13));
27337 return tmp;
27338 };
27339
27340 MPrime.prototype.ireduce = function ireduce (num) {
27341 // Assumes that `num` is less than `P^2`
27342 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
27343 var r = num;
27344 var rlen;
27345
27346 do {
27347 this.split(r, this.tmp);
27348 r = this.imulK(r);
27349 r = r.iadd(this.tmp);
27350 rlen = r.bitLength();
27351 } while (rlen > this.n);
27352
27353 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
27354 if (cmp === 0) {
27355 r.words[0] = 0;
27356 r.length = 1;
27357 } else if (cmp > 0) {
27358 r.isub(this.p);
27359 } else {
27360 r.strip();
27361 }
27362
27363 return r;
27364 };
27365
27366 MPrime.prototype.split = function split (input, out) {
27367 input.iushrn(this.n, 0, out);
27368 };
27369
27370 MPrime.prototype.imulK = function imulK (num) {
27371 return num.imul(this.k);
27372 };
27373
27374 function K256 () {
27375 MPrime.call(
27376 this,
27377 'k256',
27378 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
27379 }
27380 inherits(K256, MPrime);
27381
27382 K256.prototype.split = function split (input, output) {
27383 // 256 = 9 * 26 + 22
27384 var mask = 0x3fffff;
27385
27386 var outLen = Math.min(input.length, 9);
27387 for (var i = 0; i < outLen; i++) {
27388 output.words[i] = input.words[i];
27389 }
27390 output.length = outLen;
27391
27392 if (input.length <= 9) {
27393 input.words[0] = 0;
27394 input.length = 1;
27395 return;
27396 }
27397
27398 // Shift by 9 limbs
27399 var prev = input.words[9];
27400 output.words[output.length++] = prev & mask;
27401
27402 for (i = 10; i < input.length; i++) {
27403 var next = input.words[i] | 0;
27404 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
27405 prev = next;
27406 }
27407 prev >>>= 22;
27408 input.words[i - 10] = prev;
27409 if (prev === 0 && input.length > 10) {
27410 input.length -= 10;
27411 } else {
27412 input.length -= 9;
27413 }
27414 };
27415
27416 K256.prototype.imulK = function imulK (num) {
27417 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
27418 num.words[num.length] = 0;
27419 num.words[num.length + 1] = 0;
27420 num.length += 2;
27421
27422 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
27423 var lo = 0;
27424 for (var i = 0; i < num.length; i++) {
27425 var w = num.words[i] | 0;
27426 lo += w * 0x3d1;
27427 num.words[i] = lo & 0x3ffffff;
27428 lo = w * 0x40 + ((lo / 0x4000000) | 0);
27429 }
27430
27431 // Fast length reduction
27432 if (num.words[num.length - 1] === 0) {
27433 num.length--;
27434 if (num.words[num.length - 1] === 0) {
27435 num.length--;
27436 }
27437 }
27438 return num;
27439 };
27440
27441 function P224 () {
27442 MPrime.call(
27443 this,
27444 'p224',
27445 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
27446 }
27447 inherits(P224, MPrime);
27448
27449 function P192 () {
27450 MPrime.call(
27451 this,
27452 'p192',
27453 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
27454 }
27455 inherits(P192, MPrime);
27456
27457 function P25519 () {
27458 // 2 ^ 255 - 19
27459 MPrime.call(
27460 this,
27461 '25519',
27462 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
27463 }
27464 inherits(P25519, MPrime);
27465
27466 P25519.prototype.imulK = function imulK (num) {
27467 // K = 0x13
27468 var carry = 0;
27469 for (var i = 0; i < num.length; i++) {
27470 var hi = (num.words[i] | 0) * 0x13 + carry;
27471 var lo = hi & 0x3ffffff;
27472 hi >>>= 26;
27473
27474 num.words[i] = lo;
27475 carry = hi;
27476 }
27477 if (carry !== 0) {
27478 num.words[num.length++] = carry;
27479 }
27480 return num;
27481 };
27482
27483 // Exported mostly for testing purposes, use plain name instead
27484 BN._prime = function prime (name) {
27485 // Cached version of prime
27486 if (primes[name]) return primes[name];
27487
27488 var prime;
27489 if (name === 'k256') {
27490 prime = new K256();
27491 } else if (name === 'p224') {
27492 prime = new P224();
27493 } else if (name === 'p192') {
27494 prime = new P192();
27495 } else if (name === 'p25519') {
27496 prime = new P25519();
27497 } else {
27498 throw new Error('Unknown prime ' + name);
27499 }
27500 primes[name] = prime;
27501
27502 return prime;
27503 };
27504
27505 //
27506 // Base reduction engine
27507 //
27508 function Red (m) {
27509 if (typeof m === 'string') {
27510 var prime = BN._prime(m);
27511 this.m = prime.p;
27512 this.prime = prime;
27513 } else {
27514 assert(m.gtn(1), 'modulus must be greater than 1');
27515 this.m = m;
27516 this.prime = null;
27517 }
27518 }
27519
27520 Red.prototype._verify1 = function _verify1 (a) {
27521 assert(a.negative === 0, 'red works only with positives');
27522 assert(a.red, 'red works only with red numbers');
27523 };
27524
27525 Red.prototype._verify2 = function _verify2 (a, b) {
27526 assert((a.negative | b.negative) === 0, 'red works only with positives');
27527 assert(a.red && a.red === b.red,
27528 'red works only with red numbers');
27529 };
27530
27531 Red.prototype.imod = function imod (a) {
27532 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
27533 return a.umod(this.m)._forceRed(this);
27534 };
27535
27536 Red.prototype.neg = function neg (a) {
27537 if (a.isZero()) {
27538 return a.clone();
27539 }
27540
27541 return this.m.sub(a)._forceRed(this);
27542 };
27543
27544 Red.prototype.add = function add (a, b) {
27545 this._verify2(a, b);
27546
27547 var res = a.add(b);
27548 if (res.cmp(this.m) >= 0) {
27549 res.isub(this.m);
27550 }
27551 return res._forceRed(this);
27552 };
27553
27554 Red.prototype.iadd = function iadd (a, b) {
27555 this._verify2(a, b);
27556
27557 var res = a.iadd(b);
27558 if (res.cmp(this.m) >= 0) {
27559 res.isub(this.m);
27560 }
27561 return res;
27562 };
27563
27564 Red.prototype.sub = function sub (a, b) {
27565 this._verify2(a, b);
27566
27567 var res = a.sub(b);
27568 if (res.cmpn(0) < 0) {
27569 res.iadd(this.m);
27570 }
27571 return res._forceRed(this);
27572 };
27573
27574 Red.prototype.isub = function isub (a, b) {
27575 this._verify2(a, b);
27576
27577 var res = a.isub(b);
27578 if (res.cmpn(0) < 0) {
27579 res.iadd(this.m);
27580 }
27581 return res;
27582 };
27583
27584 Red.prototype.shl = function shl (a, num) {
27585 this._verify1(a);
27586 return this.imod(a.ushln(num));
27587 };
27588
27589 Red.prototype.imul = function imul (a, b) {
27590 this._verify2(a, b);
27591 return this.imod(a.imul(b));
27592 };
27593
27594 Red.prototype.mul = function mul (a, b) {
27595 this._verify2(a, b);
27596 return this.imod(a.mul(b));
27597 };
27598
27599 Red.prototype.isqr = function isqr (a) {
27600 return this.imul(a, a.clone());
27601 };
27602
27603 Red.prototype.sqr = function sqr (a) {
27604 return this.mul(a, a);
27605 };
27606
27607 Red.prototype.sqrt = function sqrt (a) {
27608 if (a.isZero()) return a.clone();
27609
27610 var mod3 = this.m.andln(3);
27611 assert(mod3 % 2 === 1);
27612
27613 // Fast case
27614 if (mod3 === 3) {
27615 var pow = this.m.add(new BN(1)).iushrn(2);
27616 return this.pow(a, pow);
27617 }
27618
27619 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
27620 //
27621 // Find Q and S, that Q * 2 ^ S = (P - 1)
27622 var q = this.m.subn(1);
27623 var s = 0;
27624 while (!q.isZero() && q.andln(1) === 0) {
27625 s++;
27626 q.iushrn(1);
27627 }
27628 assert(!q.isZero());
27629
27630 var one = new BN(1).toRed(this);
27631 var nOne = one.redNeg();
27632
27633 // Find quadratic non-residue
27634 // NOTE: Max is such because of generalized Riemann hypothesis.
27635 var lpow = this.m.subn(1).iushrn(1);
27636 var z = this.m.bitLength();
27637 z = new BN(2 * z * z).toRed(this);
27638
27639 while (this.pow(z, lpow).cmp(nOne) !== 0) {
27640 z.redIAdd(nOne);
27641 }
27642
27643 var c = this.pow(z, q);
27644 var r = this.pow(a, q.addn(1).iushrn(1));
27645 var t = this.pow(a, q);
27646 var m = s;
27647 while (t.cmp(one) !== 0) {
27648 var tmp = t;
27649 for (var i = 0; tmp.cmp(one) !== 0; i++) {
27650 tmp = tmp.redSqr();
27651 }
27652 assert(i < m);
27653 var b = this.pow(c, new BN(1).iushln(m - i - 1));
27654
27655 r = r.redMul(b);
27656 c = b.redSqr();
27657 t = t.redMul(c);
27658 m = i;
27659 }
27660
27661 return r;
27662 };
27663
27664 Red.prototype.invm = function invm (a) {
27665 var inv = a._invmp(this.m);
27666 if (inv.negative !== 0) {
27667 inv.negative = 0;
27668 return this.imod(inv).redNeg();
27669 } else {
27670 return this.imod(inv);
27671 }
27672 };
27673
27674 Red.prototype.pow = function pow (a, num) {
27675 if (num.isZero()) return new BN(1);
27676 if (num.cmpn(1) === 0) return a.clone();
27677
27678 var windowSize = 4;
27679 var wnd = new Array(1 << windowSize);
27680 wnd[0] = new BN(1).toRed(this);
27681 wnd[1] = a;
27682 for (var i = 2; i < wnd.length; i++) {
27683 wnd[i] = this.mul(wnd[i - 1], a);
27684 }
27685
27686 var res = wnd[0];
27687 var current = 0;
27688 var currentLen = 0;
27689 var start = num.bitLength() % 26;
27690 if (start === 0) {
27691 start = 26;
27692 }
27693
27694 for (i = num.length - 1; i >= 0; i--) {
27695 var word = num.words[i];
27696 for (var j = start - 1; j >= 0; j--) {
27697 var bit = (word >> j) & 1;
27698 if (res !== wnd[0]) {
27699 res = this.sqr(res);
27700 }
27701
27702 if (bit === 0 && current === 0) {
27703 currentLen = 0;
27704 continue;
27705 }
27706
27707 current <<= 1;
27708 current |= bit;
27709 currentLen++;
27710 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
27711
27712 res = this.mul(res, wnd[current]);
27713 currentLen = 0;
27714 current = 0;
27715 }
27716 start = 26;
27717 }
27718
27719 return res;
27720 };
27721
27722 Red.prototype.convertTo = function convertTo (num) {
27723 var r = num.umod(this.m);
27724
27725 return r === num ? r.clone() : r;
27726 };
27727
27728 Red.prototype.convertFrom = function convertFrom (num) {
27729 var res = num.clone();
27730 res.red = null;
27731 return res;
27732 };
27733
27734 //
27735 // Montgomery method engine
27736 //
27737
27738 BN.mont = function mont (num) {
27739 return new Mont(num);
27740 };
27741
27742 function Mont (m) {
27743 Red.call(this, m);
27744
27745 this.shift = this.m.bitLength();
27746 if (this.shift % 26 !== 0) {
27747 this.shift += 26 - (this.shift % 26);
27748 }
27749
27750 this.r = new BN(1).iushln(this.shift);
27751 this.r2 = this.imod(this.r.sqr());
27752 this.rinv = this.r._invmp(this.m);
27753
27754 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
27755 this.minv = this.minv.umod(this.r);
27756 this.minv = this.r.sub(this.minv);
27757 }
27758 inherits(Mont, Red);
27759
27760 Mont.prototype.convertTo = function convertTo (num) {
27761 return this.imod(num.ushln(this.shift));
27762 };
27763
27764 Mont.prototype.convertFrom = function convertFrom (num) {
27765 var r = this.imod(num.mul(this.rinv));
27766 r.red = null;
27767 return r;
27768 };
27769
27770 Mont.prototype.imul = function imul (a, b) {
27771 if (a.isZero() || b.isZero()) {
27772 a.words[0] = 0;
27773 a.length = 1;
27774 return a;
27775 }
27776
27777 var t = a.imul(b);
27778 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27779 var u = t.isub(c).iushrn(this.shift);
27780 var res = u;
27781
27782 if (u.cmp(this.m) >= 0) {
27783 res = u.isub(this.m);
27784 } else if (u.cmpn(0) < 0) {
27785 res = u.iadd(this.m);
27786 }
27787
27788 return res._forceRed(this);
27789 };
27790
27791 Mont.prototype.mul = function mul (a, b) {
27792 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
27793
27794 var t = a.mul(b);
27795 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
27796 var u = t.isub(c).iushrn(this.shift);
27797 var res = u;
27798 if (u.cmp(this.m) >= 0) {
27799 res = u.isub(this.m);
27800 } else if (u.cmpn(0) < 0) {
27801 res = u.iadd(this.m);
27802 }
27803
27804 return res._forceRed(this);
27805 };
27806
27807 Mont.prototype.invm = function invm (a) {
27808 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
27809 var res = this.imod(a._invmp(this.m).mul(this.r2));
27810 return res._forceRed(this);
27811 };
27812 })(typeof module === 'undefined' || module, this);
27813
27814 },{}],34:[function(require,module,exports){
27815 var r;
27816
27817 module.exports = function rand(len) {
27818 if (!r)
27819 r = new Rand(null);
27820
27821 return r.generate(len);
27822 };
27823
27824 function Rand(rand) {
27825 this.rand = rand;
27826 }
27827 module.exports.Rand = Rand;
27828
27829 Rand.prototype.generate = function generate(len) {
27830 return this._rand(len);
27831 };
27832
27833 if (typeof self === 'object') {
27834 if (self.crypto && self.crypto.getRandomValues) {
27835 // Modern browsers
27836 Rand.prototype._rand = function _rand(n) {
27837 var arr = new Uint8Array(n);
27838 self.crypto.getRandomValues(arr);
27839 return arr;
27840 };
27841 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
27842 // IE
27843 Rand.prototype._rand = function _rand(n) {
27844 var arr = new Uint8Array(n);
27845 self.msCrypto.getRandomValues(arr);
27846 return arr;
27847 };
27848 } else {
27849 // Old junk
27850 Rand.prototype._rand = function() {
27851 throw new Error('Not implemented yet');
27852 };
27853 }
27854 } else {
27855 // Node.js or Web worker with no crypto support
27856 try {
27857 var crypto = require('crypto');
27858
27859 Rand.prototype._rand = function _rand(n) {
27860 return crypto.randomBytes(n);
27861 };
27862 } catch (e) {
27863 // Emulate crypto API using randy
27864 Rand.prototype._rand = function _rand(n) {
27865 var res = new Uint8Array(n);
27866 for (var i = 0; i < res.length; i++)
27867 res[i] = this.rand.getByte();
27868 return res;
27869 };
27870 }
27871 }
27872
27873 },{"crypto":3}],35:[function(require,module,exports){
27874 (function (Buffer){
27875 var Transform = require('stream').Transform
27876 var inherits = require('inherits')
27877 var StringDecoder = require('string_decoder').StringDecoder
27878 module.exports = CipherBase
27879 inherits(CipherBase, Transform)
27880 function CipherBase (hashMode) {
27881 Transform.call(this)
27882 this.hashMode = typeof hashMode === 'string'
27883 if (this.hashMode) {
27884 this[hashMode] = this._finalOrDigest
27885 } else {
27886 this.final = this._finalOrDigest
27887 }
27888 this._decoder = null
27889 this._encoding = null
27890 }
27891 CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
27892 if (typeof data === 'string') {
27893 data = new Buffer(data, inputEnc)
27894 }
27895 var outData = this._update(data)
27896 if (this.hashMode) {
27897 return this
27898 }
27899 if (outputEnc) {
27900 outData = this._toString(outData, outputEnc)
27901 }
27902 return outData
27903 }
27904
27905 CipherBase.prototype.setAutoPadding = function () {}
27906
27907 CipherBase.prototype.getAuthTag = function () {
27908 throw new Error('trying to get auth tag in unsupported state')
27909 }
27910
27911 CipherBase.prototype.setAuthTag = function () {
27912 throw new Error('trying to set auth tag in unsupported state')
27913 }
27914
27915 CipherBase.prototype.setAAD = function () {
27916 throw new Error('trying to set aad in unsupported state')
27917 }
27918
27919 CipherBase.prototype._transform = function (data, _, next) {
27920 var err
27921 try {
27922 if (this.hashMode) {
27923 this._update(data)
27924 } else {
27925 this.push(this._update(data))
27926 }
27927 } catch (e) {
27928 err = e
27929 } finally {
27930 next(err)
27931 }
27932 }
27933 CipherBase.prototype._flush = function (done) {
27934 var err
27935 try {
27936 this.push(this._final())
27937 } catch (e) {
27938 err = e
27939 } finally {
27940 done(err)
27941 }
27942 }
27943 CipherBase.prototype._finalOrDigest = function (outputEnc) {
27944 var outData = this._final() || new Buffer('')
27945 if (outputEnc) {
27946 outData = this._toString(outData, outputEnc, true)
27947 }
27948 return outData
27949 }
27950
27951 CipherBase.prototype._toString = function (value, enc, fin) {
27952 if (!this._decoder) {
27953 this._decoder = new StringDecoder(enc)
27954 this._encoding = enc
27955 }
27956 if (this._encoding !== enc) {
27957 throw new Error('can\'t switch encodings')
27958 }
27959 var out = this._decoder.write(value)
27960 if (fin) {
27961 out += this._decoder.end()
27962 }
27963 return out
27964 }
27965
27966 }).call(this,require("buffer").Buffer)
27967 },{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
27968 (function (Buffer){
27969 'use strict';
27970 var inherits = require('inherits')
27971 var md5 = require('./md5')
27972 var rmd160 = require('ripemd160')
27973 var sha = require('sha.js')
27974
27975 var Base = require('cipher-base')
27976
27977 function HashNoConstructor(hash) {
27978 Base.call(this, 'digest')
27979
27980 this._hash = hash
27981 this.buffers = []
27982 }
27983
27984 inherits(HashNoConstructor, Base)
27985
27986 HashNoConstructor.prototype._update = function (data) {
27987 this.buffers.push(data)
27988 }
27989
27990 HashNoConstructor.prototype._final = function () {
27991 var buf = Buffer.concat(this.buffers)
27992 var r = this._hash(buf)
27993 this.buffers = null
27994
27995 return r
27996 }
27997
27998 function Hash(hash) {
27999 Base.call(this, 'digest')
28000
28001 this._hash = hash
28002 }
28003
28004 inherits(Hash, Base)
28005
28006 Hash.prototype._update = function (data) {
28007 this._hash.update(data)
28008 }
28009
28010 Hash.prototype._final = function () {
28011 return this._hash.digest()
28012 }
28013
28014 module.exports = function createHash (alg) {
28015 alg = alg.toLowerCase()
28016 if ('md5' === alg) return new HashNoConstructor(md5)
28017 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28018
28019 return new Hash(sha(alg))
28020 }
28021
28022 }).call(this,require("buffer").Buffer)
28023 },{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28024 (function (Buffer){
28025 'use strict';
28026 var intSize = 4;
28027 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28028 var chrsz = 8;
28029
28030 function toArray(buf, bigEndian) {
28031 if ((buf.length % intSize) !== 0) {
28032 var len = buf.length + (intSize - (buf.length % intSize));
28033 buf = Buffer.concat([buf, zeroBuffer], len);
28034 }
28035
28036 var arr = [];
28037 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28038 for (var i = 0; i < buf.length; i += intSize) {
28039 arr.push(fn.call(buf, i));
28040 }
28041 return arr;
28042 }
28043
28044 function toBuffer(arr, size, bigEndian) {
28045 var buf = new Buffer(size);
28046 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28047 for (var i = 0; i < arr.length; i++) {
28048 fn.call(buf, arr[i], i * 4, true);
28049 }
28050 return buf;
28051 }
28052
28053 function hash(buf, fn, hashSize, bigEndian) {
28054 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28055 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28056 return toBuffer(arr, hashSize, bigEndian);
28057 }
28058 exports.hash = hash;
28059 }).call(this,require("buffer").Buffer)
28060 },{"buffer":5}],38:[function(require,module,exports){
28061 'use strict';
28062 /*
28063 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28064 * Digest Algorithm, as defined in RFC 1321.
28065 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28066 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28067 * Distributed under the BSD License
28068 * See http://pajhome.org.uk/crypt/md5 for more info.
28069 */
28070
28071 var helpers = require('./helpers');
28072
28073 /*
28074 * Calculate the MD5 of an array of little-endian words, and a bit length
28075 */
28076 function core_md5(x, len)
28077 {
28078 /* append padding */
28079 x[len >> 5] |= 0x80 << ((len) % 32);
28080 x[(((len + 64) >>> 9) << 4) + 14] = len;
28081
28082 var a = 1732584193;
28083 var b = -271733879;
28084 var c = -1732584194;
28085 var d = 271733878;
28086
28087 for(var i = 0; i < x.length; i += 16)
28088 {
28089 var olda = a;
28090 var oldb = b;
28091 var oldc = c;
28092 var oldd = d;
28093
28094 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28095 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28096 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28097 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28098 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28099 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28100 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28101 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28102 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28103 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28104 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28105 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28106 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28107 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28108 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28109 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
28110
28111 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28112 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28113 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28114 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28115 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28116 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28117 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28118 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28119 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28120 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28121 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28122 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28123 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28124 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28125 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28126 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
28127
28128 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28129 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28130 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28131 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28132 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28133 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28134 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28135 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28136 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28137 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28138 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28139 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28140 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28141 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28142 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28143 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
28144
28145 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28146 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28147 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28148 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28149 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28150 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28151 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28152 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28153 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28154 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28155 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28156 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28157 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28158 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28159 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28160 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
28161
28162 a = safe_add(a, olda);
28163 b = safe_add(b, oldb);
28164 c = safe_add(c, oldc);
28165 d = safe_add(d, oldd);
28166 }
28167 return Array(a, b, c, d);
28168
28169 }
28170
28171 /*
28172 * These functions implement the four basic operations the algorithm uses.
28173 */
28174 function md5_cmn(q, a, b, x, s, t)
28175 {
28176 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
28177 }
28178 function md5_ff(a, b, c, d, x, s, t)
28179 {
28180 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
28181 }
28182 function md5_gg(a, b, c, d, x, s, t)
28183 {
28184 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
28185 }
28186 function md5_hh(a, b, c, d, x, s, t)
28187 {
28188 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28189 }
28190 function md5_ii(a, b, c, d, x, s, t)
28191 {
28192 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
28193 }
28194
28195 /*
28196 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28197 * to work around bugs in some JS interpreters.
28198 */
28199 function safe_add(x, y)
28200 {
28201 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28202 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28203 return (msw << 16) | (lsw & 0xFFFF);
28204 }
28205
28206 /*
28207 * Bitwise rotate a 32-bit number to the left.
28208 */
28209 function bit_rol(num, cnt)
28210 {
28211 return (num << cnt) | (num >>> (32 - cnt));
28212 }
28213
28214 module.exports = function md5(buf) {
28215 return helpers.hash(buf, core_md5, 16);
28216 };
28217 },{"./helpers":37}],39:[function(require,module,exports){
28218 'use strict';
28219
28220 var elliptic = exports;
28221
28222 elliptic.version = require('../package.json').version;
28223 elliptic.utils = require('./elliptic/utils');
28224 elliptic.rand = require('brorand');
28225 elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
28226 elliptic.curve = require('./elliptic/curve');
28227 elliptic.curves = require('./elliptic/curves');
28228
28229 // Protocols
28230 elliptic.ec = require('./elliptic/ec');
28231 elliptic.eddsa = require('./elliptic/eddsa');
28232
28233 },{"../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){
28234 'use strict';
28235
28236 var BN = require('bn.js');
28237 var elliptic = require('../../elliptic');
28238 var utils = elliptic.utils;
28239 var getNAF = utils.getNAF;
28240 var getJSF = utils.getJSF;
28241 var assert = utils.assert;
28242
28243 function BaseCurve(type, conf) {
28244 this.type = type;
28245 this.p = new BN(conf.p, 16);
28246
28247 // Use Montgomery, when there is no fast reduction for the prime
28248 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
28249
28250 // Useful for many curves
28251 this.zero = new BN(0).toRed(this.red);
28252 this.one = new BN(1).toRed(this.red);
28253 this.two = new BN(2).toRed(this.red);
28254
28255 // Curve configuration, optional
28256 this.n = conf.n && new BN(conf.n, 16);
28257 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
28258
28259 // Temporary arrays
28260 this._wnafT1 = new Array(4);
28261 this._wnafT2 = new Array(4);
28262 this._wnafT3 = new Array(4);
28263 this._wnafT4 = new Array(4);
28264
28265 // Generalized Greg Maxwell's trick
28266 var adjustCount = this.n && this.p.div(this.n);
28267 if (!adjustCount || adjustCount.cmpn(100) > 0) {
28268 this.redN = null;
28269 } else {
28270 this._maxwellTrick = true;
28271 this.redN = this.n.toRed(this.red);
28272 }
28273 }
28274 module.exports = BaseCurve;
28275
28276 BaseCurve.prototype.point = function point() {
28277 throw new Error('Not implemented');
28278 };
28279
28280 BaseCurve.prototype.validate = function validate() {
28281 throw new Error('Not implemented');
28282 };
28283
28284 BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
28285 assert(p.precomputed);
28286 var doubles = p._getDoubles();
28287
28288 var naf = getNAF(k, 1);
28289 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
28290 I /= 3;
28291
28292 // Translate into more windowed form
28293 var repr = [];
28294 for (var j = 0; j < naf.length; j += doubles.step) {
28295 var nafW = 0;
28296 for (var k = j + doubles.step - 1; k >= j; k--)
28297 nafW = (nafW << 1) + naf[k];
28298 repr.push(nafW);
28299 }
28300
28301 var a = this.jpoint(null, null, null);
28302 var b = this.jpoint(null, null, null);
28303 for (var i = I; i > 0; i--) {
28304 for (var j = 0; j < repr.length; j++) {
28305 var nafW = repr[j];
28306 if (nafW === i)
28307 b = b.mixedAdd(doubles.points[j]);
28308 else if (nafW === -i)
28309 b = b.mixedAdd(doubles.points[j].neg());
28310 }
28311 a = a.add(b);
28312 }
28313 return a.toP();
28314 };
28315
28316 BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
28317 var w = 4;
28318
28319 // Precompute window
28320 var nafPoints = p._getNAFPoints(w);
28321 w = nafPoints.wnd;
28322 var wnd = nafPoints.points;
28323
28324 // Get NAF form
28325 var naf = getNAF(k, w);
28326
28327 // Add `this`*(N+1) for every w-NAF index
28328 var acc = this.jpoint(null, null, null);
28329 for (var i = naf.length - 1; i >= 0; i--) {
28330 // Count zeroes
28331 for (var k = 0; i >= 0 && naf[i] === 0; i--)
28332 k++;
28333 if (i >= 0)
28334 k++;
28335 acc = acc.dblp(k);
28336
28337 if (i < 0)
28338 break;
28339 var z = naf[i];
28340 assert(z !== 0);
28341 if (p.type === 'affine') {
28342 // J +- P
28343 if (z > 0)
28344 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
28345 else
28346 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
28347 } else {
28348 // J +- J
28349 if (z > 0)
28350 acc = acc.add(wnd[(z - 1) >> 1]);
28351 else
28352 acc = acc.add(wnd[(-z - 1) >> 1].neg());
28353 }
28354 }
28355 return p.type === 'affine' ? acc.toP() : acc;
28356 };
28357
28358 BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
28359 points,
28360 coeffs,
28361 len,
28362 jacobianResult) {
28363 var wndWidth = this._wnafT1;
28364 var wnd = this._wnafT2;
28365 var naf = this._wnafT3;
28366
28367 // Fill all arrays
28368 var max = 0;
28369 for (var i = 0; i < len; i++) {
28370 var p = points[i];
28371 var nafPoints = p._getNAFPoints(defW);
28372 wndWidth[i] = nafPoints.wnd;
28373 wnd[i] = nafPoints.points;
28374 }
28375
28376 // Comb small window NAFs
28377 for (var i = len - 1; i >= 1; i -= 2) {
28378 var a = i - 1;
28379 var b = i;
28380 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
28381 naf[a] = getNAF(coeffs[a], wndWidth[a]);
28382 naf[b] = getNAF(coeffs[b], wndWidth[b]);
28383 max = Math.max(naf[a].length, max);
28384 max = Math.max(naf[b].length, max);
28385 continue;
28386 }
28387
28388 var comb = [
28389 points[a], /* 1 */
28390 null, /* 3 */
28391 null, /* 5 */
28392 points[b] /* 7 */
28393 ];
28394
28395 // Try to avoid Projective points, if possible
28396 if (points[a].y.cmp(points[b].y) === 0) {
28397 comb[1] = points[a].add(points[b]);
28398 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28399 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
28400 comb[1] = points[a].toJ().mixedAdd(points[b]);
28401 comb[2] = points[a].add(points[b].neg());
28402 } else {
28403 comb[1] = points[a].toJ().mixedAdd(points[b]);
28404 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28405 }
28406
28407 var index = [
28408 -3, /* -1 -1 */
28409 -1, /* -1 0 */
28410 -5, /* -1 1 */
28411 -7, /* 0 -1 */
28412 0, /* 0 0 */
28413 7, /* 0 1 */
28414 5, /* 1 -1 */
28415 1, /* 1 0 */
28416 3 /* 1 1 */
28417 ];
28418
28419 var jsf = getJSF(coeffs[a], coeffs[b]);
28420 max = Math.max(jsf[0].length, max);
28421 naf[a] = new Array(max);
28422 naf[b] = new Array(max);
28423 for (var j = 0; j < max; j++) {
28424 var ja = jsf[0][j] | 0;
28425 var jb = jsf[1][j] | 0;
28426
28427 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
28428 naf[b][j] = 0;
28429 wnd[a] = comb;
28430 }
28431 }
28432
28433 var acc = this.jpoint(null, null, null);
28434 var tmp = this._wnafT4;
28435 for (var i = max; i >= 0; i--) {
28436 var k = 0;
28437
28438 while (i >= 0) {
28439 var zero = true;
28440 for (var j = 0; j < len; j++) {
28441 tmp[j] = naf[j][i] | 0;
28442 if (tmp[j] !== 0)
28443 zero = false;
28444 }
28445 if (!zero)
28446 break;
28447 k++;
28448 i--;
28449 }
28450 if (i >= 0)
28451 k++;
28452 acc = acc.dblp(k);
28453 if (i < 0)
28454 break;
28455
28456 for (var j = 0; j < len; j++) {
28457 var z = tmp[j];
28458 var p;
28459 if (z === 0)
28460 continue;
28461 else if (z > 0)
28462 p = wnd[j][(z - 1) >> 1];
28463 else if (z < 0)
28464 p = wnd[j][(-z - 1) >> 1].neg();
28465
28466 if (p.type === 'affine')
28467 acc = acc.mixedAdd(p);
28468 else
28469 acc = acc.add(p);
28470 }
28471 }
28472 // Zeroify references
28473 for (var i = 0; i < len; i++)
28474 wnd[i] = null;
28475
28476 if (jacobianResult)
28477 return acc;
28478 else
28479 return acc.toP();
28480 };
28481
28482 function BasePoint(curve, type) {
28483 this.curve = curve;
28484 this.type = type;
28485 this.precomputed = null;
28486 }
28487 BaseCurve.BasePoint = BasePoint;
28488
28489 BasePoint.prototype.eq = function eq(/*other*/) {
28490 throw new Error('Not implemented');
28491 };
28492
28493 BasePoint.prototype.validate = function validate() {
28494 return this.curve.validate(this);
28495 };
28496
28497 BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
28498 bytes = utils.toArray(bytes, enc);
28499
28500 var len = this.p.byteLength();
28501
28502 // uncompressed, hybrid-odd, hybrid-even
28503 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
28504 bytes.length - 1 === 2 * len) {
28505 if (bytes[0] === 0x06)
28506 assert(bytes[bytes.length - 1] % 2 === 0);
28507 else if (bytes[0] === 0x07)
28508 assert(bytes[bytes.length - 1] % 2 === 1);
28509
28510 var res = this.point(bytes.slice(1, 1 + len),
28511 bytes.slice(1 + len, 1 + 2 * len));
28512
28513 return res;
28514 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
28515 bytes.length - 1 === len) {
28516 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
28517 }
28518 throw new Error('Unknown point format');
28519 };
28520
28521 BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
28522 return this.encode(enc, true);
28523 };
28524
28525 BasePoint.prototype._encode = function _encode(compact) {
28526 var len = this.curve.p.byteLength();
28527 var x = this.getX().toArray('be', len);
28528
28529 if (compact)
28530 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
28531
28532 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
28533 };
28534
28535 BasePoint.prototype.encode = function encode(enc, compact) {
28536 return utils.encode(this._encode(compact), enc);
28537 };
28538
28539 BasePoint.prototype.precompute = function precompute(power) {
28540 if (this.precomputed)
28541 return this;
28542
28543 var precomputed = {
28544 doubles: null,
28545 naf: null,
28546 beta: null
28547 };
28548 precomputed.naf = this._getNAFPoints(8);
28549 precomputed.doubles = this._getDoubles(4, power);
28550 precomputed.beta = this._getBeta();
28551 this.precomputed = precomputed;
28552
28553 return this;
28554 };
28555
28556 BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
28557 if (!this.precomputed)
28558 return false;
28559
28560 var doubles = this.precomputed.doubles;
28561 if (!doubles)
28562 return false;
28563
28564 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
28565 };
28566
28567 BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
28568 if (this.precomputed && this.precomputed.doubles)
28569 return this.precomputed.doubles;
28570
28571 var doubles = [ this ];
28572 var acc = this;
28573 for (var i = 0; i < power; i += step) {
28574 for (var j = 0; j < step; j++)
28575 acc = acc.dbl();
28576 doubles.push(acc);
28577 }
28578 return {
28579 step: step,
28580 points: doubles
28581 };
28582 };
28583
28584 BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
28585 if (this.precomputed && this.precomputed.naf)
28586 return this.precomputed.naf;
28587
28588 var res = [ this ];
28589 var max = (1 << wnd) - 1;
28590 var dbl = max === 1 ? null : this.dbl();
28591 for (var i = 1; i < max; i++)
28592 res[i] = res[i - 1].add(dbl);
28593 return {
28594 wnd: wnd,
28595 points: res
28596 };
28597 };
28598
28599 BasePoint.prototype._getBeta = function _getBeta() {
28600 return null;
28601 };
28602
28603 BasePoint.prototype.dblp = function dblp(k) {
28604 var r = this;
28605 for (var i = 0; i < k; i++)
28606 r = r.dbl();
28607 return r;
28608 };
28609
28610 },{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
28611 'use strict';
28612
28613 var curve = require('../curve');
28614 var elliptic = require('../../elliptic');
28615 var BN = require('bn.js');
28616 var inherits = require('inherits');
28617 var Base = curve.base;
28618
28619 var assert = elliptic.utils.assert;
28620
28621 function EdwardsCurve(conf) {
28622 // NOTE: Important as we are creating point in Base.call()
28623 this.twisted = (conf.a | 0) !== 1;
28624 this.mOneA = this.twisted && (conf.a | 0) === -1;
28625 this.extended = this.mOneA;
28626
28627 Base.call(this, 'edwards', conf);
28628
28629 this.a = new BN(conf.a, 16).umod(this.red.m);
28630 this.a = this.a.toRed(this.red);
28631 this.c = new BN(conf.c, 16).toRed(this.red);
28632 this.c2 = this.c.redSqr();
28633 this.d = new BN(conf.d, 16).toRed(this.red);
28634 this.dd = this.d.redAdd(this.d);
28635
28636 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
28637 this.oneC = (conf.c | 0) === 1;
28638 }
28639 inherits(EdwardsCurve, Base);
28640 module.exports = EdwardsCurve;
28641
28642 EdwardsCurve.prototype._mulA = function _mulA(num) {
28643 if (this.mOneA)
28644 return num.redNeg();
28645 else
28646 return this.a.redMul(num);
28647 };
28648
28649 EdwardsCurve.prototype._mulC = function _mulC(num) {
28650 if (this.oneC)
28651 return num;
28652 else
28653 return this.c.redMul(num);
28654 };
28655
28656 // Just for compatibility with Short curve
28657 EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
28658 return this.point(x, y, z, t);
28659 };
28660
28661 EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
28662 x = new BN(x, 16);
28663 if (!x.red)
28664 x = x.toRed(this.red);
28665
28666 var x2 = x.redSqr();
28667 var rhs = this.c2.redSub(this.a.redMul(x2));
28668 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
28669
28670 var y2 = rhs.redMul(lhs.redInvm());
28671 var y = y2.redSqrt();
28672 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
28673 throw new Error('invalid point');
28674
28675 var isOdd = y.fromRed().isOdd();
28676 if (odd && !isOdd || !odd && isOdd)
28677 y = y.redNeg();
28678
28679 return this.point(x, y);
28680 };
28681
28682 EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
28683 y = new BN(y, 16);
28684 if (!y.red)
28685 y = y.toRed(this.red);
28686
28687 // x^2 = (y^2 - 1) / (d y^2 + 1)
28688 var y2 = y.redSqr();
28689 var lhs = y2.redSub(this.one);
28690 var rhs = y2.redMul(this.d).redAdd(this.one);
28691 var x2 = lhs.redMul(rhs.redInvm());
28692
28693 if (x2.cmp(this.zero) === 0) {
28694 if (odd)
28695 throw new Error('invalid point');
28696 else
28697 return this.point(this.zero, y);
28698 }
28699
28700 var x = x2.redSqrt();
28701 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
28702 throw new Error('invalid point');
28703
28704 if (x.isOdd() !== odd)
28705 x = x.redNeg();
28706
28707 return this.point(x, y);
28708 };
28709
28710 EdwardsCurve.prototype.validate = function validate(point) {
28711 if (point.isInfinity())
28712 return true;
28713
28714 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
28715 point.normalize();
28716
28717 var x2 = point.x.redSqr();
28718 var y2 = point.y.redSqr();
28719 var lhs = x2.redMul(this.a).redAdd(y2);
28720 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
28721
28722 return lhs.cmp(rhs) === 0;
28723 };
28724
28725 function Point(curve, x, y, z, t) {
28726 Base.BasePoint.call(this, curve, 'projective');
28727 if (x === null && y === null && z === null) {
28728 this.x = this.curve.zero;
28729 this.y = this.curve.one;
28730 this.z = this.curve.one;
28731 this.t = this.curve.zero;
28732 this.zOne = true;
28733 } else {
28734 this.x = new BN(x, 16);
28735 this.y = new BN(y, 16);
28736 this.z = z ? new BN(z, 16) : this.curve.one;
28737 this.t = t && new BN(t, 16);
28738 if (!this.x.red)
28739 this.x = this.x.toRed(this.curve.red);
28740 if (!this.y.red)
28741 this.y = this.y.toRed(this.curve.red);
28742 if (!this.z.red)
28743 this.z = this.z.toRed(this.curve.red);
28744 if (this.t && !this.t.red)
28745 this.t = this.t.toRed(this.curve.red);
28746 this.zOne = this.z === this.curve.one;
28747
28748 // Use extended coordinates
28749 if (this.curve.extended && !this.t) {
28750 this.t = this.x.redMul(this.y);
28751 if (!this.zOne)
28752 this.t = this.t.redMul(this.z.redInvm());
28753 }
28754 }
28755 }
28756 inherits(Point, Base.BasePoint);
28757
28758 EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
28759 return Point.fromJSON(this, obj);
28760 };
28761
28762 EdwardsCurve.prototype.point = function point(x, y, z, t) {
28763 return new Point(this, x, y, z, t);
28764 };
28765
28766 Point.fromJSON = function fromJSON(curve, obj) {
28767 return new Point(curve, obj[0], obj[1], obj[2]);
28768 };
28769
28770 Point.prototype.inspect = function inspect() {
28771 if (this.isInfinity())
28772 return '<EC Point Infinity>';
28773 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
28774 ' y: ' + this.y.fromRed().toString(16, 2) +
28775 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
28776 };
28777
28778 Point.prototype.isInfinity = function isInfinity() {
28779 // XXX This code assumes that zero is always zero in red
28780 return this.x.cmpn(0) === 0 &&
28781 this.y.cmp(this.z) === 0;
28782 };
28783
28784 Point.prototype._extDbl = function _extDbl() {
28785 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28786 // #doubling-dbl-2008-hwcd
28787 // 4M + 4S
28788
28789 // A = X1^2
28790 var a = this.x.redSqr();
28791 // B = Y1^2
28792 var b = this.y.redSqr();
28793 // C = 2 * Z1^2
28794 var c = this.z.redSqr();
28795 c = c.redIAdd(c);
28796 // D = a * A
28797 var d = this.curve._mulA(a);
28798 // E = (X1 + Y1)^2 - A - B
28799 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
28800 // G = D + B
28801 var g = d.redAdd(b);
28802 // F = G - C
28803 var f = g.redSub(c);
28804 // H = D - B
28805 var h = d.redSub(b);
28806 // X3 = E * F
28807 var nx = e.redMul(f);
28808 // Y3 = G * H
28809 var ny = g.redMul(h);
28810 // T3 = E * H
28811 var nt = e.redMul(h);
28812 // Z3 = F * G
28813 var nz = f.redMul(g);
28814 return this.curve.point(nx, ny, nz, nt);
28815 };
28816
28817 Point.prototype._projDbl = function _projDbl() {
28818 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28819 // #doubling-dbl-2008-bbjlp
28820 // #doubling-dbl-2007-bl
28821 // and others
28822 // Generally 3M + 4S or 2M + 4S
28823
28824 // B = (X1 + Y1)^2
28825 var b = this.x.redAdd(this.y).redSqr();
28826 // C = X1^2
28827 var c = this.x.redSqr();
28828 // D = Y1^2
28829 var d = this.y.redSqr();
28830
28831 var nx;
28832 var ny;
28833 var nz;
28834 if (this.curve.twisted) {
28835 // E = a * C
28836 var e = this.curve._mulA(c);
28837 // F = E + D
28838 var f = e.redAdd(d);
28839 if (this.zOne) {
28840 // X3 = (B - C - D) * (F - 2)
28841 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
28842 // Y3 = F * (E - D)
28843 ny = f.redMul(e.redSub(d));
28844 // Z3 = F^2 - 2 * F
28845 nz = f.redSqr().redSub(f).redSub(f);
28846 } else {
28847 // H = Z1^2
28848 var h = this.z.redSqr();
28849 // J = F - 2 * H
28850 var j = f.redSub(h).redISub(h);
28851 // X3 = (B-C-D)*J
28852 nx = b.redSub(c).redISub(d).redMul(j);
28853 // Y3 = F * (E - D)
28854 ny = f.redMul(e.redSub(d));
28855 // Z3 = F * J
28856 nz = f.redMul(j);
28857 }
28858 } else {
28859 // E = C + D
28860 var e = c.redAdd(d);
28861 // H = (c * Z1)^2
28862 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
28863 // J = E - 2 * H
28864 var j = e.redSub(h).redSub(h);
28865 // X3 = c * (B - E) * J
28866 nx = this.curve._mulC(b.redISub(e)).redMul(j);
28867 // Y3 = c * E * (C - D)
28868 ny = this.curve._mulC(e).redMul(c.redISub(d));
28869 // Z3 = E * J
28870 nz = e.redMul(j);
28871 }
28872 return this.curve.point(nx, ny, nz);
28873 };
28874
28875 Point.prototype.dbl = function dbl() {
28876 if (this.isInfinity())
28877 return this;
28878
28879 // Double in extended coordinates
28880 if (this.curve.extended)
28881 return this._extDbl();
28882 else
28883 return this._projDbl();
28884 };
28885
28886 Point.prototype._extAdd = function _extAdd(p) {
28887 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
28888 // #addition-add-2008-hwcd-3
28889 // 8M
28890
28891 // A = (Y1 - X1) * (Y2 - X2)
28892 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
28893 // B = (Y1 + X1) * (Y2 + X2)
28894 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
28895 // C = T1 * k * T2
28896 var c = this.t.redMul(this.curve.dd).redMul(p.t);
28897 // D = Z1 * 2 * Z2
28898 var d = this.z.redMul(p.z.redAdd(p.z));
28899 // E = B - A
28900 var e = b.redSub(a);
28901 // F = D - C
28902 var f = d.redSub(c);
28903 // G = D + C
28904 var g = d.redAdd(c);
28905 // H = B + A
28906 var h = b.redAdd(a);
28907 // X3 = E * F
28908 var nx = e.redMul(f);
28909 // Y3 = G * H
28910 var ny = g.redMul(h);
28911 // T3 = E * H
28912 var nt = e.redMul(h);
28913 // Z3 = F * G
28914 var nz = f.redMul(g);
28915 return this.curve.point(nx, ny, nz, nt);
28916 };
28917
28918 Point.prototype._projAdd = function _projAdd(p) {
28919 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
28920 // #addition-add-2008-bbjlp
28921 // #addition-add-2007-bl
28922 // 10M + 1S
28923
28924 // A = Z1 * Z2
28925 var a = this.z.redMul(p.z);
28926 // B = A^2
28927 var b = a.redSqr();
28928 // C = X1 * X2
28929 var c = this.x.redMul(p.x);
28930 // D = Y1 * Y2
28931 var d = this.y.redMul(p.y);
28932 // E = d * C * D
28933 var e = this.curve.d.redMul(c).redMul(d);
28934 // F = B - E
28935 var f = b.redSub(e);
28936 // G = B + E
28937 var g = b.redAdd(e);
28938 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
28939 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
28940 var nx = a.redMul(f).redMul(tmp);
28941 var ny;
28942 var nz;
28943 if (this.curve.twisted) {
28944 // Y3 = A * G * (D - a * C)
28945 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
28946 // Z3 = F * G
28947 nz = f.redMul(g);
28948 } else {
28949 // Y3 = A * G * (D - C)
28950 ny = a.redMul(g).redMul(d.redSub(c));
28951 // Z3 = c * F * G
28952 nz = this.curve._mulC(f).redMul(g);
28953 }
28954 return this.curve.point(nx, ny, nz);
28955 };
28956
28957 Point.prototype.add = function add(p) {
28958 if (this.isInfinity())
28959 return p;
28960 if (p.isInfinity())
28961 return this;
28962
28963 if (this.curve.extended)
28964 return this._extAdd(p);
28965 else
28966 return this._projAdd(p);
28967 };
28968
28969 Point.prototype.mul = function mul(k) {
28970 if (this._hasDoubles(k))
28971 return this.curve._fixedNafMul(this, k);
28972 else
28973 return this.curve._wnafMul(this, k);
28974 };
28975
28976 Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
28977 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
28978 };
28979
28980 Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
28981 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
28982 };
28983
28984 Point.prototype.normalize = function normalize() {
28985 if (this.zOne)
28986 return this;
28987
28988 // Normalize coordinates
28989 var zi = this.z.redInvm();
28990 this.x = this.x.redMul(zi);
28991 this.y = this.y.redMul(zi);
28992 if (this.t)
28993 this.t = this.t.redMul(zi);
28994 this.z = this.curve.one;
28995 this.zOne = true;
28996 return this;
28997 };
28998
28999 Point.prototype.neg = function neg() {
29000 return this.curve.point(this.x.redNeg(),
29001 this.y,
29002 this.z,
29003 this.t && this.t.redNeg());
29004 };
29005
29006 Point.prototype.getX = function getX() {
29007 this.normalize();
29008 return this.x.fromRed();
29009 };
29010
29011 Point.prototype.getY = function getY() {
29012 this.normalize();
29013 return this.y.fromRed();
29014 };
29015
29016 Point.prototype.eq = function eq(other) {
29017 return this === other ||
29018 this.getX().cmp(other.getX()) === 0 &&
29019 this.getY().cmp(other.getY()) === 0;
29020 };
29021
29022 Point.prototype.eqXToP = function eqXToP(x) {
29023 var rx = x.toRed(this.curve.red).redMul(this.z);
29024 if (this.x.cmp(rx) === 0)
29025 return true;
29026
29027 var xc = x.clone();
29028 var t = this.curve.redN.redMul(this.z);
29029 for (;;) {
29030 xc.iadd(this.curve.n);
29031 if (xc.cmp(this.curve.p) >= 0)
29032 return false;
29033
29034 rx.redIAdd(t);
29035 if (this.x.cmp(rx) === 0)
29036 return true;
29037 }
29038 return false;
29039 };
29040
29041 // Compatibility with BaseCurve
29042 Point.prototype.toP = Point.prototype.normalize;
29043 Point.prototype.mixedAdd = Point.prototype.add;
29044
29045 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29046 'use strict';
29047
29048 var curve = exports;
29049
29050 curve.base = require('./base');
29051 curve.short = require('./short');
29052 curve.mont = require('./mont');
29053 curve.edwards = require('./edwards');
29054
29055 },{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29056 'use strict';
29057
29058 var curve = require('../curve');
29059 var BN = require('bn.js');
29060 var inherits = require('inherits');
29061 var Base = curve.base;
29062
29063 var elliptic = require('../../elliptic');
29064 var utils = elliptic.utils;
29065
29066 function MontCurve(conf) {
29067 Base.call(this, 'mont', conf);
29068
29069 this.a = new BN(conf.a, 16).toRed(this.red);
29070 this.b = new BN(conf.b, 16).toRed(this.red);
29071 this.i4 = new BN(4).toRed(this.red).redInvm();
29072 this.two = new BN(2).toRed(this.red);
29073 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
29074 }
29075 inherits(MontCurve, Base);
29076 module.exports = MontCurve;
29077
29078 MontCurve.prototype.validate = function validate(point) {
29079 var x = point.normalize().x;
29080 var x2 = x.redSqr();
29081 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29082 var y = rhs.redSqrt();
29083
29084 return y.redSqr().cmp(rhs) === 0;
29085 };
29086
29087 function Point(curve, x, z) {
29088 Base.BasePoint.call(this, curve, 'projective');
29089 if (x === null && z === null) {
29090 this.x = this.curve.one;
29091 this.z = this.curve.zero;
29092 } else {
29093 this.x = new BN(x, 16);
29094 this.z = new BN(z, 16);
29095 if (!this.x.red)
29096 this.x = this.x.toRed(this.curve.red);
29097 if (!this.z.red)
29098 this.z = this.z.toRed(this.curve.red);
29099 }
29100 }
29101 inherits(Point, Base.BasePoint);
29102
29103 MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29104 return this.point(utils.toArray(bytes, enc), 1);
29105 };
29106
29107 MontCurve.prototype.point = function point(x, z) {
29108 return new Point(this, x, z);
29109 };
29110
29111 MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29112 return Point.fromJSON(this, obj);
29113 };
29114
29115 Point.prototype.precompute = function precompute() {
29116 // No-op
29117 };
29118
29119 Point.prototype._encode = function _encode() {
29120 return this.getX().toArray('be', this.curve.p.byteLength());
29121 };
29122
29123 Point.fromJSON = function fromJSON(curve, obj) {
29124 return new Point(curve, obj[0], obj[1] || curve.one);
29125 };
29126
29127 Point.prototype.inspect = function inspect() {
29128 if (this.isInfinity())
29129 return '<EC Point Infinity>';
29130 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29131 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29132 };
29133
29134 Point.prototype.isInfinity = function isInfinity() {
29135 // XXX This code assumes that zero is always zero in red
29136 return this.z.cmpn(0) === 0;
29137 };
29138
29139 Point.prototype.dbl = function dbl() {
29140 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29141 // 2M + 2S + 4A
29142
29143 // A = X1 + Z1
29144 var a = this.x.redAdd(this.z);
29145 // AA = A^2
29146 var aa = a.redSqr();
29147 // B = X1 - Z1
29148 var b = this.x.redSub(this.z);
29149 // BB = B^2
29150 var bb = b.redSqr();
29151 // C = AA - BB
29152 var c = aa.redSub(bb);
29153 // X3 = AA * BB
29154 var nx = aa.redMul(bb);
29155 // Z3 = C * (BB + A24 * C)
29156 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29157 return this.curve.point(nx, nz);
29158 };
29159
29160 Point.prototype.add = function add() {
29161 throw new Error('Not supported on Montgomery curve');
29162 };
29163
29164 Point.prototype.diffAdd = function diffAdd(p, diff) {
29165 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29166 // 4M + 2S + 6A
29167
29168 // A = X2 + Z2
29169 var a = this.x.redAdd(this.z);
29170 // B = X2 - Z2
29171 var b = this.x.redSub(this.z);
29172 // C = X3 + Z3
29173 var c = p.x.redAdd(p.z);
29174 // D = X3 - Z3
29175 var d = p.x.redSub(p.z);
29176 // DA = D * A
29177 var da = d.redMul(a);
29178 // CB = C * B
29179 var cb = c.redMul(b);
29180 // X5 = Z1 * (DA + CB)^2
29181 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29182 // Z5 = X1 * (DA - CB)^2
29183 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29184 return this.curve.point(nx, nz);
29185 };
29186
29187 Point.prototype.mul = function mul(k) {
29188 var t = k.clone();
29189 var a = this; // (N / 2) * Q + Q
29190 var b = this.curve.point(null, null); // (N / 2) * Q
29191 var c = this; // Q
29192
29193 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29194 bits.push(t.andln(1));
29195
29196 for (var i = bits.length - 1; i >= 0; i--) {
29197 if (bits[i] === 0) {
29198 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29199 a = a.diffAdd(b, c);
29200 // N * Q = 2 * ((N / 2) * Q + Q))
29201 b = b.dbl();
29202 } else {
29203 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29204 b = a.diffAdd(b, c);
29205 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29206 a = a.dbl();
29207 }
29208 }
29209 return b;
29210 };
29211
29212 Point.prototype.mulAdd = function mulAdd() {
29213 throw new Error('Not supported on Montgomery curve');
29214 };
29215
29216 Point.prototype.jumlAdd = function jumlAdd() {
29217 throw new Error('Not supported on Montgomery curve');
29218 };
29219
29220 Point.prototype.eq = function eq(other) {
29221 return this.getX().cmp(other.getX()) === 0;
29222 };
29223
29224 Point.prototype.normalize = function normalize() {
29225 this.x = this.x.redMul(this.z.redInvm());
29226 this.z = this.curve.one;
29227 return this;
29228 };
29229
29230 Point.prototype.getX = function getX() {
29231 // Normalize coordinates
29232 this.normalize();
29233
29234 return this.x.fromRed();
29235 };
29236
29237 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
29238 'use strict';
29239
29240 var curve = require('../curve');
29241 var elliptic = require('../../elliptic');
29242 var BN = require('bn.js');
29243 var inherits = require('inherits');
29244 var Base = curve.base;
29245
29246 var assert = elliptic.utils.assert;
29247
29248 function ShortCurve(conf) {
29249 Base.call(this, 'short', conf);
29250
29251 this.a = new BN(conf.a, 16).toRed(this.red);
29252 this.b = new BN(conf.b, 16).toRed(this.red);
29253 this.tinv = this.two.redInvm();
29254
29255 this.zeroA = this.a.fromRed().cmpn(0) === 0;
29256 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
29257
29258 // If the curve is endomorphic, precalculate beta and lambda
29259 this.endo = this._getEndomorphism(conf);
29260 this._endoWnafT1 = new Array(4);
29261 this._endoWnafT2 = new Array(4);
29262 }
29263 inherits(ShortCurve, Base);
29264 module.exports = ShortCurve;
29265
29266 ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
29267 // No efficient endomorphism
29268 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
29269 return;
29270
29271 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
29272 var beta;
29273 var lambda;
29274 if (conf.beta) {
29275 beta = new BN(conf.beta, 16).toRed(this.red);
29276 } else {
29277 var betas = this._getEndoRoots(this.p);
29278 // Choose the smallest beta
29279 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
29280 beta = beta.toRed(this.red);
29281 }
29282 if (conf.lambda) {
29283 lambda = new BN(conf.lambda, 16);
29284 } else {
29285 // Choose the lambda that is matching selected beta
29286 var lambdas = this._getEndoRoots(this.n);
29287 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
29288 lambda = lambdas[0];
29289 } else {
29290 lambda = lambdas[1];
29291 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
29292 }
29293 }
29294
29295 // Get basis vectors, used for balanced length-two representation
29296 var basis;
29297 if (conf.basis) {
29298 basis = conf.basis.map(function(vec) {
29299 return {
29300 a: new BN(vec.a, 16),
29301 b: new BN(vec.b, 16)
29302 };
29303 });
29304 } else {
29305 basis = this._getEndoBasis(lambda);
29306 }
29307
29308 return {
29309 beta: beta,
29310 lambda: lambda,
29311 basis: basis
29312 };
29313 };
29314
29315 ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
29316 // Find roots of for x^2 + x + 1 in F
29317 // Root = (-1 +- Sqrt(-3)) / 2
29318 //
29319 var red = num === this.p ? this.red : BN.mont(num);
29320 var tinv = new BN(2).toRed(red).redInvm();
29321 var ntinv = tinv.redNeg();
29322
29323 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
29324
29325 var l1 = ntinv.redAdd(s).fromRed();
29326 var l2 = ntinv.redSub(s).fromRed();
29327 return [ l1, l2 ];
29328 };
29329
29330 ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
29331 // aprxSqrt >= sqrt(this.n)
29332 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
29333
29334 // 3.74
29335 // Run EGCD, until r(L + 1) < aprxSqrt
29336 var u = lambda;
29337 var v = this.n.clone();
29338 var x1 = new BN(1);
29339 var y1 = new BN(0);
29340 var x2 = new BN(0);
29341 var y2 = new BN(1);
29342
29343 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
29344 var a0;
29345 var b0;
29346 // First vector
29347 var a1;
29348 var b1;
29349 // Second vector
29350 var a2;
29351 var b2;
29352
29353 var prevR;
29354 var i = 0;
29355 var r;
29356 var x;
29357 while (u.cmpn(0) !== 0) {
29358 var q = v.div(u);
29359 r = v.sub(q.mul(u));
29360 x = x2.sub(q.mul(x1));
29361 var y = y2.sub(q.mul(y1));
29362
29363 if (!a1 && r.cmp(aprxSqrt) < 0) {
29364 a0 = prevR.neg();
29365 b0 = x1;
29366 a1 = r.neg();
29367 b1 = x;
29368 } else if (a1 && ++i === 2) {
29369 break;
29370 }
29371 prevR = r;
29372
29373 v = u;
29374 u = r;
29375 x2 = x1;
29376 x1 = x;
29377 y2 = y1;
29378 y1 = y;
29379 }
29380 a2 = r.neg();
29381 b2 = x;
29382
29383 var len1 = a1.sqr().add(b1.sqr());
29384 var len2 = a2.sqr().add(b2.sqr());
29385 if (len2.cmp(len1) >= 0) {
29386 a2 = a0;
29387 b2 = b0;
29388 }
29389
29390 // Normalize signs
29391 if (a1.negative) {
29392 a1 = a1.neg();
29393 b1 = b1.neg();
29394 }
29395 if (a2.negative) {
29396 a2 = a2.neg();
29397 b2 = b2.neg();
29398 }
29399
29400 return [
29401 { a: a1, b: b1 },
29402 { a: a2, b: b2 }
29403 ];
29404 };
29405
29406 ShortCurve.prototype._endoSplit = function _endoSplit(k) {
29407 var basis = this.endo.basis;
29408 var v1 = basis[0];
29409 var v2 = basis[1];
29410
29411 var c1 = v2.b.mul(k).divRound(this.n);
29412 var c2 = v1.b.neg().mul(k).divRound(this.n);
29413
29414 var p1 = c1.mul(v1.a);
29415 var p2 = c2.mul(v2.a);
29416 var q1 = c1.mul(v1.b);
29417 var q2 = c2.mul(v2.b);
29418
29419 // Calculate answer
29420 var k1 = k.sub(p1).sub(p2);
29421 var k2 = q1.add(q2).neg();
29422 return { k1: k1, k2: k2 };
29423 };
29424
29425 ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
29426 x = new BN(x, 16);
29427 if (!x.red)
29428 x = x.toRed(this.red);
29429
29430 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
29431 var y = y2.redSqrt();
29432 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29433 throw new Error('invalid point');
29434
29435 // XXX Is there any way to tell if the number is odd without converting it
29436 // to non-red form?
29437 var isOdd = y.fromRed().isOdd();
29438 if (odd && !isOdd || !odd && isOdd)
29439 y = y.redNeg();
29440
29441 return this.point(x, y);
29442 };
29443
29444 ShortCurve.prototype.validate = function validate(point) {
29445 if (point.inf)
29446 return true;
29447
29448 var x = point.x;
29449 var y = point.y;
29450
29451 var ax = this.a.redMul(x);
29452 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
29453 return y.redSqr().redISub(rhs).cmpn(0) === 0;
29454 };
29455
29456 ShortCurve.prototype._endoWnafMulAdd =
29457 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
29458 var npoints = this._endoWnafT1;
29459 var ncoeffs = this._endoWnafT2;
29460 for (var i = 0; i < points.length; i++) {
29461 var split = this._endoSplit(coeffs[i]);
29462 var p = points[i];
29463 var beta = p._getBeta();
29464
29465 if (split.k1.negative) {
29466 split.k1.ineg();
29467 p = p.neg(true);
29468 }
29469 if (split.k2.negative) {
29470 split.k2.ineg();
29471 beta = beta.neg(true);
29472 }
29473
29474 npoints[i * 2] = p;
29475 npoints[i * 2 + 1] = beta;
29476 ncoeffs[i * 2] = split.k1;
29477 ncoeffs[i * 2 + 1] = split.k2;
29478 }
29479 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
29480
29481 // Clean-up references to points and coefficients
29482 for (var j = 0; j < i * 2; j++) {
29483 npoints[j] = null;
29484 ncoeffs[j] = null;
29485 }
29486 return res;
29487 };
29488
29489 function Point(curve, x, y, isRed) {
29490 Base.BasePoint.call(this, curve, 'affine');
29491 if (x === null && y === null) {
29492 this.x = null;
29493 this.y = null;
29494 this.inf = true;
29495 } else {
29496 this.x = new BN(x, 16);
29497 this.y = new BN(y, 16);
29498 // Force redgomery representation when loading from JSON
29499 if (isRed) {
29500 this.x.forceRed(this.curve.red);
29501 this.y.forceRed(this.curve.red);
29502 }
29503 if (!this.x.red)
29504 this.x = this.x.toRed(this.curve.red);
29505 if (!this.y.red)
29506 this.y = this.y.toRed(this.curve.red);
29507 this.inf = false;
29508 }
29509 }
29510 inherits(Point, Base.BasePoint);
29511
29512 ShortCurve.prototype.point = function point(x, y, isRed) {
29513 return new Point(this, x, y, isRed);
29514 };
29515
29516 ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
29517 return Point.fromJSON(this, obj, red);
29518 };
29519
29520 Point.prototype._getBeta = function _getBeta() {
29521 if (!this.curve.endo)
29522 return;
29523
29524 var pre = this.precomputed;
29525 if (pre && pre.beta)
29526 return pre.beta;
29527
29528 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
29529 if (pre) {
29530 var curve = this.curve;
29531 var endoMul = function(p) {
29532 return curve.point(p.x.redMul(curve.endo.beta), p.y);
29533 };
29534 pre.beta = beta;
29535 beta.precomputed = {
29536 beta: null,
29537 naf: pre.naf && {
29538 wnd: pre.naf.wnd,
29539 points: pre.naf.points.map(endoMul)
29540 },
29541 doubles: pre.doubles && {
29542 step: pre.doubles.step,
29543 points: pre.doubles.points.map(endoMul)
29544 }
29545 };
29546 }
29547 return beta;
29548 };
29549
29550 Point.prototype.toJSON = function toJSON() {
29551 if (!this.precomputed)
29552 return [ this.x, this.y ];
29553
29554 return [ this.x, this.y, this.precomputed && {
29555 doubles: this.precomputed.doubles && {
29556 step: this.precomputed.doubles.step,
29557 points: this.precomputed.doubles.points.slice(1)
29558 },
29559 naf: this.precomputed.naf && {
29560 wnd: this.precomputed.naf.wnd,
29561 points: this.precomputed.naf.points.slice(1)
29562 }
29563 } ];
29564 };
29565
29566 Point.fromJSON = function fromJSON(curve, obj, red) {
29567 if (typeof obj === 'string')
29568 obj = JSON.parse(obj);
29569 var res = curve.point(obj[0], obj[1], red);
29570 if (!obj[2])
29571 return res;
29572
29573 function obj2point(obj) {
29574 return curve.point(obj[0], obj[1], red);
29575 }
29576
29577 var pre = obj[2];
29578 res.precomputed = {
29579 beta: null,
29580 doubles: pre.doubles && {
29581 step: pre.doubles.step,
29582 points: [ res ].concat(pre.doubles.points.map(obj2point))
29583 },
29584 naf: pre.naf && {
29585 wnd: pre.naf.wnd,
29586 points: [ res ].concat(pre.naf.points.map(obj2point))
29587 }
29588 };
29589 return res;
29590 };
29591
29592 Point.prototype.inspect = function inspect() {
29593 if (this.isInfinity())
29594 return '<EC Point Infinity>';
29595 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29596 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
29597 };
29598
29599 Point.prototype.isInfinity = function isInfinity() {
29600 return this.inf;
29601 };
29602
29603 Point.prototype.add = function add(p) {
29604 // O + P = P
29605 if (this.inf)
29606 return p;
29607
29608 // P + O = P
29609 if (p.inf)
29610 return this;
29611
29612 // P + P = 2P
29613 if (this.eq(p))
29614 return this.dbl();
29615
29616 // P + (-P) = O
29617 if (this.neg().eq(p))
29618 return this.curve.point(null, null);
29619
29620 // P + Q = O
29621 if (this.x.cmp(p.x) === 0)
29622 return this.curve.point(null, null);
29623
29624 var c = this.y.redSub(p.y);
29625 if (c.cmpn(0) !== 0)
29626 c = c.redMul(this.x.redSub(p.x).redInvm());
29627 var nx = c.redSqr().redISub(this.x).redISub(p.x);
29628 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29629 return this.curve.point(nx, ny);
29630 };
29631
29632 Point.prototype.dbl = function dbl() {
29633 if (this.inf)
29634 return this;
29635
29636 // 2P = O
29637 var ys1 = this.y.redAdd(this.y);
29638 if (ys1.cmpn(0) === 0)
29639 return this.curve.point(null, null);
29640
29641 var a = this.curve.a;
29642
29643 var x2 = this.x.redSqr();
29644 var dyinv = ys1.redInvm();
29645 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
29646
29647 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
29648 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
29649 return this.curve.point(nx, ny);
29650 };
29651
29652 Point.prototype.getX = function getX() {
29653 return this.x.fromRed();
29654 };
29655
29656 Point.prototype.getY = function getY() {
29657 return this.y.fromRed();
29658 };
29659
29660 Point.prototype.mul = function mul(k) {
29661 k = new BN(k, 16);
29662
29663 if (this._hasDoubles(k))
29664 return this.curve._fixedNafMul(this, k);
29665 else if (this.curve.endo)
29666 return this.curve._endoWnafMulAdd([ this ], [ k ]);
29667 else
29668 return this.curve._wnafMul(this, k);
29669 };
29670
29671 Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
29672 var points = [ this, p2 ];
29673 var coeffs = [ k1, k2 ];
29674 if (this.curve.endo)
29675 return this.curve._endoWnafMulAdd(points, coeffs);
29676 else
29677 return this.curve._wnafMulAdd(1, points, coeffs, 2);
29678 };
29679
29680 Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
29681 var points = [ this, p2 ];
29682 var coeffs = [ k1, k2 ];
29683 if (this.curve.endo)
29684 return this.curve._endoWnafMulAdd(points, coeffs, true);
29685 else
29686 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
29687 };
29688
29689 Point.prototype.eq = function eq(p) {
29690 return this === p ||
29691 this.inf === p.inf &&
29692 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
29693 };
29694
29695 Point.prototype.neg = function neg(_precompute) {
29696 if (this.inf)
29697 return this;
29698
29699 var res = this.curve.point(this.x, this.y.redNeg());
29700 if (_precompute && this.precomputed) {
29701 var pre = this.precomputed;
29702 var negate = function(p) {
29703 return p.neg();
29704 };
29705 res.precomputed = {
29706 naf: pre.naf && {
29707 wnd: pre.naf.wnd,
29708 points: pre.naf.points.map(negate)
29709 },
29710 doubles: pre.doubles && {
29711 step: pre.doubles.step,
29712 points: pre.doubles.points.map(negate)
29713 }
29714 };
29715 }
29716 return res;
29717 };
29718
29719 Point.prototype.toJ = function toJ() {
29720 if (this.inf)
29721 return this.curve.jpoint(null, null, null);
29722
29723 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
29724 return res;
29725 };
29726
29727 function JPoint(curve, x, y, z) {
29728 Base.BasePoint.call(this, curve, 'jacobian');
29729 if (x === null && y === null && z === null) {
29730 this.x = this.curve.one;
29731 this.y = this.curve.one;
29732 this.z = new BN(0);
29733 } else {
29734 this.x = new BN(x, 16);
29735 this.y = new BN(y, 16);
29736 this.z = new BN(z, 16);
29737 }
29738 if (!this.x.red)
29739 this.x = this.x.toRed(this.curve.red);
29740 if (!this.y.red)
29741 this.y = this.y.toRed(this.curve.red);
29742 if (!this.z.red)
29743 this.z = this.z.toRed(this.curve.red);
29744
29745 this.zOne = this.z === this.curve.one;
29746 }
29747 inherits(JPoint, Base.BasePoint);
29748
29749 ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
29750 return new JPoint(this, x, y, z);
29751 };
29752
29753 JPoint.prototype.toP = function toP() {
29754 if (this.isInfinity())
29755 return this.curve.point(null, null);
29756
29757 var zinv = this.z.redInvm();
29758 var zinv2 = zinv.redSqr();
29759 var ax = this.x.redMul(zinv2);
29760 var ay = this.y.redMul(zinv2).redMul(zinv);
29761
29762 return this.curve.point(ax, ay);
29763 };
29764
29765 JPoint.prototype.neg = function neg() {
29766 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
29767 };
29768
29769 JPoint.prototype.add = function add(p) {
29770 // O + P = P
29771 if (this.isInfinity())
29772 return p;
29773
29774 // P + O = P
29775 if (p.isInfinity())
29776 return this;
29777
29778 // 12M + 4S + 7A
29779 var pz2 = p.z.redSqr();
29780 var z2 = this.z.redSqr();
29781 var u1 = this.x.redMul(pz2);
29782 var u2 = p.x.redMul(z2);
29783 var s1 = this.y.redMul(pz2.redMul(p.z));
29784 var s2 = p.y.redMul(z2.redMul(this.z));
29785
29786 var h = u1.redSub(u2);
29787 var r = s1.redSub(s2);
29788 if (h.cmpn(0) === 0) {
29789 if (r.cmpn(0) !== 0)
29790 return this.curve.jpoint(null, null, null);
29791 else
29792 return this.dbl();
29793 }
29794
29795 var h2 = h.redSqr();
29796 var h3 = h2.redMul(h);
29797 var v = u1.redMul(h2);
29798
29799 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29800 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29801 var nz = this.z.redMul(p.z).redMul(h);
29802
29803 return this.curve.jpoint(nx, ny, nz);
29804 };
29805
29806 JPoint.prototype.mixedAdd = function mixedAdd(p) {
29807 // O + P = P
29808 if (this.isInfinity())
29809 return p.toJ();
29810
29811 // P + O = P
29812 if (p.isInfinity())
29813 return this;
29814
29815 // 8M + 3S + 7A
29816 var z2 = this.z.redSqr();
29817 var u1 = this.x;
29818 var u2 = p.x.redMul(z2);
29819 var s1 = this.y;
29820 var s2 = p.y.redMul(z2).redMul(this.z);
29821
29822 var h = u1.redSub(u2);
29823 var r = s1.redSub(s2);
29824 if (h.cmpn(0) === 0) {
29825 if (r.cmpn(0) !== 0)
29826 return this.curve.jpoint(null, null, null);
29827 else
29828 return this.dbl();
29829 }
29830
29831 var h2 = h.redSqr();
29832 var h3 = h2.redMul(h);
29833 var v = u1.redMul(h2);
29834
29835 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
29836 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
29837 var nz = this.z.redMul(h);
29838
29839 return this.curve.jpoint(nx, ny, nz);
29840 };
29841
29842 JPoint.prototype.dblp = function dblp(pow) {
29843 if (pow === 0)
29844 return this;
29845 if (this.isInfinity())
29846 return this;
29847 if (!pow)
29848 return this.dbl();
29849
29850 if (this.curve.zeroA || this.curve.threeA) {
29851 var r = this;
29852 for (var i = 0; i < pow; i++)
29853 r = r.dbl();
29854 return r;
29855 }
29856
29857 // 1M + 2S + 1A + N * (4S + 5M + 8A)
29858 // N = 1 => 6M + 6S + 9A
29859 var a = this.curve.a;
29860 var tinv = this.curve.tinv;
29861
29862 var jx = this.x;
29863 var jy = this.y;
29864 var jz = this.z;
29865 var jz4 = jz.redSqr().redSqr();
29866
29867 // Reuse results
29868 var jyd = jy.redAdd(jy);
29869 for (var i = 0; i < pow; i++) {
29870 var jx2 = jx.redSqr();
29871 var jyd2 = jyd.redSqr();
29872 var jyd4 = jyd2.redSqr();
29873 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
29874
29875 var t1 = jx.redMul(jyd2);
29876 var nx = c.redSqr().redISub(t1.redAdd(t1));
29877 var t2 = t1.redISub(nx);
29878 var dny = c.redMul(t2);
29879 dny = dny.redIAdd(dny).redISub(jyd4);
29880 var nz = jyd.redMul(jz);
29881 if (i + 1 < pow)
29882 jz4 = jz4.redMul(jyd4);
29883
29884 jx = nx;
29885 jz = nz;
29886 jyd = dny;
29887 }
29888
29889 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
29890 };
29891
29892 JPoint.prototype.dbl = function dbl() {
29893 if (this.isInfinity())
29894 return this;
29895
29896 if (this.curve.zeroA)
29897 return this._zeroDbl();
29898 else if (this.curve.threeA)
29899 return this._threeDbl();
29900 else
29901 return this._dbl();
29902 };
29903
29904 JPoint.prototype._zeroDbl = function _zeroDbl() {
29905 var nx;
29906 var ny;
29907 var nz;
29908 // Z = 1
29909 if (this.zOne) {
29910 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29911 // #doubling-mdbl-2007-bl
29912 // 1M + 5S + 14A
29913
29914 // XX = X1^2
29915 var xx = this.x.redSqr();
29916 // YY = Y1^2
29917 var yy = this.y.redSqr();
29918 // YYYY = YY^2
29919 var yyyy = yy.redSqr();
29920 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29921 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29922 s = s.redIAdd(s);
29923 // M = 3 * XX + a; a = 0
29924 var m = xx.redAdd(xx).redIAdd(xx);
29925 // T = M ^ 2 - 2*S
29926 var t = m.redSqr().redISub(s).redISub(s);
29927
29928 // 8 * YYYY
29929 var yyyy8 = yyyy.redIAdd(yyyy);
29930 yyyy8 = yyyy8.redIAdd(yyyy8);
29931 yyyy8 = yyyy8.redIAdd(yyyy8);
29932
29933 // X3 = T
29934 nx = t;
29935 // Y3 = M * (S - T) - 8 * YYYY
29936 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
29937 // Z3 = 2*Y1
29938 nz = this.y.redAdd(this.y);
29939 } else {
29940 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
29941 // #doubling-dbl-2009-l
29942 // 2M + 5S + 13A
29943
29944 // A = X1^2
29945 var a = this.x.redSqr();
29946 // B = Y1^2
29947 var b = this.y.redSqr();
29948 // C = B^2
29949 var c = b.redSqr();
29950 // D = 2 * ((X1 + B)^2 - A - C)
29951 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
29952 d = d.redIAdd(d);
29953 // E = 3 * A
29954 var e = a.redAdd(a).redIAdd(a);
29955 // F = E^2
29956 var f = e.redSqr();
29957
29958 // 8 * C
29959 var c8 = c.redIAdd(c);
29960 c8 = c8.redIAdd(c8);
29961 c8 = c8.redIAdd(c8);
29962
29963 // X3 = F - 2 * D
29964 nx = f.redISub(d).redISub(d);
29965 // Y3 = E * (D - X3) - 8 * C
29966 ny = e.redMul(d.redISub(nx)).redISub(c8);
29967 // Z3 = 2 * Y1 * Z1
29968 nz = this.y.redMul(this.z);
29969 nz = nz.redIAdd(nz);
29970 }
29971
29972 return this.curve.jpoint(nx, ny, nz);
29973 };
29974
29975 JPoint.prototype._threeDbl = function _threeDbl() {
29976 var nx;
29977 var ny;
29978 var nz;
29979 // Z = 1
29980 if (this.zOne) {
29981 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
29982 // #doubling-mdbl-2007-bl
29983 // 1M + 5S + 15A
29984
29985 // XX = X1^2
29986 var xx = this.x.redSqr();
29987 // YY = Y1^2
29988 var yy = this.y.redSqr();
29989 // YYYY = YY^2
29990 var yyyy = yy.redSqr();
29991 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
29992 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
29993 s = s.redIAdd(s);
29994 // M = 3 * XX + a
29995 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
29996 // T = M^2 - 2 * S
29997 var t = m.redSqr().redISub(s).redISub(s);
29998 // X3 = T
29999 nx = t;
30000 // Y3 = M * (S - T) - 8 * YYYY
30001 var yyyy8 = yyyy.redIAdd(yyyy);
30002 yyyy8 = yyyy8.redIAdd(yyyy8);
30003 yyyy8 = yyyy8.redIAdd(yyyy8);
30004 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30005 // Z3 = 2 * Y1
30006 nz = this.y.redAdd(this.y);
30007 } else {
30008 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30009 // 3M + 5S
30010
30011 // delta = Z1^2
30012 var delta = this.z.redSqr();
30013 // gamma = Y1^2
30014 var gamma = this.y.redSqr();
30015 // beta = X1 * gamma
30016 var beta = this.x.redMul(gamma);
30017 // alpha = 3 * (X1 - delta) * (X1 + delta)
30018 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30019 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30020 // X3 = alpha^2 - 8 * beta
30021 var beta4 = beta.redIAdd(beta);
30022 beta4 = beta4.redIAdd(beta4);
30023 var beta8 = beta4.redAdd(beta4);
30024 nx = alpha.redSqr().redISub(beta8);
30025 // Z3 = (Y1 + Z1)^2 - gamma - delta
30026 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30027 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30028 var ggamma8 = gamma.redSqr();
30029 ggamma8 = ggamma8.redIAdd(ggamma8);
30030 ggamma8 = ggamma8.redIAdd(ggamma8);
30031 ggamma8 = ggamma8.redIAdd(ggamma8);
30032 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30033 }
30034
30035 return this.curve.jpoint(nx, ny, nz);
30036 };
30037
30038 JPoint.prototype._dbl = function _dbl() {
30039 var a = this.curve.a;
30040
30041 // 4M + 6S + 10A
30042 var jx = this.x;
30043 var jy = this.y;
30044 var jz = this.z;
30045 var jz4 = jz.redSqr().redSqr();
30046
30047 var jx2 = jx.redSqr();
30048 var jy2 = jy.redSqr();
30049
30050 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30051
30052 var jxd4 = jx.redAdd(jx);
30053 jxd4 = jxd4.redIAdd(jxd4);
30054 var t1 = jxd4.redMul(jy2);
30055 var nx = c.redSqr().redISub(t1.redAdd(t1));
30056 var t2 = t1.redISub(nx);
30057
30058 var jyd8 = jy2.redSqr();
30059 jyd8 = jyd8.redIAdd(jyd8);
30060 jyd8 = jyd8.redIAdd(jyd8);
30061 jyd8 = jyd8.redIAdd(jyd8);
30062 var ny = c.redMul(t2).redISub(jyd8);
30063 var nz = jy.redAdd(jy).redMul(jz);
30064
30065 return this.curve.jpoint(nx, ny, nz);
30066 };
30067
30068 JPoint.prototype.trpl = function trpl() {
30069 if (!this.curve.zeroA)
30070 return this.dbl().add(this);
30071
30072 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30073 // 5M + 10S + ...
30074
30075 // XX = X1^2
30076 var xx = this.x.redSqr();
30077 // YY = Y1^2
30078 var yy = this.y.redSqr();
30079 // ZZ = Z1^2
30080 var zz = this.z.redSqr();
30081 // YYYY = YY^2
30082 var yyyy = yy.redSqr();
30083 // M = 3 * XX + a * ZZ2; a = 0
30084 var m = xx.redAdd(xx).redIAdd(xx);
30085 // MM = M^2
30086 var mm = m.redSqr();
30087 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30088 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30089 e = e.redIAdd(e);
30090 e = e.redAdd(e).redIAdd(e);
30091 e = e.redISub(mm);
30092 // EE = E^2
30093 var ee = e.redSqr();
30094 // T = 16*YYYY
30095 var t = yyyy.redIAdd(yyyy);
30096 t = t.redIAdd(t);
30097 t = t.redIAdd(t);
30098 t = t.redIAdd(t);
30099 // U = (M + E)^2 - MM - EE - T
30100 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30101 // X3 = 4 * (X1 * EE - 4 * YY * U)
30102 var yyu4 = yy.redMul(u);
30103 yyu4 = yyu4.redIAdd(yyu4);
30104 yyu4 = yyu4.redIAdd(yyu4);
30105 var nx = this.x.redMul(ee).redISub(yyu4);
30106 nx = nx.redIAdd(nx);
30107 nx = nx.redIAdd(nx);
30108 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30109 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30110 ny = ny.redIAdd(ny);
30111 ny = ny.redIAdd(ny);
30112 ny = ny.redIAdd(ny);
30113 // Z3 = (Z1 + E)^2 - ZZ - EE
30114 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30115
30116 return this.curve.jpoint(nx, ny, nz);
30117 };
30118
30119 JPoint.prototype.mul = function mul(k, kbase) {
30120 k = new BN(k, kbase);
30121
30122 return this.curve._wnafMul(this, k);
30123 };
30124
30125 JPoint.prototype.eq = function eq(p) {
30126 if (p.type === 'affine')
30127 return this.eq(p.toJ());
30128
30129 if (this === p)
30130 return true;
30131
30132 // x1 * z2^2 == x2 * z1^2
30133 var z2 = this.z.redSqr();
30134 var pz2 = p.z.redSqr();
30135 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30136 return false;
30137
30138 // y1 * z2^3 == y2 * z1^3
30139 var z3 = z2.redMul(this.z);
30140 var pz3 = pz2.redMul(p.z);
30141 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30142 };
30143
30144 JPoint.prototype.eqXToP = function eqXToP(x) {
30145 var zs = this.z.redSqr();
30146 var rx = x.toRed(this.curve.red).redMul(zs);
30147 if (this.x.cmp(rx) === 0)
30148 return true;
30149
30150 var xc = x.clone();
30151 var t = this.curve.redN.redMul(zs);
30152 for (;;) {
30153 xc.iadd(this.curve.n);
30154 if (xc.cmp(this.curve.p) >= 0)
30155 return false;
30156
30157 rx.redIAdd(t);
30158 if (this.x.cmp(rx) === 0)
30159 return true;
30160 }
30161 return false;
30162 };
30163
30164 JPoint.prototype.inspect = function inspect() {
30165 if (this.isInfinity())
30166 return '<EC JPoint Infinity>';
30167 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30168 ' y: ' + this.y.toString(16, 2) +
30169 ' z: ' + this.z.toString(16, 2) + '>';
30170 };
30171
30172 JPoint.prototype.isInfinity = function isInfinity() {
30173 // XXX This code assumes that zero is always zero in red
30174 return this.z.cmpn(0) === 0;
30175 };
30176
30177 },{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30178 'use strict';
30179
30180 var curves = exports;
30181
30182 var hash = require('hash.js');
30183 var elliptic = require('../elliptic');
30184
30185 var assert = elliptic.utils.assert;
30186
30187 function PresetCurve(options) {
30188 if (options.type === 'short')
30189 this.curve = new elliptic.curve.short(options);
30190 else if (options.type === 'edwards')
30191 this.curve = new elliptic.curve.edwards(options);
30192 else
30193 this.curve = new elliptic.curve.mont(options);
30194 this.g = this.curve.g;
30195 this.n = this.curve.n;
30196 this.hash = options.hash;
30197
30198 assert(this.g.validate(), 'Invalid curve');
30199 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30200 }
30201 curves.PresetCurve = PresetCurve;
30202
30203 function defineCurve(name, options) {
30204 Object.defineProperty(curves, name, {
30205 configurable: true,
30206 enumerable: true,
30207 get: function() {
30208 var curve = new PresetCurve(options);
30209 Object.defineProperty(curves, name, {
30210 configurable: true,
30211 enumerable: true,
30212 value: curve
30213 });
30214 return curve;
30215 }
30216 });
30217 }
30218
30219 defineCurve('p192', {
30220 type: 'short',
30221 prime: 'p192',
30222 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
30223 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
30224 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
30225 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
30226 hash: hash.sha256,
30227 gRed: false,
30228 g: [
30229 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
30230 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
30231 ]
30232 });
30233
30234 defineCurve('p224', {
30235 type: 'short',
30236 prime: 'p224',
30237 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
30238 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
30239 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
30240 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
30241 hash: hash.sha256,
30242 gRed: false,
30243 g: [
30244 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
30245 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
30246 ]
30247 });
30248
30249 defineCurve('p256', {
30250 type: 'short',
30251 prime: null,
30252 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
30253 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
30254 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
30255 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
30256 hash: hash.sha256,
30257 gRed: false,
30258 g: [
30259 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
30260 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
30261 ]
30262 });
30263
30264 defineCurve('p384', {
30265 type: 'short',
30266 prime: null,
30267 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30268 'fffffffe ffffffff 00000000 00000000 ffffffff',
30269 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30270 'fffffffe ffffffff 00000000 00000000 fffffffc',
30271 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
30272 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
30273 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
30274 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
30275 hash: hash.sha384,
30276 gRed: false,
30277 g: [
30278 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
30279 '5502f25d bf55296c 3a545e38 72760ab7',
30280 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
30281 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
30282 ]
30283 });
30284
30285 defineCurve('p521', {
30286 type: 'short',
30287 prime: null,
30288 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30289 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30290 'ffffffff ffffffff ffffffff ffffffff ffffffff',
30291 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30292 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30293 'ffffffff ffffffff ffffffff ffffffff fffffffc',
30294 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
30295 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
30296 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
30297 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30298 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
30299 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
30300 hash: hash.sha512,
30301 gRed: false,
30302 g: [
30303 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
30304 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
30305 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
30306 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
30307 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
30308 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
30309 ]
30310 });
30311
30312 defineCurve('curve25519', {
30313 type: 'mont',
30314 prime: 'p25519',
30315 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30316 a: '76d06',
30317 b: '1',
30318 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30319 hash: hash.sha256,
30320 gRed: false,
30321 g: [
30322 '9'
30323 ]
30324 });
30325
30326 defineCurve('ed25519', {
30327 type: 'edwards',
30328 prime: 'p25519',
30329 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30330 a: '-1',
30331 c: '1',
30332 // -121665 * (121666^(-1)) (mod P)
30333 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
30334 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30335 hash: hash.sha256,
30336 gRed: false,
30337 g: [
30338 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
30339
30340 // 4/5
30341 '6666666666666666666666666666666666666666666666666666666666666658'
30342 ]
30343 });
30344
30345 var pre;
30346 try {
30347 pre = require('./precomputed/secp256k1');
30348 } catch (e) {
30349 pre = undefined;
30350 }
30351
30352 defineCurve('secp256k1', {
30353 type: 'short',
30354 prime: 'k256',
30355 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
30356 a: '0',
30357 b: '7',
30358 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
30359 h: '1',
30360 hash: hash.sha256,
30361
30362 // Precomputed endomorphism
30363 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
30364 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
30365 basis: [
30366 {
30367 a: '3086d221a7d46bcde86c90e49284eb15',
30368 b: '-e4437ed6010e88286f547fa90abfe4c3'
30369 },
30370 {
30371 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
30372 b: '3086d221a7d46bcde86c90e49284eb15'
30373 }
30374 ],
30375
30376 gRed: false,
30377 g: [
30378 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
30379 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
30380 pre
30381 ]
30382 });
30383
30384 },{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
30385 'use strict';
30386
30387 var BN = require('bn.js');
30388 var elliptic = require('../../elliptic');
30389 var utils = elliptic.utils;
30390 var assert = utils.assert;
30391
30392 var KeyPair = require('./key');
30393 var Signature = require('./signature');
30394
30395 function EC(options) {
30396 if (!(this instanceof EC))
30397 return new EC(options);
30398
30399 // Shortcut `elliptic.ec(curve-name)`
30400 if (typeof options === 'string') {
30401 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
30402
30403 options = elliptic.curves[options];
30404 }
30405
30406 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
30407 if (options instanceof elliptic.curves.PresetCurve)
30408 options = { curve: options };
30409
30410 this.curve = options.curve.curve;
30411 this.n = this.curve.n;
30412 this.nh = this.n.ushrn(1);
30413 this.g = this.curve.g;
30414
30415 // Point on curve
30416 this.g = options.curve.g;
30417 this.g.precompute(options.curve.n.bitLength() + 1);
30418
30419 // Hash for function for DRBG
30420 this.hash = options.hash || options.curve.hash;
30421 }
30422 module.exports = EC;
30423
30424 EC.prototype.keyPair = function keyPair(options) {
30425 return new KeyPair(this, options);
30426 };
30427
30428 EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
30429 return KeyPair.fromPrivate(this, priv, enc);
30430 };
30431
30432 EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
30433 return KeyPair.fromPublic(this, pub, enc);
30434 };
30435
30436 EC.prototype.genKeyPair = function genKeyPair(options) {
30437 if (!options)
30438 options = {};
30439
30440 // Instantiate Hmac_DRBG
30441 var drbg = new elliptic.hmacDRBG({
30442 hash: this.hash,
30443 pers: options.pers,
30444 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
30445 nonce: this.n.toArray()
30446 });
30447
30448 var bytes = this.n.byteLength();
30449 var ns2 = this.n.sub(new BN(2));
30450 do {
30451 var priv = new BN(drbg.generate(bytes));
30452 if (priv.cmp(ns2) > 0)
30453 continue;
30454
30455 priv.iaddn(1);
30456 return this.keyFromPrivate(priv);
30457 } while (true);
30458 };
30459
30460 EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
30461 var delta = msg.byteLength() * 8 - this.n.bitLength();
30462 if (delta > 0)
30463 msg = msg.ushrn(delta);
30464 if (!truncOnly && msg.cmp(this.n) >= 0)
30465 return msg.sub(this.n);
30466 else
30467 return msg;
30468 };
30469
30470 EC.prototype.sign = function sign(msg, key, enc, options) {
30471 if (typeof enc === 'object') {
30472 options = enc;
30473 enc = null;
30474 }
30475 if (!options)
30476 options = {};
30477
30478 key = this.keyFromPrivate(key, enc);
30479 msg = this._truncateToN(new BN(msg, 16));
30480
30481 // Zero-extend key to provide enough entropy
30482 var bytes = this.n.byteLength();
30483 var bkey = key.getPrivate().toArray('be', bytes);
30484
30485 // Zero-extend nonce to have the same byte size as N
30486 var nonce = msg.toArray('be', bytes);
30487
30488 // Instantiate Hmac_DRBG
30489 var drbg = new elliptic.hmacDRBG({
30490 hash: this.hash,
30491 entropy: bkey,
30492 nonce: nonce,
30493 pers: options.pers,
30494 persEnc: options.persEnc
30495 });
30496
30497 // Number of bytes to generate
30498 var ns1 = this.n.sub(new BN(1));
30499
30500 for (var iter = 0; true; iter++) {
30501 var k = options.k ?
30502 options.k(iter) :
30503 new BN(drbg.generate(this.n.byteLength()));
30504 k = this._truncateToN(k, true);
30505 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
30506 continue;
30507
30508 var kp = this.g.mul(k);
30509 if (kp.isInfinity())
30510 continue;
30511
30512 var kpX = kp.getX();
30513 var r = kpX.umod(this.n);
30514 if (r.cmpn(0) === 0)
30515 continue;
30516
30517 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
30518 s = s.umod(this.n);
30519 if (s.cmpn(0) === 0)
30520 continue;
30521
30522 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
30523 (kpX.cmp(r) !== 0 ? 2 : 0);
30524
30525 // Use complement of `s`, if it is > `n / 2`
30526 if (options.canonical && s.cmp(this.nh) > 0) {
30527 s = this.n.sub(s);
30528 recoveryParam ^= 1;
30529 }
30530
30531 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
30532 }
30533 };
30534
30535 EC.prototype.verify = function verify(msg, signature, key, enc) {
30536 msg = this._truncateToN(new BN(msg, 16));
30537 key = this.keyFromPublic(key, enc);
30538 signature = new Signature(signature, 'hex');
30539
30540 // Perform primitive values validation
30541 var r = signature.r;
30542 var s = signature.s;
30543 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
30544 return false;
30545 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
30546 return false;
30547
30548 // Validate signature
30549 var sinv = s.invm(this.n);
30550 var u1 = sinv.mul(msg).umod(this.n);
30551 var u2 = sinv.mul(r).umod(this.n);
30552
30553 if (!this.curve._maxwellTrick) {
30554 var p = this.g.mulAdd(u1, key.getPublic(), u2);
30555 if (p.isInfinity())
30556 return false;
30557
30558 return p.getX().umod(this.n).cmp(r) === 0;
30559 }
30560
30561 // NOTE: Greg Maxwell's trick, inspired by:
30562 // https://git.io/vad3K
30563
30564 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
30565 if (p.isInfinity())
30566 return false;
30567
30568 // Compare `p.x` of Jacobian point with `r`,
30569 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
30570 // inverse of `p.z^2`
30571 return p.eqXToP(r);
30572 };
30573
30574 EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
30575 assert((3 & j) === j, 'The recovery param is more than two bits');
30576 signature = new Signature(signature, enc);
30577
30578 var n = this.n;
30579 var e = new BN(msg);
30580 var r = signature.r;
30581 var s = signature.s;
30582
30583 // A set LSB signifies that the y-coordinate is odd
30584 var isYOdd = j & 1;
30585 var isSecondKey = j >> 1;
30586 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
30587 throw new Error('Unable to find sencond key candinate');
30588
30589 // 1.1. Let x = r + jn.
30590 if (isSecondKey)
30591 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
30592 else
30593 r = this.curve.pointFromX(r, isYOdd);
30594
30595 var rInv = signature.r.invm(n);
30596 var s1 = n.sub(e).mul(rInv).umod(n);
30597 var s2 = s.mul(rInv).umod(n);
30598
30599 // 1.6.1 Compute Q = r^-1 (sR - eG)
30600 // Q = r^-1 (sR + -eG)
30601 return this.g.mulAdd(s1, r, s2);
30602 };
30603
30604 EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
30605 signature = new Signature(signature, enc);
30606 if (signature.recoveryParam !== null)
30607 return signature.recoveryParam;
30608
30609 for (var i = 0; i < 4; i++) {
30610 var Qprime;
30611 try {
30612 Qprime = this.recoverPubKey(e, signature, i);
30613 } catch (e) {
30614 continue;
30615 }
30616
30617 if (Qprime.eq(Q))
30618 return i;
30619 }
30620 throw new Error('Unable to find valid recovery factor');
30621 };
30622
30623 },{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
30624 'use strict';
30625
30626 var BN = require('bn.js');
30627 var elliptic = require('../../elliptic');
30628 var utils = elliptic.utils;
30629 var assert = utils.assert;
30630
30631 function KeyPair(ec, options) {
30632 this.ec = ec;
30633 this.priv = null;
30634 this.pub = null;
30635
30636 // KeyPair(ec, { priv: ..., pub: ... })
30637 if (options.priv)
30638 this._importPrivate(options.priv, options.privEnc);
30639 if (options.pub)
30640 this._importPublic(options.pub, options.pubEnc);
30641 }
30642 module.exports = KeyPair;
30643
30644 KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
30645 if (pub instanceof KeyPair)
30646 return pub;
30647
30648 return new KeyPair(ec, {
30649 pub: pub,
30650 pubEnc: enc
30651 });
30652 };
30653
30654 KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
30655 if (priv instanceof KeyPair)
30656 return priv;
30657
30658 return new KeyPair(ec, {
30659 priv: priv,
30660 privEnc: enc
30661 });
30662 };
30663
30664 KeyPair.prototype.validate = function validate() {
30665 var pub = this.getPublic();
30666
30667 if (pub.isInfinity())
30668 return { result: false, reason: 'Invalid public key' };
30669 if (!pub.validate())
30670 return { result: false, reason: 'Public key is not a point' };
30671 if (!pub.mul(this.ec.curve.n).isInfinity())
30672 return { result: false, reason: 'Public key * N != O' };
30673
30674 return { result: true, reason: null };
30675 };
30676
30677 KeyPair.prototype.getPublic = function getPublic(compact, enc) {
30678 // compact is optional argument
30679 if (typeof compact === 'string') {
30680 enc = compact;
30681 compact = null;
30682 }
30683
30684 if (!this.pub)
30685 this.pub = this.ec.g.mul(this.priv);
30686
30687 if (!enc)
30688 return this.pub;
30689
30690 return this.pub.encode(enc, compact);
30691 };
30692
30693 KeyPair.prototype.getPrivate = function getPrivate(enc) {
30694 if (enc === 'hex')
30695 return this.priv.toString(16, 2);
30696 else
30697 return this.priv;
30698 };
30699
30700 KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
30701 this.priv = new BN(key, enc || 16);
30702
30703 // Ensure that the priv won't be bigger than n, otherwise we may fail
30704 // in fixed multiplication method
30705 this.priv = this.priv.umod(this.ec.curve.n);
30706 };
30707
30708 KeyPair.prototype._importPublic = function _importPublic(key, enc) {
30709 if (key.x || key.y) {
30710 // Montgomery points only have an `x` coordinate.
30711 // Weierstrass/Edwards points on the other hand have both `x` and
30712 // `y` coordinates.
30713 if (this.ec.curve.type === 'mont') {
30714 assert(key.x, 'Need x coordinate');
30715 } else if (this.ec.curve.type === 'short' ||
30716 this.ec.curve.type === 'edwards') {
30717 assert(key.x && key.y, 'Need both x and y coordinate');
30718 }
30719 this.pub = this.ec.curve.point(key.x, key.y);
30720 return;
30721 }
30722 this.pub = this.ec.curve.decodePoint(key, enc);
30723 };
30724
30725 // ECDH
30726 KeyPair.prototype.derive = function derive(pub) {
30727 return pub.mul(this.priv).getX();
30728 };
30729
30730 // ECDSA
30731 KeyPair.prototype.sign = function sign(msg, enc, options) {
30732 return this.ec.sign(msg, this, enc, options);
30733 };
30734
30735 KeyPair.prototype.verify = function verify(msg, signature) {
30736 return this.ec.verify(msg, signature, this);
30737 };
30738
30739 KeyPair.prototype.inspect = function inspect() {
30740 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
30741 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
30742 };
30743
30744 },{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
30745 'use strict';
30746
30747 var BN = require('bn.js');
30748
30749 var elliptic = require('../../elliptic');
30750 var utils = elliptic.utils;
30751 var assert = utils.assert;
30752
30753 function Signature(options, enc) {
30754 if (options instanceof Signature)
30755 return options;
30756
30757 if (this._importDER(options, enc))
30758 return;
30759
30760 assert(options.r && options.s, 'Signature without r or s');
30761 this.r = new BN(options.r, 16);
30762 this.s = new BN(options.s, 16);
30763 if (options.recoveryParam === undefined)
30764 this.recoveryParam = null;
30765 else
30766 this.recoveryParam = options.recoveryParam;
30767 }
30768 module.exports = Signature;
30769
30770 function Position() {
30771 this.place = 0;
30772 }
30773
30774 function getLength(buf, p) {
30775 var initial = buf[p.place++];
30776 if (!(initial & 0x80)) {
30777 return initial;
30778 }
30779 var octetLen = initial & 0xf;
30780 var val = 0;
30781 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
30782 val <<= 8;
30783 val |= buf[off];
30784 }
30785 p.place = off;
30786 return val;
30787 }
30788
30789 function rmPadding(buf) {
30790 var i = 0;
30791 var len = buf.length - 1;
30792 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
30793 i++;
30794 }
30795 if (i === 0) {
30796 return buf;
30797 }
30798 return buf.slice(i);
30799 }
30800
30801 Signature.prototype._importDER = function _importDER(data, enc) {
30802 data = utils.toArray(data, enc);
30803 var p = new Position();
30804 if (data[p.place++] !== 0x30) {
30805 return false;
30806 }
30807 var len = getLength(data, p);
30808 if ((len + p.place) !== data.length) {
30809 return false;
30810 }
30811 if (data[p.place++] !== 0x02) {
30812 return false;
30813 }
30814 var rlen = getLength(data, p);
30815 var r = data.slice(p.place, rlen + p.place);
30816 p.place += rlen;
30817 if (data[p.place++] !== 0x02) {
30818 return false;
30819 }
30820 var slen = getLength(data, p);
30821 if (data.length !== slen + p.place) {
30822 return false;
30823 }
30824 var s = data.slice(p.place, slen + p.place);
30825 if (r[0] === 0 && (r[1] & 0x80)) {
30826 r = r.slice(1);
30827 }
30828 if (s[0] === 0 && (s[1] & 0x80)) {
30829 s = s.slice(1);
30830 }
30831
30832 this.r = new BN(r);
30833 this.s = new BN(s);
30834 this.recoveryParam = null;
30835
30836 return true;
30837 };
30838
30839 function constructLength(arr, len) {
30840 if (len < 0x80) {
30841 arr.push(len);
30842 return;
30843 }
30844 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
30845 arr.push(octets | 0x80);
30846 while (--octets) {
30847 arr.push((len >>> (octets << 3)) & 0xff);
30848 }
30849 arr.push(len);
30850 }
30851
30852 Signature.prototype.toDER = function toDER(enc) {
30853 var r = this.r.toArray();
30854 var s = this.s.toArray();
30855
30856 // Pad values
30857 if (r[0] & 0x80)
30858 r = [ 0 ].concat(r);
30859 // Pad values
30860 if (s[0] & 0x80)
30861 s = [ 0 ].concat(s);
30862
30863 r = rmPadding(r);
30864 s = rmPadding(s);
30865
30866 while (!s[0] && !(s[1] & 0x80)) {
30867 s = s.slice(1);
30868 }
30869 var arr = [ 0x02 ];
30870 constructLength(arr, r.length);
30871 arr = arr.concat(r);
30872 arr.push(0x02);
30873 constructLength(arr, s.length);
30874 var backHalf = arr.concat(s);
30875 var res = [ 0x30 ];
30876 constructLength(res, backHalf.length);
30877 res = res.concat(backHalf);
30878 return utils.encode(res, enc);
30879 };
30880
30881 },{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
30882 'use strict';
30883
30884 var hash = require('hash.js');
30885 var elliptic = require('../../elliptic');
30886 var utils = elliptic.utils;
30887 var assert = utils.assert;
30888 var parseBytes = utils.parseBytes;
30889 var KeyPair = require('./key');
30890 var Signature = require('./signature');
30891
30892 function EDDSA(curve) {
30893 assert(curve === 'ed25519', 'only tested with ed25519 so far');
30894
30895 if (!(this instanceof EDDSA))
30896 return new EDDSA(curve);
30897
30898 var curve = elliptic.curves[curve].curve;
30899 this.curve = curve;
30900 this.g = curve.g;
30901 this.g.precompute(curve.n.bitLength() + 1);
30902
30903 this.pointClass = curve.point().constructor;
30904 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
30905 this.hash = hash.sha512;
30906 }
30907
30908 module.exports = EDDSA;
30909
30910 /**
30911 * @param {Array|String} message - message bytes
30912 * @param {Array|String|KeyPair} secret - secret bytes or a keypair
30913 * @returns {Signature} - signature
30914 */
30915 EDDSA.prototype.sign = function sign(message, secret) {
30916 message = parseBytes(message);
30917 var key = this.keyFromSecret(secret);
30918 var r = this.hashInt(key.messagePrefix(), message);
30919 var R = this.g.mul(r);
30920 var Rencoded = this.encodePoint(R);
30921 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
30922 .mul(key.priv());
30923 var S = r.add(s_).umod(this.curve.n);
30924 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
30925 };
30926
30927 /**
30928 * @param {Array} message - message bytes
30929 * @param {Array|String|Signature} sig - sig bytes
30930 * @param {Array|String|Point|KeyPair} pub - public key
30931 * @returns {Boolean} - true if public key matches sig of message
30932 */
30933 EDDSA.prototype.verify = function verify(message, sig, pub) {
30934 message = parseBytes(message);
30935 sig = this.makeSignature(sig);
30936 var key = this.keyFromPublic(pub);
30937 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
30938 var SG = this.g.mul(sig.S());
30939 var RplusAh = sig.R().add(key.pub().mul(h));
30940 return RplusAh.eq(SG);
30941 };
30942
30943 EDDSA.prototype.hashInt = function hashInt() {
30944 var hash = this.hash();
30945 for (var i = 0; i < arguments.length; i++)
30946 hash.update(arguments[i]);
30947 return utils.intFromLE(hash.digest()).umod(this.curve.n);
30948 };
30949
30950 EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
30951 return KeyPair.fromPublic(this, pub);
30952 };
30953
30954 EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
30955 return KeyPair.fromSecret(this, secret);
30956 };
30957
30958 EDDSA.prototype.makeSignature = function makeSignature(sig) {
30959 if (sig instanceof Signature)
30960 return sig;
30961 return new Signature(this, sig);
30962 };
30963
30964 /**
30965 * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
30966 *
30967 * EDDSA defines methods for encoding and decoding points and integers. These are
30968 * helper convenience methods, that pass along to utility functions implied
30969 * parameters.
30970 *
30971 */
30972 EDDSA.prototype.encodePoint = function encodePoint(point) {
30973 var enc = point.getY().toArray('le', this.encodingLength);
30974 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
30975 return enc;
30976 };
30977
30978 EDDSA.prototype.decodePoint = function decodePoint(bytes) {
30979 bytes = utils.parseBytes(bytes);
30980
30981 var lastIx = bytes.length - 1;
30982 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
30983 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
30984
30985 var y = utils.intFromLE(normed);
30986 return this.curve.pointFromY(y, xIsOdd);
30987 };
30988
30989 EDDSA.prototype.encodeInt = function encodeInt(num) {
30990 return num.toArray('le', this.encodingLength);
30991 };
30992
30993 EDDSA.prototype.decodeInt = function decodeInt(bytes) {
30994 return utils.intFromLE(bytes);
30995 };
30996
30997 EDDSA.prototype.isPoint = function isPoint(val) {
30998 return val instanceof this.pointClass;
30999 };
31000
31001 },{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31002 'use strict';
31003
31004 var elliptic = require('../../elliptic');
31005 var utils = elliptic.utils;
31006 var assert = utils.assert;
31007 var parseBytes = utils.parseBytes;
31008 var cachedProperty = utils.cachedProperty;
31009
31010 /**
31011 * @param {EDDSA} eddsa - instance
31012 * @param {Object} params - public/private key parameters
31013 *
31014 * @param {Array<Byte>} [params.secret] - secret seed bytes
31015 * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31016 * @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31017 *
31018 */
31019 function KeyPair(eddsa, params) {
31020 this.eddsa = eddsa;
31021 this._secret = parseBytes(params.secret);
31022 if (eddsa.isPoint(params.pub))
31023 this._pub = params.pub;
31024 else
31025 this._pubBytes = parseBytes(params.pub);
31026 }
31027
31028 KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31029 if (pub instanceof KeyPair)
31030 return pub;
31031 return new KeyPair(eddsa, { pub: pub });
31032 };
31033
31034 KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31035 if (secret instanceof KeyPair)
31036 return secret;
31037 return new KeyPair(eddsa, { secret: secret });
31038 };
31039
31040 KeyPair.prototype.secret = function secret() {
31041 return this._secret;
31042 };
31043
31044 cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31045 return this.eddsa.encodePoint(this.pub());
31046 });
31047
31048 cachedProperty(KeyPair, 'pub', function pub() {
31049 if (this._pubBytes)
31050 return this.eddsa.decodePoint(this._pubBytes);
31051 return this.eddsa.g.mul(this.priv());
31052 });
31053
31054 cachedProperty(KeyPair, 'privBytes', function privBytes() {
31055 var eddsa = this.eddsa;
31056 var hash = this.hash();
31057 var lastIx = eddsa.encodingLength - 1;
31058
31059 var a = hash.slice(0, eddsa.encodingLength);
31060 a[0] &= 248;
31061 a[lastIx] &= 127;
31062 a[lastIx] |= 64;
31063
31064 return a;
31065 });
31066
31067 cachedProperty(KeyPair, 'priv', function priv() {
31068 return this.eddsa.decodeInt(this.privBytes());
31069 });
31070
31071 cachedProperty(KeyPair, 'hash', function hash() {
31072 return this.eddsa.hash().update(this.secret()).digest();
31073 });
31074
31075 cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31076 return this.hash().slice(this.eddsa.encodingLength);
31077 });
31078
31079 KeyPair.prototype.sign = function sign(message) {
31080 assert(this._secret, 'KeyPair can only verify');
31081 return this.eddsa.sign(message, this);
31082 };
31083
31084 KeyPair.prototype.verify = function verify(message, sig) {
31085 return this.eddsa.verify(message, sig, this);
31086 };
31087
31088 KeyPair.prototype.getSecret = function getSecret(enc) {
31089 assert(this._secret, 'KeyPair is public only');
31090 return utils.encode(this.secret(), enc);
31091 };
31092
31093 KeyPair.prototype.getPublic = function getPublic(enc) {
31094 return utils.encode(this.pubBytes(), enc);
31095 };
31096
31097 module.exports = KeyPair;
31098
31099 },{"../../elliptic":39}],51:[function(require,module,exports){
31100 'use strict';
31101
31102 var BN = require('bn.js');
31103 var elliptic = require('../../elliptic');
31104 var utils = elliptic.utils;
31105 var assert = utils.assert;
31106 var cachedProperty = utils.cachedProperty;
31107 var parseBytes = utils.parseBytes;
31108
31109 /**
31110 * @param {EDDSA} eddsa - eddsa instance
31111 * @param {Array<Bytes>|Object} sig -
31112 * @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31113 * @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31114 * @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31115 * @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31116 */
31117 function Signature(eddsa, sig) {
31118 this.eddsa = eddsa;
31119
31120 if (typeof sig !== 'object')
31121 sig = parseBytes(sig);
31122
31123 if (Array.isArray(sig)) {
31124 sig = {
31125 R: sig.slice(0, eddsa.encodingLength),
31126 S: sig.slice(eddsa.encodingLength)
31127 };
31128 }
31129
31130 assert(sig.R && sig.S, 'Signature without R or S');
31131
31132 if (eddsa.isPoint(sig.R))
31133 this._R = sig.R;
31134 if (sig.S instanceof BN)
31135 this._S = sig.S;
31136
31137 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31138 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
31139 }
31140
31141 cachedProperty(Signature, 'S', function S() {
31142 return this.eddsa.decodeInt(this.Sencoded());
31143 });
31144
31145 cachedProperty(Signature, 'R', function R() {
31146 return this.eddsa.decodePoint(this.Rencoded());
31147 });
31148
31149 cachedProperty(Signature, 'Rencoded', function Rencoded() {
31150 return this.eddsa.encodePoint(this.R());
31151 });
31152
31153 cachedProperty(Signature, 'Sencoded', function Sencoded() {
31154 return this.eddsa.encodeInt(this.S());
31155 });
31156
31157 Signature.prototype.toBytes = function toBytes() {
31158 return this.Rencoded().concat(this.Sencoded());
31159 };
31160
31161 Signature.prototype.toHex = function toHex() {
31162 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31163 };
31164
31165 module.exports = Signature;
31166
31167 },{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31168 'use strict';
31169
31170 var hash = require('hash.js');
31171 var elliptic = require('../elliptic');
31172 var utils = elliptic.utils;
31173 var assert = utils.assert;
31174
31175 function HmacDRBG(options) {
31176 if (!(this instanceof HmacDRBG))
31177 return new HmacDRBG(options);
31178 this.hash = options.hash;
31179 this.predResist = !!options.predResist;
31180
31181 this.outLen = this.hash.outSize;
31182 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
31183
31184 this.reseed = null;
31185 this.reseedInterval = null;
31186 this.K = null;
31187 this.V = null;
31188
31189 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31190 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31191 var pers = utils.toArray(options.pers, options.persEnc);
31192 assert(entropy.length >= (this.minEntropy / 8),
31193 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31194 this._init(entropy, nonce, pers);
31195 }
31196 module.exports = HmacDRBG;
31197
31198 HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31199 var seed = entropy.concat(nonce).concat(pers);
31200
31201 this.K = new Array(this.outLen / 8);
31202 this.V = new Array(this.outLen / 8);
31203 for (var i = 0; i < this.V.length; i++) {
31204 this.K[i] = 0x00;
31205 this.V[i] = 0x01;
31206 }
31207
31208 this._update(seed);
31209 this.reseed = 1;
31210 this.reseedInterval = 0x1000000000000; // 2^48
31211 };
31212
31213 HmacDRBG.prototype._hmac = function hmac() {
31214 return new hash.hmac(this.hash, this.K);
31215 };
31216
31217 HmacDRBG.prototype._update = function update(seed) {
31218 var kmac = this._hmac()
31219 .update(this.V)
31220 .update([ 0x00 ]);
31221 if (seed)
31222 kmac = kmac.update(seed);
31223 this.K = kmac.digest();
31224 this.V = this._hmac().update(this.V).digest();
31225 if (!seed)
31226 return;
31227
31228 this.K = this._hmac()
31229 .update(this.V)
31230 .update([ 0x01 ])
31231 .update(seed)
31232 .digest();
31233 this.V = this._hmac().update(this.V).digest();
31234 };
31235
31236 HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
31237 // Optional entropy enc
31238 if (typeof entropyEnc !== 'string') {
31239 addEnc = add;
31240 add = entropyEnc;
31241 entropyEnc = null;
31242 }
31243
31244 entropy = utils.toBuffer(entropy, entropyEnc);
31245 add = utils.toBuffer(add, addEnc);
31246
31247 assert(entropy.length >= (this.minEntropy / 8),
31248 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31249
31250 this._update(entropy.concat(add || []));
31251 this.reseed = 1;
31252 };
31253
31254 HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
31255 if (this.reseed > this.reseedInterval)
31256 throw new Error('Reseed is required');
31257
31258 // Optional encoding
31259 if (typeof enc !== 'string') {
31260 addEnc = add;
31261 add = enc;
31262 enc = null;
31263 }
31264
31265 // Optional additional data
31266 if (add) {
31267 add = utils.toArray(add, addEnc);
31268 this._update(add);
31269 }
31270
31271 var temp = [];
31272 while (temp.length < len) {
31273 this.V = this._hmac().update(this.V).digest();
31274 temp = temp.concat(this.V);
31275 }
31276
31277 var res = temp.slice(0, len);
31278 this._update(add);
31279 this.reseed++;
31280 return utils.encode(res, enc);
31281 };
31282
31283 },{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
31284 module.exports = {
31285 doubles: {
31286 step: 4,
31287 points: [
31288 [
31289 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
31290 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
31291 ],
31292 [
31293 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
31294 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
31295 ],
31296 [
31297 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
31298 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
31299 ],
31300 [
31301 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
31302 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
31303 ],
31304 [
31305 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
31306 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
31307 ],
31308 [
31309 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
31310 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
31311 ],
31312 [
31313 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
31314 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
31315 ],
31316 [
31317 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
31318 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
31319 ],
31320 [
31321 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
31322 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
31323 ],
31324 [
31325 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
31326 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
31327 ],
31328 [
31329 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
31330 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
31331 ],
31332 [
31333 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
31334 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
31335 ],
31336 [
31337 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
31338 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
31339 ],
31340 [
31341 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
31342 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
31343 ],
31344 [
31345 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
31346 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
31347 ],
31348 [
31349 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
31350 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
31351 ],
31352 [
31353 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
31354 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
31355 ],
31356 [
31357 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
31358 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
31359 ],
31360 [
31361 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
31362 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
31363 ],
31364 [
31365 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
31366 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
31367 ],
31368 [
31369 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
31370 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
31371 ],
31372 [
31373 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
31374 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
31375 ],
31376 [
31377 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
31378 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
31379 ],
31380 [
31381 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
31382 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
31383 ],
31384 [
31385 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
31386 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
31387 ],
31388 [
31389 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
31390 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
31391 ],
31392 [
31393 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
31394 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
31395 ],
31396 [
31397 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
31398 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
31399 ],
31400 [
31401 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
31402 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
31403 ],
31404 [
31405 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
31406 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
31407 ],
31408 [
31409 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
31410 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
31411 ],
31412 [
31413 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
31414 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
31415 ],
31416 [
31417 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
31418 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
31419 ],
31420 [
31421 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
31422 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
31423 ],
31424 [
31425 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
31426 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
31427 ],
31428 [
31429 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
31430 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
31431 ],
31432 [
31433 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
31434 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
31435 ],
31436 [
31437 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
31438 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
31439 ],
31440 [
31441 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
31442 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
31443 ],
31444 [
31445 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
31446 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
31447 ],
31448 [
31449 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
31450 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
31451 ],
31452 [
31453 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
31454 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
31455 ],
31456 [
31457 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
31458 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
31459 ],
31460 [
31461 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
31462 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
31463 ],
31464 [
31465 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
31466 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
31467 ],
31468 [
31469 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
31470 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
31471 ],
31472 [
31473 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
31474 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
31475 ],
31476 [
31477 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
31478 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
31479 ],
31480 [
31481 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
31482 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
31483 ],
31484 [
31485 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
31486 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
31487 ],
31488 [
31489 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
31490 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
31491 ],
31492 [
31493 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
31494 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
31495 ],
31496 [
31497 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
31498 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
31499 ],
31500 [
31501 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
31502 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
31503 ],
31504 [
31505 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
31506 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
31507 ],
31508 [
31509 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
31510 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
31511 ],
31512 [
31513 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
31514 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
31515 ],
31516 [
31517 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
31518 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
31519 ],
31520 [
31521 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
31522 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
31523 ],
31524 [
31525 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
31526 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
31527 ],
31528 [
31529 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
31530 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
31531 ],
31532 [
31533 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
31534 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
31535 ],
31536 [
31537 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
31538 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
31539 ],
31540 [
31541 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
31542 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
31543 ],
31544 [
31545 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
31546 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
31547 ]
31548 ]
31549 },
31550 naf: {
31551 wnd: 7,
31552 points: [
31553 [
31554 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
31555 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
31556 ],
31557 [
31558 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
31559 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
31560 ],
31561 [
31562 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
31563 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
31564 ],
31565 [
31566 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
31567 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
31568 ],
31569 [
31570 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
31571 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
31572 ],
31573 [
31574 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
31575 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
31576 ],
31577 [
31578 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
31579 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
31580 ],
31581 [
31582 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
31583 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
31584 ],
31585 [
31586 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
31587 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
31588 ],
31589 [
31590 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
31591 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
31592 ],
31593 [
31594 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
31595 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
31596 ],
31597 [
31598 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
31599 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
31600 ],
31601 [
31602 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
31603 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
31604 ],
31605 [
31606 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
31607 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
31608 ],
31609 [
31610 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
31611 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
31612 ],
31613 [
31614 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
31615 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
31616 ],
31617 [
31618 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
31619 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
31620 ],
31621 [
31622 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
31623 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
31624 ],
31625 [
31626 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
31627 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
31628 ],
31629 [
31630 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
31631 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
31632 ],
31633 [
31634 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
31635 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
31636 ],
31637 [
31638 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
31639 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
31640 ],
31641 [
31642 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
31643 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
31644 ],
31645 [
31646 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
31647 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
31648 ],
31649 [
31650 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
31651 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
31652 ],
31653 [
31654 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
31655 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
31656 ],
31657 [
31658 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
31659 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
31660 ],
31661 [
31662 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
31663 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
31664 ],
31665 [
31666 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
31667 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
31668 ],
31669 [
31670 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
31671 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
31672 ],
31673 [
31674 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
31675 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
31676 ],
31677 [
31678 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
31679 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
31680 ],
31681 [
31682 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
31683 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
31684 ],
31685 [
31686 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
31687 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
31688 ],
31689 [
31690 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
31691 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
31692 ],
31693 [
31694 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
31695 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
31696 ],
31697 [
31698 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
31699 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
31700 ],
31701 [
31702 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
31703 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
31704 ],
31705 [
31706 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
31707 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
31708 ],
31709 [
31710 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
31711 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
31712 ],
31713 [
31714 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
31715 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
31716 ],
31717 [
31718 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
31719 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
31720 ],
31721 [
31722 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
31723 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
31724 ],
31725 [
31726 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
31727 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
31728 ],
31729 [
31730 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
31731 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
31732 ],
31733 [
31734 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
31735 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
31736 ],
31737 [
31738 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
31739 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
31740 ],
31741 [
31742 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
31743 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
31744 ],
31745 [
31746 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
31747 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
31748 ],
31749 [
31750 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
31751 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
31752 ],
31753 [
31754 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
31755 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
31756 ],
31757 [
31758 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
31759 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
31760 ],
31761 [
31762 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
31763 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
31764 ],
31765 [
31766 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
31767 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
31768 ],
31769 [
31770 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
31771 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
31772 ],
31773 [
31774 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
31775 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
31776 ],
31777 [
31778 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
31779 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
31780 ],
31781 [
31782 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
31783 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
31784 ],
31785 [
31786 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
31787 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
31788 ],
31789 [
31790 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
31791 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
31792 ],
31793 [
31794 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
31795 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
31796 ],
31797 [
31798 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
31799 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
31800 ],
31801 [
31802 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
31803 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
31804 ],
31805 [
31806 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
31807 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
31808 ],
31809 [
31810 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
31811 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
31812 ],
31813 [
31814 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
31815 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
31816 ],
31817 [
31818 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
31819 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
31820 ],
31821 [
31822 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
31823 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
31824 ],
31825 [
31826 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
31827 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
31828 ],
31829 [
31830 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
31831 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
31832 ],
31833 [
31834 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
31835 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
31836 ],
31837 [
31838 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
31839 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
31840 ],
31841 [
31842 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
31843 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
31844 ],
31845 [
31846 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
31847 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
31848 ],
31849 [
31850 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
31851 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
31852 ],
31853 [
31854 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
31855 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
31856 ],
31857 [
31858 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
31859 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
31860 ],
31861 [
31862 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
31863 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
31864 ],
31865 [
31866 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
31867 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
31868 ],
31869 [
31870 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
31871 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
31872 ],
31873 [
31874 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
31875 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
31876 ],
31877 [
31878 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
31879 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
31880 ],
31881 [
31882 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
31883 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
31884 ],
31885 [
31886 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
31887 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
31888 ],
31889 [
31890 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
31891 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
31892 ],
31893 [
31894 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
31895 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
31896 ],
31897 [
31898 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
31899 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
31900 ],
31901 [
31902 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
31903 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
31904 ],
31905 [
31906 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
31907 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
31908 ],
31909 [
31910 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
31911 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
31912 ],
31913 [
31914 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
31915 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
31916 ],
31917 [
31918 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
31919 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
31920 ],
31921 [
31922 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
31923 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
31924 ],
31925 [
31926 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
31927 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
31928 ],
31929 [
31930 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
31931 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
31932 ],
31933 [
31934 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
31935 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
31936 ],
31937 [
31938 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
31939 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
31940 ],
31941 [
31942 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
31943 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
31944 ],
31945 [
31946 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
31947 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
31948 ],
31949 [
31950 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
31951 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
31952 ],
31953 [
31954 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
31955 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
31956 ],
31957 [
31958 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
31959 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
31960 ],
31961 [
31962 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
31963 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
31964 ],
31965 [
31966 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
31967 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
31968 ],
31969 [
31970 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
31971 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
31972 ],
31973 [
31974 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
31975 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
31976 ],
31977 [
31978 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
31979 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
31980 ],
31981 [
31982 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
31983 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
31984 ],
31985 [
31986 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
31987 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
31988 ],
31989 [
31990 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
31991 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
31992 ],
31993 [
31994 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
31995 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
31996 ],
31997 [
31998 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
31999 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
32000 ],
32001 [
32002 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32003 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32004 ],
32005 [
32006 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32007 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32008 ],
32009 [
32010 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32011 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32012 ],
32013 [
32014 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32015 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32016 ],
32017 [
32018 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32019 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32020 ],
32021 [
32022 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32023 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32024 ],
32025 [
32026 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32027 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32028 ],
32029 [
32030 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32031 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32032 ],
32033 [
32034 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32035 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32036 ],
32037 [
32038 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32039 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32040 ],
32041 [
32042 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32043 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32044 ],
32045 [
32046 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32047 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32048 ],
32049 [
32050 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32051 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32052 ],
32053 [
32054 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32055 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32056 ],
32057 [
32058 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32059 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32060 ]
32061 ]
32062 }
32063 };
32064
32065 },{}],54:[function(require,module,exports){
32066 'use strict';
32067
32068 var utils = exports;
32069 var BN = require('bn.js');
32070
32071 utils.assert = function assert(val, msg) {
32072 if (!val)
32073 throw new Error(msg || 'Assertion failed');
32074 };
32075
32076 function toArray(msg, enc) {
32077 if (Array.isArray(msg))
32078 return msg.slice();
32079 if (!msg)
32080 return [];
32081 var res = [];
32082 if (typeof msg !== 'string') {
32083 for (var i = 0; i < msg.length; i++)
32084 res[i] = msg[i] | 0;
32085 return res;
32086 }
32087 if (!enc) {
32088 for (var i = 0; i < msg.length; i++) {
32089 var c = msg.charCodeAt(i);
32090 var hi = c >> 8;
32091 var lo = c & 0xff;
32092 if (hi)
32093 res.push(hi, lo);
32094 else
32095 res.push(lo);
32096 }
32097 } else if (enc === 'hex') {
32098 msg = msg.replace(/[^a-z0-9]+/ig, '');
32099 if (msg.length % 2 !== 0)
32100 msg = '0' + msg;
32101 for (var i = 0; i < msg.length; i += 2)
32102 res.push(parseInt(msg[i] + msg[i + 1], 16));
32103 }
32104 return res;
32105 }
32106 utils.toArray = toArray;
32107
32108 function zero2(word) {
32109 if (word.length === 1)
32110 return '0' + word;
32111 else
32112 return word;
32113 }
32114 utils.zero2 = zero2;
32115
32116 function toHex(msg) {
32117 var res = '';
32118 for (var i = 0; i < msg.length; i++)
32119 res += zero2(msg[i].toString(16));
32120 return res;
32121 }
32122 utils.toHex = toHex;
32123
32124 utils.encode = function encode(arr, enc) {
32125 if (enc === 'hex')
32126 return toHex(arr);
32127 else
32128 return arr;
32129 };
32130
32131 // Represent num in a w-NAF form
32132 function getNAF(num, w) {
32133 var naf = [];
32134 var ws = 1 << (w + 1);
32135 var k = num.clone();
32136 while (k.cmpn(1) >= 0) {
32137 var z;
32138 if (k.isOdd()) {
32139 var mod = k.andln(ws - 1);
32140 if (mod > (ws >> 1) - 1)
32141 z = (ws >> 1) - mod;
32142 else
32143 z = mod;
32144 k.isubn(z);
32145 } else {
32146 z = 0;
32147 }
32148 naf.push(z);
32149
32150 // Optimization, shift by word if possible
32151 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32152 for (var i = 1; i < shift; i++)
32153 naf.push(0);
32154 k.iushrn(shift);
32155 }
32156
32157 return naf;
32158 }
32159 utils.getNAF = getNAF;
32160
32161 // Represent k1, k2 in a Joint Sparse Form
32162 function getJSF(k1, k2) {
32163 var jsf = [
32164 [],
32165 []
32166 ];
32167
32168 k1 = k1.clone();
32169 k2 = k2.clone();
32170 var d1 = 0;
32171 var d2 = 0;
32172 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32173
32174 // First phase
32175 var m14 = (k1.andln(3) + d1) & 3;
32176 var m24 = (k2.andln(3) + d2) & 3;
32177 if (m14 === 3)
32178 m14 = -1;
32179 if (m24 === 3)
32180 m24 = -1;
32181 var u1;
32182 if ((m14 & 1) === 0) {
32183 u1 = 0;
32184 } else {
32185 var m8 = (k1.andln(7) + d1) & 7;
32186 if ((m8 === 3 || m8 === 5) && m24 === 2)
32187 u1 = -m14;
32188 else
32189 u1 = m14;
32190 }
32191 jsf[0].push(u1);
32192
32193 var u2;
32194 if ((m24 & 1) === 0) {
32195 u2 = 0;
32196 } else {
32197 var m8 = (k2.andln(7) + d2) & 7;
32198 if ((m8 === 3 || m8 === 5) && m14 === 2)
32199 u2 = -m24;
32200 else
32201 u2 = m24;
32202 }
32203 jsf[1].push(u2);
32204
32205 // Second phase
32206 if (2 * d1 === u1 + 1)
32207 d1 = 1 - d1;
32208 if (2 * d2 === u2 + 1)
32209 d2 = 1 - d2;
32210 k1.iushrn(1);
32211 k2.iushrn(1);
32212 }
32213
32214 return jsf;
32215 }
32216 utils.getJSF = getJSF;
32217
32218 function cachedProperty(obj, name, computer) {
32219 var key = '_' + name;
32220 obj.prototype[name] = function cachedProperty() {
32221 return this[key] !== undefined ? this[key] :
32222 this[key] = computer.call(this);
32223 };
32224 }
32225 utils.cachedProperty = cachedProperty;
32226
32227 function parseBytes(bytes) {
32228 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
32229 bytes;
32230 }
32231 utils.parseBytes = parseBytes;
32232
32233 function intFromLE(bytes) {
32234 return new BN(bytes, 'hex', 'le');
32235 }
32236 utils.intFromLE = intFromLE;
32237
32238
32239 },{"bn.js":33}],55:[function(require,module,exports){
32240 module.exports={
32241 "_args": [
32242 [
32243 {
32244 "raw": "elliptic@^6.2.3",
32245 "scope": null,
32246 "escapedName": "elliptic",
32247 "name": "elliptic",
32248 "rawSpec": "^6.2.3",
32249 "spec": ">=6.2.3 <7.0.0",
32250 "type": "range"
32251 },
32252 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
32253 ]
32254 ],
32255 "_from": "elliptic@>=6.2.3 <7.0.0",
32256 "_id": "elliptic@6.3.3",
32257 "_inCache": true,
32258 "_location": "/elliptic",
32259 "_nodeVersion": "7.0.0",
32260 "_npmOperationalInternal": {
32261 "host": "packages-18-east.internal.npmjs.com",
32262 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
32263 },
32264 "_npmUser": {
32265 "name": "indutny",
32266 "email": "fedor@indutny.com"
32267 },
32268 "_npmVersion": "3.10.8",
32269 "_phantomChildren": {},
32270 "_requested": {
32271 "raw": "elliptic@^6.2.3",
32272 "scope": null,
32273 "escapedName": "elliptic",
32274 "name": "elliptic",
32275 "rawSpec": "^6.2.3",
32276 "spec": ">=6.2.3 <7.0.0",
32277 "type": "range"
32278 },
32279 "_requiredBy": [
32280 "/browserify-sign",
32281 "/create-ecdh",
32282 "/secp256k1"
32283 ],
32284 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
32285 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32286 "_shrinkwrap": null,
32287 "_spec": "elliptic@^6.2.3",
32288 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
32289 "author": {
32290 "name": "Fedor Indutny",
32291 "email": "fedor@indutny.com"
32292 },
32293 "bugs": {
32294 "url": "https://github.com/indutny/elliptic/issues"
32295 },
32296 "dependencies": {
32297 "bn.js": "^4.4.0",
32298 "brorand": "^1.0.1",
32299 "hash.js": "^1.0.0",
32300 "inherits": "^2.0.1"
32301 },
32302 "description": "EC cryptography",
32303 "devDependencies": {
32304 "brfs": "^1.4.3",
32305 "coveralls": "^2.11.3",
32306 "grunt": "^0.4.5",
32307 "grunt-browserify": "^5.0.0",
32308 "grunt-cli": "^1.2.0",
32309 "grunt-contrib-connect": "^1.0.0",
32310 "grunt-contrib-copy": "^1.0.0",
32311 "grunt-contrib-uglify": "^1.0.1",
32312 "grunt-mocha-istanbul": "^3.0.1",
32313 "grunt-saucelabs": "^8.6.2",
32314 "istanbul": "^0.4.2",
32315 "jscs": "^2.9.0",
32316 "jshint": "^2.6.0",
32317 "mocha": "^2.1.0"
32318 },
32319 "directories": {},
32320 "dist": {
32321 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32322 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
32323 },
32324 "files": [
32325 "lib"
32326 ],
32327 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
32328 "homepage": "https://github.com/indutny/elliptic",
32329 "keywords": [
32330 "EC",
32331 "Elliptic",
32332 "curve",
32333 "Cryptography"
32334 ],
32335 "license": "MIT",
32336 "main": "lib/elliptic.js",
32337 "maintainers": [
32338 {
32339 "name": "indutny",
32340 "email": "fedor@indutny.com"
32341 }
32342 ],
32343 "name": "elliptic",
32344 "optionalDependencies": {},
32345 "readme": "ERROR: No README data found!",
32346 "repository": {
32347 "type": "git",
32348 "url": "git+ssh://git@github.com/indutny/elliptic.git"
32349 },
32350 "scripts": {
32351 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32352 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32353 "lint": "npm run jscs && npm run jshint",
32354 "test": "npm run lint && npm run unit",
32355 "unit": "istanbul test _mocha --reporter=spec test/index.js",
32356 "version": "grunt dist && git add dist/"
32357 },
32358 "version": "6.3.3"
32359 }
32360
32361 },{}],56:[function(require,module,exports){
32362 (function (Buffer){
32363 'use strict';
32364
32365 var isHexPrefixed = require('is-hex-prefixed');
32366 var stripHexPrefix = require('strip-hex-prefix');
32367
32368 /**
32369 * Pads a `String` to have an even length
32370 * @param {String} value
32371 * @return {String} output
32372 */
32373 function padToEven(value) {
32374 var a = value; // eslint-disable-line
32375
32376 if (typeof a !== 'string') {
32377 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
32378 }
32379
32380 if (a.length % 2) {
32381 a = '0' + a;
32382 }
32383
32384 return a;
32385 }
32386
32387 /**
32388 * Converts a `Number` into a hex `String`
32389 * @param {Number} i
32390 * @return {String}
32391 */
32392 function intToHex(i) {
32393 var hex = i.toString(16); // eslint-disable-line
32394
32395 return '0x' + padToEven(hex);
32396 }
32397
32398 /**
32399 * Converts an `Number` to a `Buffer`
32400 * @param {Number} i
32401 * @return {Buffer}
32402 */
32403 function intToBuffer(i) {
32404 var hex = intToHex(i);
32405
32406 return new Buffer(hex.slice(2), 'hex');
32407 }
32408
32409 /**
32410 * Get the binary size of a string
32411 * @param {String} str
32412 * @return {Number}
32413 */
32414 function getBinarySize(str) {
32415 if (typeof str !== 'string') {
32416 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
32417 }
32418
32419 return Buffer.byteLength(str, 'utf8');
32420 }
32421
32422 /**
32423 * Returns TRUE if the first specified array contains all elements
32424 * from the second one. FALSE otherwise.
32425 *
32426 * @param {array} superset
32427 * @param {array} subset
32428 *
32429 * @returns {boolean}
32430 */
32431 function arrayContainsArray(superset, subset, some) {
32432 if (Array.isArray(superset) !== true) {
32433 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
32434 }
32435 if (Array.isArray(subset) !== true) {
32436 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
32437 }
32438
32439 return subset[Boolean(some) && 'some' || 'every'](function (value) {
32440 return superset.indexOf(value) >= 0;
32441 });
32442 }
32443
32444 /**
32445 * Should be called to get utf8 from it's hex representation
32446 *
32447 * @method toUtf8
32448 * @param {String} string in hex
32449 * @returns {String} ascii string representation of hex value
32450 */
32451 function toUtf8(hex) {
32452 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
32453
32454 return bufferValue.toString('utf8');
32455 }
32456
32457 /**
32458 * Should be called to get ascii from it's hex representation
32459 *
32460 * @method toAscii
32461 * @param {String} string in hex
32462 * @returns {String} ascii string representation of hex value
32463 */
32464 function toAscii(hex) {
32465 var str = ''; // eslint-disable-line
32466 var i = 0,
32467 l = hex.length; // eslint-disable-line
32468
32469 if (hex.substring(0, 2) === '0x') {
32470 i = 2;
32471 }
32472
32473 for (; i < l; i += 2) {
32474 var code = parseInt(hex.substr(i, 2), 16);
32475 str += String.fromCharCode(code);
32476 }
32477
32478 return str;
32479 }
32480
32481 /**
32482 * Should be called to get hex representation (prefixed by 0x) of utf8 string
32483 *
32484 * @method fromUtf8
32485 * @param {String} string
32486 * @param {Number} optional padding
32487 * @returns {String} hex representation of input string
32488 */
32489 function fromUtf8(stringValue) {
32490 var str = new Buffer(stringValue, 'utf8');
32491
32492 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
32493 }
32494
32495 /**
32496 * Should be called to get hex representation (prefixed by 0x) of ascii string
32497 *
32498 * @method fromAscii
32499 * @param {String} string
32500 * @param {Number} optional padding
32501 * @returns {String} hex representation of input string
32502 */
32503 function fromAscii(stringValue) {
32504 var hex = ''; // eslint-disable-line
32505 for (var i = 0; i < stringValue.length; i++) {
32506 // eslint-disable-line
32507 var code = stringValue.charCodeAt(i);
32508 var n = code.toString(16);
32509 hex += n.length < 2 ? '0' + n : n;
32510 }
32511
32512 return '0x' + hex;
32513 }
32514
32515 /**
32516 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
32517 *
32518 * @method getKeys get specific key from inner object array of objects
32519 * @param {String} params
32520 * @param {String} key
32521 * @param {Boolean} allowEmpty
32522 * @returns {Array} output just a simple array of output keys
32523 */
32524 function getKeys(params, key, allowEmpty) {
32525 if (!Array.isArray(params)) {
32526 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
32527 }
32528 if (typeof key !== 'string') {
32529 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
32530 }
32531
32532 var result = []; // eslint-disable-line
32533
32534 for (var i = 0; i < params.length; i++) {
32535 // eslint-disable-line
32536 var value = params[i][key]; // eslint-disable-line
32537 if (allowEmpty && !value) {
32538 value = '';
32539 } else if (typeof value !== 'string') {
32540 throw new Error('invalid abi');
32541 }
32542 result.push(value);
32543 }
32544
32545 return result;
32546 }
32547
32548 /**
32549 * Is the string a hex string.
32550 *
32551 * @method check if string is hex string of specific length
32552 * @param {String} value
32553 * @param {Number} length
32554 * @returns {Boolean} output the string is a hex string
32555 */
32556 function isHexString(value, length) {
32557 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
32558 return false;
32559 }
32560
32561 if (length && value.length !== 2 + 2 * length) {
32562 return false;
32563 }
32564
32565 return true;
32566 }
32567
32568 module.exports = {
32569 arrayContainsArray: arrayContainsArray,
32570 intToBuffer: intToBuffer,
32571 getBinarySize: getBinarySize,
32572 isHexPrefixed: isHexPrefixed,
32573 stripHexPrefix: stripHexPrefix,
32574 padToEven: padToEven,
32575 intToHex: intToHex,
32576 fromAscii: fromAscii,
32577 fromUtf8: fromUtf8,
32578 toAscii: toAscii,
32579 toUtf8: toUtf8,
32580 getKeys: getKeys,
32581 isHexString: isHexString
32582 };
32583 }).call(this,require("buffer").Buffer)
32584 },{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
32585 var hash = exports;
32586
32587 hash.utils = require('./hash/utils');
32588 hash.common = require('./hash/common');
32589 hash.sha = require('./hash/sha');
32590 hash.ripemd = require('./hash/ripemd');
32591 hash.hmac = require('./hash/hmac');
32592
32593 // Proxy hash functions to the main object
32594 hash.sha1 = hash.sha.sha1;
32595 hash.sha256 = hash.sha.sha256;
32596 hash.sha224 = hash.sha.sha224;
32597 hash.sha384 = hash.sha.sha384;
32598 hash.sha512 = hash.sha.sha512;
32599 hash.ripemd160 = hash.ripemd.ripemd160;
32600
32601 },{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
32602 var hash = require('../hash');
32603 var utils = hash.utils;
32604 var assert = utils.assert;
32605
32606 function BlockHash() {
32607 this.pending = null;
32608 this.pendingTotal = 0;
32609 this.blockSize = this.constructor.blockSize;
32610 this.outSize = this.constructor.outSize;
32611 this.hmacStrength = this.constructor.hmacStrength;
32612 this.padLength = this.constructor.padLength / 8;
32613 this.endian = 'big';
32614
32615 this._delta8 = this.blockSize / 8;
32616 this._delta32 = this.blockSize / 32;
32617 }
32618 exports.BlockHash = BlockHash;
32619
32620 BlockHash.prototype.update = function update(msg, enc) {
32621 // Convert message to array, pad it, and join into 32bit blocks
32622 msg = utils.toArray(msg, enc);
32623 if (!this.pending)
32624 this.pending = msg;
32625 else
32626 this.pending = this.pending.concat(msg);
32627 this.pendingTotal += msg.length;
32628
32629 // Enough data, try updating
32630 if (this.pending.length >= this._delta8) {
32631 msg = this.pending;
32632
32633 // Process pending data in blocks
32634 var r = msg.length % this._delta8;
32635 this.pending = msg.slice(msg.length - r, msg.length);
32636 if (this.pending.length === 0)
32637 this.pending = null;
32638
32639 msg = utils.join32(msg, 0, msg.length - r, this.endian);
32640 for (var i = 0; i < msg.length; i += this._delta32)
32641 this._update(msg, i, i + this._delta32);
32642 }
32643
32644 return this;
32645 };
32646
32647 BlockHash.prototype.digest = function digest(enc) {
32648 this.update(this._pad());
32649 assert(this.pending === null);
32650
32651 return this._digest(enc);
32652 };
32653
32654 BlockHash.prototype._pad = function pad() {
32655 var len = this.pendingTotal;
32656 var bytes = this._delta8;
32657 var k = bytes - ((len + this.padLength) % bytes);
32658 var res = new Array(k + this.padLength);
32659 res[0] = 0x80;
32660 for (var i = 1; i < k; i++)
32661 res[i] = 0;
32662
32663 // Append length
32664 len <<= 3;
32665 if (this.endian === 'big') {
32666 for (var t = 8; t < this.padLength; t++)
32667 res[i++] = 0;
32668
32669 res[i++] = 0;
32670 res[i++] = 0;
32671 res[i++] = 0;
32672 res[i++] = 0;
32673 res[i++] = (len >>> 24) & 0xff;
32674 res[i++] = (len >>> 16) & 0xff;
32675 res[i++] = (len >>> 8) & 0xff;
32676 res[i++] = len & 0xff;
32677 } else {
32678 res[i++] = len & 0xff;
32679 res[i++] = (len >>> 8) & 0xff;
32680 res[i++] = (len >>> 16) & 0xff;
32681 res[i++] = (len >>> 24) & 0xff;
32682 res[i++] = 0;
32683 res[i++] = 0;
32684 res[i++] = 0;
32685 res[i++] = 0;
32686
32687 for (var t = 8; t < this.padLength; t++)
32688 res[i++] = 0;
32689 }
32690
32691 return res;
32692 };
32693
32694 },{"../hash":57}],59:[function(require,module,exports){
32695 var hmac = exports;
32696
32697 var hash = require('../hash');
32698 var utils = hash.utils;
32699 var assert = utils.assert;
32700
32701 function Hmac(hash, key, enc) {
32702 if (!(this instanceof Hmac))
32703 return new Hmac(hash, key, enc);
32704 this.Hash = hash;
32705 this.blockSize = hash.blockSize / 8;
32706 this.outSize = hash.outSize / 8;
32707 this.inner = null;
32708 this.outer = null;
32709
32710 this._init(utils.toArray(key, enc));
32711 }
32712 module.exports = Hmac;
32713
32714 Hmac.prototype._init = function init(key) {
32715 // Shorten key, if needed
32716 if (key.length > this.blockSize)
32717 key = new this.Hash().update(key).digest();
32718 assert(key.length <= this.blockSize);
32719
32720 // Add padding to key
32721 for (var i = key.length; i < this.blockSize; i++)
32722 key.push(0);
32723
32724 for (var i = 0; i < key.length; i++)
32725 key[i] ^= 0x36;
32726 this.inner = new this.Hash().update(key);
32727
32728 // 0x36 ^ 0x5c = 0x6a
32729 for (var i = 0; i < key.length; i++)
32730 key[i] ^= 0x6a;
32731 this.outer = new this.Hash().update(key);
32732 };
32733
32734 Hmac.prototype.update = function update(msg, enc) {
32735 this.inner.update(msg, enc);
32736 return this;
32737 };
32738
32739 Hmac.prototype.digest = function digest(enc) {
32740 this.outer.update(this.inner.digest());
32741 return this.outer.digest(enc);
32742 };
32743
32744 },{"../hash":57}],60:[function(require,module,exports){
32745 var hash = require('../hash');
32746 var utils = hash.utils;
32747
32748 var rotl32 = utils.rotl32;
32749 var sum32 = utils.sum32;
32750 var sum32_3 = utils.sum32_3;
32751 var sum32_4 = utils.sum32_4;
32752 var BlockHash = hash.common.BlockHash;
32753
32754 function RIPEMD160() {
32755 if (!(this instanceof RIPEMD160))
32756 return new RIPEMD160();
32757
32758 BlockHash.call(this);
32759
32760 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
32761 this.endian = 'little';
32762 }
32763 utils.inherits(RIPEMD160, BlockHash);
32764 exports.ripemd160 = RIPEMD160;
32765
32766 RIPEMD160.blockSize = 512;
32767 RIPEMD160.outSize = 160;
32768 RIPEMD160.hmacStrength = 192;
32769 RIPEMD160.padLength = 64;
32770
32771 RIPEMD160.prototype._update = function update(msg, start) {
32772 var A = this.h[0];
32773 var B = this.h[1];
32774 var C = this.h[2];
32775 var D = this.h[3];
32776 var E = this.h[4];
32777 var Ah = A;
32778 var Bh = B;
32779 var Ch = C;
32780 var Dh = D;
32781 var Eh = E;
32782 for (var j = 0; j < 80; j++) {
32783 var T = sum32(
32784 rotl32(
32785 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
32786 s[j]),
32787 E);
32788 A = E;
32789 E = D;
32790 D = rotl32(C, 10);
32791 C = B;
32792 B = T;
32793 T = sum32(
32794 rotl32(
32795 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
32796 sh[j]),
32797 Eh);
32798 Ah = Eh;
32799 Eh = Dh;
32800 Dh = rotl32(Ch, 10);
32801 Ch = Bh;
32802 Bh = T;
32803 }
32804 T = sum32_3(this.h[1], C, Dh);
32805 this.h[1] = sum32_3(this.h[2], D, Eh);
32806 this.h[2] = sum32_3(this.h[3], E, Ah);
32807 this.h[3] = sum32_3(this.h[4], A, Bh);
32808 this.h[4] = sum32_3(this.h[0], B, Ch);
32809 this.h[0] = T;
32810 };
32811
32812 RIPEMD160.prototype._digest = function digest(enc) {
32813 if (enc === 'hex')
32814 return utils.toHex32(this.h, 'little');
32815 else
32816 return utils.split32(this.h, 'little');
32817 };
32818
32819 function f(j, x, y, z) {
32820 if (j <= 15)
32821 return x ^ y ^ z;
32822 else if (j <= 31)
32823 return (x & y) | ((~x) & z);
32824 else if (j <= 47)
32825 return (x | (~y)) ^ z;
32826 else if (j <= 63)
32827 return (x & z) | (y & (~z));
32828 else
32829 return x ^ (y | (~z));
32830 }
32831
32832 function K(j) {
32833 if (j <= 15)
32834 return 0x00000000;
32835 else if (j <= 31)
32836 return 0x5a827999;
32837 else if (j <= 47)
32838 return 0x6ed9eba1;
32839 else if (j <= 63)
32840 return 0x8f1bbcdc;
32841 else
32842 return 0xa953fd4e;
32843 }
32844
32845 function Kh(j) {
32846 if (j <= 15)
32847 return 0x50a28be6;
32848 else if (j <= 31)
32849 return 0x5c4dd124;
32850 else if (j <= 47)
32851 return 0x6d703ef3;
32852 else if (j <= 63)
32853 return 0x7a6d76e9;
32854 else
32855 return 0x00000000;
32856 }
32857
32858 var r = [
32859 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
32860 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
32861 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
32862 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
32863 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
32864 ];
32865
32866 var rh = [
32867 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
32868 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
32869 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
32870 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
32871 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
32872 ];
32873
32874 var s = [
32875 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
32876 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
32877 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
32878 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
32879 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
32880 ];
32881
32882 var sh = [
32883 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
32884 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
32885 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
32886 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
32887 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
32888 ];
32889
32890 },{"../hash":57}],61:[function(require,module,exports){
32891 var hash = require('../hash');
32892 var utils = hash.utils;
32893 var assert = utils.assert;
32894
32895 var rotr32 = utils.rotr32;
32896 var rotl32 = utils.rotl32;
32897 var sum32 = utils.sum32;
32898 var sum32_4 = utils.sum32_4;
32899 var sum32_5 = utils.sum32_5;
32900 var rotr64_hi = utils.rotr64_hi;
32901 var rotr64_lo = utils.rotr64_lo;
32902 var shr64_hi = utils.shr64_hi;
32903 var shr64_lo = utils.shr64_lo;
32904 var sum64 = utils.sum64;
32905 var sum64_hi = utils.sum64_hi;
32906 var sum64_lo = utils.sum64_lo;
32907 var sum64_4_hi = utils.sum64_4_hi;
32908 var sum64_4_lo = utils.sum64_4_lo;
32909 var sum64_5_hi = utils.sum64_5_hi;
32910 var sum64_5_lo = utils.sum64_5_lo;
32911 var BlockHash = hash.common.BlockHash;
32912
32913 var sha256_K = [
32914 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
32915 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
32916 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
32917 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
32918 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
32919 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
32920 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
32921 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
32922 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
32923 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
32924 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
32925 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
32926 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
32927 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
32928 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
32929 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
32930 ];
32931
32932 var sha512_K = [
32933 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
32934 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
32935 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
32936 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
32937 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
32938 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
32939 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
32940 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
32941 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
32942 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
32943 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
32944 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
32945 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
32946 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
32947 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
32948 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
32949 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
32950 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
32951 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
32952 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
32953 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
32954 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
32955 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
32956 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
32957 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
32958 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
32959 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
32960 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
32961 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
32962 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
32963 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
32964 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
32965 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
32966 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
32967 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
32968 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
32969 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
32970 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
32971 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
32972 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
32973 ];
32974
32975 var sha1_K = [
32976 0x5A827999, 0x6ED9EBA1,
32977 0x8F1BBCDC, 0xCA62C1D6
32978 ];
32979
32980 function SHA256() {
32981 if (!(this instanceof SHA256))
32982 return new SHA256();
32983
32984 BlockHash.call(this);
32985 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
32986 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
32987 this.k = sha256_K;
32988 this.W = new Array(64);
32989 }
32990 utils.inherits(SHA256, BlockHash);
32991 exports.sha256 = SHA256;
32992
32993 SHA256.blockSize = 512;
32994 SHA256.outSize = 256;
32995 SHA256.hmacStrength = 192;
32996 SHA256.padLength = 64;
32997
32998 SHA256.prototype._update = function _update(msg, start) {
32999 var W = this.W;
33000
33001 for (var i = 0; i < 16; i++)
33002 W[i] = msg[start + i];
33003 for (; i < W.length; i++)
33004 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33005
33006 var a = this.h[0];
33007 var b = this.h[1];
33008 var c = this.h[2];
33009 var d = this.h[3];
33010 var e = this.h[4];
33011 var f = this.h[5];
33012 var g = this.h[6];
33013 var h = this.h[7];
33014
33015 assert(this.k.length === W.length);
33016 for (var i = 0; i < W.length; i++) {
33017 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33018 var T2 = sum32(s0_256(a), maj32(a, b, c));
33019 h = g;
33020 g = f;
33021 f = e;
33022 e = sum32(d, T1);
33023 d = c;
33024 c = b;
33025 b = a;
33026 a = sum32(T1, T2);
33027 }
33028
33029 this.h[0] = sum32(this.h[0], a);
33030 this.h[1] = sum32(this.h[1], b);
33031 this.h[2] = sum32(this.h[2], c);
33032 this.h[3] = sum32(this.h[3], d);
33033 this.h[4] = sum32(this.h[4], e);
33034 this.h[5] = sum32(this.h[5], f);
33035 this.h[6] = sum32(this.h[6], g);
33036 this.h[7] = sum32(this.h[7], h);
33037 };
33038
33039 SHA256.prototype._digest = function digest(enc) {
33040 if (enc === 'hex')
33041 return utils.toHex32(this.h, 'big');
33042 else
33043 return utils.split32(this.h, 'big');
33044 };
33045
33046 function SHA224() {
33047 if (!(this instanceof SHA224))
33048 return new SHA224();
33049
33050 SHA256.call(this);
33051 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33052 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33053 }
33054 utils.inherits(SHA224, SHA256);
33055 exports.sha224 = SHA224;
33056
33057 SHA224.blockSize = 512;
33058 SHA224.outSize = 224;
33059 SHA224.hmacStrength = 192;
33060 SHA224.padLength = 64;
33061
33062 SHA224.prototype._digest = function digest(enc) {
33063 // Just truncate output
33064 if (enc === 'hex')
33065 return utils.toHex32(this.h.slice(0, 7), 'big');
33066 else
33067 return utils.split32(this.h.slice(0, 7), 'big');
33068 };
33069
33070 function SHA512() {
33071 if (!(this instanceof SHA512))
33072 return new SHA512();
33073
33074 BlockHash.call(this);
33075 this.h = [ 0x6a09e667, 0xf3bcc908,
33076 0xbb67ae85, 0x84caa73b,
33077 0x3c6ef372, 0xfe94f82b,
33078 0xa54ff53a, 0x5f1d36f1,
33079 0x510e527f, 0xade682d1,
33080 0x9b05688c, 0x2b3e6c1f,
33081 0x1f83d9ab, 0xfb41bd6b,
33082 0x5be0cd19, 0x137e2179 ];
33083 this.k = sha512_K;
33084 this.W = new Array(160);
33085 }
33086 utils.inherits(SHA512, BlockHash);
33087 exports.sha512 = SHA512;
33088
33089 SHA512.blockSize = 1024;
33090 SHA512.outSize = 512;
33091 SHA512.hmacStrength = 192;
33092 SHA512.padLength = 128;
33093
33094 SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33095 var W = this.W;
33096
33097 // 32 x 32bit words
33098 for (var i = 0; i < 32; i++)
33099 W[i] = msg[start + i];
33100 for (; i < W.length; i += 2) {
33101 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33102 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33103 var c1_hi = W[i - 14]; // i - 7
33104 var c1_lo = W[i - 13];
33105 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33106 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33107 var c3_hi = W[i - 32]; // i - 16
33108 var c3_lo = W[i - 31];
33109
33110 W[i] = sum64_4_hi(c0_hi, c0_lo,
33111 c1_hi, c1_lo,
33112 c2_hi, c2_lo,
33113 c3_hi, c3_lo);
33114 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33115 c1_hi, c1_lo,
33116 c2_hi, c2_lo,
33117 c3_hi, c3_lo);
33118 }
33119 };
33120
33121 SHA512.prototype._update = function _update(msg, start) {
33122 this._prepareBlock(msg, start);
33123
33124 var W = this.W;
33125
33126 var ah = this.h[0];
33127 var al = this.h[1];
33128 var bh = this.h[2];
33129 var bl = this.h[3];
33130 var ch = this.h[4];
33131 var cl = this.h[5];
33132 var dh = this.h[6];
33133 var dl = this.h[7];
33134 var eh = this.h[8];
33135 var el = this.h[9];
33136 var fh = this.h[10];
33137 var fl = this.h[11];
33138 var gh = this.h[12];
33139 var gl = this.h[13];
33140 var hh = this.h[14];
33141 var hl = this.h[15];
33142
33143 assert(this.k.length === W.length);
33144 for (var i = 0; i < W.length; i += 2) {
33145 var c0_hi = hh;
33146 var c0_lo = hl;
33147 var c1_hi = s1_512_hi(eh, el);
33148 var c1_lo = s1_512_lo(eh, el);
33149 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33150 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33151 var c3_hi = this.k[i];
33152 var c3_lo = this.k[i + 1];
33153 var c4_hi = W[i];
33154 var c4_lo = W[i + 1];
33155
33156 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33157 c1_hi, c1_lo,
33158 c2_hi, c2_lo,
33159 c3_hi, c3_lo,
33160 c4_hi, c4_lo);
33161 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33162 c1_hi, c1_lo,
33163 c2_hi, c2_lo,
33164 c3_hi, c3_lo,
33165 c4_hi, c4_lo);
33166
33167 var c0_hi = s0_512_hi(ah, al);
33168 var c0_lo = s0_512_lo(ah, al);
33169 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33170 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33171
33172 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33173 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33174
33175 hh = gh;
33176 hl = gl;
33177
33178 gh = fh;
33179 gl = fl;
33180
33181 fh = eh;
33182 fl = el;
33183
33184 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33185 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33186
33187 dh = ch;
33188 dl = cl;
33189
33190 ch = bh;
33191 cl = bl;
33192
33193 bh = ah;
33194 bl = al;
33195
33196 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33197 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33198 }
33199
33200 sum64(this.h, 0, ah, al);
33201 sum64(this.h, 2, bh, bl);
33202 sum64(this.h, 4, ch, cl);
33203 sum64(this.h, 6, dh, dl);
33204 sum64(this.h, 8, eh, el);
33205 sum64(this.h, 10, fh, fl);
33206 sum64(this.h, 12, gh, gl);
33207 sum64(this.h, 14, hh, hl);
33208 };
33209
33210 SHA512.prototype._digest = function digest(enc) {
33211 if (enc === 'hex')
33212 return utils.toHex32(this.h, 'big');
33213 else
33214 return utils.split32(this.h, 'big');
33215 };
33216
33217 function SHA384() {
33218 if (!(this instanceof SHA384))
33219 return new SHA384();
33220
33221 SHA512.call(this);
33222 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
33223 0x629a292a, 0x367cd507,
33224 0x9159015a, 0x3070dd17,
33225 0x152fecd8, 0xf70e5939,
33226 0x67332667, 0xffc00b31,
33227 0x8eb44a87, 0x68581511,
33228 0xdb0c2e0d, 0x64f98fa7,
33229 0x47b5481d, 0xbefa4fa4 ];
33230 }
33231 utils.inherits(SHA384, SHA512);
33232 exports.sha384 = SHA384;
33233
33234 SHA384.blockSize = 1024;
33235 SHA384.outSize = 384;
33236 SHA384.hmacStrength = 192;
33237 SHA384.padLength = 128;
33238
33239 SHA384.prototype._digest = function digest(enc) {
33240 if (enc === 'hex')
33241 return utils.toHex32(this.h.slice(0, 12), 'big');
33242 else
33243 return utils.split32(this.h.slice(0, 12), 'big');
33244 };
33245
33246 function SHA1() {
33247 if (!(this instanceof SHA1))
33248 return new SHA1();
33249
33250 BlockHash.call(this);
33251 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
33252 0x10325476, 0xc3d2e1f0 ];
33253 this.W = new Array(80);
33254 }
33255
33256 utils.inherits(SHA1, BlockHash);
33257 exports.sha1 = SHA1;
33258
33259 SHA1.blockSize = 512;
33260 SHA1.outSize = 160;
33261 SHA1.hmacStrength = 80;
33262 SHA1.padLength = 64;
33263
33264 SHA1.prototype._update = function _update(msg, start) {
33265 var W = this.W;
33266
33267 for (var i = 0; i < 16; i++)
33268 W[i] = msg[start + i];
33269
33270 for(; i < W.length; i++)
33271 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
33272
33273 var a = this.h[0];
33274 var b = this.h[1];
33275 var c = this.h[2];
33276 var d = this.h[3];
33277 var e = this.h[4];
33278
33279 for (var i = 0; i < W.length; i++) {
33280 var s = ~~(i / 20);
33281 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
33282 e = d;
33283 d = c;
33284 c = rotl32(b, 30);
33285 b = a;
33286 a = t;
33287 }
33288
33289 this.h[0] = sum32(this.h[0], a);
33290 this.h[1] = sum32(this.h[1], b);
33291 this.h[2] = sum32(this.h[2], c);
33292 this.h[3] = sum32(this.h[3], d);
33293 this.h[4] = sum32(this.h[4], e);
33294 };
33295
33296 SHA1.prototype._digest = function digest(enc) {
33297 if (enc === 'hex')
33298 return utils.toHex32(this.h, 'big');
33299 else
33300 return utils.split32(this.h, 'big');
33301 };
33302
33303 function ch32(x, y, z) {
33304 return (x & y) ^ ((~x) & z);
33305 }
33306
33307 function maj32(x, y, z) {
33308 return (x & y) ^ (x & z) ^ (y & z);
33309 }
33310
33311 function p32(x, y, z) {
33312 return x ^ y ^ z;
33313 }
33314
33315 function s0_256(x) {
33316 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
33317 }
33318
33319 function s1_256(x) {
33320 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
33321 }
33322
33323 function g0_256(x) {
33324 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
33325 }
33326
33327 function g1_256(x) {
33328 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
33329 }
33330
33331 function ft_1(s, x, y, z) {
33332 if (s === 0)
33333 return ch32(x, y, z);
33334 if (s === 1 || s === 3)
33335 return p32(x, y, z);
33336 if (s === 2)
33337 return maj32(x, y, z);
33338 }
33339
33340 function ch64_hi(xh, xl, yh, yl, zh, zl) {
33341 var r = (xh & yh) ^ ((~xh) & zh);
33342 if (r < 0)
33343 r += 0x100000000;
33344 return r;
33345 }
33346
33347 function ch64_lo(xh, xl, yh, yl, zh, zl) {
33348 var r = (xl & yl) ^ ((~xl) & zl);
33349 if (r < 0)
33350 r += 0x100000000;
33351 return r;
33352 }
33353
33354 function maj64_hi(xh, xl, yh, yl, zh, zl) {
33355 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
33356 if (r < 0)
33357 r += 0x100000000;
33358 return r;
33359 }
33360
33361 function maj64_lo(xh, xl, yh, yl, zh, zl) {
33362 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
33363 if (r < 0)
33364 r += 0x100000000;
33365 return r;
33366 }
33367
33368 function s0_512_hi(xh, xl) {
33369 var c0_hi = rotr64_hi(xh, xl, 28);
33370 var c1_hi = rotr64_hi(xl, xh, 2); // 34
33371 var c2_hi = rotr64_hi(xl, xh, 7); // 39
33372
33373 var r = c0_hi ^ c1_hi ^ c2_hi;
33374 if (r < 0)
33375 r += 0x100000000;
33376 return r;
33377 }
33378
33379 function s0_512_lo(xh, xl) {
33380 var c0_lo = rotr64_lo(xh, xl, 28);
33381 var c1_lo = rotr64_lo(xl, xh, 2); // 34
33382 var c2_lo = rotr64_lo(xl, xh, 7); // 39
33383
33384 var r = c0_lo ^ c1_lo ^ c2_lo;
33385 if (r < 0)
33386 r += 0x100000000;
33387 return r;
33388 }
33389
33390 function s1_512_hi(xh, xl) {
33391 var c0_hi = rotr64_hi(xh, xl, 14);
33392 var c1_hi = rotr64_hi(xh, xl, 18);
33393 var c2_hi = rotr64_hi(xl, xh, 9); // 41
33394
33395 var r = c0_hi ^ c1_hi ^ c2_hi;
33396 if (r < 0)
33397 r += 0x100000000;
33398 return r;
33399 }
33400
33401 function s1_512_lo(xh, xl) {
33402 var c0_lo = rotr64_lo(xh, xl, 14);
33403 var c1_lo = rotr64_lo(xh, xl, 18);
33404 var c2_lo = rotr64_lo(xl, xh, 9); // 41
33405
33406 var r = c0_lo ^ c1_lo ^ c2_lo;
33407 if (r < 0)
33408 r += 0x100000000;
33409 return r;
33410 }
33411
33412 function g0_512_hi(xh, xl) {
33413 var c0_hi = rotr64_hi(xh, xl, 1);
33414 var c1_hi = rotr64_hi(xh, xl, 8);
33415 var c2_hi = shr64_hi(xh, xl, 7);
33416
33417 var r = c0_hi ^ c1_hi ^ c2_hi;
33418 if (r < 0)
33419 r += 0x100000000;
33420 return r;
33421 }
33422
33423 function g0_512_lo(xh, xl) {
33424 var c0_lo = rotr64_lo(xh, xl, 1);
33425 var c1_lo = rotr64_lo(xh, xl, 8);
33426 var c2_lo = shr64_lo(xh, xl, 7);
33427
33428 var r = c0_lo ^ c1_lo ^ c2_lo;
33429 if (r < 0)
33430 r += 0x100000000;
33431 return r;
33432 }
33433
33434 function g1_512_hi(xh, xl) {
33435 var c0_hi = rotr64_hi(xh, xl, 19);
33436 var c1_hi = rotr64_hi(xl, xh, 29); // 61
33437 var c2_hi = shr64_hi(xh, xl, 6);
33438
33439 var r = c0_hi ^ c1_hi ^ c2_hi;
33440 if (r < 0)
33441 r += 0x100000000;
33442 return r;
33443 }
33444
33445 function g1_512_lo(xh, xl) {
33446 var c0_lo = rotr64_lo(xh, xl, 19);
33447 var c1_lo = rotr64_lo(xl, xh, 29); // 61
33448 var c2_lo = shr64_lo(xh, xl, 6);
33449
33450 var r = c0_lo ^ c1_lo ^ c2_lo;
33451 if (r < 0)
33452 r += 0x100000000;
33453 return r;
33454 }
33455
33456 },{"../hash":57}],62:[function(require,module,exports){
33457 var utils = exports;
33458 var inherits = require('inherits');
33459
33460 function toArray(msg, enc) {
33461 if (Array.isArray(msg))
33462 return msg.slice();
33463 if (!msg)
33464 return [];
33465 var res = [];
33466 if (typeof msg === 'string') {
33467 if (!enc) {
33468 for (var i = 0; i < msg.length; i++) {
33469 var c = msg.charCodeAt(i);
33470 var hi = c >> 8;
33471 var lo = c & 0xff;
33472 if (hi)
33473 res.push(hi, lo);
33474 else
33475 res.push(lo);
33476 }
33477 } else if (enc === 'hex') {
33478 msg = msg.replace(/[^a-z0-9]+/ig, '');
33479 if (msg.length % 2 !== 0)
33480 msg = '0' + msg;
33481 for (var i = 0; i < msg.length; i += 2)
33482 res.push(parseInt(msg[i] + msg[i + 1], 16));
33483 }
33484 } else {
33485 for (var i = 0; i < msg.length; i++)
33486 res[i] = msg[i] | 0;
33487 }
33488 return res;
33489 }
33490 utils.toArray = toArray;
33491
33492 function toHex(msg) {
33493 var res = '';
33494 for (var i = 0; i < msg.length; i++)
33495 res += zero2(msg[i].toString(16));
33496 return res;
33497 }
33498 utils.toHex = toHex;
33499
33500 function htonl(w) {
33501 var res = (w >>> 24) |
33502 ((w >>> 8) & 0xff00) |
33503 ((w << 8) & 0xff0000) |
33504 ((w & 0xff) << 24);
33505 return res >>> 0;
33506 }
33507 utils.htonl = htonl;
33508
33509 function toHex32(msg, endian) {
33510 var res = '';
33511 for (var i = 0; i < msg.length; i++) {
33512 var w = msg[i];
33513 if (endian === 'little')
33514 w = htonl(w);
33515 res += zero8(w.toString(16));
33516 }
33517 return res;
33518 }
33519 utils.toHex32 = toHex32;
33520
33521 function zero2(word) {
33522 if (word.length === 1)
33523 return '0' + word;
33524 else
33525 return word;
33526 }
33527 utils.zero2 = zero2;
33528
33529 function zero8(word) {
33530 if (word.length === 7)
33531 return '0' + word;
33532 else if (word.length === 6)
33533 return '00' + word;
33534 else if (word.length === 5)
33535 return '000' + word;
33536 else if (word.length === 4)
33537 return '0000' + word;
33538 else if (word.length === 3)
33539 return '00000' + word;
33540 else if (word.length === 2)
33541 return '000000' + word;
33542 else if (word.length === 1)
33543 return '0000000' + word;
33544 else
33545 return word;
33546 }
33547 utils.zero8 = zero8;
33548
33549 function join32(msg, start, end, endian) {
33550 var len = end - start;
33551 assert(len % 4 === 0);
33552 var res = new Array(len / 4);
33553 for (var i = 0, k = start; i < res.length; i++, k += 4) {
33554 var w;
33555 if (endian === 'big')
33556 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
33557 else
33558 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
33559 res[i] = w >>> 0;
33560 }
33561 return res;
33562 }
33563 utils.join32 = join32;
33564
33565 function split32(msg, endian) {
33566 var res = new Array(msg.length * 4);
33567 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
33568 var m = msg[i];
33569 if (endian === 'big') {
33570 res[k] = m >>> 24;
33571 res[k + 1] = (m >>> 16) & 0xff;
33572 res[k + 2] = (m >>> 8) & 0xff;
33573 res[k + 3] = m & 0xff;
33574 } else {
33575 res[k + 3] = m >>> 24;
33576 res[k + 2] = (m >>> 16) & 0xff;
33577 res[k + 1] = (m >>> 8) & 0xff;
33578 res[k] = m & 0xff;
33579 }
33580 }
33581 return res;
33582 }
33583 utils.split32 = split32;
33584
33585 function rotr32(w, b) {
33586 return (w >>> b) | (w << (32 - b));
33587 }
33588 utils.rotr32 = rotr32;
33589
33590 function rotl32(w, b) {
33591 return (w << b) | (w >>> (32 - b));
33592 }
33593 utils.rotl32 = rotl32;
33594
33595 function sum32(a, b) {
33596 return (a + b) >>> 0;
33597 }
33598 utils.sum32 = sum32;
33599
33600 function sum32_3(a, b, c) {
33601 return (a + b + c) >>> 0;
33602 }
33603 utils.sum32_3 = sum32_3;
33604
33605 function sum32_4(a, b, c, d) {
33606 return (a + b + c + d) >>> 0;
33607 }
33608 utils.sum32_4 = sum32_4;
33609
33610 function sum32_5(a, b, c, d, e) {
33611 return (a + b + c + d + e) >>> 0;
33612 }
33613 utils.sum32_5 = sum32_5;
33614
33615 function assert(cond, msg) {
33616 if (!cond)
33617 throw new Error(msg || 'Assertion failed');
33618 }
33619 utils.assert = assert;
33620
33621 utils.inherits = inherits;
33622
33623 function sum64(buf, pos, ah, al) {
33624 var bh = buf[pos];
33625 var bl = buf[pos + 1];
33626
33627 var lo = (al + bl) >>> 0;
33628 var hi = (lo < al ? 1 : 0) + ah + bh;
33629 buf[pos] = hi >>> 0;
33630 buf[pos + 1] = lo;
33631 }
33632 exports.sum64 = sum64;
33633
33634 function sum64_hi(ah, al, bh, bl) {
33635 var lo = (al + bl) >>> 0;
33636 var hi = (lo < al ? 1 : 0) + ah + bh;
33637 return hi >>> 0;
33638 };
33639 exports.sum64_hi = sum64_hi;
33640
33641 function sum64_lo(ah, al, bh, bl) {
33642 var lo = al + bl;
33643 return lo >>> 0;
33644 };
33645 exports.sum64_lo = sum64_lo;
33646
33647 function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
33648 var carry = 0;
33649 var lo = al;
33650 lo = (lo + bl) >>> 0;
33651 carry += lo < al ? 1 : 0;
33652 lo = (lo + cl) >>> 0;
33653 carry += lo < cl ? 1 : 0;
33654 lo = (lo + dl) >>> 0;
33655 carry += lo < dl ? 1 : 0;
33656
33657 var hi = ah + bh + ch + dh + carry;
33658 return hi >>> 0;
33659 };
33660 exports.sum64_4_hi = sum64_4_hi;
33661
33662 function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
33663 var lo = al + bl + cl + dl;
33664 return lo >>> 0;
33665 };
33666 exports.sum64_4_lo = sum64_4_lo;
33667
33668 function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33669 var carry = 0;
33670 var lo = al;
33671 lo = (lo + bl) >>> 0;
33672 carry += lo < al ? 1 : 0;
33673 lo = (lo + cl) >>> 0;
33674 carry += lo < cl ? 1 : 0;
33675 lo = (lo + dl) >>> 0;
33676 carry += lo < dl ? 1 : 0;
33677 lo = (lo + el) >>> 0;
33678 carry += lo < el ? 1 : 0;
33679
33680 var hi = ah + bh + ch + dh + eh + carry;
33681 return hi >>> 0;
33682 };
33683 exports.sum64_5_hi = sum64_5_hi;
33684
33685 function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
33686 var lo = al + bl + cl + dl + el;
33687
33688 return lo >>> 0;
33689 };
33690 exports.sum64_5_lo = sum64_5_lo;
33691
33692 function rotr64_hi(ah, al, num) {
33693 var r = (al << (32 - num)) | (ah >>> num);
33694 return r >>> 0;
33695 };
33696 exports.rotr64_hi = rotr64_hi;
33697
33698 function rotr64_lo(ah, al, num) {
33699 var r = (ah << (32 - num)) | (al >>> num);
33700 return r >>> 0;
33701 };
33702 exports.rotr64_lo = rotr64_lo;
33703
33704 function shr64_hi(ah, al, num) {
33705 return ah >>> num;
33706 };
33707 exports.shr64_hi = shr64_hi;
33708
33709 function shr64_lo(ah, al, num) {
33710 var r = (ah << (32 - num)) | (al >>> num);
33711 return r >>> 0;
33712 };
33713 exports.shr64_lo = shr64_lo;
33714
33715 },{"inherits":63}],63:[function(require,module,exports){
33716 arguments[4][9][0].apply(exports,arguments)
33717 },{"dup":9}],64:[function(require,module,exports){
33718 /**
33719 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
33720 * @param {String} str the string input value
33721 * @return {Boolean} a boolean if it is or is not hex prefixed
33722 * @throws if the str input is not a string
33723 */
33724 module.exports = function isHexPrefixed(str) {
33725 if (typeof str !== 'string') {
33726 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
33727 }
33728
33729 return str.slice(0, 2) === '0x';
33730 }
33731
33732 },{}],65:[function(require,module,exports){
33733 'use strict'
33734 module.exports = require('./lib/api')(require('./lib/keccak'))
33735
33736 },{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
33737 'use strict'
33738 var createKeccak = require('./keccak')
33739 var createShake = require('./shake')
33740
33741 module.exports = function (KeccakState) {
33742 var Keccak = createKeccak(KeccakState)
33743 var Shake = createShake(KeccakState)
33744
33745 return function (algorithm, options) {
33746 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
33747 switch (hash) {
33748 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
33749 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
33750 case 'keccak384': return new Keccak(832, 768, null, 384, options)
33751 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
33752
33753 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
33754 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
33755 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
33756 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
33757
33758 case 'shake128': return new Shake(1344, 256, 0x1f, options)
33759 case 'shake256': return new Shake(1088, 512, 0x1f, options)
33760
33761 default: throw new Error('Invald algorithm: ' + algorithm)
33762 }
33763 }
33764 }
33765
33766 },{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
33767 (function (Buffer){
33768 'use strict'
33769 var Transform = require('stream').Transform
33770 var inherits = require('inherits')
33771
33772 module.exports = function (KeccakState) {
33773 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
33774 Transform.call(this, options)
33775
33776 this._rate = rate
33777 this._capacity = capacity
33778 this._delimitedSuffix = delimitedSuffix
33779 this._hashBitLength = hashBitLength
33780 this._options = options
33781
33782 this._state = new KeccakState()
33783 this._state.initialize(rate, capacity)
33784 this._finalized = false
33785 }
33786
33787 inherits(Keccak, Transform)
33788
33789 Keccak.prototype._transform = function (chunk, encoding, callback) {
33790 var error = null
33791 try {
33792 this.update(chunk, encoding)
33793 } catch (err) {
33794 error = err
33795 }
33796
33797 callback(error)
33798 }
33799
33800 Keccak.prototype._flush = function (callback) {
33801 var error = null
33802 try {
33803 this.push(this.digest())
33804 } catch (err) {
33805 error = err
33806 }
33807
33808 callback(error)
33809 }
33810
33811 Keccak.prototype.update = function (data, encoding) {
33812 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33813 if (this._finalized) throw new Error('Digest already called')
33814 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33815
33816 this._state.absorb(data)
33817
33818 return this
33819 }
33820
33821 Keccak.prototype.digest = function (encoding) {
33822 if (this._finalized) throw new Error('Digest already called')
33823 this._finalized = true
33824
33825 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
33826 var digest = this._state.squeeze(this._hashBitLength / 8)
33827 if (encoding !== undefined) digest = digest.toString(encoding)
33828
33829 this._resetState()
33830
33831 return digest
33832 }
33833
33834 // remove result from memory
33835 Keccak.prototype._resetState = function () {
33836 this._state.initialize(this._rate, this._capacity)
33837 return this
33838 }
33839
33840 // because sometimes we need hash right now and little later
33841 Keccak.prototype._clone = function () {
33842 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
33843 this._state.copy(clone._state)
33844 clone._finalized = this._finalized
33845
33846 return clone
33847 }
33848
33849 return Keccak
33850 }
33851
33852 }).call(this,require("buffer").Buffer)
33853 },{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
33854 (function (Buffer){
33855 'use strict'
33856 var Transform = require('stream').Transform
33857 var inherits = require('inherits')
33858
33859 module.exports = function (KeccakState) {
33860 function Shake (rate, capacity, delimitedSuffix, options) {
33861 Transform.call(this, options)
33862
33863 this._rate = rate
33864 this._capacity = capacity
33865 this._delimitedSuffix = delimitedSuffix
33866 this._options = options
33867
33868 this._state = new KeccakState()
33869 this._state.initialize(rate, capacity)
33870 this._finalized = false
33871 }
33872
33873 inherits(Shake, Transform)
33874
33875 Shake.prototype._transform = function (chunk, encoding, callback) {
33876 var error = null
33877 try {
33878 this.update(chunk, encoding)
33879 } catch (err) {
33880 error = err
33881 }
33882
33883 callback(error)
33884 }
33885
33886 Shake.prototype._flush = function () {}
33887
33888 Shake.prototype._read = function (size) {
33889 this.push(this.squeeze(size))
33890 }
33891
33892 Shake.prototype.update = function (data, encoding) {
33893 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
33894 if (this._finalized) throw new Error('Squeeze already called')
33895 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
33896
33897 this._state.absorb(data)
33898
33899 return this
33900 }
33901
33902 Shake.prototype.squeeze = function (dataByteLength, encoding) {
33903 if (!this._finalized) {
33904 this._finalized = true
33905 this._state.absorbLastFewBits(this._delimitedSuffix)
33906 }
33907
33908 var data = this._state.squeeze(dataByteLength)
33909 if (encoding !== undefined) data = data.toString(encoding)
33910
33911 return data
33912 }
33913
33914 Shake.prototype._resetState = function () {
33915 this._state.initialize(this._rate, this._capacity)
33916 return this
33917 }
33918
33919 Shake.prototype._clone = function () {
33920 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
33921 this._state.copy(clone._state)
33922 clone._finalized = this._finalized
33923
33924 return clone
33925 }
33926
33927 return Shake
33928 }
33929
33930 }).call(this,require("buffer").Buffer)
33931 },{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
33932 'use strict'
33933 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]
33934
33935 exports.p1600 = function (s) {
33936 for (var round = 0; round < 24; ++round) {
33937 // theta
33938 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
33939 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
33940 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
33941 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
33942 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
33943 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
33944 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
33945 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
33946 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
33947 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
33948
33949 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
33950 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
33951 var t1slo0 = s[0] ^ lo
33952 var t1shi0 = s[1] ^ hi
33953 var t1slo5 = s[10] ^ lo
33954 var t1shi5 = s[11] ^ hi
33955 var t1slo10 = s[20] ^ lo
33956 var t1shi10 = s[21] ^ hi
33957 var t1slo15 = s[30] ^ lo
33958 var t1shi15 = s[31] ^ hi
33959 var t1slo20 = s[40] ^ lo
33960 var t1shi20 = s[41] ^ hi
33961 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
33962 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
33963 var t1slo1 = s[2] ^ lo
33964 var t1shi1 = s[3] ^ hi
33965 var t1slo6 = s[12] ^ lo
33966 var t1shi6 = s[13] ^ hi
33967 var t1slo11 = s[22] ^ lo
33968 var t1shi11 = s[23] ^ hi
33969 var t1slo16 = s[32] ^ lo
33970 var t1shi16 = s[33] ^ hi
33971 var t1slo21 = s[42] ^ lo
33972 var t1shi21 = s[43] ^ hi
33973 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
33974 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
33975 var t1slo2 = s[4] ^ lo
33976 var t1shi2 = s[5] ^ hi
33977 var t1slo7 = s[14] ^ lo
33978 var t1shi7 = s[15] ^ hi
33979 var t1slo12 = s[24] ^ lo
33980 var t1shi12 = s[25] ^ hi
33981 var t1slo17 = s[34] ^ lo
33982 var t1shi17 = s[35] ^ hi
33983 var t1slo22 = s[44] ^ lo
33984 var t1shi22 = s[45] ^ hi
33985 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
33986 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
33987 var t1slo3 = s[6] ^ lo
33988 var t1shi3 = s[7] ^ hi
33989 var t1slo8 = s[16] ^ lo
33990 var t1shi8 = s[17] ^ hi
33991 var t1slo13 = s[26] ^ lo
33992 var t1shi13 = s[27] ^ hi
33993 var t1slo18 = s[36] ^ lo
33994 var t1shi18 = s[37] ^ hi
33995 var t1slo23 = s[46] ^ lo
33996 var t1shi23 = s[47] ^ hi
33997 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
33998 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
33999 var t1slo4 = s[8] ^ lo
34000 var t1shi4 = s[9] ^ hi
34001 var t1slo9 = s[18] ^ lo
34002 var t1shi9 = s[19] ^ hi
34003 var t1slo14 = s[28] ^ lo
34004 var t1shi14 = s[29] ^ hi
34005 var t1slo19 = s[38] ^ lo
34006 var t1shi19 = s[39] ^ hi
34007 var t1slo24 = s[48] ^ lo
34008 var t1shi24 = s[49] ^ hi
34009
34010 // rho & pi
34011 var t2slo0 = t1slo0
34012 var t2shi0 = t1shi0
34013 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34014 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34015 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34016 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34017 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34018 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34019 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34020 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34021 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34022 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34023 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34024 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34025 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34026 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34027 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34028 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34029 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34030 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34031 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34032 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34033 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34034 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34035 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34036 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34037 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34038 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34039 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34040 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34041 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34042 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34043 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34044 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34045 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34046 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34047 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34048 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34049 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34050 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34051 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34052 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34053 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34054 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34055 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34056 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34057 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34058 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34059 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34060 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34061
34062 // chi
34063 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34064 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34065 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34066 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34067 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34068 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34069 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34070 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34071 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34072 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34073 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34074 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34075 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34076 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34077 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34078 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34079 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34080 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34081 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34082 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34083 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34084 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34085 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34086 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34087 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34088 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34089 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34090 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34091 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34092 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34093 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34094 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34095 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34096 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34097 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34098 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34099 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34100 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34101 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34102 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34103 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34104 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34105 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34106 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34107 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34108 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34109 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34110 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34111 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34112 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34113
34114 // iota
34115 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34116 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34117 }
34118 }
34119
34120 },{}],70:[function(require,module,exports){
34121 (function (Buffer){
34122 'use strict'
34123 var keccakState = require('./keccak-state-unroll')
34124
34125 function Keccak () {
34126 // much faster than `new Array(50)`
34127 this.state = [
34128 0, 0, 0, 0, 0,
34129 0, 0, 0, 0, 0,
34130 0, 0, 0, 0, 0,
34131 0, 0, 0, 0, 0,
34132 0, 0, 0, 0, 0
34133 ]
34134
34135 this.blockSize = null
34136 this.count = 0
34137 this.squeezing = false
34138 }
34139
34140 Keccak.prototype.initialize = function (rate, capacity) {
34141 for (var i = 0; i < 50; ++i) this.state[i] = 0
34142 this.blockSize = rate / 8
34143 this.count = 0
34144 this.squeezing = false
34145 }
34146
34147 Keccak.prototype.absorb = function (data) {
34148 for (var i = 0; i < data.length; ++i) {
34149 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34150 this.count += 1
34151 if (this.count === this.blockSize) {
34152 keccakState.p1600(this.state)
34153 this.count = 0
34154 }
34155 }
34156 }
34157
34158 Keccak.prototype.absorbLastFewBits = function (bits) {
34159 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34160 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34161 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34162 keccakState.p1600(this.state)
34163 this.count = 0
34164 this.squeezing = true
34165 }
34166
34167 Keccak.prototype.squeeze = function (length) {
34168 if (!this.squeezing) this.absorbLastFewBits(0x01)
34169
34170 var output = Buffer.allocUnsafe(length)
34171 for (var i = 0; i < length; ++i) {
34172 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34173 this.count += 1
34174 if (this.count === this.blockSize) {
34175 keccakState.p1600(this.state)
34176 this.count = 0
34177 }
34178 }
34179
34180 return output
34181 }
34182
34183 Keccak.prototype.copy = function (dest) {
34184 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34185 dest.blockSize = this.blockSize
34186 dest.count = this.count
34187 dest.squeezing = this.squeezing
34188 }
34189
34190 module.exports = Keccak
34191
34192 }).call(this,require("buffer").Buffer)
34193 },{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34194 (function (Buffer){
34195 /*
34196 CryptoJS v3.1.2
34197 code.google.com/p/crypto-js
34198 (c) 2009-2013 by Jeff Mott. All rights reserved.
34199 code.google.com/p/crypto-js/wiki/License
34200 */
34201 /** @preserve
34202 (c) 2012 by Cédric Mesnil. All rights reserved.
34203
34204 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
34205
34206 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34207 - 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.
34208
34209 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.
34210 */
34211
34212 // constants table
34213 var zl = [
34214 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34215 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34216 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34217 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34218 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34219 ]
34220
34221 var zr = [
34222 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34223 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34224 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34225 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34226 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34227 ]
34228
34229 var sl = [
34230 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34231 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34232 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34233 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34234 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34235 ]
34236
34237 var sr = [
34238 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34239 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34240 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34241 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34242 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34243 ]
34244
34245 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
34246 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
34247
34248 function bytesToWords (bytes) {
34249 var words = []
34250 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
34251 words[b >>> 5] |= bytes[i] << (24 - b % 32)
34252 }
34253 return words
34254 }
34255
34256 function wordsToBytes (words) {
34257 var bytes = []
34258 for (var b = 0; b < words.length * 32; b += 8) {
34259 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
34260 }
34261 return bytes
34262 }
34263
34264 function processBlock (H, M, offset) {
34265 // swap endian
34266 for (var i = 0; i < 16; i++) {
34267 var offset_i = offset + i
34268 var M_offset_i = M[offset_i]
34269
34270 // Swap
34271 M[offset_i] = (
34272 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
34273 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
34274 )
34275 }
34276
34277 // Working variables
34278 var al, bl, cl, dl, el
34279 var ar, br, cr, dr, er
34280
34281 ar = al = H[0]
34282 br = bl = H[1]
34283 cr = cl = H[2]
34284 dr = dl = H[3]
34285 er = el = H[4]
34286
34287 // computation
34288 var t
34289 for (i = 0; i < 80; i += 1) {
34290 t = (al + M[offset + zl[i]]) | 0
34291 if (i < 16) {
34292 t += f1(bl, cl, dl) + hl[0]
34293 } else if (i < 32) {
34294 t += f2(bl, cl, dl) + hl[1]
34295 } else if (i < 48) {
34296 t += f3(bl, cl, dl) + hl[2]
34297 } else if (i < 64) {
34298 t += f4(bl, cl, dl) + hl[3]
34299 } else {// if (i<80) {
34300 t += f5(bl, cl, dl) + hl[4]
34301 }
34302 t = t | 0
34303 t = rotl(t, sl[i])
34304 t = (t + el) | 0
34305 al = el
34306 el = dl
34307 dl = rotl(cl, 10)
34308 cl = bl
34309 bl = t
34310
34311 t = (ar + M[offset + zr[i]]) | 0
34312 if (i < 16) {
34313 t += f5(br, cr, dr) + hr[0]
34314 } else if (i < 32) {
34315 t += f4(br, cr, dr) + hr[1]
34316 } else if (i < 48) {
34317 t += f3(br, cr, dr) + hr[2]
34318 } else if (i < 64) {
34319 t += f2(br, cr, dr) + hr[3]
34320 } else {// if (i<80) {
34321 t += f1(br, cr, dr) + hr[4]
34322 }
34323
34324 t = t | 0
34325 t = rotl(t, sr[i])
34326 t = (t + er) | 0
34327 ar = er
34328 er = dr
34329 dr = rotl(cr, 10)
34330 cr = br
34331 br = t
34332 }
34333
34334 // intermediate hash value
34335 t = (H[1] + cl + dr) | 0
34336 H[1] = (H[2] + dl + er) | 0
34337 H[2] = (H[3] + el + ar) | 0
34338 H[3] = (H[4] + al + br) | 0
34339 H[4] = (H[0] + bl + cr) | 0
34340 H[0] = t
34341 }
34342
34343 function f1 (x, y, z) {
34344 return ((x) ^ (y) ^ (z))
34345 }
34346
34347 function f2 (x, y, z) {
34348 return (((x) & (y)) | ((~x) & (z)))
34349 }
34350
34351 function f3 (x, y, z) {
34352 return (((x) | (~(y))) ^ (z))
34353 }
34354
34355 function f4 (x, y, z) {
34356 return (((x) & (z)) | ((y) & (~(z))))
34357 }
34358
34359 function f5 (x, y, z) {
34360 return ((x) ^ ((y) | (~(z))))
34361 }
34362
34363 function rotl (x, n) {
34364 return (x << n) | (x >>> (32 - n))
34365 }
34366
34367 function ripemd160 (message) {
34368 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
34369
34370 if (typeof message === 'string') {
34371 message = new Buffer(message, 'utf8')
34372 }
34373
34374 var m = bytesToWords(message)
34375
34376 var nBitsLeft = message.length * 8
34377 var nBitsTotal = message.length * 8
34378
34379 // Add padding
34380 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
34381 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
34382 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
34383 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
34384 )
34385
34386 for (var i = 0; i < m.length; i += 16) {
34387 processBlock(H, m, i)
34388 }
34389
34390 // swap endian
34391 for (i = 0; i < 5; i++) {
34392 // shortcut
34393 var H_i = H[i]
34394
34395 // Swap
34396 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
34397 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
34398 }
34399
34400 var digestbytes = wordsToBytes(H)
34401 return new Buffer(digestbytes)
34402 }
34403
34404 module.exports = ripemd160
34405
34406 }).call(this,require("buffer").Buffer)
34407 },{"buffer":5}],72:[function(require,module,exports){
34408 (function (Buffer){
34409 const assert = require('assert')
34410 /**
34411 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
34412 * This function takes in a data, convert it to buffer if not, and a length for recursion
34413 *
34414 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34415 * @returns {Buffer} - returns buffer of encoded data
34416 **/
34417 exports.encode = function (input) {
34418 if (input instanceof Array) {
34419 var output = []
34420 for (var i = 0; i < input.length; i++) {
34421 output.push(exports.encode(input[i]))
34422 }
34423 var buf = Buffer.concat(output)
34424 return Buffer.concat([encodeLength(buf.length, 192), buf])
34425 } else {
34426 input = toBuffer(input)
34427 if (input.length === 1 && input[0] < 128) {
34428 return input
34429 } else {
34430 return Buffer.concat([encodeLength(input.length, 128), input])
34431 }
34432 }
34433 }
34434
34435 function safeParseInt (v, base) {
34436 if (v.slice(0, 2) === '00') {
34437 throw (new Error('invalid RLP: extra zeros'))
34438 }
34439
34440 return parseInt(v, base)
34441 }
34442
34443 function encodeLength (len, offset) {
34444 if (len < 56) {
34445 return new Buffer([len + offset])
34446 } else {
34447 var hexLength = intToHex(len)
34448 var lLength = hexLength.length / 2
34449 var firstByte = intToHex(offset + 55 + lLength)
34450 return new Buffer(firstByte + hexLength, 'hex')
34451 }
34452 }
34453
34454 /**
34455 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
34456 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34457 * @returns {Array} - returns decode Array of Buffers containg the original message
34458 **/
34459 exports.decode = function (input, stream) {
34460 if (!input || input.length === 0) {
34461 return new Buffer([])
34462 }
34463
34464 input = toBuffer(input)
34465 var decoded = _decode(input)
34466
34467 if (stream) {
34468 return decoded
34469 }
34470
34471 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
34472 return decoded.data
34473 }
34474
34475 exports.getLength = function (input) {
34476 if (!input || input.length === 0) {
34477 return new Buffer([])
34478 }
34479
34480 input = toBuffer(input)
34481 var firstByte = input[0]
34482 if (firstByte <= 0x7f) {
34483 return input.length
34484 } else if (firstByte <= 0xb7) {
34485 return firstByte - 0x7f
34486 } else if (firstByte <= 0xbf) {
34487 return firstByte - 0xb6
34488 } else if (firstByte <= 0xf7) {
34489 // a list between 0-55 bytes long
34490 return firstByte - 0xbf
34491 } else {
34492 // a list over 55 bytes long
34493 var llength = firstByte - 0xf6
34494 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34495 return llength + length
34496 }
34497 }
34498
34499 function _decode (input) {
34500 var length, llength, data, innerRemainder, d
34501 var decoded = []
34502 var firstByte = input[0]
34503
34504 if (firstByte <= 0x7f) {
34505 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
34506 return {
34507 data: input.slice(0, 1),
34508 remainder: input.slice(1)
34509 }
34510 } else if (firstByte <= 0xb7) {
34511 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
34512 // The range of the first byte is [0x80, 0xb7]
34513 length = firstByte - 0x7f
34514
34515 // set 0x80 null to 0
34516 if (firstByte === 0x80) {
34517 data = new Buffer([])
34518 } else {
34519 data = input.slice(1, length)
34520 }
34521
34522 if (length === 2 && data[0] < 0x80) {
34523 throw new Error('invalid rlp encoding: byte must be less 0x80')
34524 }
34525
34526 return {
34527 data: data,
34528 remainder: input.slice(length)
34529 }
34530 } else if (firstByte <= 0xbf) {
34531 llength = firstByte - 0xb6
34532 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34533 data = input.slice(llength, length + llength)
34534 if (data.length < length) {
34535 throw (new Error('invalid RLP'))
34536 }
34537
34538 return {
34539 data: data,
34540 remainder: input.slice(length + llength)
34541 }
34542 } else if (firstByte <= 0xf7) {
34543 // a list between 0-55 bytes long
34544 length = firstByte - 0xbf
34545 innerRemainder = input.slice(1, length)
34546 while (innerRemainder.length) {
34547 d = _decode(innerRemainder)
34548 decoded.push(d.data)
34549 innerRemainder = d.remainder
34550 }
34551
34552 return {
34553 data: decoded,
34554 remainder: input.slice(length)
34555 }
34556 } else {
34557 // a list over 55 bytes long
34558 llength = firstByte - 0xf6
34559 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34560 var totalLength = llength + length
34561 if (totalLength > input.length) {
34562 throw new Error('invalid rlp: total length is larger than the data')
34563 }
34564
34565 innerRemainder = input.slice(llength, totalLength)
34566 if (innerRemainder.length === 0) {
34567 throw new Error('invalid rlp, List has a invalid length')
34568 }
34569
34570 while (innerRemainder.length) {
34571 d = _decode(innerRemainder)
34572 decoded.push(d.data)
34573 innerRemainder = d.remainder
34574 }
34575 return {
34576 data: decoded,
34577 remainder: input.slice(totalLength)
34578 }
34579 }
34580 }
34581
34582 function isHexPrefixed (str) {
34583 return str.slice(0, 2) === '0x'
34584 }
34585
34586 // Removes 0x from a given String
34587 function stripHexPrefix (str) {
34588 if (typeof str !== 'string') {
34589 return str
34590 }
34591 return isHexPrefixed(str) ? str.slice(2) : str
34592 }
34593
34594 function intToHex (i) {
34595 var hex = i.toString(16)
34596 if (hex.length % 2) {
34597 hex = '0' + hex
34598 }
34599
34600 return hex
34601 }
34602
34603 function padToEven (a) {
34604 if (a.length % 2) a = '0' + a
34605 return a
34606 }
34607
34608 function intToBuffer (i) {
34609 var hex = intToHex(i)
34610 return new Buffer(hex, 'hex')
34611 }
34612
34613 function toBuffer (v) {
34614 if (!Buffer.isBuffer(v)) {
34615 if (typeof v === 'string') {
34616 if (isHexPrefixed(v)) {
34617 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
34618 } else {
34619 v = new Buffer(v)
34620 }
34621 } else if (typeof v === 'number') {
34622 if (!v) {
34623 v = new Buffer([])
34624 } else {
34625 v = intToBuffer(v)
34626 }
34627 } else if (v === null || v === undefined) {
34628 v = new Buffer([])
34629 } else if (v.toArray) {
34630 // converts a BN to a Buffer
34631 v = new Buffer(v.toArray())
34632 } else {
34633 throw new Error('invalid type')
34634 }
34635 }
34636 return v
34637 }
34638
34639 }).call(this,require("buffer").Buffer)
34640 },{"assert":1,"buffer":5}],73:[function(require,module,exports){
34641 'use strict'
34642 module.exports = require('./lib')(require('./lib/elliptic'))
34643
34644 },{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
34645 (function (Buffer){
34646 'use strict'
34647 var toString = Object.prototype.toString
34648
34649 // TypeError
34650 exports.isArray = function (value, message) {
34651 if (!Array.isArray(value)) throw TypeError(message)
34652 }
34653
34654 exports.isBoolean = function (value, message) {
34655 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
34656 }
34657
34658 exports.isBuffer = function (value, message) {
34659 if (!Buffer.isBuffer(value)) throw TypeError(message)
34660 }
34661
34662 exports.isFunction = function (value, message) {
34663 if (toString.call(value) !== '[object Function]') throw TypeError(message)
34664 }
34665
34666 exports.isNumber = function (value, message) {
34667 if (toString.call(value) !== '[object Number]') throw TypeError(message)
34668 }
34669
34670 exports.isObject = function (value, message) {
34671 if (toString.call(value) !== '[object Object]') throw TypeError(message)
34672 }
34673
34674 // RangeError
34675 exports.isBufferLength = function (buffer, length, message) {
34676 if (buffer.length !== length) throw RangeError(message)
34677 }
34678
34679 exports.isBufferLength2 = function (buffer, length1, length2, message) {
34680 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
34681 }
34682
34683 exports.isLengthGTZero = function (value, message) {
34684 if (value.length === 0) throw RangeError(message)
34685 }
34686
34687 exports.isNumberInInterval = function (number, x, y, message) {
34688 if (number <= x || number >= y) throw RangeError(message)
34689 }
34690
34691 }).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
34692 },{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
34693 (function (Buffer){
34694 'use strict'
34695 var bip66 = require('bip66')
34696
34697 var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
34698 // begin
34699 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
34700 // private key
34701 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34702 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34703 // middle
34704 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34705 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34706 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34707 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34708 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34709 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34710 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34711 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34712 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
34713 // public key
34714 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34715 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34716 0x00
34717 ])
34718
34719 var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
34720 // begin
34721 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
34722 // private key
34723 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34724 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34725 // middle
34726 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
34727 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34728 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34729 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
34730 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
34731 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
34732 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
34733 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
34734 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
34735 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
34736 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
34737 // public key
34738 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34739 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34740 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34741 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34742 0x00
34743 ])
34744
34745 var ZERO_BUFFER_32 = new Buffer([
34746 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
34747 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
34748 ])
34749
34750 exports.privateKeyExport = function (privateKey, publicKey, compressed) {
34751 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
34752 privateKey.copy(result, compressed ? 8 : 9)
34753 publicKey.copy(result, compressed ? 181 : 214)
34754 return result
34755 }
34756
34757 exports.privateKeyImport = function (privateKey) {
34758 var length = privateKey.length
34759
34760 // sequence header
34761 var index = 0
34762 if (length < index + 1 || privateKey[index] !== 0x30) return
34763 index += 1
34764
34765 // sequence length constructor
34766 if (length < index + 1 || !(privateKey[index] & 0x80)) return
34767
34768 var lenb = privateKey[index] & 0x7f
34769 index += 1
34770 if (lenb < 1 || lenb > 2) return
34771 if (length < index + lenb) return
34772
34773 // sequence length
34774 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
34775 index += lenb
34776 if (length < index + len) return
34777
34778 // sequence element 0: version number (=1)
34779 if (length < index + 3 ||
34780 privateKey[index] !== 0x02 ||
34781 privateKey[index + 1] !== 0x01 ||
34782 privateKey[index + 2] !== 0x01) {
34783 return
34784 }
34785 index += 3
34786
34787 // sequence element 1: octet string, up to 32 bytes
34788 if (length < index + 2 ||
34789 privateKey[index] !== 0x04 ||
34790 privateKey[index + 1] > 0x20 ||
34791 length < index + 2 + privateKey[index + 1]) {
34792 return
34793 }
34794
34795 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
34796 }
34797
34798 exports.signatureExport = function (sigObj) {
34799 var r = Buffer.concat([new Buffer([0]), sigObj.r])
34800 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
34801
34802 var s = Buffer.concat([new Buffer([0]), sigObj.s])
34803 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
34804
34805 return bip66.encode(r.slice(posR), s.slice(posS))
34806 }
34807
34808 exports.signatureImport = function (sig) {
34809 var r = new Buffer(ZERO_BUFFER_32)
34810 var s = new Buffer(ZERO_BUFFER_32)
34811
34812 try {
34813 var sigObj = bip66.decode(sig)
34814 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
34815 if (sigObj.r.length > 32) throw new Error('R length is too long')
34816 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
34817 if (sigObj.s.length > 32) throw new Error('S length is too long')
34818 } catch (err) {
34819 return
34820 }
34821
34822 sigObj.r.copy(r, 32 - sigObj.r.length)
34823 sigObj.s.copy(s, 32 - sigObj.s.length)
34824
34825 return { r: r, s: s }
34826 }
34827
34828 exports.signatureImportLax = function (sig) {
34829 var r = new Buffer(ZERO_BUFFER_32)
34830 var s = new Buffer(ZERO_BUFFER_32)
34831
34832 var length = sig.length
34833 var index = 0
34834
34835 // sequence tag byte
34836 if (sig[index++] !== 0x30) return
34837
34838 // sequence length byte
34839 var lenbyte = sig[index++]
34840 if (lenbyte & 0x80) {
34841 index += lenbyte - 0x80
34842 if (index > length) return
34843 }
34844
34845 // sequence tag byte for r
34846 if (sig[index++] !== 0x02) return
34847
34848 // length for r
34849 var rlen = sig[index++]
34850 if (rlen & 0x80) {
34851 lenbyte = rlen - 0x80
34852 if (index + lenbyte > length) return
34853 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34854 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
34855 }
34856 if (rlen > length - index) return
34857 var rindex = index
34858 index += rlen
34859
34860 // sequence tag byte for s
34861 if (sig[index++] !== 0x02) return
34862
34863 // length for s
34864 var slen = sig[index++]
34865 if (slen & 0x80) {
34866 lenbyte = slen - 0x80
34867 if (index + lenbyte > length) return
34868 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
34869 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
34870 }
34871 if (slen > length - index) return
34872 var sindex = index
34873 index += slen
34874
34875 // ignore leading zeros in r
34876 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
34877 // copy r value
34878 if (rlen > 32) return
34879 var rvalue = sig.slice(rindex, rindex + rlen)
34880 rvalue.copy(r, 32 - rvalue.length)
34881
34882 // ignore leading zeros in s
34883 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
34884 // copy s value
34885 if (slen > 32) return
34886 var svalue = sig.slice(sindex, sindex + slen)
34887 svalue.copy(s, 32 - svalue.length)
34888
34889 return { r: r, s: s }
34890 }
34891
34892 }).call(this,require("buffer").Buffer)
34893 },{"bip66":32,"buffer":5}],76:[function(require,module,exports){
34894 (function (Buffer){
34895 'use strict'
34896 var createHash = require('create-hash')
34897 var BN = require('bn.js')
34898 var EC = require('elliptic').ec
34899
34900 var messages = require('../messages.json')
34901
34902 var ec = new EC('secp256k1')
34903 var ecparams = ec.curve
34904
34905 function loadCompressedPublicKey (first, xBuffer) {
34906 var x = new BN(xBuffer)
34907
34908 // overflow
34909 if (x.cmp(ecparams.p) >= 0) return null
34910 x = x.toRed(ecparams.red)
34911
34912 // compute corresponding Y
34913 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
34914 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
34915
34916 return ec.keyPair({ pub: { x: x, y: y } })
34917 }
34918
34919 function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
34920 var x = new BN(xBuffer)
34921 var y = new BN(yBuffer)
34922
34923 // overflow
34924 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
34925
34926 x = x.toRed(ecparams.red)
34927 y = y.toRed(ecparams.red)
34928
34929 // is odd flag
34930 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
34931
34932 // x*x*x + b = y*y
34933 var x3 = x.redSqr().redIMul(x)
34934 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
34935
34936 return ec.keyPair({ pub: { x: x, y: y } })
34937 }
34938
34939 function loadPublicKey (publicKey) {
34940 var first = publicKey[0]
34941 switch (first) {
34942 case 0x02:
34943 case 0x03:
34944 if (publicKey.length !== 33) return null
34945 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
34946 case 0x04:
34947 case 0x06:
34948 case 0x07:
34949 if (publicKey.length !== 65) return null
34950 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
34951 default:
34952 return null
34953 }
34954 }
34955
34956 exports.privateKeyVerify = function (privateKey) {
34957 var bn = new BN(privateKey)
34958 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
34959 }
34960
34961 exports.privateKeyExport = function (privateKey, compressed) {
34962 var d = new BN(privateKey)
34963 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
34964
34965 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34966 }
34967
34968 exports.privateKeyTweakAdd = function (privateKey, tweak) {
34969 var bn = new BN(tweak)
34970 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34971
34972 bn.iadd(new BN(privateKey))
34973 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
34974 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
34975
34976 return bn.toArrayLike(Buffer, 'be', 32)
34977 }
34978
34979 exports.privateKeyTweakMul = function (privateKey, tweak) {
34980 var bn = new BN(tweak)
34981 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
34982
34983 bn.imul(new BN(privateKey))
34984 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
34985
34986 return bn.toArrayLike(Buffer, 'be', 32)
34987 }
34988
34989 exports.publicKeyCreate = function (privateKey, compressed) {
34990 var d = new BN(privateKey)
34991 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
34992
34993 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
34994 }
34995
34996 exports.publicKeyConvert = function (publicKey, compressed) {
34997 var pair = loadPublicKey(publicKey)
34998 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
34999
35000 return new Buffer(pair.getPublic(compressed, true))
35001 }
35002
35003 exports.publicKeyVerify = function (publicKey) {
35004 return loadPublicKey(publicKey) !== null
35005 }
35006
35007 exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35008 var pair = loadPublicKey(publicKey)
35009 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35010
35011 tweak = new BN(tweak)
35012 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
35013
35014 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35015 }
35016
35017 exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35018 var pair = loadPublicKey(publicKey)
35019 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35020
35021 tweak = new BN(tweak)
35022 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
35023
35024 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35025 }
35026
35027 exports.publicKeyCombine = function (publicKeys, compressed) {
35028 var pairs = new Array(publicKeys.length)
35029 for (var i = 0; i < publicKeys.length; ++i) {
35030 pairs[i] = loadPublicKey(publicKeys[i])
35031 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35032 }
35033
35034 var point = pairs[0].pub
35035 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35036 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
35037
35038 return new Buffer(point.encode(true, compressed))
35039 }
35040
35041 exports.signatureNormalize = function (signature) {
35042 var r = new BN(signature.slice(0, 32))
35043 var s = new BN(signature.slice(32, 64))
35044 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35045
35046 var result = new Buffer(signature)
35047 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35048
35049 return result
35050 }
35051
35052 exports.signatureExport = function (signature) {
35053 var r = signature.slice(0, 32)
35054 var s = signature.slice(32, 64)
35055 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35056
35057 return { r: r, s: s }
35058 }
35059
35060 exports.signatureImport = function (sigObj) {
35061 var r = new BN(sigObj.r)
35062 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35063
35064 var s = new BN(sigObj.s)
35065 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35066
35067 return Buffer.concat([
35068 r.toArrayLike(Buffer, 'be', 32),
35069 s.toArrayLike(Buffer, 'be', 32)
35070 ])
35071 }
35072
35073 exports.sign = function (message, privateKey, noncefn, data) {
35074 if (typeof noncefn === 'function') {
35075 var getNonce = noncefn
35076 noncefn = function (counter) {
35077 var nonce = getNonce(message, privateKey, null, data, counter)
35078 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
35079
35080 return new BN(nonce)
35081 }
35082 }
35083
35084 var d = new BN(privateKey)
35085 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
35086
35087 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35088 return {
35089 signature: Buffer.concat([
35090 result.r.toArrayLike(Buffer, 'be', 32),
35091 result.s.toArrayLike(Buffer, 'be', 32)
35092 ]),
35093 recovery: result.recoveryParam
35094 }
35095 }
35096
35097 exports.verify = function (message, signature, publicKey) {
35098 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35099
35100 var sigr = new BN(sigObj.r)
35101 var sigs = new BN(sigObj.s)
35102 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35103 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
35104
35105 var pair = loadPublicKey(publicKey)
35106 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35107
35108 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35109 }
35110
35111 exports.recover = function (message, signature, recovery, compressed) {
35112 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
35113
35114 var sigr = new BN(sigObj.r)
35115 var sigs = new BN(sigObj.s)
35116 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35117
35118 try {
35119 if (sigr.isZero() || sigs.isZero()) throw new Error()
35120
35121 var point = ec.recoverPubKey(message, sigObj, recovery)
35122 return new Buffer(point.encode(true, compressed))
35123 } catch (err) {
35124 throw new Error(messages.ECDSA_RECOVER_FAIL)
35125 }
35126 }
35127
35128 exports.ecdh = function (publicKey, privateKey) {
35129 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35130 return createHash('sha256').update(shared).digest()
35131 }
35132
35133 exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35134 var pair = loadPublicKey(publicKey)
35135 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
35136
35137 var scalar = new BN(privateKey)
35138 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35139
35140 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
35141 }
35142
35143 }).call(this,require("buffer").Buffer)
35144 },{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35145 'use strict'
35146 var assert = require('./assert')
35147 var der = require('./der')
35148 var messages = require('./messages.json')
35149
35150 function initCompressedValue (value, defaultValue) {
35151 if (value === undefined) return defaultValue
35152
35153 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35154 return value
35155 }
35156
35157 module.exports = function (secp256k1) {
35158 return {
35159 privateKeyVerify: function (privateKey) {
35160 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35161 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35162 },
35163
35164 privateKeyExport: function (privateKey, compressed) {
35165 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35166 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35167
35168 compressed = initCompressedValue(compressed, true)
35169 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
35170
35171 return der.privateKeyExport(privateKey, publicKey, compressed)
35172 },
35173
35174 privateKeyImport: function (privateKey) {
35175 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35176
35177 privateKey = der.privateKeyImport(privateKey)
35178 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
35179
35180 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35181 },
35182
35183 privateKeyTweakAdd: function (privateKey, tweak) {
35184 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35185 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35186
35187 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35188 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35189
35190 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35191 },
35192
35193 privateKeyTweakMul: function (privateKey, tweak) {
35194 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35195 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35196
35197 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35198 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35199
35200 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35201 },
35202
35203 publicKeyCreate: function (privateKey, compressed) {
35204 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35205 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35206
35207 compressed = initCompressedValue(compressed, true)
35208
35209 return secp256k1.publicKeyCreate(privateKey, compressed)
35210 },
35211
35212 publicKeyConvert: function (publicKey, compressed) {
35213 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35214 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35215
35216 compressed = initCompressedValue(compressed, true)
35217
35218 return secp256k1.publicKeyConvert(publicKey, compressed)
35219 },
35220
35221 publicKeyVerify: function (publicKey) {
35222 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35223 return secp256k1.publicKeyVerify(publicKey)
35224 },
35225
35226 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
35227 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35228 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35229
35230 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35231 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35232
35233 compressed = initCompressedValue(compressed, true)
35234
35235 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
35236 },
35237
35238 publicKeyTweakMul: function (publicKey, tweak, compressed) {
35239 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35240 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35241
35242 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35243 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35244
35245 compressed = initCompressedValue(compressed, true)
35246
35247 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
35248 },
35249
35250 publicKeyCombine: function (publicKeys, compressed) {
35251 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
35252 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
35253 for (var i = 0; i < publicKeys.length; ++i) {
35254 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
35255 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35256 }
35257
35258 compressed = initCompressedValue(compressed, true)
35259
35260 return secp256k1.publicKeyCombine(publicKeys, compressed)
35261 },
35262
35263 signatureNormalize: function (signature) {
35264 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35265 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35266
35267 return secp256k1.signatureNormalize(signature)
35268 },
35269
35270 signatureExport: function (signature) {
35271 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35272 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35273
35274 var sigObj = secp256k1.signatureExport(signature)
35275 return der.signatureExport(sigObj)
35276 },
35277
35278 signatureImport: function (sig) {
35279 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35280 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35281
35282 var sigObj = der.signatureImport(sig)
35283 if (sigObj) return secp256k1.signatureImport(sigObj)
35284
35285 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35286 },
35287
35288 signatureImportLax: function (sig) {
35289 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35290 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35291
35292 var sigObj = der.signatureImportLax(sig)
35293 if (sigObj) return secp256k1.signatureImport(sigObj)
35294
35295 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35296 },
35297
35298 sign: function (message, privateKey, options) {
35299 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35300 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35301
35302 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35303 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35304
35305 var data = null
35306 var noncefn = null
35307 if (options !== undefined) {
35308 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
35309
35310 if (options.data !== undefined) {
35311 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
35312 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
35313 data = options.data
35314 }
35315
35316 if (options.noncefn !== undefined) {
35317 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
35318 noncefn = options.noncefn
35319 }
35320 }
35321
35322 return secp256k1.sign(message, privateKey, noncefn, data)
35323 },
35324
35325 verify: function (message, signature, publicKey) {
35326 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35327 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35328
35329 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35330 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35331
35332 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35333 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35334
35335 return secp256k1.verify(message, signature, publicKey)
35336 },
35337
35338 recover: function (message, signature, recovery, compressed) {
35339 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35340 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35341
35342 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35343 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35344
35345 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
35346 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
35347
35348 compressed = initCompressedValue(compressed, true)
35349
35350 return secp256k1.recover(message, signature, recovery, compressed)
35351 },
35352
35353 ecdh: function (publicKey, privateKey) {
35354 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35355 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35356
35357 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35358 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35359
35360 return secp256k1.ecdh(publicKey, privateKey)
35361 },
35362
35363 ecdhUnsafe: function (publicKey, privateKey, compressed) {
35364 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35365 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35366
35367 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35368 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35369
35370 compressed = initCompressedValue(compressed, true)
35371
35372 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
35373 }
35374 }
35375 }
35376
35377 },{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
35378 module.exports={
35379 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
35380 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
35381 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
35382 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
35383 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35384 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
35385 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
35386 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
35387 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
35388 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
35389 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
35390 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
35391 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
35392 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
35393 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35394 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
35395 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
35396 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
35397 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
35398 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
35399 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
35400 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
35401 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
35402 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
35403 "MSG32_TYPE_INVALID": "message should be a Buffer",
35404 "MSG32_LENGTH_INVALID": "message length is invalid",
35405 "OPTIONS_TYPE_INVALID": "options should be an Object",
35406 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
35407 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
35408 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
35409 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
35410 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
35411 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
35412 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
35413 }
35414
35415 },{}],79:[function(require,module,exports){
35416 (function (Buffer){
35417 // prototype class for hash functions
35418 function Hash (blockSize, finalSize) {
35419 this._block = new Buffer(blockSize)
35420 this._finalSize = finalSize
35421 this._blockSize = blockSize
35422 this._len = 0
35423 this._s = 0
35424 }
35425
35426 Hash.prototype.update = function (data, enc) {
35427 if (typeof data === 'string') {
35428 enc = enc || 'utf8'
35429 data = new Buffer(data, enc)
35430 }
35431
35432 var l = this._len += data.length
35433 var s = this._s || 0
35434 var f = 0
35435 var buffer = this._block
35436
35437 while (s < l) {
35438 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
35439 var ch = (t - f)
35440
35441 for (var i = 0; i < ch; i++) {
35442 buffer[(s % this._blockSize) + i] = data[i + f]
35443 }
35444
35445 s += ch
35446 f += ch
35447
35448 if ((s % this._blockSize) === 0) {
35449 this._update(buffer)
35450 }
35451 }
35452 this._s = s
35453
35454 return this
35455 }
35456
35457 Hash.prototype.digest = function (enc) {
35458 // Suppose the length of the message M, in bits, is l
35459 var l = this._len * 8
35460
35461 // Append the bit 1 to the end of the message
35462 this._block[this._len % this._blockSize] = 0x80
35463
35464 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
35465 this._block.fill(0, this._len % this._blockSize + 1)
35466
35467 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
35468 this._update(this._block)
35469 this._block.fill(0)
35470 }
35471
35472 // to this append the block which is equal to the number l written in binary
35473 // TODO: handle case where l is > Math.pow(2, 29)
35474 this._block.writeInt32BE(l, this._blockSize - 4)
35475
35476 var hash = this._update(this._block) || this._hash()
35477
35478 return enc ? hash.toString(enc) : hash
35479 }
35480
35481 Hash.prototype._update = function () {
35482 throw new Error('_update must be implemented by subclass')
35483 }
35484
35485 module.exports = Hash
35486
35487 }).call(this,require("buffer").Buffer)
35488 },{"buffer":5}],80:[function(require,module,exports){
35489 var exports = module.exports = function SHA (algorithm) {
35490 algorithm = algorithm.toLowerCase()
35491
35492 var Algorithm = exports[algorithm]
35493 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35494
35495 return new Algorithm()
35496 }
35497
35498 exports.sha = require('./sha')
35499 exports.sha1 = require('./sha1')
35500 exports.sha224 = require('./sha224')
35501 exports.sha256 = require('./sha256')
35502 exports.sha384 = require('./sha384')
35503 exports.sha512 = require('./sha512')
35504
35505 },{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
35506 (function (Buffer){
35507 /*
35508 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35509 * in FIPS PUB 180-1
35510 * This source code is derived from sha1.js of the same repository.
35511 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35512 * operation was added.
35513 */
35514
35515 var inherits = require('inherits')
35516 var Hash = require('./hash')
35517
35518 var K = [
35519 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35520 ]
35521
35522 var W = new Array(80)
35523
35524 function Sha () {
35525 this.init()
35526 this._w = W
35527
35528 Hash.call(this, 64, 56)
35529 }
35530
35531 inherits(Sha, Hash)
35532
35533 Sha.prototype.init = function () {
35534 this._a = 0x67452301
35535 this._b = 0xefcdab89
35536 this._c = 0x98badcfe
35537 this._d = 0x10325476
35538 this._e = 0xc3d2e1f0
35539
35540 return this
35541 }
35542
35543 function rotl5 (num) {
35544 return (num << 5) | (num >>> 27)
35545 }
35546
35547 function rotl30 (num) {
35548 return (num << 30) | (num >>> 2)
35549 }
35550
35551 function ft (s, b, c, d) {
35552 if (s === 0) return (b & c) | ((~b) & d)
35553 if (s === 2) return (b & c) | (b & d) | (c & d)
35554 return b ^ c ^ d
35555 }
35556
35557 Sha.prototype._update = function (M) {
35558 var W = this._w
35559
35560 var a = this._a | 0
35561 var b = this._b | 0
35562 var c = this._c | 0
35563 var d = this._d | 0
35564 var e = this._e | 0
35565
35566 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35567 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
35568
35569 for (var j = 0; j < 80; ++j) {
35570 var s = ~~(j / 20)
35571 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35572
35573 e = d
35574 d = c
35575 c = rotl30(b)
35576 b = a
35577 a = t
35578 }
35579
35580 this._a = (a + this._a) | 0
35581 this._b = (b + this._b) | 0
35582 this._c = (c + this._c) | 0
35583 this._d = (d + this._d) | 0
35584 this._e = (e + this._e) | 0
35585 }
35586
35587 Sha.prototype._hash = function () {
35588 var H = new Buffer(20)
35589
35590 H.writeInt32BE(this._a | 0, 0)
35591 H.writeInt32BE(this._b | 0, 4)
35592 H.writeInt32BE(this._c | 0, 8)
35593 H.writeInt32BE(this._d | 0, 12)
35594 H.writeInt32BE(this._e | 0, 16)
35595
35596 return H
35597 }
35598
35599 module.exports = Sha
35600
35601 }).call(this,require("buffer").Buffer)
35602 },{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
35603 (function (Buffer){
35604 /*
35605 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
35606 * in FIPS PUB 180-1
35607 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
35608 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35609 * Distributed under the BSD License
35610 * See http://pajhome.org.uk/crypt/md5 for details.
35611 */
35612
35613 var inherits = require('inherits')
35614 var Hash = require('./hash')
35615
35616 var K = [
35617 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35618 ]
35619
35620 var W = new Array(80)
35621
35622 function Sha1 () {
35623 this.init()
35624 this._w = W
35625
35626 Hash.call(this, 64, 56)
35627 }
35628
35629 inherits(Sha1, Hash)
35630
35631 Sha1.prototype.init = function () {
35632 this._a = 0x67452301
35633 this._b = 0xefcdab89
35634 this._c = 0x98badcfe
35635 this._d = 0x10325476
35636 this._e = 0xc3d2e1f0
35637
35638 return this
35639 }
35640
35641 function rotl1 (num) {
35642 return (num << 1) | (num >>> 31)
35643 }
35644
35645 function rotl5 (num) {
35646 return (num << 5) | (num >>> 27)
35647 }
35648
35649 function rotl30 (num) {
35650 return (num << 30) | (num >>> 2)
35651 }
35652
35653 function ft (s, b, c, d) {
35654 if (s === 0) return (b & c) | ((~b) & d)
35655 if (s === 2) return (b & c) | (b & d) | (c & d)
35656 return b ^ c ^ d
35657 }
35658
35659 Sha1.prototype._update = function (M) {
35660 var W = this._w
35661
35662 var a = this._a | 0
35663 var b = this._b | 0
35664 var c = this._c | 0
35665 var d = this._d | 0
35666 var e = this._e | 0
35667
35668 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35669 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
35670
35671 for (var j = 0; j < 80; ++j) {
35672 var s = ~~(j / 20)
35673 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
35674
35675 e = d
35676 d = c
35677 c = rotl30(b)
35678 b = a
35679 a = t
35680 }
35681
35682 this._a = (a + this._a) | 0
35683 this._b = (b + this._b) | 0
35684 this._c = (c + this._c) | 0
35685 this._d = (d + this._d) | 0
35686 this._e = (e + this._e) | 0
35687 }
35688
35689 Sha1.prototype._hash = function () {
35690 var H = new Buffer(20)
35691
35692 H.writeInt32BE(this._a | 0, 0)
35693 H.writeInt32BE(this._b | 0, 4)
35694 H.writeInt32BE(this._c | 0, 8)
35695 H.writeInt32BE(this._d | 0, 12)
35696 H.writeInt32BE(this._e | 0, 16)
35697
35698 return H
35699 }
35700
35701 module.exports = Sha1
35702
35703 }).call(this,require("buffer").Buffer)
35704 },{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
35705 (function (Buffer){
35706 /**
35707 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35708 * in FIPS 180-2
35709 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35710 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35711 *
35712 */
35713
35714 var inherits = require('inherits')
35715 var Sha256 = require('./sha256')
35716 var Hash = require('./hash')
35717
35718 var W = new Array(64)
35719
35720 function Sha224 () {
35721 this.init()
35722
35723 this._w = W // new Array(64)
35724
35725 Hash.call(this, 64, 56)
35726 }
35727
35728 inherits(Sha224, Sha256)
35729
35730 Sha224.prototype.init = function () {
35731 this._a = 0xc1059ed8
35732 this._b = 0x367cd507
35733 this._c = 0x3070dd17
35734 this._d = 0xf70e5939
35735 this._e = 0xffc00b31
35736 this._f = 0x68581511
35737 this._g = 0x64f98fa7
35738 this._h = 0xbefa4fa4
35739
35740 return this
35741 }
35742
35743 Sha224.prototype._hash = function () {
35744 var H = new Buffer(28)
35745
35746 H.writeInt32BE(this._a, 0)
35747 H.writeInt32BE(this._b, 4)
35748 H.writeInt32BE(this._c, 8)
35749 H.writeInt32BE(this._d, 12)
35750 H.writeInt32BE(this._e, 16)
35751 H.writeInt32BE(this._f, 20)
35752 H.writeInt32BE(this._g, 24)
35753
35754 return H
35755 }
35756
35757 module.exports = Sha224
35758
35759 }).call(this,require("buffer").Buffer)
35760 },{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
35761 (function (Buffer){
35762 /**
35763 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
35764 * in FIPS 180-2
35765 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
35766 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
35767 *
35768 */
35769
35770 var inherits = require('inherits')
35771 var Hash = require('./hash')
35772
35773 var K = [
35774 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
35775 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
35776 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
35777 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
35778 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
35779 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
35780 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
35781 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
35782 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
35783 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
35784 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
35785 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
35786 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
35787 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
35788 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
35789 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
35790 ]
35791
35792 var W = new Array(64)
35793
35794 function Sha256 () {
35795 this.init()
35796
35797 this._w = W // new Array(64)
35798
35799 Hash.call(this, 64, 56)
35800 }
35801
35802 inherits(Sha256, Hash)
35803
35804 Sha256.prototype.init = function () {
35805 this._a = 0x6a09e667
35806 this._b = 0xbb67ae85
35807 this._c = 0x3c6ef372
35808 this._d = 0xa54ff53a
35809 this._e = 0x510e527f
35810 this._f = 0x9b05688c
35811 this._g = 0x1f83d9ab
35812 this._h = 0x5be0cd19
35813
35814 return this
35815 }
35816
35817 function ch (x, y, z) {
35818 return z ^ (x & (y ^ z))
35819 }
35820
35821 function maj (x, y, z) {
35822 return (x & y) | (z & (x | y))
35823 }
35824
35825 function sigma0 (x) {
35826 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
35827 }
35828
35829 function sigma1 (x) {
35830 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
35831 }
35832
35833 function gamma0 (x) {
35834 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
35835 }
35836
35837 function gamma1 (x) {
35838 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
35839 }
35840
35841 Sha256.prototype._update = function (M) {
35842 var W = this._w
35843
35844 var a = this._a | 0
35845 var b = this._b | 0
35846 var c = this._c | 0
35847 var d = this._d | 0
35848 var e = this._e | 0
35849 var f = this._f | 0
35850 var g = this._g | 0
35851 var h = this._h | 0
35852
35853 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
35854 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
35855
35856 for (var j = 0; j < 64; ++j) {
35857 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
35858 var T2 = (sigma0(a) + maj(a, b, c)) | 0
35859
35860 h = g
35861 g = f
35862 f = e
35863 e = (d + T1) | 0
35864 d = c
35865 c = b
35866 b = a
35867 a = (T1 + T2) | 0
35868 }
35869
35870 this._a = (a + this._a) | 0
35871 this._b = (b + this._b) | 0
35872 this._c = (c + this._c) | 0
35873 this._d = (d + this._d) | 0
35874 this._e = (e + this._e) | 0
35875 this._f = (f + this._f) | 0
35876 this._g = (g + this._g) | 0
35877 this._h = (h + this._h) | 0
35878 }
35879
35880 Sha256.prototype._hash = function () {
35881 var H = new Buffer(32)
35882
35883 H.writeInt32BE(this._a, 0)
35884 H.writeInt32BE(this._b, 4)
35885 H.writeInt32BE(this._c, 8)
35886 H.writeInt32BE(this._d, 12)
35887 H.writeInt32BE(this._e, 16)
35888 H.writeInt32BE(this._f, 20)
35889 H.writeInt32BE(this._g, 24)
35890 H.writeInt32BE(this._h, 28)
35891
35892 return H
35893 }
35894
35895 module.exports = Sha256
35896
35897 }).call(this,require("buffer").Buffer)
35898 },{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
35899 (function (Buffer){
35900 var inherits = require('inherits')
35901 var SHA512 = require('./sha512')
35902 var Hash = require('./hash')
35903
35904 var W = new Array(160)
35905
35906 function Sha384 () {
35907 this.init()
35908 this._w = W
35909
35910 Hash.call(this, 128, 112)
35911 }
35912
35913 inherits(Sha384, SHA512)
35914
35915 Sha384.prototype.init = function () {
35916 this._ah = 0xcbbb9d5d
35917 this._bh = 0x629a292a
35918 this._ch = 0x9159015a
35919 this._dh = 0x152fecd8
35920 this._eh = 0x67332667
35921 this._fh = 0x8eb44a87
35922 this._gh = 0xdb0c2e0d
35923 this._hh = 0x47b5481d
35924
35925 this._al = 0xc1059ed8
35926 this._bl = 0x367cd507
35927 this._cl = 0x3070dd17
35928 this._dl = 0xf70e5939
35929 this._el = 0xffc00b31
35930 this._fl = 0x68581511
35931 this._gl = 0x64f98fa7
35932 this._hl = 0xbefa4fa4
35933
35934 return this
35935 }
35936
35937 Sha384.prototype._hash = function () {
35938 var H = new Buffer(48)
35939
35940 function writeInt64BE (h, l, offset) {
35941 H.writeInt32BE(h, offset)
35942 H.writeInt32BE(l, offset + 4)
35943 }
35944
35945 writeInt64BE(this._ah, this._al, 0)
35946 writeInt64BE(this._bh, this._bl, 8)
35947 writeInt64BE(this._ch, this._cl, 16)
35948 writeInt64BE(this._dh, this._dl, 24)
35949 writeInt64BE(this._eh, this._el, 32)
35950 writeInt64BE(this._fh, this._fl, 40)
35951
35952 return H
35953 }
35954
35955 module.exports = Sha384
35956
35957 }).call(this,require("buffer").Buffer)
35958 },{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
35959 (function (Buffer){
35960 var inherits = require('inherits')
35961 var Hash = require('./hash')
35962
35963 var K = [
35964 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35965 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35966 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35967 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35968 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35969 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35970 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35971 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35972 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35973 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35974 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35975 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35976 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35977 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35978 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35979 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35980 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35981 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35982 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35983 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35984 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35985 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35986 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35987 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35988 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35989 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35990 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35991 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35992 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35993 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35994 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35995 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35996 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35997 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35998 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35999 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36000 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36001 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36002 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36003 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36004 ]
36005
36006 var W = new Array(160)
36007
36008 function Sha512 () {
36009 this.init()
36010 this._w = W
36011
36012 Hash.call(this, 128, 112)
36013 }
36014
36015 inherits(Sha512, Hash)
36016
36017 Sha512.prototype.init = function () {
36018 this._ah = 0x6a09e667
36019 this._bh = 0xbb67ae85
36020 this._ch = 0x3c6ef372
36021 this._dh = 0xa54ff53a
36022 this._eh = 0x510e527f
36023 this._fh = 0x9b05688c
36024 this._gh = 0x1f83d9ab
36025 this._hh = 0x5be0cd19
36026
36027 this._al = 0xf3bcc908
36028 this._bl = 0x84caa73b
36029 this._cl = 0xfe94f82b
36030 this._dl = 0x5f1d36f1
36031 this._el = 0xade682d1
36032 this._fl = 0x2b3e6c1f
36033 this._gl = 0xfb41bd6b
36034 this._hl = 0x137e2179
36035
36036 return this
36037 }
36038
36039 function Ch (x, y, z) {
36040 return z ^ (x & (y ^ z))
36041 }
36042
36043 function maj (x, y, z) {
36044 return (x & y) | (z & (x | y))
36045 }
36046
36047 function sigma0 (x, xl) {
36048 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36049 }
36050
36051 function sigma1 (x, xl) {
36052 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36053 }
36054
36055 function Gamma0 (x, xl) {
36056 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
36057 }
36058
36059 function Gamma0l (x, xl) {
36060 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36061 }
36062
36063 function Gamma1 (x, xl) {
36064 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
36065 }
36066
36067 function Gamma1l (x, xl) {
36068 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
36069 }
36070
36071 function getCarry (a, b) {
36072 return (a >>> 0) < (b >>> 0) ? 1 : 0
36073 }
36074
36075 Sha512.prototype._update = function (M) {
36076 var W = this._w
36077
36078 var ah = this._ah | 0
36079 var bh = this._bh | 0
36080 var ch = this._ch | 0
36081 var dh = this._dh | 0
36082 var eh = this._eh | 0
36083 var fh = this._fh | 0
36084 var gh = this._gh | 0
36085 var hh = this._hh | 0
36086
36087 var al = this._al | 0
36088 var bl = this._bl | 0
36089 var cl = this._cl | 0
36090 var dl = this._dl | 0
36091 var el = this._el | 0
36092 var fl = this._fl | 0
36093 var gl = this._gl | 0
36094 var hl = this._hl | 0
36095
36096 for (var i = 0; i < 32; i += 2) {
36097 W[i] = M.readInt32BE(i * 4)
36098 W[i + 1] = M.readInt32BE(i * 4 + 4)
36099 }
36100 for (; i < 160; i += 2) {
36101 var xh = W[i - 15 * 2]
36102 var xl = W[i - 15 * 2 + 1]
36103 var gamma0 = Gamma0(xh, xl)
36104 var gamma0l = Gamma0l(xl, xh)
36105
36106 xh = W[i - 2 * 2]
36107 xl = W[i - 2 * 2 + 1]
36108 var gamma1 = Gamma1(xh, xl)
36109 var gamma1l = Gamma1l(xl, xh)
36110
36111 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36112 var Wi7h = W[i - 7 * 2]
36113 var Wi7l = W[i - 7 * 2 + 1]
36114
36115 var Wi16h = W[i - 16 * 2]
36116 var Wi16l = W[i - 16 * 2 + 1]
36117
36118 var Wil = (gamma0l + Wi7l) | 0
36119 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36120 Wil = (Wil + gamma1l) | 0
36121 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36122 Wil = (Wil + Wi16l) | 0
36123 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
36124
36125 W[i] = Wih
36126 W[i + 1] = Wil
36127 }
36128
36129 for (var j = 0; j < 160; j += 2) {
36130 Wih = W[j]
36131 Wil = W[j + 1]
36132
36133 var majh = maj(ah, bh, ch)
36134 var majl = maj(al, bl, cl)
36135
36136 var sigma0h = sigma0(ah, al)
36137 var sigma0l = sigma0(al, ah)
36138 var sigma1h = sigma1(eh, el)
36139 var sigma1l = sigma1(el, eh)
36140
36141 // t1 = h + sigma1 + ch + K[j] + W[j]
36142 var Kih = K[j]
36143 var Kil = K[j + 1]
36144
36145 var chh = Ch(eh, fh, gh)
36146 var chl = Ch(el, fl, gl)
36147
36148 var t1l = (hl + sigma1l) | 0
36149 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36150 t1l = (t1l + chl) | 0
36151 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36152 t1l = (t1l + Kil) | 0
36153 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36154 t1l = (t1l + Wil) | 0
36155 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
36156
36157 // t2 = sigma0 + maj
36158 var t2l = (sigma0l + majl) | 0
36159 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
36160
36161 hh = gh
36162 hl = gl
36163 gh = fh
36164 gl = fl
36165 fh = eh
36166 fl = el
36167 el = (dl + t1l) | 0
36168 eh = (dh + t1h + getCarry(el, dl)) | 0
36169 dh = ch
36170 dl = cl
36171 ch = bh
36172 cl = bl
36173 bh = ah
36174 bl = al
36175 al = (t1l + t2l) | 0
36176 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36177 }
36178
36179 this._al = (this._al + al) | 0
36180 this._bl = (this._bl + bl) | 0
36181 this._cl = (this._cl + cl) | 0
36182 this._dl = (this._dl + dl) | 0
36183 this._el = (this._el + el) | 0
36184 this._fl = (this._fl + fl) | 0
36185 this._gl = (this._gl + gl) | 0
36186 this._hl = (this._hl + hl) | 0
36187
36188 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36189 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36190 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36191 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36192 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36193 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36194 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36195 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
36196 }
36197
36198 Sha512.prototype._hash = function () {
36199 var H = new Buffer(64)
36200
36201 function writeInt64BE (h, l, offset) {
36202 H.writeInt32BE(h, offset)
36203 H.writeInt32BE(l, offset + 4)
36204 }
36205
36206 writeInt64BE(this._ah, this._al, 0)
36207 writeInt64BE(this._bh, this._bl, 8)
36208 writeInt64BE(this._ch, this._cl, 16)
36209 writeInt64BE(this._dh, this._dl, 24)
36210 writeInt64BE(this._eh, this._el, 32)
36211 writeInt64BE(this._fh, this._fl, 40)
36212 writeInt64BE(this._gh, this._gl, 48)
36213 writeInt64BE(this._hh, this._hl, 56)
36214
36215 return H
36216 }
36217
36218 module.exports = Sha512
36219
36220 }).call(this,require("buffer").Buffer)
36221 },{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
36222 var isHexPrefixed = require('is-hex-prefixed');
36223
36224 /**
36225 * Removes '0x' from a given `String` is present
36226 * @param {String} str the string value
36227 * @return {String|Optional} a string by pass if necessary
36228 */
36229 module.exports = function stripHexPrefix(str) {
36230 if (typeof str !== 'string') {
36231 return str;
36232 }
36233
36234 return isHexPrefixed(str) ? str.slice(2) : str;
36235 }
36236
36237 },{"is-hex-prefixed":64}]},{},[31])(31)
36238 });</script>
36239 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
36240
36241 //// base.js
36242
36243 /** @fileOverview Javascript cryptography implementation.
36244 *
36245 * Crush to remove comments, shorten variable names and
36246 * generally reduce transmission size.
36247 *
36248 * @author Emily Stark
36249 * @author Mike Hamburg
36250 * @author Dan Boneh
36251 */
36252
36253 "use strict";
36254 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
36255 /*global document, window, escape, unescape, module, require, Uint32Array */
36256
36257 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
36258 var sjcl = {
36259 /** @namespace Symmetric ciphers. */
36260 cipher: {},
36261
36262 /** @namespace Hash functions. Right now only SHA256 is implemented. */
36263 hash: {},
36264
36265 /** @namespace Key exchange functions. Right now only SRP is implemented. */
36266 keyexchange: {},
36267
36268 /** @namespace Block cipher modes of operation. */
36269 mode: {},
36270
36271 /** @namespace Miscellaneous. HMAC and PBKDF2. */
36272 misc: {},
36273
36274 /**
36275 * @namespace Bit array encoders and decoders.
36276 *
36277 * @description
36278 * The members of this namespace are functions which translate between
36279 * SJCL's bitArrays and other objects (usually strings). Because it
36280 * isn't always clear which direction is encoding and which is decoding,
36281 * the method names are "fromBits" and "toBits".
36282 */
36283 codec: {},
36284
36285 /** @namespace Exceptions. */
36286 exception: {
36287 /** @constructor Ciphertext is corrupt. */
36288 corrupt: function(message) {
36289 this.toString = function() { return "CORRUPT: "+this.message; };
36290 this.message = message;
36291 },
36292
36293 /** @constructor Invalid parameter. */
36294 invalid: function(message) {
36295 this.toString = function() { return "INVALID: "+this.message; };
36296 this.message = message;
36297 },
36298
36299 /** @constructor Bug or missing feature in SJCL. @constructor */
36300 bug: function(message) {
36301 this.toString = function() { return "BUG: "+this.message; };
36302 this.message = message;
36303 },
36304
36305 /** @constructor Something isn't ready. */
36306 notReady: function(message) {
36307 this.toString = function() { return "NOT READY: "+this.message; };
36308 this.message = message;
36309 }
36310 }
36311 };
36312
36313 if(typeof module !== 'undefined' && module.exports){
36314 module.exports = sjcl;
36315 }
36316 if (typeof define === "function") {
36317 define([], function () {
36318 return sjcl;
36319 });
36320 }
36321
36322
36323 //// bitArray.js
36324
36325 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
36326 *
36327 * @author Emily Stark
36328 * @author Mike Hamburg
36329 * @author Dan Boneh
36330 */
36331
36332 /** @namespace Arrays of bits, encoded as arrays of Numbers.
36333 *
36334 * @description
36335 * <p>
36336 * These objects are the currency accepted by SJCL's crypto functions.
36337 * </p>
36338 *
36339 * <p>
36340 * Most of our crypto primitives operate on arrays of 4-byte words internally,
36341 * but many of them can take arguments that are not a multiple of 4 bytes.
36342 * This library encodes arrays of bits (whose size need not be a multiple of 8
36343 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
36344 * array of words, 32 bits at a time. Since the words are double-precision
36345 * floating point numbers, they fit some extra data. We use this (in a private,
36346 * possibly-changing manner) to encode the number of bits actually present
36347 * in the last word of the array.
36348 * </p>
36349 *
36350 * <p>
36351 * Because bitwise ops clear this out-of-band data, these arrays can be passed
36352 * to ciphers like AES which want arrays of words.
36353 * </p>
36354 */
36355 sjcl.bitArray = {
36356 /**
36357 * Array slices in units of bits.
36358 * @param {bitArray} a The array to slice.
36359 * @param {Number} bstart The offset to the start of the slice, in bits.
36360 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
36361 * slice until the end of the array.
36362 * @return {bitArray} The requested slice.
36363 */
36364 bitSlice: function (a, bstart, bend) {
36365 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
36366 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
36367 },
36368
36369 /**
36370 * Extract a number packed into a bit array.
36371 * @param {bitArray} a The array to slice.
36372 * @param {Number} bstart The offset to the start of the slice, in bits.
36373 * @param {Number} length The length of the number to extract.
36374 * @return {Number} The requested slice.
36375 */
36376 extract: function(a, bstart, blength) {
36377 // FIXME: this Math.floor is not necessary at all, but for some reason
36378 // seems to suppress a bug in the Chromium JIT.
36379 var x, sh = Math.floor((-bstart-blength) & 31);
36380 if ((bstart + blength - 1 ^ bstart) & -32) {
36381 // it crosses a boundary
36382 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
36383 } else {
36384 // within a single word
36385 x = a[bstart/32|0] >>> sh;
36386 }
36387 return x & ((1<<blength) - 1);
36388 },
36389
36390 /**
36391 * Concatenate two bit arrays.
36392 * @param {bitArray} a1 The first array.
36393 * @param {bitArray} a2 The second array.
36394 * @return {bitArray} The concatenation of a1 and a2.
36395 */
36396 concat: function (a1, a2) {
36397 if (a1.length === 0 || a2.length === 0) {
36398 return a1.concat(a2);
36399 }
36400
36401 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
36402 if (shift === 32) {
36403 return a1.concat(a2);
36404 } else {
36405 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
36406 }
36407 },
36408
36409 /**
36410 * Find the length of an array of bits.
36411 * @param {bitArray} a The array.
36412 * @return {Number} The length of a, in bits.
36413 */
36414 bitLength: function (a) {
36415 var l = a.length, x;
36416 if (l === 0) { return 0; }
36417 x = a[l - 1];
36418 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
36419 },
36420
36421 /**
36422 * Truncate an array.
36423 * @param {bitArray} a The array.
36424 * @param {Number} len The length to truncate to, in bits.
36425 * @return {bitArray} A new array, truncated to len bits.
36426 */
36427 clamp: function (a, len) {
36428 if (a.length * 32 < len) { return a; }
36429 a = a.slice(0, Math.ceil(len / 32));
36430 var l = a.length;
36431 len = len & 31;
36432 if (l > 0 && len) {
36433 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
36434 }
36435 return a;
36436 },
36437
36438 /**
36439 * Make a partial word for a bit array.
36440 * @param {Number} len The number of bits in the word.
36441 * @param {Number} x The bits.
36442 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
36443 * @return {Number} The partial word.
36444 */
36445 partial: function (len, x, _end) {
36446 if (len === 32) { return x; }
36447 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
36448 },
36449
36450 /**
36451 * Get the number of bits used by a partial word.
36452 * @param {Number} x The partial word.
36453 * @return {Number} The number of bits used by the partial word.
36454 */
36455 getPartial: function (x) {
36456 return Math.round(x/0x10000000000) || 32;
36457 },
36458
36459 /**
36460 * Compare two arrays for equality in a predictable amount of time.
36461 * @param {bitArray} a The first array.
36462 * @param {bitArray} b The second array.
36463 * @return {boolean} true if a == b; false otherwise.
36464 */
36465 equal: function (a, b) {
36466 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
36467 return false;
36468 }
36469 var x = 0, i;
36470 for (i=0; i<a.length; i++) {
36471 x |= a[i]^b[i];
36472 }
36473 return (x === 0);
36474 },
36475
36476 /** Shift an array right.
36477 * @param {bitArray} a The array to shift.
36478 * @param {Number} shift The number of bits to shift.
36479 * @param {Number} [carry=0] A byte to carry in
36480 * @param {bitArray} [out=[]] An array to prepend to the output.
36481 * @private
36482 */
36483 _shiftRight: function (a, shift, carry, out) {
36484 var i, last2=0, shift2;
36485 if (out === undefined) { out = []; }
36486
36487 for (; shift >= 32; shift -= 32) {
36488 out.push(carry);
36489 carry = 0;
36490 }
36491 if (shift === 0) {
36492 return out.concat(a);
36493 }
36494
36495 for (i=0; i<a.length; i++) {
36496 out.push(carry | a[i]>>>shift);
36497 carry = a[i] << (32-shift);
36498 }
36499 last2 = a.length ? a[a.length-1] : 0;
36500 shift2 = sjcl.bitArray.getPartial(last2);
36501 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
36502 return out;
36503 },
36504
36505 /** xor a block of 4 words together.
36506 * @private
36507 */
36508 _xor4: function(x,y) {
36509 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
36510 },
36511
36512 /** byteswap a word array inplace.
36513 * (does not handle partial words)
36514 * @param {sjcl.bitArray} a word array
36515 * @return {sjcl.bitArray} byteswapped array
36516 */
36517 byteswapM: function(a) {
36518 var i, v, m = 0xff00;
36519 for (i = 0; i < a.length; ++i) {
36520 v = a[i];
36521 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
36522 }
36523 return a;
36524 }
36525 };
36526
36527
36528 //// codecString.js
36529
36530 /** @fileOverview Bit array codec implementations.
36531 *
36532 * @author Emily Stark
36533 * @author Mike Hamburg
36534 * @author Dan Boneh
36535 */
36536
36537 /** @namespace UTF-8 strings */
36538 sjcl.codec.utf8String = {
36539 /** Convert from a bitArray to a UTF-8 string. */
36540 fromBits: function (arr) {
36541 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
36542 for (i=0; i<bl/8; i++) {
36543 if ((i&3) === 0) {
36544 tmp = arr[i/4];
36545 }
36546 out += String.fromCharCode(tmp >>> 24);
36547 tmp <<= 8;
36548 }
36549 return decodeURIComponent(escape(out));
36550 },
36551
36552 /** Convert from a UTF-8 string to a bitArray. */
36553 toBits: function (str) {
36554 str = unescape(encodeURIComponent(str));
36555 var out = [], i, tmp=0;
36556 for (i=0; i<str.length; i++) {
36557 tmp = tmp << 8 | str.charCodeAt(i);
36558 if ((i&3) === 3) {
36559 out.push(tmp);
36560 tmp = 0;
36561 }
36562 }
36563 if (i&3) {
36564 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
36565 }
36566 return out;
36567 }
36568 };
36569
36570
36571 //// codecHex.js
36572
36573 /** @fileOverview Bit array codec implementations.
36574 *
36575 * @author Emily Stark
36576 * @author Mike Hamburg
36577 * @author Dan Boneh
36578 */
36579
36580 /** @namespace Hexadecimal */
36581 sjcl.codec.hex = {
36582 /** Convert from a bitArray to a hex string. */
36583 fromBits: function (arr) {
36584 var out = "", i;
36585 for (i=0; i<arr.length; i++) {
36586 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
36587 }
36588 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
36589 },
36590 /** Convert from a hex string to a bitArray. */
36591 toBits: function (str) {
36592 var i, out=[], len;
36593 str = str.replace(/\s|0x/g, "");
36594 len = str.length;
36595 str = str + "00000000";
36596 for (i=0; i<str.length; i+=8) {
36597 out.push(parseInt(str.substr(i,8),16)^0);
36598 }
36599 return sjcl.bitArray.clamp(out, len*4);
36600 }
36601 };
36602
36603
36604 //// sha512.js
36605
36606 /** @fileOverview Javascript SHA-512 implementation.
36607 *
36608 * This implementation was written for CryptoJS by Jeff Mott and adapted for
36609 * SJCL by Stefan Thomas.
36610 *
36611 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
36612 * Released with New BSD License
36613 *
36614 * @author Emily Stark
36615 * @author Mike Hamburg
36616 * @author Dan Boneh
36617 * @author Jeff Mott
36618 * @author Stefan Thomas
36619 */
36620
36621 /**
36622 * Context for a SHA-512 operation in progress.
36623 * @constructor
36624 * @class Secure Hash Algorithm, 512 bits.
36625 */
36626 sjcl.hash.sha512 = function (hash) {
36627 if (!this._key[0]) { this._precompute(); }
36628 if (hash) {
36629 this._h = hash._h.slice(0);
36630 this._buffer = hash._buffer.slice(0);
36631 this._length = hash._length;
36632 } else {
36633 this.reset();
36634 }
36635 };
36636
36637 /**
36638 * Hash a string or an array of words.
36639 * @static
36640 * @param {bitArray|String} data the data to hash.
36641 * @return {bitArray} The hash value, an array of 16 big-endian words.
36642 */
36643 sjcl.hash.sha512.hash = function (data) {
36644 return (new sjcl.hash.sha512()).update(data).finalize();
36645 };
36646
36647 sjcl.hash.sha512.prototype = {
36648 /**
36649 * The hash's block size, in bits.
36650 * @constant
36651 */
36652 blockSize: 1024,
36653
36654 /**
36655 * Reset the hash state.
36656 * @return this
36657 */
36658 reset:function () {
36659 this._h = this._init.slice(0);
36660 this._buffer = [];
36661 this._length = 0;
36662 return this;
36663 },
36664
36665 /**
36666 * Input several words to the hash.
36667 * @param {bitArray|String} data the data to hash.
36668 * @return this
36669 */
36670 update: function (data) {
36671 if (typeof data === "string") {
36672 data = sjcl.codec.utf8String.toBits(data);
36673 }
36674 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
36675 ol = this._length,
36676 nl = this._length = ol + sjcl.bitArray.bitLength(data);
36677 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
36678 this._block(b.splice(0,32));
36679 }
36680 return this;
36681 },
36682
36683 /**
36684 * Complete hashing and output the hash value.
36685 * @return {bitArray} The hash value, an array of 16 big-endian words.
36686 */
36687 finalize:function () {
36688 var i, b = this._buffer, h = this._h;
36689
36690 // Round out and push the buffer
36691 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
36692
36693 // Round out the buffer to a multiple of 32 words, less the 4 length words.
36694 for (i = b.length + 4; i & 31; i++) {
36695 b.push(0);
36696 }
36697
36698 // append the length
36699 b.push(0);
36700 b.push(0);
36701 b.push(Math.floor(this._length / 0x100000000));
36702 b.push(this._length | 0);
36703
36704 while (b.length) {
36705 this._block(b.splice(0,32));
36706 }
36707
36708 this.reset();
36709 return h;
36710 },
36711
36712 /**
36713 * The SHA-512 initialization vector, to be precomputed.
36714 * @private
36715 */
36716 _init:[],
36717
36718 /**
36719 * Least significant 24 bits of SHA512 initialization values.
36720 *
36721 * Javascript only has 53 bits of precision, so we compute the 40 most
36722 * significant bits and add the remaining 24 bits as constants.
36723 *
36724 * @private
36725 */
36726 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
36727
36728 /*
36729 _init:
36730 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
36731 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
36732 */
36733
36734 /**
36735 * The SHA-512 hash key, to be precomputed.
36736 * @private
36737 */
36738 _key:[],
36739
36740 /**
36741 * Least significant 24 bits of SHA512 key values.
36742 * @private
36743 */
36744 _keyr:
36745 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
36746 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
36747 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
36748 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
36749 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
36750 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
36751 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
36752 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
36753 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
36754 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
36755
36756 /*
36757 _key:
36758 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36759 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36760 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36761 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36762 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36763 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36764 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36765 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36766 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36767 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36768 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36769 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36770 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36771 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36772 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36773 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36774 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36775 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36776 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36777 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
36778 */
36779
36780 /**
36781 * Function to precompute _init and _key.
36782 * @private
36783 */
36784 _precompute: function () {
36785 // XXX: This code is for precomputing the SHA256 constants, change for
36786 // SHA512 and re-enable.
36787 var i = 0, prime = 2, factor;
36788
36789 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
36790 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
36791
36792 outer: for (; i<80; prime++) {
36793 for (factor=2; factor*factor <= prime; factor++) {
36794 if (prime % factor === 0) {
36795 // not a prime
36796 continue outer;
36797 }
36798 }
36799
36800 if (i<8) {
36801 this._init[i*2] = frac(Math.pow(prime, 1/2));
36802 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
36803 }
36804 this._key[i*2] = frac(Math.pow(prime, 1/3));
36805 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
36806 i++;
36807 }
36808 },
36809
36810 /**
36811 * Perform one cycle of SHA-512.
36812 * @param {bitArray} words one block of words.
36813 * @private
36814 */
36815 _block:function (words) {
36816 var i, wrh, wrl,
36817 w = words.slice(0),
36818 h = this._h,
36819 k = this._key,
36820 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
36821 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
36822 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
36823 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
36824
36825 // Working variables
36826 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
36827 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
36828 eh = h4h, el = h4l, fh = h5h, fl = h5l,
36829 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
36830
36831 for (i=0; i<80; i++) {
36832 // load up the input word for this round
36833 if (i<16) {
36834 wrh = w[i * 2];
36835 wrl = w[i * 2 + 1];
36836 } else {
36837 // Gamma0
36838 var gamma0xh = w[(i-15) * 2];
36839 var gamma0xl = w[(i-15) * 2 + 1];
36840 var gamma0h =
36841 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
36842 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
36843 (gamma0xh >>> 7);
36844 var gamma0l =
36845 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
36846 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
36847 ((gamma0xh << 25) | (gamma0xl >>> 7));
36848
36849 // Gamma1
36850 var gamma1xh = w[(i-2) * 2];
36851 var gamma1xl = w[(i-2) * 2 + 1];
36852 var gamma1h =
36853 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
36854 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
36855 (gamma1xh >>> 6);
36856 var gamma1l =
36857 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
36858 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
36859 ((gamma1xh << 26) | (gamma1xl >>> 6));
36860
36861 // Shortcuts
36862 var wr7h = w[(i-7) * 2];
36863 var wr7l = w[(i-7) * 2 + 1];
36864
36865 var wr16h = w[(i-16) * 2];
36866 var wr16l = w[(i-16) * 2 + 1];
36867
36868 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
36869 wrl = gamma0l + wr7l;
36870 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
36871 wrl += gamma1l;
36872 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
36873 wrl += wr16l;
36874 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
36875 }
36876
36877 w[i*2] = wrh |= 0;
36878 w[i*2 + 1] = wrl |= 0;
36879
36880 // Ch
36881 var chh = (eh & fh) ^ (~eh & gh);
36882 var chl = (el & fl) ^ (~el & gl);
36883
36884 // Maj
36885 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
36886 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
36887
36888 // Sigma0
36889 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
36890 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
36891
36892 // Sigma1
36893 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
36894 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
36895
36896 // K(round)
36897 var krh = k[i*2];
36898 var krl = k[i*2+1];
36899
36900 // t1 = h + sigma1 + ch + K(round) + W(round)
36901 var t1l = hl + sigma1l;
36902 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
36903 t1l += chl;
36904 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
36905 t1l += krl;
36906 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
36907 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
36908 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
36909
36910 // t2 = sigma0 + maj
36911 var t2l = sigma0l + majl;
36912 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
36913
36914 // Update working variables
36915 hh = gh;
36916 hl = gl;
36917 gh = fh;
36918 gl = fl;
36919 fh = eh;
36920 fl = el;
36921 el = (dl + t1l) | 0;
36922 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
36923 dh = ch;
36924 dl = cl;
36925 ch = bh;
36926 cl = bl;
36927 bh = ah;
36928 bl = al;
36929 al = (t1l + t2l) | 0;
36930 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
36931 }
36932
36933 // Intermediate hash
36934 h0l = h[1] = (h0l + al) | 0;
36935 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
36936 h1l = h[3] = (h1l + bl) | 0;
36937 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
36938 h2l = h[5] = (h2l + cl) | 0;
36939 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
36940 h3l = h[7] = (h3l + dl) | 0;
36941 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
36942 h4l = h[9] = (h4l + el) | 0;
36943 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
36944 h5l = h[11] = (h5l + fl) | 0;
36945 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
36946 h6l = h[13] = (h6l + gl) | 0;
36947 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
36948 h7l = h[15] = (h7l + hl) | 0;
36949 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
36950 }
36951 };
36952
36953
36954 //// hmac.js
36955
36956 /** @fileOverview HMAC implementation.
36957 *
36958 * @author Emily Stark
36959 * @author Mike Hamburg
36960 * @author Dan Boneh
36961 */
36962
36963 /** HMAC with the specified hash function.
36964 * @constructor
36965 * @param {bitArray} key the key for HMAC.
36966 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
36967 */
36968 sjcl.misc.hmac = function (key, Hash) {
36969 this._hash = Hash = Hash || sjcl.hash.sha256;
36970 var exKey = [[],[]], i,
36971 bs = Hash.prototype.blockSize / 32;
36972 this._baseHash = [new Hash(), new Hash()];
36973
36974 if (key.length > bs) {
36975 key = Hash.hash(key);
36976 }
36977
36978 for (i=0; i<bs; i++) {
36979 exKey[0][i] = key[i]^0x36363636;
36980 exKey[1][i] = key[i]^0x5C5C5C5C;
36981 }
36982
36983 this._baseHash[0].update(exKey[0]);
36984 this._baseHash[1].update(exKey[1]);
36985 this._resultHash = new Hash(this._baseHash[0]);
36986 };
36987
36988 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
36989 * @param {bitArray|String} data The data to mac.
36990 */
36991 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
36992 if (!this._updated) {
36993 this.update(data);
36994 return this.digest(data);
36995 } else {
36996 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
36997 }
36998 };
36999
37000 sjcl.misc.hmac.prototype.reset = function () {
37001 this._resultHash = new this._hash(this._baseHash[0]);
37002 this._updated = false;
37003 };
37004
37005 sjcl.misc.hmac.prototype.update = function (data) {
37006 this._updated = true;
37007 this._resultHash.update(data);
37008 };
37009
37010 sjcl.misc.hmac.prototype.digest = function () {
37011 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37012
37013 this.reset();
37014
37015 return result;
37016 };
37017
37018
37019 //// pbkdf2.js
37020
37021
37022 /** @fileOverview Password-based key-derivation function, version 2.0.
37023 *
37024 * @author Emily Stark
37025 * @author Mike Hamburg
37026 * @author Dan Boneh
37027 */
37028
37029 /** Password-Based Key-Derivation Function, version 2.0.
37030 *
37031 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37032 *
37033 * This is the method specified by RSA's PKCS #5 standard.
37034 *
37035 * @param {bitArray|String} password The password.
37036 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37037 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37038 * @param {Number} [length] The length of the derived key. Defaults to the
37039 output size of the hash function.
37040 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37041 * @return {bitArray} the derived key.
37042 */
37043 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37044 count = count || 1000;
37045
37046 if (length < 0 || count < 0) {
37047 throw sjcl.exception.invalid("invalid params to pbkdf2");
37048 }
37049
37050 if (typeof password === "string") {
37051 password = sjcl.codec.utf8String.toBits(password);
37052 }
37053
37054 if (typeof salt === "string") {
37055 salt = sjcl.codec.utf8String.toBits(salt);
37056 }
37057
37058 Prff = Prff || sjcl.misc.hmac;
37059
37060 var prf = new Prff(password),
37061 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37062
37063 for (k = 1; 32 * out.length < (length || 1); k++) {
37064 u = ui = prf.encrypt(b.concat(salt,[k]));
37065
37066 for (i=1; i<count; i++) {
37067 ui = prf.encrypt(ui);
37068 for (j=0; j<ui.length; j++) {
37069 u[j] ^= ui[j];
37070 }
37071 }
37072
37073 out = out.concat(u);
37074 }
37075
37076 if (length) { out = b.clamp(out, length); }
37077
37078 return out;
37079 };
37080
37081
37082 //// sha256.js
37083
37084 /** @fileOverview Javascript SHA-256 implementation.
37085 *
37086 * An older version of this implementation is available in the public
37087 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37088 * Stanford University 2008-2010 and BSD-licensed for liability
37089 * reasons.
37090 *
37091 * Special thanks to Aldo Cortesi for pointing out several bugs in
37092 * this code.
37093 *
37094 * @author Emily Stark
37095 * @author Mike Hamburg
37096 * @author Dan Boneh
37097 */
37098
37099 /**
37100 * Context for a SHA-256 operation in progress.
37101 * @constructor
37102 * @class Secure Hash Algorithm, 256 bits.
37103 */
37104 sjcl.hash.sha256 = function (hash) {
37105 if (!this._key[0]) { this._precompute(); }
37106 if (hash) {
37107 this._h = hash._h.slice(0);
37108 this._buffer = hash._buffer.slice(0);
37109 this._length = hash._length;
37110 } else {
37111 this.reset();
37112 }
37113 };
37114
37115 /**
37116 * Hash a string or an array of words.
37117 * @static
37118 * @param {bitArray|String} data the data to hash.
37119 * @return {bitArray} The hash value, an array of 16 big-endian words.
37120 */
37121 sjcl.hash.sha256.hash = function (data) {
37122 return (new sjcl.hash.sha256()).update(data).finalize();
37123 };
37124
37125 sjcl.hash.sha256.prototype = {
37126 /**
37127 * The hash's block size, in bits.
37128 * @constant
37129 */
37130 blockSize: 512,
37131
37132 /**
37133 * Reset the hash state.
37134 * @return this
37135 */
37136 reset:function () {
37137 this._h = this._init.slice(0);
37138 this._buffer = [];
37139 this._length = 0;
37140 return this;
37141 },
37142
37143 /**
37144 * Input several words to the hash.
37145 * @param {bitArray|String} data the data to hash.
37146 * @return this
37147 */
37148 update: function (data) {
37149 if (typeof data === "string") {
37150 data = sjcl.codec.utf8String.toBits(data);
37151 }
37152 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37153 ol = this._length,
37154 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37155 for (i = 512+ol & -512; i <= nl; i+= 512) {
37156 this._block(b.splice(0,16));
37157 }
37158 return this;
37159 },
37160
37161 /**
37162 * Complete hashing and output the hash value.
37163 * @return {bitArray} The hash value, an array of 8 big-endian words.
37164 */
37165 finalize:function () {
37166 var i, b = this._buffer, h = this._h;
37167
37168 // Round out and push the buffer
37169 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37170
37171 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37172 for (i = b.length + 2; i & 15; i++) {
37173 b.push(0);
37174 }
37175
37176 // append the length
37177 b.push(Math.floor(this._length / 0x100000000));
37178 b.push(this._length | 0);
37179
37180 while (b.length) {
37181 this._block(b.splice(0,16));
37182 }
37183
37184 this.reset();
37185 return h;
37186 },
37187
37188 /**
37189 * The SHA-256 initialization vector, to be precomputed.
37190 * @private
37191 */
37192 _init:[],
37193 /*
37194 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37195 */
37196
37197 /**
37198 * The SHA-256 hash key, to be precomputed.
37199 * @private
37200 */
37201 _key:[],
37202 /*
37203 _key:
37204 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37205 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37206 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37207 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37208 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37209 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37210 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37211 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
37212 */
37213
37214
37215 /**
37216 * Function to precompute _init and _key.
37217 * @private
37218 */
37219 _precompute: function () {
37220 var i = 0, prime = 2, factor;
37221
37222 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37223
37224 outer: for (; i<64; prime++) {
37225 for (factor=2; factor*factor <= prime; factor++) {
37226 if (prime % factor === 0) {
37227 // not a prime
37228 continue outer;
37229 }
37230 }
37231
37232 if (i<8) {
37233 this._init[i] = frac(Math.pow(prime, 1/2));
37234 }
37235 this._key[i] = frac(Math.pow(prime, 1/3));
37236 i++;
37237 }
37238 },
37239
37240 /**
37241 * Perform one cycle of SHA-256.
37242 * @param {bitArray} words one block of words.
37243 * @private
37244 */
37245 _block:function (words) {
37246 var i, tmp, a, b,
37247 w = words.slice(0),
37248 h = this._h,
37249 k = this._key,
37250 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
37251 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
37252
37253 /* Rationale for placement of |0 :
37254 * If a value can overflow is original 32 bits by a factor of more than a few
37255 * million (2^23 ish), there is a possibility that it might overflow the
37256 * 53-bit mantissa and lose precision.
37257 *
37258 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
37259 * propagates around the loop, and on the hash state h[]. I don't believe
37260 * that the clamps on h4 and on h0 are strictly necessary, but it's close
37261 * (for h4 anyway), and better safe than sorry.
37262 *
37263 * The clamps on h[] are necessary for the output to be correct even in the
37264 * common case and for short inputs.
37265 */
37266 for (i=0; i<64; i++) {
37267 // load up the input word for this round
37268 if (i<16) {
37269 tmp = w[i];
37270 } else {
37271 a = w[(i+1 ) & 15];
37272 b = w[(i+14) & 15];
37273 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
37274 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
37275 w[i&15] + w[(i+9) & 15]) | 0;
37276 }
37277
37278 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
37279
37280 // shift register
37281 h7 = h6; h6 = h5; h5 = h4;
37282 h4 = h3 + tmp | 0;
37283 h3 = h2; h2 = h1; h1 = h0;
37284
37285 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
37286 }
37287
37288 h[0] = h[0]+h0 | 0;
37289 h[1] = h[1]+h1 | 0;
37290 h[2] = h[2]+h2 | 0;
37291 h[3] = h[3]+h3 | 0;
37292 h[4] = h[4]+h4 | 0;
37293 h[5] = h[5]+h5 | 0;
37294 h[6] = h[6]+h6 | 0;
37295 h[7] = h[7]+h7 | 0;
37296 }
37297 };
37298 </script>
37299 <script>// An extremely basic translation library
37300 //
37301 // Example usage:
37302 //
37303 // Set some html to be translated. Do this using the 'data-translate' attribute:
37304 //
37305 // <div data-translate>Test</div>
37306 // <div data-translate-html><em>keep em tag</em></div>
37307 // <input data-translate-placeholder placeholder="Example placeholder">
37308 // <span data-translate-title title="Example title"></span>
37309 //
37310 // Obtain all the phrases to be translated via js debug console:
37311 //
37312 // Translate.phrasesAsJson();
37313 //
37314 // Use that template to translate the phrases into another language.
37315 // Leave the key the same. Change the value to the new language.
37316 //
37317 // Create a js file to load the new phrases. In this example for Spanish,
37318 // es.js will contain the following code:
37319 //
37320 // Translate.loadForeignPhrases("es", {
37321 // "Test": "Test in Spanish",
37322 // "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
37323 // "Example placeholder": "Example placeholder in Spanish"
37324 // "Example title": "Example title in Spanish"
37325 // });
37326 //
37327 // In your UI put a listener for clicking on the Spanish button:
37328 //
37329 // mySpanishButton.addEventListener("click", function() {
37330 // Translate.setLanguage("es");
37331 // });
37332 // myEnglishButton.addEventListener("click", function() {
37333 // Translate.setLanguage("en");
37334 // });
37335
37336 Translate = new (function() {
37337
37338 var defaultLanguage = "en";
37339
37340 var allPhrases = {};
37341 allPhrases[defaultLanguage] = {};
37342
37343 // Node types
37344
37345 var text = {
37346 selector: "[data-translate]",
37347 getKey: function() {
37348 return this.textContent.trim().replace(/\s+/g, " ");
37349 },
37350 setPhrase: function(p) {
37351 this.textContent = p;
37352 },
37353 }
37354
37355 var html = {
37356 selector: "[data-translate-html]",
37357 getKey: function() {
37358 return this.innerHTML.trim().replace(/\s+/g, " ");
37359 },
37360 setPhrase: function(p) {
37361 this.innerHTML = p;
37362 },
37363 }
37364
37365 var placeholder = {
37366 selector: "[data-translate-placeholder]",
37367 getKey: function() {
37368 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
37369 },
37370 setPhrase: function(p) {
37371 this.setAttribute("placeholder", p);
37372 },
37373 }
37374
37375 var title = {
37376 selector: "[data-translate-title]",
37377 getKey: function() {
37378 return this.getAttribute("title").trim().replace(/\s+/g, " ");
37379 },
37380 setPhrase: function(p) {
37381 this.setAttribute("title", p);
37382 },
37383 }
37384
37385 // Get elements to be translated
37386 var allEls = getEls(text)
37387 .concat(getEls(html))
37388 .concat(getEls(placeholder))
37389 .concat(getEls(title));
37390
37391 // Provides access to phrases from a non-default language.
37392 // See phrases_en.js for example usage.
37393 this.loadForeignPhrases = function(language, phrases) {
37394 allPhrases[language] = phrases;
37395 }
37396
37397 // Displays a different language, eg "en" or "fr"
37398 this.setLanguage = function(language) {
37399 for (var i=0; i<allEls.length; i++) {
37400 var el = allEls[i];
37401 var key = el.key;
37402 if (!(language in allPhrases)) {
37403 console.log(language + " not in allPhrases");
37404 return;
37405 }
37406 if (!(key in allPhrases[language])) {
37407 console.log(language + " does not contain phrase: " + key);
37408 return;
37409 }
37410 var phrase = allPhrases[language][key];
37411 el.setPhrase(phrase);
37412 }
37413 }
37414
37415 // Converts the phrases to a key-pair json file.
37416 // This is a good way to export phrases for use in translation tools.
37417 this.phrasesAsJson = function(language) {
37418 var keys = [];
37419 for (var i=0; i<allEls.length; i++) {
37420 var el = allEls[i];
37421 var key = el.key;
37422 keys.push(key);
37423 }
37424 keys.sort();
37425 var output = {};
37426 for (var i=0; i<keys.length; i++) {
37427 var key = keys[i];
37428 var translated = "";
37429 if (language in allPhrases && key in allPhrases[language]) {
37430 translated = allPhrases[language][key];
37431 }
37432 output[key] = translated;
37433 }
37434 return JSON.stringify(output, null, 2);
37435 }
37436
37437 function getEls(nodeType) {
37438 var nodes = document.querySelectorAll(nodeType.selector);
37439 var els = [];
37440 for (var i=0; i<nodes.length; i++) {
37441 var node = nodes[i];
37442 node.getKey = nodeType.getKey;
37443 node.setPhrase = nodeType.setPhrase;
37444 node.key = node.getKey();
37445 allPhrases[defaultLanguage][node.key] = node.key;
37446 els.push(node);
37447 }
37448 return els;
37449 }
37450
37451 })();
37452 </script>
37453 <script>Translate.loadForeignPhrases("en",
37454 {
37455 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
37456 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
37457 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
37458 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
37459 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
37460 "Account": "Account",
37461 "Address": "Address",
37462 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
37463 "BIP32 Derivation Path": "BIP32 Derivation Path",
37464 "BIP32 Extended Key": "BIP32 Extended Key",
37465 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
37466 "BIP32 Root Key": "BIP32 Root Key",
37467 "BIP39 Mnemonic": "BIP39 Mnemonic",
37468 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
37469 "BIP39 Seed": "BIP39 Seed",
37470 "Base 10": "Base 10",
37471 "Base 6": "Base 6",
37472 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
37473 "Binary": "Binary",
37474 "Bitcoin Core": "Bitcoin Core",
37475 "Bits Per Event": "Bits Per Event",
37476 "Block Explorers": "Block Explorers",
37477 "Can be used with": "Can be used with",
37478 "Card": "Card",
37479 "Coin": "Coin",
37480 "Dice": "Dice",
37481 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
37482 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
37483 "Entropy": "Entropy",
37484 "Entropy Type": "Entropy Type",
37485 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
37486 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
37487 "Event Count": "Event Count",
37488 "External / Internal": "External / Internal",
37489 "Filtered Entropy": "Filtered Entropy",
37490 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
37491 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
37492 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
37493 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
37494 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
37495 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
37496 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
37497 "Get the source code from the repository": "Get the source code from the repository",
37498 "Hex": "Hex",
37499 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
37500 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
37501 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
37502 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
37503 "Libraries": "Libraries",
37504 "Mnemonic Language": "Mnemonic Language",
37505 "Mnemonic Length": "Mnemonic Length",
37506 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
37507 "More info": "More info",
37508 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
37509 "Mycelium Wallet": "Mycelium Wallet",
37510 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
37511 "Offline Usage": "Offline Usage",
37512 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
37513 "Path": "Path",
37514 "Private Key": "Private Key",
37515 "Private Keys": "Private Keys",
37516 "Public Key": "Public Key",
37517 "Purpose": "Purpose",
37518 "Raw Binary": "Raw Binary",
37519 "Read more": "Read more",
37520 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
37521 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
37522 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
37523 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
37524 "Show": "Show",
37525 "Show more rows": "Show more rows",
37526 "Strength": "Strength",
37527 "Supply my own source of entropy": "Supply my own source of entropy",
37528 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
37529 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
37530 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
37531 "This project is 100% open-source code": "This project is 100% open-source code",
37532 "Toggle": "Toggle",
37533 "Total Bits": "Total Bits",
37534 "Use hardened addresses": "Use hardened addresses",
37535 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
37536 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
37537 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
37538 "Valid entropy values include:": "Valid entropy values include:",
37539 "Warning": "Warning",
37540 "Word Count": "Word Count",
37541 "You are not a good source of entropy.": "You are not a good source of entropy.",
37542 "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).": "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).",
37543 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
37544 "words": "words"
37545 }
37546 );
37547 </script>
37548 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37549 WORDLISTS["english"] = [
37550 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
37551 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
37552 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
37553 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
37554 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
37555 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
37556 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
37557 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
37558 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
37559 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
37560 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
37561 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
37562 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
37563 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
37564 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
37565 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
37566 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
37567 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
37568 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
37569 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
37570 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
37571 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
37572 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
37573 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
37574 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
37575 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
37576 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
37577 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
37578 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
37579 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
37580 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
37581 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
37582 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
37583 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
37584 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
37585 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
37586 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
37587 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
37588 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
37589 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
37590 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
37591 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
37592 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
37593 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
37594 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
37595 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
37596 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
37597 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
37598 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
37599 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
37600 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
37601 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
37602 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
37603 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
37604 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
37605 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
37606 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
37607 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
37608 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
37609 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
37610 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
37611 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
37612 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
37613 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
37614 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
37615 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
37616 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
37617 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
37618 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
37619 "film","filter","final","find","fine","finger","finish","fire","firm","first",
37620 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
37621 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
37622 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
37623 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
37624 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
37625 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
37626 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
37627 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
37628 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
37629 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
37630 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
37631 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
37632 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
37633 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
37634 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
37635 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
37636 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
37637 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
37638 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
37639 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
37640 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
37641 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
37642 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
37643 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
37644 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
37645 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
37646 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
37647 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
37648 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
37649 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
37650 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
37651 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
37652 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
37653 "liar","liberty","library","license","life","lift","light","like","limb","limit",
37654 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
37655 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
37656 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
37657 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
37658 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
37659 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
37660 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
37661 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
37662 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
37663 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
37664 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
37665 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
37666 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
37667 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
37668 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
37669 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
37670 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
37671 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
37672 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
37673 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
37674 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
37675 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
37676 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
37677 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
37678 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
37679 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
37680 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
37681 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
37682 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
37683 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
37684 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
37685 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
37686 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
37687 "prize","problem","process","produce","profit","program","project","promote","proof","property",
37688 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
37689 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
37690 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
37691 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
37692 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
37693 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
37694 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
37695 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
37696 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
37697 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
37698 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
37699 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
37700 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
37701 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
37702 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
37703 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
37704 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
37705 "scrub","sea","search","season","seat","second","secret","section","security","seed",
37706 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
37707 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
37708 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
37709 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
37710 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
37711 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
37712 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
37713 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
37714 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
37715 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
37716 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
37717 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
37718 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
37719 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
37720 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
37721 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
37722 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
37723 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
37724 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
37725 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
37726 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
37727 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
37728 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
37729 "thank","that","theme","then","theory","there","they","thing","this","thought",
37730 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
37731 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
37732 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
37733 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
37734 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
37735 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
37736 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
37737 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
37738 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
37739 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
37740 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
37741 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
37742 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
37743 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
37744 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
37745 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
37746 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
37747 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
37748 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
37749 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
37750 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
37751 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
37752 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
37753 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
37754 "yellow","you","young","youth","zebra","zero","zone","zoo"]
37755 </script>
37756 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37757 WORDLISTS["japanese"] = [
37758 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
37759 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
37760 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
37761 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
37762 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
37763 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
37764 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
37765 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
37766 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
37767 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
37768 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
37769 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
37770 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
37771 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
37772 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
37773 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
37774 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
37775 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
37776 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
37777 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
37778 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
37779 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
37780 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
37781 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
37782 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
37783 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
37784 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
37785 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
37786 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
37787 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
37788 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
37789 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
37790 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
37791 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
37792 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
37793 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
37794 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
37795 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
37796 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
37797 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
37798 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
37799 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
37800 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
37801 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
37802 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
37803 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
37804 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
37805 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
37806 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
37807 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
37808 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
37809 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
37810 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
37811 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
37812 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
37813 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
37814 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
37815 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
37816 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
37817 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
37818 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
37819 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
37820 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
37821 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
37822 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
37823 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
37824 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
37825 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
37826 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
37827 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
37828 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
37829 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
37830 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
37831 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
37832 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
37833 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
37834 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
37835 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
37836 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
37837 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
37838 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
37839 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
37840 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
37841 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
37842 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
37843 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
37844 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
37845 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
37846 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
37847 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
37848 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
37849 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
37850 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
37851 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
37852 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
37853 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
37854 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
37855 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
37856 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
37857 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
37858 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
37859 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
37860 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
37861 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
37862 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
37863 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
37864 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
37865 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
37866 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
37867 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
37868 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
37869 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
37870 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
37871 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
37872 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
37873 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
37874 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
37875 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
37876 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
37877 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
37878 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
37879 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
37880 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
37881 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
37882 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
37883 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
37884 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
37885 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
37886 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
37887 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
37888 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
37889 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
37890 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
37891 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
37892 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
37893 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
37894 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
37895 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
37896 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
37897 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
37898 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
37899 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
37900 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
37901 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
37902 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
37903 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
37904 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
37905 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
37906 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
37907 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
37908 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
37909 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
37910 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
37911 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
37912 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
37913 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
37914 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
37915 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
37916 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
37917 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
37918 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
37919 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
37920 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
37921 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
37922 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
37923 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
37924 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
37925 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
37926 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
37927 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
37928 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
37929 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
37930 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
37931 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
37932 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
37933 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
37934 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
37935 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
37936 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
37937 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
37938 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
37939 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
37940 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
37941 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
37942 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
37943 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
37944 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
37945 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
37946 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
37947 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
37948 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
37949 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
37950 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
37951 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
37952 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
37953 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
37954 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
37955 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
37956 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
37957 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
37958 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
37959 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
37960 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
37961 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
37962 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
37963 </script>
37964 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
37965 WORDLISTS["spanish"] = [
37966 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
37967 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
37968 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
37969 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
37970 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
37971 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
37972 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
37973 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
37974 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
37975 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
37976 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
37977 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
37978 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
37979 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
37980 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
37981 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
37982 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
37983 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
37984 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
37985 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
37986 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
37987 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
37988 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
37989 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
37990 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
37991 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
37992 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
37993 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
37994 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
37995 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
37996 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
37997 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
37998 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
37999 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
38000 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38001 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38002 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38003 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38004 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38005 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38006 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38007 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38008 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38009 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38010 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38011 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38012 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38013 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38014 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38015 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38016 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38017 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38018 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38019 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38020 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38021 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38022 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38023 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38024 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38025 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38026 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38027 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38028 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38029 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38030 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38031 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38032 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38033 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38034 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38035 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38036 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38037 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38038 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38039 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38040 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38041 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38042 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38043 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38044 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38045 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38046 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38047 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38048 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38049 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38050 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38051 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38052 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38053 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38054 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38055 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38056 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38057 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38058 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38059 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38060 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38061 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38062 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38063 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38064 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38065 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38066 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38067 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38068 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38069 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38070 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38071 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38072 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38073 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38074 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38075 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38076 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38077 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38078 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38079 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38080 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38081 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38082 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38083 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38084 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38085 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38086 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38087 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38088 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38089 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38090 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38091 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38092 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38093 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38094 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38095 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38096 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38097 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38098 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38099 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38100 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38101 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38102 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38103 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38104 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38105 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38106 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38107 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38108 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38109 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38110 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38111 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38112 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38113 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38114 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38115 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38116 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38117 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38118 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38119 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38120 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38121 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38122 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38123 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38124 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38125 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38126 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38127 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38128 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38129 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38130 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38131 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38132 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38133 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38134 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38135 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38136 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38137 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38138 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38139 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38140 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38141 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38142 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38143 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38144 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38145 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38146 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38147 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38148 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38149 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38150 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38151 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38152 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38153 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38154 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38155 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38156 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38157 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38158 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38159 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38160 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38161 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38162 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38163 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38164 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38165 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38166 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38167 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38168 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38169 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38170 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38171 </script>
38172 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38173 WORDLISTS["chinese_simplified"] = [
38174 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
38175 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
38176 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
38177 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
38178 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
38179 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
38180 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
38181 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
38182 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
38183 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
38184 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
38185 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38186 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
38187 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
38188 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
38189 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
38190 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
38191 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
38192 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
38193 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
38194 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
38195 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
38196 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
38197 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
38198 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
38199 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
38200 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
38201 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
38202 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
38203 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
38204 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
38205 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
38206 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
38207 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
38208 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
38209 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
38210 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
38211 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
38212 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
38213 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
38214 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
38215 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
38216 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
38217 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
38218 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
38219 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
38220 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
38221 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
38222 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
38223 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
38224 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
38225 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
38226 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
38227 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
38228 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
38229 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
38230 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
38231 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
38232 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
38233 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
38234 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
38235 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
38236 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
38237 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
38238 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
38239 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
38240 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
38241 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
38242 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
38243 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
38244 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
38245 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
38246 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
38247 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
38248 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
38249 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38250 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
38251 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
38252 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
38253 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
38254 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
38255 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
38256 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
38257 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
38258 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
38259 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
38260 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
38261 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
38262 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
38263 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
38264 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
38265 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
38266 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38267 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
38268 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
38269 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
38270 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
38271 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
38272 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
38273 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
38274 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
38275 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
38276 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
38277 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
38278 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
38279 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
38280 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
38281 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
38282 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38283 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38284 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
38285 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
38286 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
38287 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
38288 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
38289 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
38290 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
38291 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
38292 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
38293 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
38294 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
38295 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38296 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
38297 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
38298 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
38299 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
38300 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
38301 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
38302 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
38303 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
38304 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
38305 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
38306 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
38307 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
38308 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
38309 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
38310 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
38311 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
38312 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
38313 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
38314 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
38315 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
38316 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
38317 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
38318 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
38319 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
38320 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
38321 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
38322 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
38323 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
38324 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
38325 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
38326 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
38327 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
38328 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
38329 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
38330 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
38331 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
38332 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
38333 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
38334 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
38335 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
38336 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
38337 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
38338 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
38339 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
38340 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
38341 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
38342 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
38343 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
38344 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
38345 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
38346 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
38347 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
38348 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
38349 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
38350 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
38351 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
38352 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
38353 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
38354 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
38355 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
38356 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
38357 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
38358 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
38359 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
38360 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
38361 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
38362 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
38363 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
38364 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
38365 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
38366 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
38367 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
38368 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
38369 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
38370 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
38371 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
38372 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
38373 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
38374 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
38375 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
38376 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
38377 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
38378 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
38379 </script>
38380 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38381 WORDLISTS["chinese_traditional"] = [
38382 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
38383 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
38384 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
38385 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
38386 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
38387 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
38388 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
38389 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
38390 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
38391 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
38392 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
38393 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38394 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
38395 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
38396 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
38397 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
38398 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
38399 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
38400 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
38401 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
38402 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
38403 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
38404 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
38405 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
38406 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
38407 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
38408 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
38409 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
38410 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
38411 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
38412 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
38413 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
38414 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
38415 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
38416 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
38417 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
38418 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
38419 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
38420 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
38421 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
38422 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
38423 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
38424 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
38425 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
38426 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
38427 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
38428 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
38429 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
38430 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
38431 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
38432 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
38433 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
38434 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
38435 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
38436 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
38437 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
38438 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
38439 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
38440 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
38441 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
38442 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
38443 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
38444 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
38445 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
38446 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
38447 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
38448 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
38449 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
38450 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
38451 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
38452 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
38453 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
38454 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
38455 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
38456 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
38457 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38458 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
38459 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
38460 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
38461 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
38462 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
38463 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
38464 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
38465 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
38466 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
38467 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
38468 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
38469 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
38470 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
38471 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
38472 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
38473 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
38474 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38475 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
38476 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
38477 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
38478 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
38479 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
38480 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
38481 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
38482 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
38483 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
38484 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
38485 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
38486 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
38487 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
38488 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
38489 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
38490 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38491 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38492 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
38493 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
38494 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
38495 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
38496 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
38497 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
38498 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
38499 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
38500 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
38501 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
38502 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
38503 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38504 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
38505 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
38506 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
38507 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
38508 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
38509 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
38510 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
38511 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
38512 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
38513 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
38514 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
38515 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
38516 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
38517 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
38518 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
38519 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
38520 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
38521 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
38522 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
38523 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
38524 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
38525 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
38526 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
38527 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
38528 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
38529 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
38530 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
38531 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
38532 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
38533 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
38534 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
38535 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
38536 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
38537 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
38538 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
38539 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
38540 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
38541 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
38542 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
38543 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
38544 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
38545 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
38546 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
38547 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
38548 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
38549 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
38550 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
38551 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
38552 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
38553 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
38554 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
38555 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
38556 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
38557 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
38558 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
38559 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
38560 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
38561 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
38562 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
38563 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
38564 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
38565 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
38566 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
38567 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
38568 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
38569 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
38570 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
38571 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
38572 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
38573 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
38574 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
38575 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
38576 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
38577 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
38578 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
38579 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
38580 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
38581 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
38582 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
38583 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
38584 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
38585 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
38586 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
38587 </script>
38588 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38589 WORDLISTS["french"] = [
38590 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
38591 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
38592 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
38593 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
38594 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
38595 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
38596 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
38597 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
38598 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
38599 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
38600 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
38601 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
38602 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
38603 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
38604 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
38605 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
38606 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
38607 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
38608 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
38609 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
38610 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
38611 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
38612 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
38613 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
38614 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
38615 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
38616 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
38617 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
38618 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
38619 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
38620 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
38621 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
38622 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
38623 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
38624 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
38625 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
38626 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
38627 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
38628 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
38629 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
38630 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
38631 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
38632 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
38633 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
38634 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
38635 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
38636 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
38637 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
38638 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
38639 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
38640 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
38641 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
38642 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
38643 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
38644 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
38645 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
38646 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
38647 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
38648 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
38649 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
38650 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
38651 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
38652 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
38653 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
38654 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
38655 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
38656 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
38657 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
38658 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
38659 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
38660 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
38661 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
38662 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
38663 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
38664 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
38665 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
38666 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
38667 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
38668 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
38669 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
38670 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
38671 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
38672 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
38673 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
38674 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
38675 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
38676 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
38677 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
38678 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
38679 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
38680 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
38681 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
38682 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
38683 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
38684 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
38685 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
38686 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
38687 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
38688 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
38689 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
38690 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
38691 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
38692 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
38693 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
38694 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
38695 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
38696 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
38697 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
38698 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
38699 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
38700 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
38701 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
38702 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
38703 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
38704 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
38705 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
38706 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
38707 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
38708 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
38709 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
38710 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
38711 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
38712 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
38713 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
38714 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
38715 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
38716 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
38717 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
38718 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
38719 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
38720 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
38721 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
38722 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
38723 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
38724 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
38725 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
38726 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
38727 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
38728 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
38729 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
38730 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
38731 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
38732 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
38733 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
38734 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
38735 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
38736 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
38737 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
38738 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
38739 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
38740 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
38741 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
38742 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
38743 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
38744 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
38745 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
38746 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
38747 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
38748 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
38749 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
38750 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
38751 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
38752 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
38753 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
38754 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
38755 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
38756 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
38757 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
38758 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
38759 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
38760 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
38761 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
38762 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
38763 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
38764 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
38765 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
38766 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
38767 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
38768 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
38769 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
38770 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
38771 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
38772 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
38773 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
38774 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
38775 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
38776 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
38777 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
38778 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
38779 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
38780 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
38781 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
38782 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
38783 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
38784 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
38785 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
38786 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
38787 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
38788 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
38789 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
38790 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
38791 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
38792 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
38793 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
38794 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
38795 </script>
38796 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38797 WORDLISTS["italian"] = [
38798 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
38799 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
38800 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
38801 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
38802 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
38803 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
38804 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
38805 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
38806 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
38807 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
38808 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
38809 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
38810 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
38811 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
38812 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
38813 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
38814 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
38815 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
38816 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
38817 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
38818 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
38819 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
38820 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
38821 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
38822 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
38823 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
38824 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
38825 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
38826 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
38827 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
38828 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
38829 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
38830 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
38831 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
38832 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
38833 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
38834 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
38835 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
38836 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
38837 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
38838 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
38839 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
38840 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
38841 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
38842 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
38843 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
38844 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
38845 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
38846 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
38847 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
38848 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
38849 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
38850 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
38851 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
38852 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
38853 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
38854 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
38855 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
38856 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
38857 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
38858 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
38859 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
38860 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
38861 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
38862 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
38863 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
38864 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
38865 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
38866 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
38867 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
38868 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
38869 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
38870 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
38871 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
38872 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
38873 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
38874 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
38875 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
38876 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
38877 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
38878 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
38879 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
38880 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
38881 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
38882 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
38883 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
38884 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
38885 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
38886 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
38887 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
38888 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
38889 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
38890 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
38891 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
38892 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
38893 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
38894 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
38895 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
38896 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
38897 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
38898 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
38899 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
38900 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
38901 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
38902 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
38903 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
38904 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
38905 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
38906 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
38907 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
38908 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
38909 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
38910 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
38911 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
38912 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
38913 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
38914 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
38915 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
38916 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
38917 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
38918 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
38919 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
38920 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
38921 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
38922 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
38923 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
38924 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
38925 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
38926 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
38927 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
38928 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
38929 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
38930 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
38931 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
38932 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
38933 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
38934 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
38935 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
38936 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
38937 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
38938 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
38939 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
38940 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
38941 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
38942 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
38943 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
38944 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
38945 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
38946 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
38947 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
38948 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
38949 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
38950 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
38951 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
38952 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
38953 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
38954 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
38955 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
38956 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
38957 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
38958 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
38959 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
38960 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
38961 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
38962 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
38963 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
38964 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
38965 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
38966 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
38967 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
38968 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
38969 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
38970 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
38971 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
38972 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
38973 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
38974 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
38975 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
38976 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
38977 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
38978 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
38979 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
38980 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
38981 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
38982 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
38983 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
38984 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
38985 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
38986 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
38987 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
38988 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
38989 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
38990 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
38991 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
38992 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
38993 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
38994 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
38995 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
38996 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
38997 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
38998 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
38999 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
39000 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39001 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39002 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
39003 </script>
39004 <script>/*
39005 * Copyright (c) 2013 Pavol Rusnak
39006 *
39007 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39008 * this software and associated documentation files (the "Software"), to deal in
39009 * the Software without restriction, including without limitation the rights to
39010 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39011 * of the Software, and to permit persons to whom the Software is furnished to do
39012 * so, subject to the following conditions:
39013 *
39014 * The above copyright notice and this permission notice shall be included in all
39015 * copies or substantial portions of the Software.
39016 *
39017 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39018 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39019 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39020 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39021 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39022 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39023 */
39024
39025 /*
39026 * Javascript port from python by Ian Coleman
39027 *
39028 * Requires code from sjcl
39029 * https://github.com/bitwiseshiftleft/sjcl
39030 */
39031
39032 var Mnemonic = function(language) {
39033
39034 var PBKDF2_ROUNDS = 2048;
39035 var RADIX = 2048;
39036
39037 var self = this;
39038 var wordlist = [];
39039
39040 var hmacSHA512 = function(key) {
39041 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39042 this.encrypt = function() {
39043 return hasher.encrypt.apply(hasher, arguments);
39044 };
39045 };
39046
39047 function init() {
39048 wordlist = WORDLISTS[language];
39049 if (wordlist.length != RADIX) {
39050 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39051 throw err;
39052 }
39053 }
39054
39055 self.generate = function(strength) {
39056 strength = strength || 128;
39057 var r = strength % 32;
39058 if (r > 0) {
39059 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39060 }
39061 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39062 if (!hasStrongCrypto) {
39063 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39064 }
39065 var buffer = new Uint8Array(strength / 8);
39066 var data = crypto.getRandomValues(buffer);
39067 return self.toMnemonic(data);
39068 }
39069
39070 self.toMnemonic = function(byteArray) {
39071 if (byteArray.length % 4 > 0) {
39072 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
39073 }
39074
39075 //h = hashlib.sha256(data).hexdigest()
39076 var data = byteArrayToWordArray(byteArray);
39077 var hash = sjcl.hash.sha256.hash(data);
39078 var h = sjcl.codec.hex.fromBits(hash);
39079
39080 // b is a binary string, eg '00111010101100...'
39081 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39082 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39083 //
39084 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39085 // c = bin(int(h, 16))[2:].zfill(256)
39086 // d = c[:len(data) * 8 / 32]
39087 var a = byteArrayToBinaryString(byteArray);
39088 var c = zfill(hexStringToBinaryString(h), 256);
39089 var d = c.substring(0, byteArray.length * 8 / 32);
39090 // b = line1 + line2
39091 var b = a + d;
39092
39093 var result = [];
39094 var blen = b.length / 11;
39095 for (var i=0; i<blen; i++) {
39096 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39097 result.push(wordlist[idx]);
39098 }
39099 return self.joinWords(result);
39100 }
39101
39102 self.check = function(mnemonic) {
39103 var mnemonic = self.splitWords(mnemonic);
39104 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
39105 return false
39106 }
39107 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39108 var idx = [];
39109 for (var i=0; i<mnemonic.length; i++) {
39110 var word = mnemonic[i];
39111 var wordIndex = wordlist.indexOf(word);
39112 if (wordIndex == -1) {
39113 return false;
39114 }
39115 var binaryIndex = zfill(wordIndex.toString(2), 11);
39116 idx.push(binaryIndex);
39117 }
39118 var b = idx.join('');
39119 var l = b.length;
39120 //d = b[:l / 33 * 32]
39121 //h = b[-l / 33:]
39122 var d = b.substring(0, l / 33 * 32);
39123 var h = b.substring(l - l / 33, l);
39124 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
39125 var nd = binaryStringToWordArray(d);
39126 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
39127 var ndHash = sjcl.hash.sha256.hash(nd);
39128 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39129 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
39130 var nh = ndBstr.substring(0,l/33);
39131 return h == nh;
39132 }
39133
39134 self.toSeed = function(mnemonic, passphrase) {
39135 passphrase = passphrase || '';
39136 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
39137 passphrase = self.normalizeString(passphrase)
39138 passphrase = "mnemonic" + passphrase;
39139 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
39140 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39141 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39142 var hashHex = sjcl.codec.hex.fromBits(result);
39143 return hashHex;
39144 }
39145
39146 self.splitWords = function(mnemonic) {
39147 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39148 }
39149
39150 self.joinWords = function(words) {
39151 // Set space correctly depending on the language
39152 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39153 var space = " ";
39154 if (language == "japanese") {
39155 space = "\u3000"; // ideographic space
39156 }
39157 return words.join(space);
39158 }
39159
39160 self.normalizeString = function(str) {
39161 if (typeof str.normalize == "function") {
39162 return str.normalize("NFKD");
39163 }
39164 else {
39165 // TODO decide how to handle this in the future.
39166 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39167 return str;
39168 }
39169 }
39170
39171 function byteArrayToWordArray(data) {
39172 var a = [];
39173 for (var i=0; i<data.length/4; i++) {
39174 v = 0;
39175 v += data[i*4 + 0] << 8 * 3;
39176 v += data[i*4 + 1] << 8 * 2;
39177 v += data[i*4 + 2] << 8 * 1;
39178 v += data[i*4 + 3] << 8 * 0;
39179 a.push(v);
39180 }
39181 return a;
39182 }
39183
39184 function byteArrayToBinaryString(data) {
39185 var bin = "";
39186 for (var i=0; i<data.length; i++) {
39187 bin += zfill(data[i].toString(2), 8);
39188 }
39189 return bin;
39190 }
39191
39192 function hexStringToBinaryString(hexString) {
39193 binaryString = "";
39194 for (var i=0; i<hexString.length; i++) {
39195 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39196 }
39197 return binaryString;
39198 }
39199
39200 function binaryStringToWordArray(binary) {
39201 var aLen = binary.length / 32;
39202 var a = [];
39203 for (var i=0; i<aLen; i++) {
39204 var valueStr = binary.substring(0,32);
39205 var value = parseInt(valueStr, 2);
39206 a.push(value);
39207 binary = binary.slice(32);
39208 }
39209 return a;
39210 }
39211
39212 // Pad a numeric string on the left with zero digits until the given width
39213 // is reached.
39214 // Note this differs to the python implementation because it does not
39215 // handle numbers starting with a sign.
39216 function zfill(source, length) {
39217 source = source.toString();
39218 while (source.length < length) {
39219 source = '0' + source;
39220 }
39221 return source;
39222 }
39223
39224 init();
39225
39226 }
39227 </script>
39228 <script>/*
39229 JavaScript BigInteger library version 0.9.1
39230 http://silentmatt.com/biginteger/
39231
39232 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
39233 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
39234 Licensed under the MIT license.
39235
39236 Support for arbitrary internal representation base was added by
39237 Vitaly Magerya.
39238 */
39239
39240 /*
39241 File: biginteger.js
39242
39243 Exports:
39244
39245 <BigInteger>
39246 */
39247 (function(exports) {
39248 "use strict";
39249 /*
39250 Class: BigInteger
39251 An arbitrarily-large integer.
39252
39253 <BigInteger> objects should be considered immutable. None of the "built-in"
39254 methods modify *this* or their arguments. All properties should be
39255 considered private.
39256
39257 All the methods of <BigInteger> instances can be called "statically". The
39258 static versions are convenient if you don't already have a <BigInteger>
39259 object.
39260
39261 As an example, these calls are equivalent.
39262
39263 > BigInteger(4).multiply(5); // returns BigInteger(20);
39264 > BigInteger.multiply(4, 5); // returns BigInteger(20);
39265
39266 > var a = 42;
39267 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
39268 */
39269
39270 var CONSTRUCT = {}; // Unique token to call "private" version of constructor
39271
39272 /*
39273 Constructor: BigInteger()
39274 Convert a value to a <BigInteger>.
39275
39276 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
39277 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
39278 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
39279 without a radix argument.
39280
39281 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
39282 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
39283 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
39284 > var n3 = BigInteger(n2); // Return n2, unchanged
39285
39286 The constructor form only takes an array and a sign. *n* must be an
39287 array of numbers in little-endian order, where each digit is between 0
39288 and BigInteger.base. The second parameter sets the sign: -1 for
39289 negative, +1 for positive, or 0 for zero. The array is *not copied and
39290 may be modified*. If the array contains only zeros, the sign parameter
39291 is ignored and is forced to zero.
39292
39293 > new BigInteger([5], -1): create a new BigInteger with value -5
39294
39295 Parameters:
39296
39297 n - Value to convert to a <BigInteger>.
39298
39299 Returns:
39300
39301 A <BigInteger> value.
39302
39303 See Also:
39304
39305 <parse>, <BigInteger>
39306 */
39307 function BigInteger(n, s, token) {
39308 if (token !== CONSTRUCT) {
39309 if (n instanceof BigInteger) {
39310 return n;
39311 }
39312 else if (typeof n === "undefined") {
39313 return ZERO;
39314 }
39315 return BigInteger.parse(n);
39316 }
39317
39318 n = n || []; // Provide the nullary constructor for subclasses.
39319 while (n.length && !n[n.length - 1]) {
39320 --n.length;
39321 }
39322 this._d = n;
39323 this._s = n.length ? (s || 1) : 0;
39324 }
39325
39326 BigInteger._construct = function(n, s) {
39327 return new BigInteger(n, s, CONSTRUCT);
39328 };
39329
39330 // Base-10 speedup hacks in parse, toString, exp10 and log functions
39331 // require base to be a power of 10. 10^7 is the largest such power
39332 // that won't cause a precision loss when digits are multiplied.
39333 var BigInteger_base = 10000000;
39334 var BigInteger_base_log10 = 7;
39335
39336 BigInteger.base = BigInteger_base;
39337 BigInteger.base_log10 = BigInteger_base_log10;
39338
39339 var ZERO = new BigInteger([], 0, CONSTRUCT);
39340 // Constant: ZERO
39341 // <BigInteger> 0.
39342 BigInteger.ZERO = ZERO;
39343
39344 var ONE = new BigInteger([1], 1, CONSTRUCT);
39345 // Constant: ONE
39346 // <BigInteger> 1.
39347 BigInteger.ONE = ONE;
39348
39349 var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
39350 // Constant: M_ONE
39351 // <BigInteger> -1.
39352 BigInteger.M_ONE = M_ONE;
39353
39354 // Constant: _0
39355 // Shortcut for <ZERO>.
39356 BigInteger._0 = ZERO;
39357
39358 // Constant: _1
39359 // Shortcut for <ONE>.
39360 BigInteger._1 = ONE;
39361
39362 /*
39363 Constant: small
39364 Array of <BigIntegers> from 0 to 36.
39365
39366 These are used internally for parsing, but useful when you need a "small"
39367 <BigInteger>.
39368
39369 See Also:
39370
39371 <ZERO>, <ONE>, <_0>, <_1>
39372 */
39373 BigInteger.small = [
39374 ZERO,
39375 ONE,
39376 /* Assuming BigInteger_base > 36 */
39377 new BigInteger( [2], 1, CONSTRUCT),
39378 new BigInteger( [3], 1, CONSTRUCT),
39379 new BigInteger( [4], 1, CONSTRUCT),
39380 new BigInteger( [5], 1, CONSTRUCT),
39381 new BigInteger( [6], 1, CONSTRUCT),
39382 new BigInteger( [7], 1, CONSTRUCT),
39383 new BigInteger( [8], 1, CONSTRUCT),
39384 new BigInteger( [9], 1, CONSTRUCT),
39385 new BigInteger([10], 1, CONSTRUCT),
39386 new BigInteger([11], 1, CONSTRUCT),
39387 new BigInteger([12], 1, CONSTRUCT),
39388 new BigInteger([13], 1, CONSTRUCT),
39389 new BigInteger([14], 1, CONSTRUCT),
39390 new BigInteger([15], 1, CONSTRUCT),
39391 new BigInteger([16], 1, CONSTRUCT),
39392 new BigInteger([17], 1, CONSTRUCT),
39393 new BigInteger([18], 1, CONSTRUCT),
39394 new BigInteger([19], 1, CONSTRUCT),
39395 new BigInteger([20], 1, CONSTRUCT),
39396 new BigInteger([21], 1, CONSTRUCT),
39397 new BigInteger([22], 1, CONSTRUCT),
39398 new BigInteger([23], 1, CONSTRUCT),
39399 new BigInteger([24], 1, CONSTRUCT),
39400 new BigInteger([25], 1, CONSTRUCT),
39401 new BigInteger([26], 1, CONSTRUCT),
39402 new BigInteger([27], 1, CONSTRUCT),
39403 new BigInteger([28], 1, CONSTRUCT),
39404 new BigInteger([29], 1, CONSTRUCT),
39405 new BigInteger([30], 1, CONSTRUCT),
39406 new BigInteger([31], 1, CONSTRUCT),
39407 new BigInteger([32], 1, CONSTRUCT),
39408 new BigInteger([33], 1, CONSTRUCT),
39409 new BigInteger([34], 1, CONSTRUCT),
39410 new BigInteger([35], 1, CONSTRUCT),
39411 new BigInteger([36], 1, CONSTRUCT)
39412 ];
39413
39414 // Used for parsing/radix conversion
39415 BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
39416
39417 /*
39418 Method: toString
39419 Convert a <BigInteger> to a string.
39420
39421 When *base* is greater than 10, letters are upper case.
39422
39423 Parameters:
39424
39425 base - Optional base to represent the number in (default is base 10).
39426 Must be between 2 and 36 inclusive, or an Error will be thrown.
39427
39428 Returns:
39429
39430 The string representation of the <BigInteger>.
39431 */
39432 BigInteger.prototype.toString = function(base) {
39433 base = +base || 10;
39434 if (base < 2 || base > 36) {
39435 throw new Error("illegal radix " + base + ".");
39436 }
39437 if (this._s === 0) {
39438 return "0";
39439 }
39440 if (base === 10) {
39441 var str = this._s < 0 ? "-" : "";
39442 str += this._d[this._d.length - 1].toString();
39443 for (var i = this._d.length - 2; i >= 0; i--) {
39444 var group = this._d[i].toString();
39445 while (group.length < BigInteger_base_log10) group = '0' + group;
39446 str += group;
39447 }
39448 return str;
39449 }
39450 else {
39451 var numerals = BigInteger.digits;
39452 base = BigInteger.small[base];
39453 var sign = this._s;
39454
39455 var n = this.abs();
39456 var digits = [];
39457 var digit;
39458
39459 while (n._s !== 0) {
39460 var divmod = n.divRem(base);
39461 n = divmod[0];
39462 digit = divmod[1];
39463 // TODO: This could be changed to unshift instead of reversing at the end.
39464 // Benchmark both to compare speeds.
39465 digits.push(numerals[digit.valueOf()]);
39466 }
39467 return (sign < 0 ? "-" : "") + digits.reverse().join("");
39468 }
39469 };
39470
39471 // Verify strings for parsing
39472 BigInteger.radixRegex = [
39473 /^$/,
39474 /^$/,
39475 /^[01]*$/,
39476 /^[012]*$/,
39477 /^[0-3]*$/,
39478 /^[0-4]*$/,
39479 /^[0-5]*$/,
39480 /^[0-6]*$/,
39481 /^[0-7]*$/,
39482 /^[0-8]*$/,
39483 /^[0-9]*$/,
39484 /^[0-9aA]*$/,
39485 /^[0-9abAB]*$/,
39486 /^[0-9abcABC]*$/,
39487 /^[0-9a-dA-D]*$/,
39488 /^[0-9a-eA-E]*$/,
39489 /^[0-9a-fA-F]*$/,
39490 /^[0-9a-gA-G]*$/,
39491 /^[0-9a-hA-H]*$/,
39492 /^[0-9a-iA-I]*$/,
39493 /^[0-9a-jA-J]*$/,
39494 /^[0-9a-kA-K]*$/,
39495 /^[0-9a-lA-L]*$/,
39496 /^[0-9a-mA-M]*$/,
39497 /^[0-9a-nA-N]*$/,
39498 /^[0-9a-oA-O]*$/,
39499 /^[0-9a-pA-P]*$/,
39500 /^[0-9a-qA-Q]*$/,
39501 /^[0-9a-rA-R]*$/,
39502 /^[0-9a-sA-S]*$/,
39503 /^[0-9a-tA-T]*$/,
39504 /^[0-9a-uA-U]*$/,
39505 /^[0-9a-vA-V]*$/,
39506 /^[0-9a-wA-W]*$/,
39507 /^[0-9a-xA-X]*$/,
39508 /^[0-9a-yA-Y]*$/,
39509 /^[0-9a-zA-Z]*$/
39510 ];
39511
39512 /*
39513 Function: parse
39514 Parse a string into a <BigInteger>.
39515
39516 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
39517 *base* is not provided, it will be guessed based on the leading characters
39518 of *s* as follows:
39519
39520 - "0x" or "0X": *base* = 16
39521 - "0c" or "0C": *base* = 8
39522 - "0b" or "0B": *base* = 2
39523 - else: *base* = 10
39524
39525 If no base is provided, or *base* is 10, the number can be in exponential
39526 form. For example, these are all valid:
39527
39528 > BigInteger.parse("1e9"); // Same as "1000000000"
39529 > BigInteger.parse("1.234*10^3"); // Same as 1234
39530 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
39531
39532 If any characters fall outside the range defined by the radix, an exception
39533 will be thrown.
39534
39535 Parameters:
39536
39537 s - The string to parse.
39538 base - Optional radix (default is to guess based on *s*).
39539
39540 Returns:
39541
39542 a <BigInteger> instance.
39543 */
39544 BigInteger.parse = function(s, base) {
39545 // Expands a number in exponential form to decimal form.
39546 // expandExponential("-13.441*10^5") === "1344100";
39547 // expandExponential("1.12300e-1") === "0.112300";
39548 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
39549 function expandExponential(str) {
39550 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
39551
39552 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
39553 c = +c;
39554 var l = c < 0;
39555 var i = n.length + c;
39556 x = (l ? n : f).length;
39557 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
39558 var z = (new Array(c + 1)).join("0");
39559 var r = n + f;
39560 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
39561 });
39562 }
39563
39564 s = s.toString();
39565 if (typeof base === "undefined" || +base === 10) {
39566 s = expandExponential(s);
39567 }
39568
39569 var prefixRE;
39570 if (typeof base === "undefined") {
39571 prefixRE = '0[xcb]';
39572 }
39573 else if (base == 16) {
39574 prefixRE = '0x';
39575 }
39576 else if (base == 8) {
39577 prefixRE = '0c';
39578 }
39579 else if (base == 2) {
39580 prefixRE = '0b';
39581 }
39582 else {
39583 prefixRE = '';
39584 }
39585 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
39586 if (parts) {
39587 var sign = parts[1] || "+";
39588 var baseSection = parts[2] || "";
39589 var digits = parts[3] || "";
39590
39591 if (typeof base === "undefined") {
39592 // Guess base
39593 if (baseSection === "0x" || baseSection === "0X") { // Hex
39594 base = 16;
39595 }
39596 else if (baseSection === "0c" || baseSection === "0C") { // Octal
39597 base = 8;
39598 }
39599 else if (baseSection === "0b" || baseSection === "0B") { // Binary
39600 base = 2;
39601 }
39602 else {
39603 base = 10;
39604 }
39605 }
39606 else if (base < 2 || base > 36) {
39607 throw new Error("Illegal radix " + base + ".");
39608 }
39609
39610 base = +base;
39611
39612 // Check for digits outside the range
39613 if (!(BigInteger.radixRegex[base].test(digits))) {
39614 throw new Error("Bad digit for radix " + base);
39615 }
39616
39617 // Strip leading zeros, and convert to array
39618 digits = digits.replace(/^0+/, "").split("");
39619 if (digits.length === 0) {
39620 return ZERO;
39621 }
39622
39623 // Get the sign (we know it's not zero)
39624 sign = (sign === "-") ? -1 : 1;
39625
39626 // Optimize 10
39627 if (base == 10) {
39628 var d = [];
39629 while (digits.length >= BigInteger_base_log10) {
39630 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
39631 }
39632 d.push(parseInt(digits.join(''), 10));
39633 return new BigInteger(d, sign, CONSTRUCT);
39634 }
39635
39636 // Do the conversion
39637 var d = ZERO;
39638 base = BigInteger.small[base];
39639 var small = BigInteger.small;
39640 for (var i = 0; i < digits.length; i++) {
39641 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
39642 }
39643 return new BigInteger(d._d, sign, CONSTRUCT);
39644 }
39645 else {
39646 throw new Error("Invalid BigInteger format: " + s);
39647 }
39648 };
39649
39650 /*
39651 Function: add
39652 Add two <BigIntegers>.
39653
39654 Parameters:
39655
39656 n - The number to add to *this*. Will be converted to a <BigInteger>.
39657
39658 Returns:
39659
39660 The numbers added together.
39661
39662 See Also:
39663
39664 <subtract>, <multiply>, <quotient>, <next>
39665 */
39666 BigInteger.prototype.add = function(n) {
39667 if (this._s === 0) {
39668 return BigInteger(n);
39669 }
39670
39671 n = BigInteger(n);
39672 if (n._s === 0) {
39673 return this;
39674 }
39675 if (this._s !== n._s) {
39676 n = n.negate();
39677 return this.subtract(n);
39678 }
39679
39680 var a = this._d;
39681 var b = n._d;
39682 var al = a.length;
39683 var bl = b.length;
39684 var sum = new Array(Math.max(al, bl) + 1);
39685 var size = Math.min(al, bl);
39686 var carry = 0;
39687 var digit;
39688
39689 for (var i = 0; i < size; i++) {
39690 digit = a[i] + b[i] + carry;
39691 sum[i] = digit % BigInteger_base;
39692 carry = (digit / BigInteger_base) | 0;
39693 }
39694 if (bl > al) {
39695 a = b;
39696 al = bl;
39697 }
39698 for (i = size; carry && i < al; i++) {
39699 digit = a[i] + carry;
39700 sum[i] = digit % BigInteger_base;
39701 carry = (digit / BigInteger_base) | 0;
39702 }
39703 if (carry) {
39704 sum[i] = carry;
39705 }
39706
39707 for ( ; i < al; i++) {
39708 sum[i] = a[i];
39709 }
39710
39711 return new BigInteger(sum, this._s, CONSTRUCT);
39712 };
39713
39714 /*
39715 Function: negate
39716 Get the additive inverse of a <BigInteger>.
39717
39718 Returns:
39719
39720 A <BigInteger> with the same magnatude, but with the opposite sign.
39721
39722 See Also:
39723
39724 <abs>
39725 */
39726 BigInteger.prototype.negate = function() {
39727 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
39728 };
39729
39730 /*
39731 Function: abs
39732 Get the absolute value of a <BigInteger>.
39733
39734 Returns:
39735
39736 A <BigInteger> with the same magnatude, but always positive (or zero).
39737
39738 See Also:
39739
39740 <negate>
39741 */
39742 BigInteger.prototype.abs = function() {
39743 return (this._s < 0) ? this.negate() : this;
39744 };
39745
39746 /*
39747 Function: subtract
39748 Subtract two <BigIntegers>.
39749
39750 Parameters:
39751
39752 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
39753
39754 Returns:
39755
39756 The *n* subtracted from *this*.
39757
39758 See Also:
39759
39760 <add>, <multiply>, <quotient>, <prev>
39761 */
39762 BigInteger.prototype.subtract = function(n) {
39763 if (this._s === 0) {
39764 return BigInteger(n).negate();
39765 }
39766
39767 n = BigInteger(n);
39768 if (n._s === 0) {
39769 return this;
39770 }
39771 if (this._s !== n._s) {
39772 n = n.negate();
39773 return this.add(n);
39774 }
39775
39776 var m = this;
39777 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
39778 if (this._s < 0) {
39779 m = new BigInteger(n._d, 1, CONSTRUCT);
39780 n = new BigInteger(this._d, 1, CONSTRUCT);
39781 }
39782
39783 // Both are positive => a - b
39784 var sign = m.compareAbs(n);
39785 if (sign === 0) {
39786 return ZERO;
39787 }
39788 else if (sign < 0) {
39789 // swap m and n
39790 var t = n;
39791 n = m;
39792 m = t;
39793 }
39794
39795 // a > b
39796 var a = m._d;
39797 var b = n._d;
39798 var al = a.length;
39799 var bl = b.length;
39800 var diff = new Array(al); // al >= bl since a > b
39801 var borrow = 0;
39802 var i;
39803 var digit;
39804
39805 for (i = 0; i < bl; i++) {
39806 digit = a[i] - borrow - b[i];
39807 if (digit < 0) {
39808 digit += BigInteger_base;
39809 borrow = 1;
39810 }
39811 else {
39812 borrow = 0;
39813 }
39814 diff[i] = digit;
39815 }
39816 for (i = bl; i < al; i++) {
39817 digit = a[i] - borrow;
39818 if (digit < 0) {
39819 digit += BigInteger_base;
39820 }
39821 else {
39822 diff[i++] = digit;
39823 break;
39824 }
39825 diff[i] = digit;
39826 }
39827 for ( ; i < al; i++) {
39828 diff[i] = a[i];
39829 }
39830
39831 return new BigInteger(diff, sign, CONSTRUCT);
39832 };
39833
39834 (function() {
39835 function addOne(n, sign) {
39836 var a = n._d;
39837 var sum = a.slice();
39838 var carry = true;
39839 var i = 0;
39840
39841 while (true) {
39842 var digit = (a[i] || 0) + 1;
39843 sum[i] = digit % BigInteger_base;
39844 if (digit <= BigInteger_base - 1) {
39845 break;
39846 }
39847 ++i;
39848 }
39849
39850 return new BigInteger(sum, sign, CONSTRUCT);
39851 }
39852
39853 function subtractOne(n, sign) {
39854 var a = n._d;
39855 var sum = a.slice();
39856 var borrow = true;
39857 var i = 0;
39858
39859 while (true) {
39860 var digit = (a[i] || 0) - 1;
39861 if (digit < 0) {
39862 sum[i] = digit + BigInteger_base;
39863 }
39864 else {
39865 sum[i] = digit;
39866 break;
39867 }
39868 ++i;
39869 }
39870
39871 return new BigInteger(sum, sign, CONSTRUCT);
39872 }
39873
39874 /*
39875 Function: next
39876 Get the next <BigInteger> (add one).
39877
39878 Returns:
39879
39880 *this* + 1.
39881
39882 See Also:
39883
39884 <add>, <prev>
39885 */
39886 BigInteger.prototype.next = function() {
39887 switch (this._s) {
39888 case 0:
39889 return ONE;
39890 case -1:
39891 return subtractOne(this, -1);
39892 // case 1:
39893 default:
39894 return addOne(this, 1);
39895 }
39896 };
39897
39898 /*
39899 Function: prev
39900 Get the previous <BigInteger> (subtract one).
39901
39902 Returns:
39903
39904 *this* - 1.
39905
39906 See Also:
39907
39908 <next>, <subtract>
39909 */
39910 BigInteger.prototype.prev = function() {
39911 switch (this._s) {
39912 case 0:
39913 return M_ONE;
39914 case -1:
39915 return addOne(this, -1);
39916 // case 1:
39917 default:
39918 return subtractOne(this, 1);
39919 }
39920 };
39921 })();
39922
39923 /*
39924 Function: compareAbs
39925 Compare the absolute value of two <BigIntegers>.
39926
39927 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
39928
39929 Parameters:
39930
39931 n - The number to compare to *this*. Will be converted to a <BigInteger>.
39932
39933 Returns:
39934
39935 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
39936
39937 See Also:
39938
39939 <compare>, <abs>
39940 */
39941 BigInteger.prototype.compareAbs = function(n) {
39942 if (this === n) {
39943 return 0;
39944 }
39945
39946 if (!(n instanceof BigInteger)) {
39947 if (!isFinite(n)) {
39948 return(isNaN(n) ? n : -1);
39949 }
39950 n = BigInteger(n);
39951 }
39952
39953 if (this._s === 0) {
39954 return (n._s !== 0) ? -1 : 0;
39955 }
39956 if (n._s === 0) {
39957 return 1;
39958 }
39959
39960 var l = this._d.length;
39961 var nl = n._d.length;
39962 if (l < nl) {
39963 return -1;
39964 }
39965 else if (l > nl) {
39966 return 1;
39967 }
39968
39969 var a = this._d;
39970 var b = n._d;
39971 for (var i = l-1; i >= 0; i--) {
39972 if (a[i] !== b[i]) {
39973 return a[i] < b[i] ? -1 : 1;
39974 }
39975 }
39976
39977 return 0;
39978 };
39979
39980 /*
39981 Function: compare
39982 Compare two <BigIntegers>.
39983
39984 Parameters:
39985
39986 n - The number to compare to *this*. Will be converted to a <BigInteger>.
39987
39988 Returns:
39989
39990 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
39991
39992 See Also:
39993
39994 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
39995 */
39996 BigInteger.prototype.compare = function(n) {
39997 if (this === n) {
39998 return 0;
39999 }
40000
40001 n = BigInteger(n);
40002
40003 if (this._s === 0) {
40004 return -n._s;
40005 }
40006
40007 if (this._s === n._s) { // both positive or both negative
40008 var cmp = this.compareAbs(n);
40009 return cmp * this._s;
40010 }
40011 else {
40012 return this._s;
40013 }
40014 };
40015
40016 /*
40017 Function: isUnit
40018 Return true iff *this* is either 1 or -1.
40019
40020 Returns:
40021
40022 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40023
40024 See Also:
40025
40026 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40027 <BigInteger.ONE>, <BigInteger.M_ONE>
40028 */
40029 BigInteger.prototype.isUnit = function() {
40030 return this === ONE ||
40031 this === M_ONE ||
40032 (this._d.length === 1 && this._d[0] === 1);
40033 };
40034
40035 /*
40036 Function: multiply
40037 Multiply two <BigIntegers>.
40038
40039 Parameters:
40040
40041 n - The number to multiply *this* by. Will be converted to a
40042 <BigInteger>.
40043
40044 Returns:
40045
40046 The numbers multiplied together.
40047
40048 See Also:
40049
40050 <add>, <subtract>, <quotient>, <square>
40051 */
40052 BigInteger.prototype.multiply = function(n) {
40053 // TODO: Consider adding Karatsuba multiplication for large numbers
40054 if (this._s === 0) {
40055 return ZERO;
40056 }
40057
40058 n = BigInteger(n);
40059 if (n._s === 0) {
40060 return ZERO;
40061 }
40062 if (this.isUnit()) {
40063 if (this._s < 0) {
40064 return n.negate();
40065 }
40066 return n;
40067 }
40068 if (n.isUnit()) {
40069 if (n._s < 0) {
40070 return this.negate();
40071 }
40072 return this;
40073 }
40074 if (this === n) {
40075 return this.square();
40076 }
40077
40078 var r = (this._d.length >= n._d.length);
40079 var a = (r ? this : n)._d; // a will be longer than b
40080 var b = (r ? n : this)._d;
40081 var al = a.length;
40082 var bl = b.length;
40083
40084 var pl = al + bl;
40085 var partial = new Array(pl);
40086 var i;
40087 for (i = 0; i < pl; i++) {
40088 partial[i] = 0;
40089 }
40090
40091 for (i = 0; i < bl; i++) {
40092 var carry = 0;
40093 var bi = b[i];
40094 var jlimit = al + i;
40095 var digit;
40096 for (var j = i; j < jlimit; j++) {
40097 digit = partial[j] + bi * a[j - i] + carry;
40098 carry = (digit / BigInteger_base) | 0;
40099 partial[j] = (digit % BigInteger_base) | 0;
40100 }
40101 if (carry) {
40102 digit = partial[j] + carry;
40103 carry = (digit / BigInteger_base) | 0;
40104 partial[j] = digit % BigInteger_base;
40105 }
40106 }
40107 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40108 };
40109
40110 // Multiply a BigInteger by a single-digit native number
40111 // Assumes that this and n are >= 0
40112 // This is not really intended to be used outside the library itself
40113 BigInteger.prototype.multiplySingleDigit = function(n) {
40114 if (n === 0 || this._s === 0) {
40115 return ZERO;
40116 }
40117 if (n === 1) {
40118 return this;
40119 }
40120
40121 var digit;
40122 if (this._d.length === 1) {
40123 digit = this._d[0] * n;
40124 if (digit >= BigInteger_base) {
40125 return new BigInteger([(digit % BigInteger_base)|0,
40126 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40127 }
40128 return new BigInteger([digit], 1, CONSTRUCT);
40129 }
40130
40131 if (n === 2) {
40132 return this.add(this);
40133 }
40134 if (this.isUnit()) {
40135 return new BigInteger([n], 1, CONSTRUCT);
40136 }
40137
40138 var a = this._d;
40139 var al = a.length;
40140
40141 var pl = al + 1;
40142 var partial = new Array(pl);
40143 for (var i = 0; i < pl; i++) {
40144 partial[i] = 0;
40145 }
40146
40147 var carry = 0;
40148 for (var j = 0; j < al; j++) {
40149 digit = n * a[j] + carry;
40150 carry = (digit / BigInteger_base) | 0;
40151 partial[j] = (digit % BigInteger_base) | 0;
40152 }
40153 if (carry) {
40154 partial[j] = carry;
40155 }
40156
40157 return new BigInteger(partial, 1, CONSTRUCT);
40158 };
40159
40160 /*
40161 Function: square
40162 Multiply a <BigInteger> by itself.
40163
40164 This is slightly faster than regular multiplication, since it removes the
40165 duplicated multiplcations.
40166
40167 Returns:
40168
40169 > this.multiply(this)
40170
40171 See Also:
40172 <multiply>
40173 */
40174 BigInteger.prototype.square = function() {
40175 // Normally, squaring a 10-digit number would take 100 multiplications.
40176 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40177 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40178 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40179
40180 if (this._s === 0) {
40181 return ZERO;
40182 }
40183 if (this.isUnit()) {
40184 return ONE;
40185 }
40186
40187 var digits = this._d;
40188 var length = digits.length;
40189 var imult1 = new Array(length + length + 1);
40190 var product, carry, k;
40191 var i;
40192
40193 // Calculate diagonal
40194 for (i = 0; i < length; i++) {
40195 k = i * 2;
40196 product = digits[i] * digits[i];
40197 carry = (product / BigInteger_base) | 0;
40198 imult1[k] = product % BigInteger_base;
40199 imult1[k + 1] = carry;
40200 }
40201
40202 // Calculate repeating part
40203 for (i = 0; i < length; i++) {
40204 carry = 0;
40205 k = i * 2 + 1;
40206 for (var j = i + 1; j < length; j++, k++) {
40207 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40208 carry = (product / BigInteger_base) | 0;
40209 imult1[k] = product % BigInteger_base;
40210 }
40211 k = length + i;
40212 var digit = carry + imult1[k];
40213 carry = (digit / BigInteger_base) | 0;
40214 imult1[k] = digit % BigInteger_base;
40215 imult1[k + 1] += carry;
40216 }
40217
40218 return new BigInteger(imult1, 1, CONSTRUCT);
40219 };
40220
40221 /*
40222 Function: quotient
40223 Divide two <BigIntegers> and truncate towards zero.
40224
40225 <quotient> throws an exception if *n* is zero.
40226
40227 Parameters:
40228
40229 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40230
40231 Returns:
40232
40233 The *this* / *n*, truncated to an integer.
40234
40235 See Also:
40236
40237 <add>, <subtract>, <multiply>, <divRem>, <remainder>
40238 */
40239 BigInteger.prototype.quotient = function(n) {
40240 return this.divRem(n)[0];
40241 };
40242
40243 /*
40244 Function: divide
40245 Deprecated synonym for <quotient>.
40246 */
40247 BigInteger.prototype.divide = BigInteger.prototype.quotient;
40248
40249 /*
40250 Function: remainder
40251 Calculate the remainder of two <BigIntegers>.
40252
40253 <remainder> throws an exception if *n* is zero.
40254
40255 Parameters:
40256
40257 n - The remainder after *this* is divided *this* by *n*. Will be
40258 converted to a <BigInteger>.
40259
40260 Returns:
40261
40262 *this* % *n*.
40263
40264 See Also:
40265
40266 <divRem>, <quotient>
40267 */
40268 BigInteger.prototype.remainder = function(n) {
40269 return this.divRem(n)[1];
40270 };
40271
40272 /*
40273 Function: divRem
40274 Calculate the integer quotient and remainder of two <BigIntegers>.
40275
40276 <divRem> throws an exception if *n* is zero.
40277
40278 Parameters:
40279
40280 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40281
40282 Returns:
40283
40284 A two-element array containing the quotient and the remainder.
40285
40286 > a.divRem(b)
40287
40288 is exactly equivalent to
40289
40290 > [a.quotient(b), a.remainder(b)]
40291
40292 except it is faster, because they are calculated at the same time.
40293
40294 See Also:
40295
40296 <quotient>, <remainder>
40297 */
40298 BigInteger.prototype.divRem = function(n) {
40299 n = BigInteger(n);
40300 if (n._s === 0) {
40301 throw new Error("Divide by zero");
40302 }
40303 if (this._s === 0) {
40304 return [ZERO, ZERO];
40305 }
40306 if (n._d.length === 1) {
40307 return this.divRemSmall(n._s * n._d[0]);
40308 }
40309
40310 // Test for easy cases -- |n1| <= |n2|
40311 switch (this.compareAbs(n)) {
40312 case 0: // n1 == n2
40313 return [this._s === n._s ? ONE : M_ONE, ZERO];
40314 case -1: // |n1| < |n2|
40315 return [ZERO, this];
40316 }
40317
40318 var sign = this._s * n._s;
40319 var a = n.abs();
40320 var b_digits = this._d;
40321 var b_index = b_digits.length;
40322 var digits = n._d.length;
40323 var quot = [];
40324 var guess;
40325
40326 var part = new BigInteger([], 0, CONSTRUCT);
40327
40328 while (b_index) {
40329 part._d.unshift(b_digits[--b_index]);
40330 part = new BigInteger(part._d, 1, CONSTRUCT);
40331
40332 if (part.compareAbs(n) < 0) {
40333 quot.push(0);
40334 continue;
40335 }
40336 if (part._s === 0) {
40337 guess = 0;
40338 }
40339 else {
40340 var xlen = part._d.length, ylen = a._d.length;
40341 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
40342 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
40343 if (part._d.length > a._d.length) {
40344 // The length of part._d can either match a._d length,
40345 // or exceed it by one.
40346 highx = (highx+1)*BigInteger_base;
40347 }
40348 guess = Math.ceil(highx/highy);
40349 }
40350 do {
40351 var check = a.multiplySingleDigit(guess);
40352 if (check.compareAbs(part) <= 0) {
40353 break;
40354 }
40355 guess--;
40356 } while (guess);
40357
40358 quot.push(guess);
40359 if (!guess) {
40360 continue;
40361 }
40362 var diff = part.subtract(check);
40363 part._d = diff._d.slice();
40364 }
40365
40366 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
40367 new BigInteger(part._d, this._s, CONSTRUCT)];
40368 };
40369
40370 // Throws an exception if n is outside of (-BigInteger.base, -1] or
40371 // [1, BigInteger.base). It's not necessary to call this, since the
40372 // other division functions will call it if they are able to.
40373 BigInteger.prototype.divRemSmall = function(n) {
40374 var r;
40375 n = +n;
40376 if (n === 0) {
40377 throw new Error("Divide by zero");
40378 }
40379
40380 var n_s = n < 0 ? -1 : 1;
40381 var sign = this._s * n_s;
40382 n = Math.abs(n);
40383
40384 if (n < 1 || n >= BigInteger_base) {
40385 throw new Error("Argument out of range");
40386 }
40387
40388 if (this._s === 0) {
40389 return [ZERO, ZERO];
40390 }
40391
40392 if (n === 1 || n === -1) {
40393 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
40394 }
40395
40396 // 2 <= n < BigInteger_base
40397
40398 // divide a single digit by a single digit
40399 if (this._d.length === 1) {
40400 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
40401 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
40402 if (sign < 0) {
40403 q = q.negate();
40404 }
40405 if (this._s < 0) {
40406 r = r.negate();
40407 }
40408 return [q, r];
40409 }
40410
40411 var digits = this._d.slice();
40412 var quot = new Array(digits.length);
40413 var part = 0;
40414 var diff = 0;
40415 var i = 0;
40416 var guess;
40417
40418 while (digits.length) {
40419 part = part * BigInteger_base + digits[digits.length - 1];
40420 if (part < n) {
40421 quot[i++] = 0;
40422 digits.pop();
40423 diff = BigInteger_base * diff + part;
40424 continue;
40425 }
40426 if (part === 0) {
40427 guess = 0;
40428 }
40429 else {
40430 guess = (part / n) | 0;
40431 }
40432
40433 var check = n * guess;
40434 diff = part - check;
40435 quot[i++] = guess;
40436 if (!guess) {
40437 digits.pop();
40438 continue;
40439 }
40440
40441 digits.pop();
40442 part = diff;
40443 }
40444
40445 r = new BigInteger([diff], 1, CONSTRUCT);
40446 if (this._s < 0) {
40447 r = r.negate();
40448 }
40449 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
40450 };
40451
40452 /*
40453 Function: isEven
40454 Return true iff *this* is divisible by two.
40455
40456 Note that <BigInteger.ZERO> is even.
40457
40458 Returns:
40459
40460 true if *this* is even, false otherwise.
40461
40462 See Also:
40463
40464 <isOdd>
40465 */
40466 BigInteger.prototype.isEven = function() {
40467 var digits = this._d;
40468 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
40469 };
40470
40471 /*
40472 Function: isOdd
40473 Return true iff *this* is not divisible by two.
40474
40475 Returns:
40476
40477 true if *this* is odd, false otherwise.
40478
40479 See Also:
40480
40481 <isEven>
40482 */
40483 BigInteger.prototype.isOdd = function() {
40484 return !this.isEven();
40485 };
40486
40487 /*
40488 Function: sign
40489 Get the sign of a <BigInteger>.
40490
40491 Returns:
40492
40493 * -1 if *this* < 0
40494 * 0 if *this* == 0
40495 * +1 if *this* > 0
40496
40497 See Also:
40498
40499 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
40500 */
40501 BigInteger.prototype.sign = function() {
40502 return this._s;
40503 };
40504
40505 /*
40506 Function: isPositive
40507 Return true iff *this* > 0.
40508
40509 Returns:
40510
40511 true if *this*.compare(<BigInteger.ZERO>) == 1.
40512
40513 See Also:
40514
40515 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
40516 */
40517 BigInteger.prototype.isPositive = function() {
40518 return this._s > 0;
40519 };
40520
40521 /*
40522 Function: isNegative
40523 Return true iff *this* < 0.
40524
40525 Returns:
40526
40527 true if *this*.compare(<BigInteger.ZERO>) == -1.
40528
40529 See Also:
40530
40531 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
40532 */
40533 BigInteger.prototype.isNegative = function() {
40534 return this._s < 0;
40535 };
40536
40537 /*
40538 Function: isZero
40539 Return true iff *this* == 0.
40540
40541 Returns:
40542
40543 true if *this*.compare(<BigInteger.ZERO>) == 0.
40544
40545 See Also:
40546
40547 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
40548 */
40549 BigInteger.prototype.isZero = function() {
40550 return this._s === 0;
40551 };
40552
40553 /*
40554 Function: exp10
40555 Multiply a <BigInteger> by a power of 10.
40556
40557 This is equivalent to, but faster than
40558
40559 > if (n >= 0) {
40560 > return this.multiply(BigInteger("1e" + n));
40561 > }
40562 > else { // n <= 0
40563 > return this.quotient(BigInteger("1e" + -n));
40564 > }
40565
40566 Parameters:
40567
40568 n - The power of 10 to multiply *this* by. *n* is converted to a
40569 javascipt number and must be no greater than <BigInteger.MAX_EXP>
40570 (0x7FFFFFFF), or an exception will be thrown.
40571
40572 Returns:
40573
40574 *this* * (10 ** *n*), truncated to an integer if necessary.
40575
40576 See Also:
40577
40578 <pow>, <multiply>
40579 */
40580 BigInteger.prototype.exp10 = function(n) {
40581 n = +n;
40582 if (n === 0) {
40583 return this;
40584 }
40585 if (Math.abs(n) > Number(MAX_EXP)) {
40586 throw new Error("exponent too large in BigInteger.exp10");
40587 }
40588 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
40589 if (this._s === 0) {
40590 return ZERO;
40591 }
40592 if (n > 0) {
40593 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
40594
40595 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
40596 k._d.unshift(0);
40597 }
40598 if (n == 0)
40599 return k;
40600 k._s = 1;
40601 k = k.multiplySingleDigit(Math.pow(10, n));
40602 return (this._s < 0 ? k.negate() : k);
40603 } else if (-n >= this._d.length*BigInteger_base_log10) {
40604 return ZERO;
40605 } else {
40606 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
40607
40608 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
40609 k._d.shift();
40610 }
40611 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
40612 }
40613 };
40614
40615 /*
40616 Function: pow
40617 Raise a <BigInteger> to a power.
40618
40619 In this implementation, 0**0 is 1.
40620
40621 Parameters:
40622
40623 n - The exponent to raise *this* by. *n* must be no greater than
40624 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
40625
40626 Returns:
40627
40628 *this* raised to the *nth* power.
40629
40630 See Also:
40631
40632 <modPow>
40633 */
40634 BigInteger.prototype.pow = function(n) {
40635 if (this.isUnit()) {
40636 if (this._s > 0) {
40637 return this;
40638 }
40639 else {
40640 return BigInteger(n).isOdd() ? this : this.negate();
40641 }
40642 }
40643
40644 n = BigInteger(n);
40645 if (n._s === 0) {
40646 return ONE;
40647 }
40648 else if (n._s < 0) {
40649 if (this._s === 0) {
40650 throw new Error("Divide by zero");
40651 }
40652 else {
40653 return ZERO;
40654 }
40655 }
40656 if (this._s === 0) {
40657 return ZERO;
40658 }
40659 if (n.isUnit()) {
40660 return this;
40661 }
40662
40663 if (n.compareAbs(MAX_EXP) > 0) {
40664 throw new Error("exponent too large in BigInteger.pow");
40665 }
40666 var x = this;
40667 var aux = ONE;
40668 var two = BigInteger.small[2];
40669
40670 while (n.isPositive()) {
40671 if (n.isOdd()) {
40672 aux = aux.multiply(x);
40673 if (n.isUnit()) {
40674 return aux;
40675 }
40676 }
40677 x = x.square();
40678 n = n.quotient(two);
40679 }
40680
40681 return aux;
40682 };
40683
40684 /*
40685 Function: modPow
40686 Raise a <BigInteger> to a power (mod m).
40687
40688 Because it is reduced by a modulus, <modPow> is not limited by
40689 <BigInteger.MAX_EXP> like <pow>.
40690
40691 Parameters:
40692
40693 exponent - The exponent to raise *this* by. Must be positive.
40694 modulus - The modulus.
40695
40696 Returns:
40697
40698 *this* ^ *exponent* (mod *modulus*).
40699
40700 See Also:
40701
40702 <pow>, <mod>
40703 */
40704 BigInteger.prototype.modPow = function(exponent, modulus) {
40705 var result = ONE;
40706 var base = this;
40707
40708 while (exponent.isPositive()) {
40709 if (exponent.isOdd()) {
40710 result = result.multiply(base).remainder(modulus);
40711 }
40712
40713 exponent = exponent.quotient(BigInteger.small[2]);
40714 if (exponent.isPositive()) {
40715 base = base.square().remainder(modulus);
40716 }
40717 }
40718
40719 return result;
40720 };
40721
40722 /*
40723 Function: log
40724 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
40725
40726 This is equivalent to
40727
40728 > Math.log(this.toJSValue())
40729
40730 but handles values outside of the native number range.
40731
40732 Returns:
40733
40734 log( *this* )
40735
40736 See Also:
40737
40738 <toJSValue>
40739 */
40740 BigInteger.prototype.log = function() {
40741 switch (this._s) {
40742 case 0: return -Infinity;
40743 case -1: return NaN;
40744 default: // Fall through.
40745 }
40746
40747 var l = this._d.length;
40748
40749 if (l*BigInteger_base_log10 < 30) {
40750 return Math.log(this.valueOf());
40751 }
40752
40753 var N = Math.ceil(30/BigInteger_base_log10);
40754 var firstNdigits = this._d.slice(l - N);
40755 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
40756 };
40757
40758 /*
40759 Function: valueOf
40760 Convert a <BigInteger> to a native JavaScript integer.
40761
40762 This is called automatically by JavaScipt to convert a <BigInteger> to a
40763 native value.
40764
40765 Returns:
40766
40767 > parseInt(this.toString(), 10)
40768
40769 See Also:
40770
40771 <toString>, <toJSValue>
40772 */
40773 BigInteger.prototype.valueOf = function() {
40774 return parseInt(this.toString(), 10);
40775 };
40776
40777 /*
40778 Function: toJSValue
40779 Convert a <BigInteger> to a native JavaScript integer.
40780
40781 This is the same as valueOf, but more explicitly named.
40782
40783 Returns:
40784
40785 > parseInt(this.toString(), 10)
40786
40787 See Also:
40788
40789 <toString>, <valueOf>
40790 */
40791 BigInteger.prototype.toJSValue = function() {
40792 return parseInt(this.toString(), 10);
40793 };
40794
40795 var MAX_EXP = BigInteger(0x7FFFFFFF);
40796 // Constant: MAX_EXP
40797 // The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
40798 BigInteger.MAX_EXP = MAX_EXP;
40799
40800 (function() {
40801 function makeUnary(fn) {
40802 return function(a) {
40803 return fn.call(BigInteger(a));
40804 };
40805 }
40806
40807 function makeBinary(fn) {
40808 return function(a, b) {
40809 return fn.call(BigInteger(a), BigInteger(b));
40810 };
40811 }
40812
40813 function makeTrinary(fn) {
40814 return function(a, b, c) {
40815 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
40816 };
40817 }
40818
40819 (function() {
40820 var i, fn;
40821 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
40822 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
40823 var trinary = ["modPow"];
40824
40825 for (i = 0; i < unary.length; i++) {
40826 fn = unary[i];
40827 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
40828 }
40829
40830 for (i = 0; i < binary.length; i++) {
40831 fn = binary[i];
40832 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
40833 }
40834
40835 for (i = 0; i < trinary.length; i++) {
40836 fn = trinary[i];
40837 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
40838 }
40839
40840 BigInteger.exp10 = function(x, n) {
40841 return BigInteger(x).exp10(n);
40842 };
40843 })();
40844 })();
40845
40846 exports.BigInteger = BigInteger;
40847 })(typeof exports !== 'undefined' ? exports : this);
40848 </script>
40849 <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){
40850 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;
40851
40852 },{}],2:[function(require,module,exports){
40853 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;
40854
40855 },{"./scoring":6}],3:[function(require,module,exports){
40856 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(","),
40857 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(","),
40858 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(","),
40859 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(","),
40860 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;
40861
40862 },{}],4:[function(require,module,exports){
40863 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;
40864
40865 },{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
40866 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;
40867
40868 },{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
40869 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;
40870
40871 },{"./adjacency_graphs":1}],7:[function(require,module,exports){
40872 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;
40873
40874 },{}]},{},[4])(4)
40875 });
40876 //# sourceMappingURL=zxcvbn.js.map
40877 </script>
40878 <script>/*
40879 * Detects entropy from a string.
40880 *
40881 * Formats include:
40882 * binary [0-1]
40883 * base 6 [0-5]
40884 * dice 6 [1-6]
40885 * decimal [0-9]
40886 * hexadecimal [0-9A-F]
40887 * card [A2-9TJQK][CDHS]
40888 *
40889 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
40890 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
40891 * entropy.
40892 */
40893
40894 window.Entropy = new (function() {
40895
40896 var TWO = new BigInteger(2);
40897
40898 // matchers returns an array of the matched events for each type of entropy.
40899 // eg
40900 // matchers.binary("010") returns ["0", "1", "0"]
40901 // matchers.binary("a10") returns ["1", "0"]
40902 // matchers.hex("a10") returns ["a", "1", "0"]
40903 var matchers = {
40904 binary: function(str) {
40905 return str.match(/[0-1]/gi) || [];
40906 },
40907 base6: function(str) {
40908 return str.match(/[0-5]/gi) || [];
40909 },
40910 dice: function(str) {
40911 return str.match(/[1-6]/gi) || []; // ie dice numbers
40912 },
40913 base10: function(str) {
40914 return str.match(/[0-9]/gi) || [];
40915 },
40916 hex: function(str) {
40917 return str.match(/[0-9A-F]/gi) || [];
40918 },
40919 card: function(str) {
40920 // Format is NumberSuit, eg
40921 // AH ace of hearts
40922 // 8C eight of clubs
40923 // TD ten of diamonds
40924 // JS jack of spades
40925 // QH queen of hearts
40926 // KC king of clubs
40927 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
40928 }
40929 }
40930
40931 // Convert array of cards from ["ac", "4d", "ks"]
40932 // to numbers between 0 and 51 [0, 16, 51]
40933 function convertCardsToInts(cards) {
40934 var ints = [];
40935 var values = "a23456789tjqk";
40936 var suits = "cdhs";
40937 for (var i=0; i<cards.length; i++) {
40938 var card = cards[i].toLowerCase();
40939 var value = card[0];
40940 var suit = card[1];
40941 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
40942 ints.push(asInt);
40943 }
40944 return ints;
40945 }
40946
40947 this.fromString = function(rawEntropyStr) {
40948 // Find type of entropy being used (binary, hex, dice etc)
40949 var base = getBase(rawEntropyStr);
40950 // Convert dice to base6 entropy (ie 1-6 to 0-5)
40951 // This is done by changing all 6s to 0s
40952 if (base.str == "dice") {
40953 var newParts = [];
40954 var newInts = [];
40955 for (var i=0; i<base.parts.length; i++) {
40956 var c = base.parts[i];
40957 if ("12345".indexOf(c) > -1) {
40958 newParts[i] = base.parts[i];
40959 newInts[i] = base.ints[i];
40960 }
40961 else {
40962 newParts[i] = "0";
40963 newInts[i] = 0;
40964 }
40965 }
40966 base.str = "base 6 (dice)";
40967 base.ints = newInts;
40968 base.parts = newParts;
40969 base.matcher = matchers.base6;
40970 }
40971 // Detect empty entropy
40972 if (base.parts.length == 0) {
40973 return {
40974 binaryStr: "",
40975 cleanStr: "",
40976 cleanHtml: "",
40977 base: base,
40978 };
40979 }
40980 // Convert base.ints to BigInteger.
40981 // Due to using unusual bases, eg cards of base52, this is not as simple as
40982 // using BigInteger.parse()
40983 var entropyInt = BigInteger.ZERO;
40984 for (var i=base.ints.length-1; i>=0; i--) {
40985 var thisInt = BigInteger.parse(base.ints[i]);
40986 var power = (base.ints.length - 1) - i;
40987 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
40988 entropyInt = entropyInt.add(additionalEntropy);
40989 }
40990 // Convert entropy to binary
40991 var entropyBin = entropyInt.toString(2);
40992 // If the first integer is small, it must be padded with zeros.
40993 // Otherwise the chance of the first bit being 1 is 100%, which is
40994 // obviously incorrect.
40995 // This is not perfect for non-2^n bases.
40996 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
40997 while (entropyBin.length < expectedBits) {
40998 entropyBin = "0" + entropyBin;
40999 }
41000 // Calculate the number of bits per event
41001 var bitsPerEvent = Math.log2(base.asInt);
41002 // Cards binary must be handled differently, since they're not replaced
41003 if (base.asInt == 52) {
41004 var cardEntropy = processCardEntropy(base.parts);
41005 entropyBin = cardEntropy.binaryStr;
41006 bitsPerEvent = cardEntropy.bitsPerEvent;
41007 }
41008 // Supply a 'filtered' entropy string for display purposes
41009 var entropyClean = base.parts.join("");
41010 var entropyHtml = base.parts.join("");
41011 if (base.asInt == 52) {
41012 entropyClean = base.parts.join(" ").toUpperCase();
41013 entropyClean = entropyClean.replace(/C/g, "\u2663");
41014 entropyClean = entropyClean.replace(/D/g, "\u2666");
41015 entropyClean = entropyClean.replace(/H/g, "\u2665");
41016 entropyClean = entropyClean.replace(/S/g, "\u2660");
41017 entropyHtml = base.parts.join(" ").toUpperCase();
41018 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41019 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41020 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41021 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41022 }
41023 // Return the result
41024 var e = {
41025 binaryStr: entropyBin,
41026 cleanStr: entropyClean,
41027 cleanHtml: entropyHtml,
41028 bitsPerEvent: bitsPerEvent,
41029 base: base,
41030 }
41031 return e;
41032 }
41033
41034 function getSortedDeck() {
41035 var s = [];
41036 var suits = "CDHS";
41037 var values = "A23456789TJQK";
41038 for (var i=0; i<suits.length; i++) {
41039 for (var j=0; j<values.length; j++) {
41040 s.push(values[j]+suits[i]);
41041 }
41042 }
41043 return s;
41044 }
41045
41046 function getBase(str) {
41047 // Need to get the lowest base for the supplied entropy.
41048 // This prevents interpreting, say, dice rolls as hexadecimal.
41049 var binaryMatches = matchers.binary(str);
41050 var hexMatches = matchers.hex(str);
41051 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41052 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41053 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41054 return {
41055 ints: ints,
41056 parts: binaryMatches,
41057 matcher: matchers.binary,
41058 asInt: 2,
41059 str: "binary",
41060 }
41061 }
41062 var cardMatches = matchers.card(str);
41063 if (cardMatches.length >= hexMatches.length / 2) {
41064 var ints = convertCardsToInts(cardMatches);
41065 return {
41066 ints: ints,
41067 parts: cardMatches,
41068 matcher: matchers.card,
41069 asInt: 52,
41070 str: "card",
41071 }
41072 }
41073 var diceMatches = matchers.dice(str);
41074 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41075 var ints = diceMatches.map(function(i) { return parseInt(i) });
41076 return {
41077 ints: ints,
41078 parts: diceMatches,
41079 matcher: matchers.dice,
41080 asInt: 6,
41081 str: "dice",
41082 }
41083 }
41084 var base6Matches = matchers.base6(str);
41085 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41086 var ints = base6Matches.map(function(i) { return parseInt(i) });
41087 return {
41088 ints: ints,
41089 parts: base6Matches,
41090 matcher: matchers.base6,
41091 asInt: 6,
41092 str: "base 6",
41093 }
41094 }
41095 var base10Matches = matchers.base10(str);
41096 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41097 var ints = base10Matches.map(function(i) { return parseInt(i) });
41098 return {
41099 ints: ints,
41100 parts: base10Matches,
41101 matcher: matchers.base10,
41102 asInt: 10,
41103 str: "base 10",
41104 }
41105 }
41106 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41107 return {
41108 ints: ints,
41109 parts: hexMatches,
41110 matcher: matchers.hex,
41111 asInt: 16,
41112 str: "hexadecimal",
41113 }
41114 }
41115
41116 // Assume cards are NOT replaced.
41117 // Additional entropy decreases as more cards are used. This means
41118 // total possible entropy is measured using n!, not base^n.
41119 // eg the second last card can be only one of two, not one of fifty two
41120 // so the added entropy for that card is only one bit at most
41121 function processCardEntropy(cards) {
41122 // Track how many instances of each card have been used, and thus
41123 // how many decks are in use.
41124 var cardCounts = {};
41125 var numberOfDecks = 0;
41126 // Work out number of decks by max(duplicates)
41127 for (var i=0; i<cards.length; i++) {
41128 // Get the card that was drawn
41129 var cardLower = cards[i];
41130 var card = cardLower.toUpperCase();
41131 // Initialize the count for this card if needed
41132 if (!(card in cardCounts)) {
41133 cardCounts[card] = 0;
41134 }
41135 cardCounts[card] += 1;
41136 // See if this is max(duplicates)
41137 if (cardCounts[card] > numberOfDecks) {
41138 numberOfDecks = cardCounts[card];
41139 }
41140 }
41141 // Work out the total number of bits for this many decks
41142 // See http://crypto.stackexchange.com/q/41886
41143 var gainedBits = 0;
41144 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41145 // which becomes infinity for numberOfDecks > 4
41146 for (var i=1; i<=52*numberOfDecks; i++) {
41147 gainedBits = gainedBits + Math.log2(i);
41148 }
41149 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41150 var maxBits = gainedBits - lostBits;
41151 // Convert the drawn cards to a binary representation.
41152 // The exact technique for doing this is unclear.
41153 // See
41154 // http://crypto.stackexchange.com/a/41896
41155 // "I even doubt that this is well defined (only the average entropy
41156 // is, I believe)."
41157 // See
41158 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41159 // "The binary representation can be the first log(permutations,2) bits
41160 // of the sha-2 hash of the normalized deck string."
41161 //
41162 // In this specific implementation, the first N bits of the hash of the
41163 // normalized cards string is being used. Uppercase, no spaces; eg
41164 // sha256("AH8DQSTC2H")
41165 var totalCards = numberOfDecks * 52;
41166 var percentUsed = cards.length / totalCards;
41167 // Calculate the average number of bits of entropy for the number of
41168 // cards drawn.
41169 var numberOfBits = Math.floor(maxBits * percentUsed);
41170 // Create a normalized string of the selected cards
41171 var normalizedCards = cards.join("").toUpperCase();
41172 // Convert to binary using the SHA256 hash of the normalized cards.
41173 // If the number of bits is more than 256, multiple hashes
41174 // are used until the required number of bits is reached.
41175 var entropyBin = "";
41176 var iterations = 0;
41177 while (entropyBin.length < numberOfBits) {
41178 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
41179 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41180 for (var i=0; i<hashHex.length; i++) {
41181 var decimal = parseInt(hashHex[i], 16);
41182 var binary = decimal.toString(2);
41183 while (binary.length < 4) {
41184 binary = "0" + binary;
41185 }
41186 entropyBin = entropyBin + binary;
41187 }
41188 iterations = iterations + 1;
41189 }
41190 // Truncate to the appropriate number of bits.
41191 entropyBin = entropyBin.substring(0, numberOfBits);
41192 // Get the number of bits per event
41193 bitsPerEvent = maxBits / totalCards;
41194 return {
41195 binaryStr: entropyBin,
41196 bitsPerEvent: bitsPerEvent,
41197 }
41198 }
41199
41200 // Polyfill for Math.log2
41201 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41202 Math.log2 = Math.log2 || function(x) {
41203 // The polyfill isn't good enough because of the poor accuracy of
41204 // Math.LOG2E
41205 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41206 // So instead use the BigInteger library to get it right.
41207 return BigInteger.log(x) / BigInteger.log(2);
41208 };
41209
41210 // Depends on BigInteger
41211 function factorial(n) {
41212 if (n == 0) {
41213 return 1;
41214 }
41215 f = BigInteger.ONE;
41216 for (var i=1; i<=n; i++) {
41217 f = f.multiply(new BigInteger(i));
41218 }
41219 return f;
41220 }
41221
41222 })();
41223 </script>
41224 <script>(function() {
41225
41226 // mnemonics is populated as required by getLanguage
41227 var mnemonics = { "english": new Mnemonic("english") };
41228 var mnemonic = mnemonics["english"];
41229 var seed = null;
41230 var bip32RootKey = null;
41231 var bip32ExtendedKey = null;
41232 var network = bitcoin.networks.bitcoin;
41233 var addressRowTemplate = $("#address-row-template");
41234
41235 var showIndex = true;
41236 var showAddress = true;
41237 var showPubKey = true;
41238 var showPrivKey = true;
41239 var showQr = false;
41240
41241 var entropyChangeTimeoutEvent = null;
41242 var phraseChangeTimeoutEvent = null;
41243 var rootKeyChangedTimeoutEvent = null;
41244
41245 var generationProcesses = [];
41246
41247 var DOM = {};
41248 DOM.network = $(".network");
41249 DOM.bip32Client = $("#bip32-client");
41250 DOM.phraseNetwork = $("#network-phrase");
41251 DOM.useEntropy = $(".use-entropy");
41252 DOM.entropyContainer = $(".entropy-container");
41253 DOM.entropy = $(".entropy");
41254 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
41255 DOM.entropyType = DOM.entropyContainer.find(".type");
41256 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
41257 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
41258 DOM.entropyBits = DOM.entropyContainer.find(".bits");
41259 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
41260 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
41261 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
41262 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
41263 DOM.phrase = $(".phrase");
41264 DOM.passphrase = $(".passphrase");
41265 DOM.generateContainer = $(".generate-container");
41266 DOM.generate = $(".generate");
41267 DOM.seed = $(".seed");
41268 DOM.rootKey = $(".root-key");
41269 DOM.extendedPrivKey = $(".extended-priv-key");
41270 DOM.extendedPubKey = $(".extended-pub-key");
41271 DOM.bip32tab = $("#bip32-tab");
41272 DOM.bip44tab = $("#bip44-tab");
41273 DOM.bip32panel = $("#bip32");
41274 DOM.bip44panel = $("#bip44");
41275 DOM.bip32path = $("#bip32-path");
41276 DOM.bip44path = $("#bip44-path");
41277 DOM.bip44purpose = $("#bip44 .purpose");
41278 DOM.bip44coin = $("#bip44 .coin");
41279 DOM.bip44account = $("#bip44 .account");
41280 DOM.bip44accountXprv = $("#bip44 .account-xprv");
41281 DOM.bip44accountXpub = $("#bip44 .account-xpub");
41282 DOM.bip44change = $("#bip44 .change");
41283 DOM.generatedStrength = $(".generate-container .strength");
41284 DOM.hardenedAddresses = $(".hardened-addresses");
41285 DOM.addresses = $(".addresses");
41286 DOM.rowsToAdd = $(".rows-to-add");
41287 DOM.more = $(".more");
41288 DOM.feedback = $(".feedback");
41289 DOM.tab = $(".derivation-type a");
41290 DOM.indexToggle = $(".index-toggle");
41291 DOM.addressToggle = $(".address-toggle");
41292 DOM.publicKeyToggle = $(".public-key-toggle");
41293 DOM.privateKeyToggle = $(".private-key-toggle");
41294 DOM.languages = $(".languages a");
41295 DOM.qrContainer = $(".qr-container");
41296 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
41297 DOM.qrImage = DOM.qrContainer.find(".qr-image");
41298 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
41299 DOM.showQrEls = $("[data-show-qr]");
41300
41301 function init() {
41302 // Events
41303 DOM.network.on("change", networkChanged);
41304 DOM.bip32Client.on("change", bip32ClientChanged);
41305 DOM.useEntropy.on("change", setEntropyVisibility);
41306 DOM.entropy.on("input", delayedEntropyChanged);
41307 DOM.entropyMnemonicLength.on("change", entropyChanged);
41308 DOM.phrase.on("input", delayedPhraseChanged);
41309 DOM.passphrase.on("input", delayedPhraseChanged);
41310 DOM.generate.on("click", generateClicked);
41311 DOM.more.on("click", showMore);
41312 DOM.rootKey.on("input", delayedRootKeyChanged);
41313 DOM.bip32path.on("input", calcForDerivationPath);
41314 DOM.bip44purpose.on("input", calcForDerivationPath);
41315 DOM.bip44coin.on("input", calcForDerivationPath);
41316 DOM.bip44account.on("input", calcForDerivationPath);
41317 DOM.bip44change.on("input", calcForDerivationPath);
41318 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
41319 DOM.hardenedAddresses.on("change", calcForDerivationPath);
41320 DOM.indexToggle.on("click", toggleIndexes);
41321 DOM.addressToggle.on("click", toggleAddresses);
41322 DOM.publicKeyToggle.on("click", togglePublicKeys);
41323 DOM.privateKeyToggle.on("click", togglePrivateKeys);
41324 DOM.languages.on("click", languageChanged);
41325 setQrEvents(DOM.showQrEls);
41326 disableForms();
41327 hidePending();
41328 hideValidationError();
41329 populateNetworkSelect();
41330 populateClientSelect();
41331 }
41332
41333 // Event handlers
41334
41335 function networkChanged(e) {
41336 var networkIndex = e.target.value;
41337 networks[networkIndex].onSelect();
41338 if (seed != null) {
41339 phraseChanged();
41340 }
41341 else {
41342 rootKeyChanged();
41343 }
41344 }
41345
41346 function bip32ClientChanged(e) {
41347 var clientIndex = DOM.bip32Client.val();
41348 if (clientIndex == "custom") {
41349 DOM.bip32path.prop("readonly", false);
41350 }
41351 else {
41352 DOM.bip32path.prop("readonly", true);
41353 clients[clientIndex].onSelect();
41354 if (seed != null) {
41355 phraseChanged();
41356 }
41357 else {
41358 rootKeyChanged();
41359 }
41360 }
41361 }
41362
41363 function setEntropyVisibility() {
41364 if (isUsingOwnEntropy()) {
41365 DOM.entropyContainer.removeClass("hidden");
41366 DOM.generateContainer.addClass("hidden");
41367 DOM.phrase.prop("readonly", true);
41368 DOM.entropy.focus();
41369 entropyChanged();
41370 }
41371 else {
41372 DOM.entropyContainer.addClass("hidden");
41373 DOM.generateContainer.removeClass("hidden");
41374 DOM.phrase.prop("readonly", false);
41375 hidePending();
41376 }
41377 }
41378
41379 function delayedPhraseChanged() {
41380 hideValidationError();
41381 showPending();
41382 if (phraseChangeTimeoutEvent != null) {
41383 clearTimeout(phraseChangeTimeoutEvent);
41384 }
41385 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
41386 }
41387
41388 function phraseChanged() {
41389 showPending();
41390 hideValidationError();
41391 setMnemonicLanguage();
41392 // Get the mnemonic phrase
41393 var phrase = DOM.phrase.val();
41394 var errorText = findPhraseErrors(phrase);
41395 if (errorText) {
41396 showValidationError(errorText);
41397 return;
41398 }
41399 // Calculate and display
41400 var passphrase = DOM.passphrase.val();
41401 calcBip32RootKeyFromSeed(phrase, passphrase);
41402 calcForDerivationPath();
41403 hidePending();
41404 }
41405
41406 function delayedEntropyChanged() {
41407 hideValidationError();
41408 showPending();
41409 if (entropyChangeTimeoutEvent != null) {
41410 clearTimeout(entropyChangeTimeoutEvent);
41411 }
41412 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
41413 }
41414
41415 function entropyChanged() {
41416 // If blank entropy, clear mnemonic, addresses, errors
41417 if (DOM.entropy.val().trim().length == 0) {
41418 clearDisplay();
41419 clearEntropyFeedback();
41420 DOM.phrase.val("");
41421 showValidationError("Blank entropy");
41422 return;
41423 }
41424 // Get the current phrase to detect changes
41425 var phrase = DOM.phrase.val();
41426 // Set the phrase from the entropy
41427 setMnemonicFromEntropy();
41428 // Recalc addresses if the phrase has changed
41429 var newPhrase = DOM.phrase.val();
41430 if (newPhrase != phrase) {
41431 if (newPhrase.length == 0) {
41432 clearDisplay();
41433 }
41434 else {
41435 phraseChanged();
41436 }
41437 }
41438 else {
41439 hidePending();
41440 }
41441 }
41442
41443 function delayedRootKeyChanged() {
41444 // Warn if there is an existing mnemonic or passphrase.
41445 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
41446 if (!confirm("This will clear existing mnemonic and passphrase")) {
41447 DOM.rootKey.val(bip32RootKey);
41448 return
41449 }
41450 }
41451 hideValidationError();
41452 showPending();
41453 // Clear existing mnemonic and passphrase
41454 DOM.phrase.val("");
41455 DOM.passphrase.val("");
41456 seed = null;
41457 if (rootKeyChangedTimeoutEvent != null) {
41458 clearTimeout(rootKeyChangedTimeoutEvent);
41459 }
41460 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
41461 }
41462
41463 function rootKeyChanged() {
41464 showPending();
41465 hideValidationError();
41466 // Validate the root key TODO
41467 var rootKeyBase58 = DOM.rootKey.val();
41468 var errorText = validateRootKey(rootKeyBase58);
41469 if (errorText) {
41470 showValidationError(errorText);
41471 return;
41472 }
41473 // Calculate and display
41474 calcBip32RootKeyFromBase58(rootKeyBase58);
41475 calcForDerivationPath();
41476 }
41477
41478 function calcForDerivationPath() {
41479 showPending();
41480 clearAddressesList();
41481 hideValidationError();
41482 // Get the derivation path
41483 var derivationPath = getDerivationPath();
41484 var errorText = findDerivationPathErrors(derivationPath);
41485 if (errorText) {
41486 showValidationError(errorText);
41487 return;
41488 }
41489 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
41490 if (bip44TabSelected()) {
41491 displayBip44Info();
41492 }
41493 displayBip32Info();
41494 hidePending();
41495 }
41496
41497 function generateClicked() {
41498 if (isUsingOwnEntropy()) {
41499 return;
41500 }
41501 clearDisplay();
41502 showPending();
41503 setTimeout(function() {
41504 setMnemonicLanguage();
41505 var phrase = generateRandomPhrase();
41506 if (!phrase) {
41507 return;
41508 }
41509 phraseChanged();
41510 }, 50);
41511 }
41512
41513 function languageChanged() {
41514 setTimeout(function() {
41515 setMnemonicLanguage();
41516 if (DOM.phrase.val().length > 0) {
41517 var newPhrase = convertPhraseToNewLanguage();
41518 DOM.phrase.val(newPhrase);
41519 phraseChanged();
41520 }
41521 else {
41522 DOM.generate.trigger("click");
41523 }
41524 }, 50);
41525 }
41526
41527 function toggleIndexes() {
41528 showIndex = !showIndex;
41529 $("td.index span").toggleClass("invisible");
41530 }
41531
41532 function toggleAddresses() {
41533 showAddress = !showAddress;
41534 $("td.address span").toggleClass("invisible");
41535 }
41536
41537 function togglePublicKeys() {
41538 showPubKey = !showPubKey;
41539 $("td.pubkey span").toggleClass("invisible");
41540 }
41541
41542 function togglePrivateKeys() {
41543 showPrivKey = !showPrivKey;
41544 $("td.privkey span").toggleClass("invisible");
41545 }
41546
41547 // Private methods
41548
41549 function generateRandomPhrase() {
41550 if (!hasStrongRandom()) {
41551 var errorText = "This browser does not support strong randomness";
41552 showValidationError(errorText);
41553 return;
41554 }
41555 var numWords = parseInt(DOM.generatedStrength.val());
41556 var strength = numWords / 3 * 32;
41557 var words = mnemonic.generate(strength);
41558 DOM.phrase.val(words);
41559 return words;
41560 }
41561
41562 function calcBip32RootKeyFromSeed(phrase, passphrase) {
41563 seed = mnemonic.toSeed(phrase, passphrase);
41564 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
41565 }
41566
41567 function calcBip32RootKeyFromBase58(rootKeyBase58) {
41568 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
41569 }
41570
41571 function calcBip32ExtendedKey(path) {
41572 // Check there's a root key to derive from
41573 if (!bip32RootKey) {
41574 return bip32RootKey;
41575 }
41576 var extendedKey = bip32RootKey;
41577 // Derive the key from the path
41578 var pathBits = path.split("/");
41579 for (var i=0; i<pathBits.length; i++) {
41580 var bit = pathBits[i];
41581 var index = parseInt(bit);
41582 if (isNaN(index)) {
41583 continue;
41584 }
41585 var hardened = bit[bit.length-1] == "'";
41586 var isPriv = "privKey" in extendedKey;
41587 var invalidDerivationPath = hardened && !isPriv;
41588 if (invalidDerivationPath) {
41589 extendedKey = null;
41590 }
41591 else if (hardened) {
41592 extendedKey = extendedKey.deriveHardened(index);
41593 }
41594 else {
41595 extendedKey = extendedKey.derive(index);
41596 }
41597 }
41598 return extendedKey
41599 }
41600
41601 function showValidationError(errorText) {
41602 DOM.feedback
41603 .text(errorText)
41604 .show();
41605 }
41606
41607 function hideValidationError() {
41608 DOM.feedback
41609 .text("")
41610 .hide();
41611 }
41612
41613 function findPhraseErrors(phrase) {
41614 // Preprocess the words
41615 phrase = mnemonic.normalizeString(phrase);
41616 var words = phraseToWordArray(phrase);
41617 // Detect blank phrase
41618 if (words.length == 0) {
41619 return "Blank mnemonic";
41620 }
41621 // Check each word
41622 for (var i=0; i<words.length; i++) {
41623 var word = words[i];
41624 var language = getLanguage();
41625 if (WORDLISTS[language].indexOf(word) == -1) {
41626 console.log("Finding closest match to " + word);
41627 var nearestWord = findNearestWord(word);
41628 return word + " not in wordlist, did you mean " + nearestWord + "?";
41629 }
41630 }
41631 // Check the words are valid
41632 var properPhrase = wordArrayToPhrase(words);
41633 var isValid = mnemonic.check(properPhrase);
41634 if (!isValid) {
41635 return "Invalid mnemonic";
41636 }
41637 return false;
41638 }
41639
41640 function validateRootKey(rootKeyBase58) {
41641 try {
41642 bitcoin.HDNode.fromBase58(rootKeyBase58);
41643 }
41644 catch (e) {
41645 return "Invalid root key";
41646 }
41647 return "";
41648 }
41649
41650 function getDerivationPath() {
41651 if (bip44TabSelected()) {
41652 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
41653 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
41654 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
41655 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
41656 var path = "m/";
41657 path += purpose + "'/";
41658 path += coin + "'/";
41659 path += account + "'/";
41660 path += change;
41661 DOM.bip44path.val(path);
41662 var derivationPath = DOM.bip44path.val();
41663 console.log("Using derivation path from BIP44 tab: " + derivationPath);
41664 return derivationPath;
41665 }
41666 else if (bip32TabSelected()) {
41667 var derivationPath = DOM.bip32path.val();
41668 console.log("Using derivation path from BIP32 tab: " + derivationPath);
41669 return derivationPath;
41670 }
41671 else {
41672 console.log("Unknown derivation path");
41673 }
41674 }
41675
41676 function findDerivationPathErrors(path) {
41677 // TODO is not perfect but is better than nothing
41678 // Inspired by
41679 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
41680 // and
41681 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
41682 var maxDepth = 255; // TODO verify this!!
41683 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
41684 if (path[0] != "m") {
41685 return "First character must be 'm'";
41686 }
41687 if (path.length > 1) {
41688 if (path[1] != "/") {
41689 return "Separator must be '/'";
41690 }
41691 var indexes = path.split("/");
41692 if (indexes.length > maxDepth) {
41693 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
41694 }
41695 for (var depth = 1; depth<indexes.length; depth++) {
41696 var index = indexes[depth];
41697 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
41698 if (invalidChars.length > 0) {
41699 return "Invalid characters " + invalidChars + " found at depth " + depth;
41700 }
41701 var indexValue = parseInt(index.replace("'", ""));
41702 if (isNaN(depth)) {
41703 return "Invalid number at depth " + depth;
41704 }
41705 if (indexValue > maxIndexValue) {
41706 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
41707 }
41708 }
41709 }
41710 // Check root key exists or else derivation path is useless!
41711 if (!bip32RootKey) {
41712 return "No root key";
41713 }
41714 // Check no hardened derivation path when using xpub keys
41715 var hardened = path.indexOf("'") > -1;
41716 var isXpubkey = !("privKey" in bip32RootKey);
41717 if (hardened && isXpubkey) {
41718 return "Hardened derivation path is invalid with xpub key";
41719 }
41720 return false;
41721 }
41722
41723 function displayBip44Info() {
41724 // Get the derivation path for the account
41725 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
41726 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
41727 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
41728 var path = "m/";
41729 path += purpose + "'/";
41730 path += coin + "'/";
41731 path += account + "'/";
41732 // Calculate the account extended keys
41733 var accountExtendedKey = calcBip32ExtendedKey(path);
41734 var accountXprv = accountExtendedKey.toBase58();
41735 var accountXpub = accountExtendedKey.toBase58(false);
41736 // Display the extended keys
41737 DOM.bip44accountXprv.val(accountXprv);
41738 DOM.bip44accountXpub.val(accountXpub);
41739 }
41740
41741 function displayBip32Info() {
41742 // Display the key
41743 DOM.seed.val(seed);
41744 var rootKey = bip32RootKey.toBase58();
41745 DOM.rootKey.val(rootKey);
41746 var xprvkeyB58 = "NA";
41747 if (bip32ExtendedKey.privKey) {
41748 xprvkeyB58 = bip32ExtendedKey.toBase58();
41749 }
41750 var extendedPrivKey = xprvkeyB58;
41751 DOM.extendedPrivKey.val(extendedPrivKey);
41752 var extendedPubKey = bip32ExtendedKey.toBase58(false);
41753 DOM.extendedPubKey.val(extendedPubKey);
41754 // Display the addresses and privkeys
41755 clearAddressesList();
41756 displayAddresses(0, 20);
41757 }
41758
41759 function displayAddresses(start, total) {
41760 generationProcesses.push(new (function() {
41761
41762 var rows = [];
41763
41764 this.stop = function() {
41765 for (var i=0; i<rows.length; i++) {
41766 rows[i].shouldGenerate = false;
41767 }
41768 }
41769
41770 for (var i=0; i<total; i++) {
41771 var index = i + start;
41772 rows.push(new TableRow(index));
41773 }
41774
41775 })());
41776 }
41777
41778 function TableRow(index) {
41779
41780 var self = this;
41781 this.shouldGenerate = true;
41782 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
41783
41784 function init() {
41785 calculateValues();
41786 }
41787
41788 function calculateValues() {
41789 setTimeout(function() {
41790 if (!self.shouldGenerate) {
41791 return;
41792 }
41793 var key = "";
41794 if (useHardenedAddresses) {
41795 key = bip32ExtendedKey.deriveHardened(index);
41796 }
41797 else {
41798 key = bip32ExtendedKey.derive(index);
41799 }
41800 var address = key.getAddress().toString();
41801 var privkey = "NA";
41802 if (key.privKey) {
41803 privkey = key.privKey.toWIF(network);
41804 }
41805 var pubkey = key.pubKey.toHex();
41806 var indexText = getDerivationPath() + "/" + index;
41807 if (useHardenedAddresses) {
41808 indexText = indexText + "'";
41809 }
41810 // Ethereum values are different
41811 if (networks[DOM.network.val()].name == "Ethereum") {
41812 var privKeyBuffer = key.privKey.d.toBuffer();
41813 privkey = privKeyBuffer.toString('hex');
41814 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
41815 var hexAddress = addressBuffer.toString('hex');
41816 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
41817 address = ethUtil.addHexPrefix(checksumAddress);
41818 }
41819 addAddressToList(indexText, address, pubkey, privkey);
41820 }, 50)
41821 }
41822
41823 init();
41824
41825 }
41826
41827 function showMore() {
41828 var start = DOM.addresses.children().length;
41829 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
41830 if (isNaN(rowsToAdd)) {
41831 rowsToAdd = 20;
41832 DOM.rowsToAdd.val("20");
41833 }
41834 if (rowsToAdd > 200) {
41835 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
41836 msg += "Do you want to continue?";
41837 if (!confirm(msg)) {
41838 return;
41839 }
41840 }
41841 displayAddresses(start, rowsToAdd);
41842 }
41843
41844 function clearDisplay() {
41845 clearAddressesList();
41846 clearKey();
41847 hideValidationError();
41848 }
41849
41850 function clearAddressesList() {
41851 DOM.addresses.empty();
41852 stopGenerating();
41853 }
41854
41855 function stopGenerating() {
41856 while (generationProcesses.length > 0) {
41857 var generation = generationProcesses.shift();
41858 generation.stop();
41859 }
41860 }
41861
41862 function clearKey() {
41863 DOM.rootKey.val("");
41864 DOM.extendedPrivKey.val("");
41865 DOM.extendedPubKey.val("");
41866 }
41867
41868 function addAddressToList(indexText, address, pubkey, privkey) {
41869 var row = $(addressRowTemplate.html());
41870 // Elements
41871 var indexCell = row.find(".index span");
41872 var addressCell = row.find(".address span");
41873 var pubkeyCell = row.find(".pubkey span");
41874 var privkeyCell = row.find(".privkey span");
41875 // Content
41876 indexCell.text(indexText);
41877 addressCell.text(address);
41878 pubkeyCell.text(pubkey);
41879 privkeyCell.text(privkey);
41880 // Visibility
41881 if (!showIndex) {
41882 indexCell.addClass("invisible");
41883 }
41884 if (!showAddress) {
41885 addressCell.addClass("invisible");
41886 }
41887 if (!showPubKey) {
41888 pubkeyCell.addClass("invisible");
41889 }
41890 if (!showPrivKey) {
41891 privkeyCell.addClass("invisible");
41892 }
41893 DOM.addresses.append(row);
41894 var rowShowQrEls = row.find("[data-show-qr]");
41895 setQrEvents(rowShowQrEls);
41896 }
41897
41898 function hasStrongRandom() {
41899 return 'crypto' in window && window['crypto'] !== null;
41900 }
41901
41902 function disableForms() {
41903 $("form").on("submit", function(e) {
41904 e.preventDefault();
41905 });
41906 }
41907
41908 function parseIntNoNaN(val, defaultVal) {
41909 var v = parseInt(val);
41910 if (isNaN(v)) {
41911 return defaultVal;
41912 }
41913 return v;
41914 }
41915
41916 function showPending() {
41917 DOM.feedback
41918 .text("Calculating...")
41919 .show();
41920 }
41921
41922 function findNearestWord(word) {
41923 var language = getLanguage();
41924 var words = WORDLISTS[language];
41925 var minDistance = 99;
41926 var closestWord = words[0];
41927 for (var i=0; i<words.length; i++) {
41928 var comparedTo = words[i];
41929 if (comparedTo.indexOf(word) == 0) {
41930 return comparedTo;
41931 }
41932 var distance = Levenshtein.get(word, comparedTo);
41933 if (distance < minDistance) {
41934 closestWord = comparedTo;
41935 minDistance = distance;
41936 }
41937 }
41938 return closestWord;
41939 }
41940
41941 function hidePending() {
41942 DOM.feedback
41943 .text("")
41944 .hide();
41945 }
41946
41947 function populateNetworkSelect() {
41948 for (var i=0; i<networks.length; i++) {
41949 var network = networks[i];
41950 var option = $("<option>");
41951 option.attr("value", i);
41952 option.text(network.name);
41953 DOM.phraseNetwork.append(option);
41954 }
41955 }
41956
41957 function populateClientSelect() {
41958 for (var i=0; i<clients.length; i++) {
41959 var client = clients[i];
41960 var option = $("<option>");
41961 option.attr("value", i);
41962 option.text(client.name);
41963 DOM.bip32Client.append(option);
41964 }
41965 }
41966
41967 function getLanguage() {
41968 var defaultLanguage = "english";
41969 // Try to get from existing phrase
41970 var language = getLanguageFromPhrase();
41971 // Try to get from url if not from phrase
41972 if (language.length == 0) {
41973 language = getLanguageFromUrl();
41974 }
41975 // Default to English if no other option
41976 if (language.length == 0) {
41977 language = defaultLanguage;
41978 }
41979 return language;
41980 }
41981
41982 function getLanguageFromPhrase(phrase) {
41983 // Check if how many words from existing phrase match a language.
41984 var language = "";
41985 if (!phrase) {
41986 phrase = DOM.phrase.val();
41987 }
41988 if (phrase.length > 0) {
41989 var words = phraseToWordArray(phrase);
41990 var languageMatches = {};
41991 for (l in WORDLISTS) {
41992 // Track how many words match in this language
41993 languageMatches[l] = 0;
41994 for (var i=0; i<words.length; i++) {
41995 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
41996 if (wordInLanguage) {
41997 languageMatches[l]++;
41998 }
41999 }
42000 // Find languages with most word matches.
42001 // This is made difficult due to commonalities between Chinese
42002 // simplified vs traditional.
42003 var mostMatches = 0;
42004 var mostMatchedLanguages = [];
42005 for (var l in languageMatches) {
42006 var numMatches = languageMatches[l];
42007 if (numMatches > mostMatches) {
42008 mostMatches = numMatches;
42009 mostMatchedLanguages = [l];
42010 }
42011 else if (numMatches == mostMatches) {
42012 mostMatchedLanguages.push(l);
42013 }
42014 }
42015 }
42016 if (mostMatchedLanguages.length > 0) {
42017 // Use first language and warn if multiple detected
42018 language = mostMatchedLanguages[0];
42019 if (mostMatchedLanguages.length > 1) {
42020 console.warn("Multiple possible languages");
42021 console.warn(mostMatchedLanguages);
42022 }
42023 }
42024 }
42025 return language;
42026 }
42027
42028 function getLanguageFromUrl() {
42029 for (var language in WORDLISTS) {
42030 if (window.location.hash.indexOf(language) > -1) {
42031 return language;
42032 }
42033 }
42034 return "";
42035 }
42036
42037 function setMnemonicLanguage() {
42038 var language = getLanguage();
42039 // Load the bip39 mnemonic generator for this language if required
42040 if (!(language in mnemonics)) {
42041 mnemonics[language] = new Mnemonic(language);
42042 }
42043 mnemonic = mnemonics[language];
42044 }
42045
42046 function convertPhraseToNewLanguage() {
42047 var oldLanguage = getLanguageFromPhrase();
42048 var newLanguage = getLanguageFromUrl();
42049 var oldPhrase = DOM.phrase.val();
42050 var oldWords = phraseToWordArray(oldPhrase);
42051 var newWords = [];
42052 for (var i=0; i<oldWords.length; i++) {
42053 var oldWord = oldWords[i];
42054 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
42055 var newWord = WORDLISTS[newLanguage][index];
42056 newWords.push(newWord);
42057 }
42058 newPhrase = wordArrayToPhrase(newWords);
42059 return newPhrase;
42060 }
42061
42062 // TODO look at jsbip39 - mnemonic.splitWords
42063 function phraseToWordArray(phrase) {
42064 var words = phrase.split(/\s/g);
42065 var noBlanks = [];
42066 for (var i=0; i<words.length; i++) {
42067 var word = words[i];
42068 if (word.length > 0) {
42069 noBlanks.push(word);
42070 }
42071 }
42072 return noBlanks;
42073 }
42074
42075 // TODO look at jsbip39 - mnemonic.joinWords
42076 function wordArrayToPhrase(words) {
42077 var phrase = words.join(" ");
42078 var language = getLanguageFromPhrase(phrase);
42079 if (language == "japanese") {
42080 phrase = words.join("\u3000");
42081 }
42082 return phrase;
42083 }
42084
42085 function isUsingOwnEntropy() {
42086 return DOM.useEntropy.prop("checked");
42087 }
42088
42089 function setMnemonicFromEntropy() {
42090 clearEntropyFeedback();
42091 // Get entropy value
42092 var entropyStr = DOM.entropy.val();
42093 // Work out minimum base for entropy
42094 var entropy = Entropy.fromString(entropyStr);
42095 if (entropy.binaryStr.length == 0) {
42096 return;
42097 }
42098 // Show entropy details
42099 showEntropyFeedback(entropy);
42100 // Use entropy hash if not using raw entropy
42101 var bits = entropy.binaryStr;
42102 var mnemonicLength = DOM.entropyMnemonicLength.val();
42103 if (mnemonicLength != "raw") {
42104 // Get bits by hashing entropy with SHA256
42105 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
42106 var hex = sjcl.codec.hex.fromBits(hash);
42107 bits = BigInteger.parse(hex, 16).toString(2);
42108 while (bits.length % 256 != 0) {
42109 bits = "0" + bits;
42110 }
42111 // Truncate hash to suit number of words
42112 mnemonicLength = parseInt(mnemonicLength);
42113 var numberOfBits = 32 * mnemonicLength / 3;
42114 bits = bits.substring(0, numberOfBits);
42115 }
42116 // Discard trailing entropy
42117 var bitsToUse = Math.floor(bits.length / 32) * 32;
42118 var start = bits.length - bitsToUse;
42119 var binaryStr = bits.substring(start);
42120 // Convert entropy string to numeric array
42121 var entropyArr = [];
42122 for (var i=0; i<binaryStr.length / 8; i++) {
42123 var byteAsBits = binaryStr.substring(i*8, i*8+8);
42124 var entropyByte = parseInt(byteAsBits, 2);
42125 entropyArr.push(entropyByte)
42126 }
42127 // Convert entropy array to mnemonic
42128 var phrase = mnemonic.toMnemonic(entropyArr);
42129 // Set the mnemonic in the UI
42130 DOM.phrase.val(phrase);
42131 }
42132
42133 function clearEntropyFeedback() {
42134 DOM.entropyStrength.text("...");
42135 DOM.entropyType.text("");
42136 DOM.entropyWordCount.text("0");
42137 DOM.entropyEventCount.text("0");
42138 DOM.entropyBitsPerEvent.text("0");
42139 DOM.entropyBits.text("0");
42140 DOM.entropyFiltered.html("&nbsp;");
42141 DOM.entropyBinary.html("&nbsp;");
42142 }
42143
42144 function showEntropyFeedback(entropy) {
42145 var numberOfBits = entropy.binaryStr.length;
42146 var strength = "extremely weak";
42147 if (numberOfBits >= 64) {
42148 strength = "very weak";
42149 }
42150 if (numberOfBits >= 96) {
42151 strength = "weak";
42152 }
42153 if (numberOfBits >= 128) {
42154 strength = "strong";
42155 }
42156 if (numberOfBits >= 160) {
42157 strength = "very strong";
42158 }
42159 if (numberOfBits >= 192) {
42160 strength = "extremely strong";
42161 }
42162 // If time to crack is less than one day, and password is considered
42163 // strong or better based on the number of bits, rename strength to
42164 // 'easily cracked'.
42165 try {
42166 var z = zxcvbn(entropy.base.parts.join(""));
42167 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
42168 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
42169 strength = "easily cracked";
42170 if (z.feedback.warning != "") {
42171 strength = strength + " - " + z.feedback.warning;
42172 };
42173 }
42174 }
42175 catch (e) {
42176 strength = "unknown";
42177 console.log("Error detecting entropy strength with zxcvbn:");
42178 console.log(e);
42179 }
42180 var entropyTypeStr = getEntropyTypeStr(entropy);
42181 var wordCount = Math.floor(numberOfBits / 32) * 3;
42182 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
42183 DOM.entropyFiltered.html(entropy.cleanHtml);
42184 DOM.entropyType.text(entropyTypeStr);
42185 DOM.entropyStrength.text(strength);
42186 DOM.entropyEventCount.text(entropy.base.ints.length);
42187 DOM.entropyBits.text(numberOfBits);
42188 DOM.entropyWordCount.text(wordCount);
42189 DOM.entropyBinary.text(entropy.binaryStr);
42190 DOM.entropyBitsPerEvent.text(bitsPerEvent);
42191 }
42192
42193 function getEntropyTypeStr(entropy) {
42194 var typeStr = entropy.base.str;
42195 // Add some detail if these are cards
42196 if (entropy.base.asInt == 52) {
42197 var cardDetail = []; // array of message strings
42198 // Detect duplicates
42199 var dupes = [];
42200 var dupeTracker = {};
42201 for (var i=0; i<entropy.base.parts.length; i++) {
42202 var card = entropy.base.parts[i];
42203 var cardUpper = card.toUpperCase();
42204 if (cardUpper in dupeTracker) {
42205 dupes.push(card);
42206 }
42207 dupeTracker[cardUpper] = true;
42208 }
42209 if (dupes.length > 0) {
42210 var dupeWord = "duplicates";
42211 if (dupes.length == 1) {
42212 dupeWord = "duplicate";
42213 }
42214 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
42215 if (dupes.length > 3) {
42216 msg += "...";
42217 }
42218 cardDetail.push(msg);
42219 }
42220 // Detect full deck
42221 var uniqueCards = [];
42222 for (var uniqueCard in dupeTracker) {
42223 uniqueCards.push(uniqueCard);
42224 }
42225 if (uniqueCards.length == 52) {
42226 cardDetail.unshift("full deck");
42227 }
42228 // Detect missing cards
42229 var values = "A23456789TJQK";
42230 var suits = "CDHS";
42231 var missingCards = [];
42232 for (var i=0; i<suits.length; i++) {
42233 for (var j=0; j<values.length; j++) {
42234 var card = values[j] + suits[i];
42235 if (!(card in dupeTracker)) {
42236 missingCards.push(card);
42237 }
42238 }
42239 }
42240 // Display missing cards if six or less, ie clearly going for full deck
42241 if (missingCards.length > 0 && missingCards.length <= 6) {
42242 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
42243 if (missingCards.length > 3) {
42244 msg += "...";
42245 }
42246 cardDetail.push(msg);
42247 }
42248 // Add card details to typeStr
42249 if (cardDetail.length > 0) {
42250 typeStr += " (" + cardDetail.join(", ") + ")";
42251 }
42252 }
42253 return typeStr;
42254 }
42255
42256 function setQrEvents(els) {
42257 els.on("mouseenter", createQr);
42258 els.on("mouseleave", destroyQr);
42259 els.on("click", toggleQr);
42260 }
42261
42262 function createQr(e) {
42263 var content = e.target.textContent || e.target.value;
42264 if (content) {
42265 var size = 130;
42266 DOM.qrImage.qrcode({width: size, height: size, text: content});
42267 if (!showQr) {
42268 DOM.qrHider.addClass("hidden");
42269 }
42270 else {
42271 DOM.qrHider.removeClass("hidden");
42272 }
42273 DOM.qrContainer.removeClass("hidden");
42274 }
42275 }
42276
42277 function destroyQr() {
42278 DOM.qrImage.text("");
42279 DOM.qrContainer.addClass("hidden");
42280 }
42281
42282 function toggleQr() {
42283 showQr = !showQr;
42284 DOM.qrHider.toggleClass("hidden");
42285 DOM.qrHint.toggleClass("hidden");
42286 }
42287
42288 function bip44TabSelected() {
42289 return DOM.bip44tab.hasClass("active");
42290 }
42291
42292 function bip32TabSelected() {
42293 return DOM.bip32tab.hasClass("active");
42294 }
42295
42296 var networks = [
42297 {
42298 name: "Bitcoin",
42299 onSelect: function() {
42300 network = bitcoin.networks.bitcoin;
42301 DOM.bip44coin.val(0);
42302 },
42303 },
42304 {
42305 name: "Bitcoin Testnet",
42306 onSelect: function() {
42307 network = bitcoin.networks.testnet;
42308 DOM.bip44coin.val(1);
42309 },
42310 },
42311 {
42312 name: "CLAM",
42313 onSelect: function() {
42314 network = bitcoin.networks.clam;
42315 DOM.bip44coin.val(23);
42316 },
42317 },
42318 {
42319 name: "Dogecoin",
42320 onSelect: function() {
42321 network = bitcoin.networks.dogecoin;
42322 DOM.bip44coin.val(3);
42323 },
42324 },
42325 {
42326 name: "DASH",
42327 onSelect: function() {
42328 network = bitcoin.networks.dash;
42329 DOM.bip44coin.val(5);
42330 },
42331 },
42332 {
42333 name: "Ethereum",
42334 onSelect: function() {
42335 network = bitcoin.networks.bitcoin;
42336 DOM.bip44coin.val(60);
42337 },
42338 },
42339 {
42340 name: "Jumbucks",
42341 onSelect: function() {
42342 network = bitcoin.networks.jumbucks;
42343 DOM.bip44coin.val(26);
42344 },
42345 },
42346 {
42347 name: "Litecoin",
42348 onSelect: function() {
42349 network = bitcoin.networks.litecoin;
42350 DOM.bip44coin.val(2);
42351 },
42352 },
42353 {
42354 name: "Namecoin",
42355 onSelect: function() {
42356 network = bitcoin.networks.namecoin;
42357 DOM.bip44coin.val(7);
42358 },
42359 },
42360 {
42361 name: "Peercoin",
42362 onSelect: function() {
42363 network = bitcoin.networks.peercoin;
42364 DOM.bip44coin.val(6);
42365 },
42366 },
42367 {
42368 name: "ShadowCash",
42369 onSelect: function() {
42370 network = bitcoin.networks.shadow;
42371 DOM.bip44coin.val(35);
42372 },
42373 },
42374 {
42375 name: "ShadowCash Testnet",
42376 onSelect: function() {
42377 network = bitcoin.networks.shadowtn;
42378 DOM.bip44coin.val(1);
42379 },
42380 },
42381 {
42382 name: "Viacoin",
42383 onSelect: function() {
42384 network = bitcoin.networks.viacoin;
42385 DOM.bip44coin.val(14);
42386 },
42387 },
42388 {
42389 name: "Viacoin Testnet",
42390 onSelect: function() {
42391 network = bitcoin.networks.viacointestnet;
42392 DOM.bip44coin.val(1);
42393 },
42394 },
42395 ]
42396
42397 var clients = [
42398 {
42399 name: "Bitcoin Core",
42400 onSelect: function() {
42401 DOM.bip32path.val("m/0'/0'");
42402 DOM.hardenedAddresses.prop('checked', true);
42403 },
42404 },
42405 {
42406 name: "blockchain.info",
42407 onSelect: function() {
42408 DOM.bip32path.val("m/44'/0'/0'");
42409 DOM.hardenedAddresses.prop('checked', false);
42410 },
42411 },
42412 {
42413 name: "MultiBit HD",
42414 onSelect: function() {
42415 DOM.bip32path.val("m/0'/0");
42416 DOM.hardenedAddresses.prop('checked', false);
42417 },
42418 }
42419 ]
42420
42421 init();
42422
42423 })();
42424 </script>
42425 </body>
42426 </html>