]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #71 from LedgerHQ/master
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
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)
ab78acc6
IC
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" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
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 }
d5dc92fd
IC
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 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
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 }
e00964cc
IC
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 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
ab78acc6
IC
110 </style>
111 </head>
112 <body>
113 <div class="container">
3af2954a 114
ab78acc6
IC
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">
ab78acc6 121 <div class="form-group">
c6624d51
IC
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
ea87f1d3
IC
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>
c6624d51
IC
129 </div>
130 </div>
131 <div class="form-group generate-container">
b0818b31 132 <label class="col-sm-2 control-label"></label>
ab78acc6 133 <div class="col-sm-10">
b0818b31
IC
134 <div class="form-inline">
135 <div class="input-group-inline">
ea87f1d3 136 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 137 <button class="btn generate">Generate</button>
b0818b31
IC
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>
ea87f1d3 148 <span data-translate>words</span>
b0818b31
IC
149 </div>
150 </div>
ab78acc6 151 </div>
0515eeec 152 </div>
c6624d51 153 <div class="entropy-container hidden">
2a6dd137 154 <div class="form-group text-danger">
ea87f1d3 155 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 156 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
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>
18abe53b
IC
159 </div>
160 </div>
2a6dd137 161 <div class="form-group">
ea87f1d3 162 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 163 <div class="col-sm-7">
ea87f1d3 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>
95f04905 165 <div class="row">
ea87f1d3 166 <label class="col-sm-3 control-label" data-translate>Strength</label>
95f04905 167 <div class="strength col-sm-3 form-control-static"></div>
ea87f1d3 168 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
169 <div class="event-count col-sm-3 form-control-static"></div>
170 </div>
171 <div class="row">
ea87f1d3 172 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 173 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 174 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
175 <div class="bits-per-event col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
ea87f1d3 178 <label class="col-sm-3 control-label" data-translate>Word Count</label>
95f04905 179 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 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>
95f04905
IC
181 <div class="bits col-sm-3 form-control-static"></div>
182 </div>
ea87f1d3 183 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 184 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 185 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 186 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 187 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 188 <div class="col-sm-9">
18abe53b 189 <select class="mnemonic-length form-control">
5ed50bd9 190 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 191 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 192 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
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>
18abe53b 196 </select>
c6624d51 197 </div>
18abe53b 198 </div>
2a6dd137 199 <div class="col-sm-3">
ea87f1d3 200 <p data-translate>Valid entropy values include:</p>
2a6dd137 201 <ul>
ea87f1d3
IC
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>
2a6dd137
IC
208 </ul>
209 </div>
c6624d51
IC
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">
ea87f1d3 217 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
218 </label>
219 </div>
220 </div>
221 <div class="form-group">
ea87f1d3 222 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 223 <div class="col-sm-10 languages">
ea87f1d3
IC
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>
0515eeec 233 </div>
ab78acc6
IC
234 </div>
235 <div class="form-group">
ea87f1d3 236 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 237 <div class="col-sm-10">
e00964cc 238 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
239 </div>
240 </div>
241 <div class="form-group">
ea87f1d3 242 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
243 <div class="col-sm-10">
244 <textarea id="passphrase" class="passphrase form-control"></textarea>
245 </div>
246 </div>
73161a92 247 <div class="form-group">
ea87f1d3 248 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 249 <div class="col-sm-10">
e00964cc 250 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
251 </div>
252 </div>
ab78acc6 253 <div class="form-group">
ea87f1d3 254 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
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">
ea87f1d3 262 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 263 <div class="col-sm-10">
e00964cc 264 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
265 </div>
266 </div>
267 </form>
268 </div>
269 </div>
3af2954a 270
ab78acc6 271 <hr>
3af2954a 272
ab78acc6
IC
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">
d5dc92fd 277 <li id="bip44-tab" class="active">
ab78acc6
IC
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">
d5dc92fd 285 <div id="bip44" class="tab-pane active">
ab78acc6
IC
286 <form class="form-horizontal" role="form">
287 <br>
288 <div class="col-sm-2"></div>
289 <div class="col-sm-10">
ea87f1d3
IC
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>
ab78acc6
IC
294 </div>
295 <div class="form-group">
296 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 297 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
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">
ea87f1d3 305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
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">
ea87f1d3 313 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
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">
ea87f1d3 321 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
322 </label>
323 <div class="col-sm-10">
324 <input id="change" type="text" class="change form-control" value="0">
325 </div>
326 </div>
20083ab9
IC
327 <div class="form-group">
328 <label class="col-sm-2 control-label">
329 </label>
330 <div class="col-sm-10">
f3bfd2a5 331 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
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>
ab78acc6 357 <div class="form-group">
ea87f1d3 358 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
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">
ea87f1d3
IC
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>
ab78acc6 374 </div>
56530adc
IC
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>
ab78acc6 384 <div class="form-group">
ea87f1d3 385 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
386 <div class="col-sm-10">
387 <input id="bip32-path" type="text" class="path form-control" value="m/0">
388 </div>
389 </div>
1975bfbc
IC
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">
ea87f1d3 394 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
395 </label>
396 </div>
1975bfbc 397 <div class="form-group">
ea87f1d3 398 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 399 <div class="col-sm-10">
ea87f1d3 400 <p class="form-control no-border" data-translate-html>
1975bfbc 401 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 402 </p>
ea87f1d3
IC
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>
1975bfbc
IC
406 </p>
407 </div>
408 </div>
56530adc
IC
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>
aa51da11 421 <div class="form-group">
ea87f1d3 422 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
423 <div class="col-sm-10">
424 <p class="form-control no-border">
ea87f1d3
IC
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>
c866242d
IC
427 </p>
428 <p class="form-control no-border">
ea87f1d3
IC
429 <span data-translate>Can be used with</span>:
430 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
431 </p>
432 </div>
433 </div>
ab78acc6
IC
434 </form>
435 </div>
436 </div>
437 <form class="form-horizontal" role="form">
438 <div class="form-group">
20083ab9 439 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 440 <div class="col-sm-10">
e00964cc 441 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
442 </div>
443 </div>
444 <div class="form-group">
20083ab9 445 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 446 <div class="col-sm-10">
e00964cc 447 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
448 </div>
449 </div>
450 </form>
451 </div>
452 </div>
3af2954a 453
ab78acc6 454 <hr>
3af2954a 455
ab78acc6
IC
456 <div class="row">
457 <div class="col-md-12">
458 <h2>Derived Addresses</h2>
ea87f1d3 459 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
460 <table class="table table-striped">
461 <thead>
462 <th>
463 <div class="input-group">
ea87f1d3
IC
464 <span data-translate>Path</span>&nbsp;&nbsp;
465 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
466 </div>
467 </th>
468 <th>
469 <div class="input-group">
ea87f1d3
IC
470 <span data-translate>Address</span>&nbsp;&nbsp;
471 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
472 </div>
473 </th>
1b12b2f5
IC
474 <th>
475 <div class="input-group">
ea87f1d3
IC
476 <span data-translate>Public Key</span>&nbsp;&nbsp;
477 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
478 </div>
479 </th>
ab78acc6
IC
480 <th>
481 <div class="input-group">
ea87f1d3
IC
482 <span data-translate>Private Key</span>&nbsp;&nbsp;
483 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
484 </div>
485 </th>
486 </thead>
d737abf6 487 <tbody class="addresses monospace">
c866242d
IC
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>
ab78acc6
IC
493 </tbody>
494 </table>
495 </div>
496 </div>
ea87f1d3 497 <span data-translate>Show more rows</span>:
ab78acc6 498 <input type="number" class="rows-to-add" value="20">
ea87f1d3 499 <button class="more" data-translate>Show</button>
3af2954a 500
ab78acc6 501 <hr>
3af2954a 502
ab78acc6
IC
503 <div class="row">
504 <div class="col-md-12">
ea87f1d3
IC
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>
ab78acc6
IC
508 Read more at the
509 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
510 </p>
ea87f1d3
IC
511 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
512 <p data-translate-html>
ab78acc6
IC
513 Read more at the
514 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
515 </p>
516 <p data-translate-html>
517 See the demo at
ab78acc6
IC
518 <a href="http://bip32.org/" target="_blank">bip32.org</a>
519 </p>
ea87f1d3
IC
520 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
521 <p data-translate-html>
ab78acc6
IC
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>
ea87f1d3 525 <h3 data-translate>Private Keys</h3>
ab78acc6 526 <p>
ea87f1d3
IC
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>
ab78acc6 532 </p>
ea87f1d3 533 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 534 <p>
ea87f1d3
IC
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>
c6624d51 545 </p>
434caecd
IC
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>
c6624d51 554 <p>
ea87f1d3
IC
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>
c6624d51
IC
562 </p>
563 <p>
ea87f1d3 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>
c6624d51 565 </p>
52da415f
IC
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>
ab78acc6
IC
572 </div>
573 </div>
3af2954a 574
ab78acc6 575 <hr>
3af2954a 576
ab78acc6
IC
577 <div class="row">
578 <div class="col-md-12">
3af2954a 579
ea87f1d3 580 <h2 data-translate>Offline Usage</h2>
3af2954a 581
ea87f1d3 582 <p data-translate>
ab78acc6
IC
583 You can use this tool without having to be online.
584 </p>
ea87f1d3 585 <p data-translate>
ab78acc6
IC
586 In your browser, select file save-as, and save this page
587 as a file.
588 </p>
ea87f1d3 589 <p data-translate>
ab78acc6
IC
590 Double-click that file to open it in a browser
591 on any offline computer.
592 </p>
593 <p>
ea87f1d3
IC
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>
3af2954a 598
ab78acc6
IC
599 </div>
600 </div>
3af2954a 601
ab78acc6 602 <hr>
3af2954a 603
ab78acc6
IC
604 <div class="row">
605 <div class="col-md-12">
3af2954a 606
ea87f1d3 607 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 608
ab78acc6 609 <p>
ea87f1d3
IC
610 <span data-translate>Get the source code from the repository</span>
611 -
b630f83d
IC
612 <a href="https://github.com/iancoleman/bip39" target="_blank">
613 https://github.com/iancoleman/bip39
ab78acc6
IC
614 </a>
615 </p>
3af2954a 616
ea87f1d3 617 <h3 data-translate>Libraries</h3>
3af2954a 618
ab78acc6
IC
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>
3af2954a 625
ab78acc6
IC
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>
3af2954a 632
ab78acc6
IC
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>
3af2954a 639
ab78acc6
IC
640 <p>
641 <span>jQuery - </span>
642 <a href="https://jquery.com/" target="_blank">
643 https://jquery.com/
644 </a>
645 </p>
3af2954a 646
ab78acc6
IC
647 <p>
648 <span>Twitter Bootstrap - </span>
649 <a href="http://getbootstrap.com/" target="_blank">
650 http://getbootstrap.com/
651 </a>
652 </p>
3af2954a 653
ab78acc6
IC
654 </div>
655 </div>
3af2954a 656
ab78acc6 657 </div>
3af2954a 658
e00964cc 659 <div class="qr-container hidden">
52da415f
IC
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>
e00964cc
IC
666 </div>
667
ab78acc6
IC
668 <div class="feedback-container">
669 <div class="feedback">Loading...</div>
670 </div>
3af2954a 671
ab78acc6
IC
672 <script type="text/template" id="address-row-template">
673 <tr>
674 <td class="index"><span></span></td>
e00964cc
IC
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>
ab78acc6
IC
678 </tr>
679 </script>
8b095871
IC
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//----------------------------------------------------------------------
563e401a 692
8b095871
IC
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);
563e401a 728 }
8b095871
IC
729 return desc;
730 }
563e401a 731
8b095871
IC
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']));
563e401a 739
8b095871
IC
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 });
563e401a 753 } else {
8b095871
IC
754 Object.defineProperty(o, p, {
755 value: v,
756 configurable: false,
757 enumerable: false,
758 writable: false
759 });
563e401a 760 }
8b095871 761 }
563e401a 762
8b095871
IC
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 }
563e401a 771
8b095871
IC
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 }
563e401a 817
8b095871
IC
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;
563e401a 846 }
8b095871
IC
847 };
848 }
563e401a 849
8b095871 850 var empty = Object.create(null);
563e401a 851
8b095871
IC
852 //----------------------------------------------------------------------
853 //
854 // ECMAScript 2015
855 // http://www.ecma-international.org/ecma-262/6.0/
856 //
857 //----------------------------------------------------------------------
563e401a 858
8b095871
IC
859 // ---------------------------------------
860 // 19.4 Symbol Objects
861 // ---------------------------------------
563e401a 862
8b095871
IC
863 // NOTE: Symbols are defined here - out of spec order - since we need the
864 // properties and prototype to be populated for other polyfills.
563e401a 865
8b095871 866 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 867
8b095871
IC
868 var symbolForKey;
869 (function() {
870 var secret = Object.create(null);
871 var symbolMap = {};
872 symbolForKey = function(k) {
873 return symbolMap[k];
874 };
563e401a 875
8b095871 876 var GlobalSymbolRegistry = [];
563e401a 877
8b095871
IC
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 }
563e401a 883
8b095871
IC
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();
563e401a 889
8b095871
IC
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]]'];
563e401a 910 }
8b095871
IC
911 var newSymbol = Symbol(key);
912 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
913 return newSymbol;
914 });
563e401a 915
8b095871
IC
916 // 19.4.2.2 Symbol.hasInstance
917 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 918
8b095871
IC
919 // 19.4.2.4 Symbol.iterator
920 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 921
8b095871
IC
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 });
563e401a 931
8b095871
IC
932 // 19.4.2.6 Symbol.match
933 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 934
8b095871 935 // 19.4.2.7 Symbol.prototype
563e401a 936
8b095871
IC
937 // 19.4.2.8 Symbol.replace
938 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 939
8b095871
IC
940 // 19.4.2.9 Symbol.search
941 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 942
8b095871 943 // 19.4.2.10 Symbol.species
563e401a 944
8b095871
IC
945 // 19.4.2.11 Symbol.search
946 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 947
8b095871 948 // 19.4.2.12 Symbol.toPrimitive
563e401a 949
8b095871
IC
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';
563e401a 1012 }
8b095871 1013 }
563e401a 1014
8b095871
IC
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;
563e401a 1022
8b095871
IC
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));
563e401a 1046 }
8b095871
IC
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;
563e401a 1077 }
8b095871
IC
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);
563e401a 1086 }
563e401a 1087
8b095871
IC
1088 // 7.1.14 ToPropertyKey ( argument )
1089 function ToPropertyKey(v) {
1090 return String(v);
1091 }
3af2954a 1092
8b095871
IC
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
ab78acc6 1099 }
3af2954a 1100
8b095871 1101 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1102
8b095871
IC
1103 //----------------------------------------
1104 // 7.2 Testing and Comparison Operations
1105 //----------------------------------------
3af2954a 1106
8b095871
IC
1107 // 7.2.1 RequireObjectCoercible ( argument )
1108 // 7.2.2 IsArray ( argument )
3af2954a 1109
8b095871
IC
1110 // 7.2.3 IsCallable ( argument )
1111 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1112
8b095871
IC
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';
3af2954a 1120 }
8b095871
IC
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;
3af2954a
IC
1130 }
1131
8b095871
IC
1132 // 7.2.8 IsRegExp ( argument )
1133 // 7.2.5 IsConstructor ( argument )
3af2954a 1134
8b095871
IC
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 }
3af2954a 1152
8b095871
IC
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 }
3af2954a 1169
8b095871
IC
1170 //----------------------------------------
1171 // 7.3 Operations on Objects
1172 //----------------------------------------
3af2954a 1173
8b095871
IC
1174 // 7.3.1 Get (O, P)
1175 // - just use o.p or o[p]
3af2954a 1176
8b095871
IC
1177 // 7.3.2 GetV (V, P)
1178 function GetV(v, p) {
1179 var o = ToObject(v);
1180 return o[p];
1181 }
3af2954a 1182
8b095871
IC
1183 // 7.3.3 Set (O, P, V, Throw)
1184 // - just use o.p = v or o[p] = v
3af2954a 1185
3af2954a 1186
3af2954a 1187
3af2954a 1188
8b095871
IC
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;
ab78acc6 1195 }
8b095871
IC
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);
ab78acc6 1203 }
8b095871 1204 return false;
ab78acc6 1205 }
8b095871
IC
1206
1207 // 7.3.11 HasOwnProperty (O, P)
1208 function HasOwnProperty(o, p) {
1209 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1210 }
3af2954a 1211
8b095871
IC
1212 //----------------------------------------
1213 // 7.4 Operations on Iterator Objects
1214 //----------------------------------------
3af2954a 1215
8b095871
IC
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;
3af2954a
IC
1223 }
1224
8b095871
IC
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 }
3af2954a 1234
8b095871
IC
1235 // 7.4.3 IteratorComplete ( iterResult )
1236 function IteratorComplete(iterResult) {
1237 console.assert(Type(iterResult) === 'object');
1238 return Boolean(iterResult.done);
1239 }
3af2954a 1240
8b095871
IC
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.
4470function __cons(t, a) {
4471 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4472}
6e0f24b1 4473</script>
8a1f452d 4474 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.foo = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
4475'use strict'
4476
4477exports.byteLength = byteLength
4478exports.toByteArray = toByteArray
4479exports.fromByteArray = fromByteArray
4480
4481var lookup = []
4482var revLookup = []
4483var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4484
4485var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4486for (var i = 0, len = code.length; i < len; ++i) {
4487 lookup[i] = code[i]
4488 revLookup[code.charCodeAt(i)] = i
4489}
4490
4491revLookup['-'.charCodeAt(0)] = 62
4492revLookup['_'.charCodeAt(0)] = 63
4493
4494function placeHoldersCount (b64) {
4495 var len = b64.length
4496 if (len % 4 > 0) {
4497 throw new Error('Invalid string. Length must be a multiple of 4')
4498 }
4499
4500 // the number of equal signs (place holders)
4501 // if there are two placeholders, than the two characters before it
4502 // represent one byte
4503 // if there is only one, then the three characters before it represent 2 bytes
4504 // this is just a cheap hack to not do indexOf twice
4505 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4506}
4507
4508function byteLength (b64) {
4509 // base64 is 4/3 + up to two characters of the original data
4510 return b64.length * 3 / 4 - placeHoldersCount(b64)
4511}
4512
4513function toByteArray (b64) {
4514 var i, j, l, tmp, placeHolders, arr
4515 var len = b64.length
4516 placeHolders = placeHoldersCount(b64)
4517
4518 arr = new Arr(len * 3 / 4 - placeHolders)
4519
4520 // if there are placeholders, only get up to the last complete 4 chars
4521 l = placeHolders > 0 ? len - 4 : len
4522
4523 var L = 0
4524
4525 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4526 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4527 arr[L++] = (tmp >> 16) & 0xFF
4528 arr[L++] = (tmp >> 8) & 0xFF
4529 arr[L++] = tmp & 0xFF
4530 }
4531
4532 if (placeHolders === 2) {
4533 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4534 arr[L++] = tmp & 0xFF
4535 } else if (placeHolders === 1) {
4536 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4537 arr[L++] = (tmp >> 8) & 0xFF
4538 arr[L++] = tmp & 0xFF
4539 }
4540
4541 return arr
4542}
4543
4544function tripletToBase64 (num) {
4545 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4546}
4547
4548function encodeChunk (uint8, start, end) {
4549 var tmp
4550 var output = []
4551 for (var i = start; i < end; i += 3) {
4552 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4553 output.push(tripletToBase64(tmp))
4554 }
4555 return output.join('')
4556}
4557
4558function fromByteArray (uint8) {
4559 var tmp
4560 var len = uint8.length
4561 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4562 var output = ''
4563 var parts = []
4564 var maxChunkLength = 16383 // must be multiple of 3
4565
4566 // go through the array every three bytes, we'll deal with trailing stuff later
4567 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4568 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4569 }
4570
4571 // pad the end with zeros, but make sure to not forget the extra bytes
4572 if (extraBytes === 1) {
4573 tmp = uint8[len - 1]
4574 output += lookup[tmp >> 2]
4575 output += lookup[(tmp << 4) & 0x3F]
4576 output += '=='
4577 } else if (extraBytes === 2) {
4578 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4579 output += lookup[tmp >> 10]
4580 output += lookup[(tmp >> 4) & 0x3F]
4581 output += lookup[(tmp << 2) & 0x3F]
4582 output += '='
4583 }
4584
4585 parts.push(output)
4586
4587 return parts.join('')
4588}
4589
4590},{}],2:[function(require,module,exports){
4591/*!
4592 * The buffer module from node.js, for the browser.
4593 *
4594 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4595 * @license MIT
4596 */
4597/* eslint-disable no-proto */
4598
4599'use strict'
4600
4601var base64 = require('base64-js')
4602var ieee754 = require('ieee754')
4603
4604exports.Buffer = Buffer
4605exports.SlowBuffer = SlowBuffer
4606exports.INSPECT_MAX_BYTES = 50
4607
4608var K_MAX_LENGTH = 0x7fffffff
4609exports.kMaxLength = K_MAX_LENGTH
4610
4611/**
4612 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4613 * === true Use Uint8Array implementation (fastest)
4614 * === false Print warning and recommend using `buffer` v4.x which has an Object
4615 * implementation (most compatible, even IE6)
4616 *
4617 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4618 * Opera 11.6+, iOS 4.2+.
4619 *
4620 * We report that the browser does not support typed arrays if the are not subclassable
4621 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4622 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4623 * for __proto__ and has a buggy typed array implementation.
4624 */
4625Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4626
4627if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4628 typeof console.error === 'function') {
4629 console.error(
4630 'This browser lacks typed array (Uint8Array) support which is required by ' +
4631 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4632 )
4633}
4634
4635function typedArraySupport () {
4636 // Can typed array instances can be augmented?
4637 try {
4638 var arr = new Uint8Array(1)
4639 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4640 return arr.foo() === 42
4641 } catch (e) {
4642 return false
4643 }
4644}
4645
4646function createBuffer (length) {
4647 if (length > K_MAX_LENGTH) {
4648 throw new RangeError('Invalid typed array length')
4649 }
4650 // Return an augmented `Uint8Array` instance
4651 var buf = new Uint8Array(length)
4652 buf.__proto__ = Buffer.prototype
4653 return buf
4654}
4655
4656/**
4657 * The Buffer constructor returns instances of `Uint8Array` that have their
4658 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4659 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4660 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4661 * returns a single octet.
4662 *
4663 * The `Uint8Array` prototype remains unmodified.
4664 */
4665
4666function Buffer (arg, encodingOrOffset, length) {
4667 // Common case.
4668 if (typeof arg === 'number') {
4669 if (typeof encodingOrOffset === 'string') {
4670 throw new Error(
4671 'If encoding is specified then the first argument must be a string'
4672 )
4673 }
4674 return allocUnsafe(arg)
4675 }
4676 return from(arg, encodingOrOffset, length)
4677}
4678
4679// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4680if (typeof Symbol !== 'undefined' && Symbol.species &&
4681 Buffer[Symbol.species] === Buffer) {
4682 Object.defineProperty(Buffer, Symbol.species, {
4683 value: null,
4684 configurable: true,
4685 enumerable: false,
4686 writable: false
4687 })
4688}
4689
4690Buffer.poolSize = 8192 // not used by this implementation
4691
4692function from (value, encodingOrOffset, length) {
4693 if (typeof value === 'number') {
4694 throw new TypeError('"value" argument must not be a number')
4695 }
4696
4697 if (value instanceof ArrayBuffer) {
4698 return fromArrayBuffer(value, encodingOrOffset, length)
4699 }
4700
4701 if (typeof value === 'string') {
4702 return fromString(value, encodingOrOffset)
4703 }
4704
4705 return fromObject(value)
4706}
4707
4708/**
4709 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4710 * if value is a number.
4711 * Buffer.from(str[, encoding])
4712 * Buffer.from(array)
4713 * Buffer.from(buffer)
4714 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4715 **/
4716Buffer.from = function (value, encodingOrOffset, length) {
4717 return from(value, encodingOrOffset, length)
4718}
4719
4720// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4721// https://github.com/feross/buffer/pull/148
4722Buffer.prototype.__proto__ = Uint8Array.prototype
4723Buffer.__proto__ = Uint8Array
4724
4725function assertSize (size) {
4726 if (typeof size !== 'number') {
4727 throw new TypeError('"size" argument must be a number')
4728 } else if (size < 0) {
4729 throw new RangeError('"size" argument must not be negative')
4730 }
4731}
4732
4733function alloc (size, fill, encoding) {
4734 assertSize(size)
4735 if (size <= 0) {
4736 return createBuffer(size)
4737 }
4738 if (fill !== undefined) {
4739 // Only pay attention to encoding if it's a string. This
4740 // prevents accidentally sending in a number that would
4741 // be interpretted as a start offset.
4742 return typeof encoding === 'string'
4743 ? createBuffer(size).fill(fill, encoding)
4744 : createBuffer(size).fill(fill)
4745 }
4746 return createBuffer(size)
4747}
4748
4749/**
4750 * Creates a new filled Buffer instance.
4751 * alloc(size[, fill[, encoding]])
4752 **/
4753Buffer.alloc = function (size, fill, encoding) {
4754 return alloc(size, fill, encoding)
4755}
4756
4757function allocUnsafe (size) {
4758 assertSize(size)
4759 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4760}
4761
4762/**
4763 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4764 * */
4765Buffer.allocUnsafe = function (size) {
4766 return allocUnsafe(size)
4767}
4768/**
4769 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4770 */
4771Buffer.allocUnsafeSlow = function (size) {
4772 return allocUnsafe(size)
4773}
4774
4775function fromString (string, encoding) {
4776 if (typeof encoding !== 'string' || encoding === '') {
4777 encoding = 'utf8'
4778 }
4779
4780 if (!Buffer.isEncoding(encoding)) {
4781 throw new TypeError('"encoding" must be a valid string encoding')
4782 }
4783
4784 var length = byteLength(string, encoding) | 0
4785 var buf = createBuffer(length)
4786
4787 var actual = buf.write(string, encoding)
4788
4789 if (actual !== length) {
4790 // Writing a hex string, for example, that contains invalid characters will
4791 // cause everything after the first invalid character to be ignored. (e.g.
4792 // 'abxxcd' will be treated as 'ab')
4793 buf = buf.slice(0, actual)
4794 }
4795
4796 return buf
4797}
4798
4799function fromArrayLike (array) {
4800 var length = array.length < 0 ? 0 : checked(array.length) | 0
4801 var buf = createBuffer(length)
4802 for (var i = 0; i < length; i += 1) {
4803 buf[i] = array[i] & 255
4804 }
4805 return buf
4806}
4807
4808function fromArrayBuffer (array, byteOffset, length) {
4809 if (byteOffset < 0 || array.byteLength < byteOffset) {
4810 throw new RangeError('\'offset\' is out of bounds')
4811 }
4812
4813 if (array.byteLength < byteOffset + (length || 0)) {
4814 throw new RangeError('\'length\' is out of bounds')
4815 }
4816
4817 var buf
4818 if (byteOffset === undefined && length === undefined) {
4819 buf = new Uint8Array(array)
4820 } else if (length === undefined) {
4821 buf = new Uint8Array(array, byteOffset)
4822 } else {
4823 buf = new Uint8Array(array, byteOffset, length)
4824 }
4825
4826 // Return an augmented `Uint8Array` instance
4827 buf.__proto__ = Buffer.prototype
4828 return buf
4829}
4830
4831function fromObject (obj) {
4832 if (Buffer.isBuffer(obj)) {
4833 var len = checked(obj.length) | 0
4834 var buf = createBuffer(len)
4835
4836 if (buf.length === 0) {
4837 return buf
4838 }
4839
4840 obj.copy(buf, 0, 0, len)
4841 return buf
4842 }
4843
4844 if (obj) {
4845 if (isArrayBufferView(obj) || 'length' in obj) {
4846 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4847 return createBuffer(0)
4848 }
4849 return fromArrayLike(obj)
4850 }
4851
4852 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4853 return fromArrayLike(obj.data)
4854 }
4855 }
4856
4857 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
4858}
4859
4860function checked (length) {
4861 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
4862 // length is NaN (which is otherwise coerced to zero.)
4863 if (length >= K_MAX_LENGTH) {
4864 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
4865 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
4866 }
4867 return length | 0
4868}
4869
4870function SlowBuffer (length) {
4871 if (+length != length) { // eslint-disable-line eqeqeq
4872 length = 0
4873 }
4874 return Buffer.alloc(+length)
4875}
4876
4877Buffer.isBuffer = function isBuffer (b) {
4878 return b != null && b._isBuffer === true
4879}
4880
4881Buffer.compare = function compare (a, b) {
4882 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
4883 throw new TypeError('Arguments must be Buffers')
4884 }
4885
4886 if (a === b) return 0
4887
4888 var x = a.length
4889 var y = b.length
4890
4891 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
4892 if (a[i] !== b[i]) {
4893 x = a[i]
4894 y = b[i]
4895 break
4896 }
4897 }
4898
4899 if (x < y) return -1
4900 if (y < x) return 1
4901 return 0
4902}
4903
4904Buffer.isEncoding = function isEncoding (encoding) {
4905 switch (String(encoding).toLowerCase()) {
4906 case 'hex':
4907 case 'utf8':
4908 case 'utf-8':
4909 case 'ascii':
4910 case 'latin1':
4911 case 'binary':
4912 case 'base64':
4913 case 'ucs2':
4914 case 'ucs-2':
4915 case 'utf16le':
4916 case 'utf-16le':
4917 return true
4918 default:
4919 return false
4920 }
4921}
4922
4923Buffer.concat = function concat (list, length) {
4924 if (!Array.isArray(list)) {
4925 throw new TypeError('"list" argument must be an Array of Buffers')
4926 }
4927
4928 if (list.length === 0) {
4929 return Buffer.alloc(0)
4930 }
4931
4932 var i
4933 if (length === undefined) {
4934 length = 0
4935 for (i = 0; i < list.length; ++i) {
4936 length += list[i].length
4937 }
4938 }
4939
4940 var buffer = Buffer.allocUnsafe(length)
4941 var pos = 0
4942 for (i = 0; i < list.length; ++i) {
4943 var buf = list[i]
4944 if (!Buffer.isBuffer(buf)) {
4945 throw new TypeError('"list" argument must be an Array of Buffers')
4946 }
4947 buf.copy(buffer, pos)
4948 pos += buf.length
4949 }
4950 return buffer
4951}
4952
4953function byteLength (string, encoding) {
4954 if (Buffer.isBuffer(string)) {
4955 return string.length
4956 }
4957 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
4958 return string.byteLength
4959 }
4960 if (typeof string !== 'string') {
4961 string = '' + string
4962 }
4963
4964 var len = string.length
4965 if (len === 0) return 0
4966
4967 // Use a for loop to avoid recursion
4968 var loweredCase = false
4969 for (;;) {
4970 switch (encoding) {
4971 case 'ascii':
4972 case 'latin1':
4973 case 'binary':
4974 return len
4975 case 'utf8':
4976 case 'utf-8':
4977 case undefined:
4978 return utf8ToBytes(string).length
4979 case 'ucs2':
4980 case 'ucs-2':
4981 case 'utf16le':
4982 case 'utf-16le':
4983 return len * 2
4984 case 'hex':
4985 return len >>> 1
4986 case 'base64':
4987 return base64ToBytes(string).length
4988 default:
4989 if (loweredCase) return utf8ToBytes(string).length // assume utf8
4990 encoding = ('' + encoding).toLowerCase()
4991 loweredCase = true
4992 }
4993 }
4994}
4995Buffer.byteLength = byteLength
4996
4997function slowToString (encoding, start, end) {
4998 var loweredCase = false
4999
5000 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5001 // property of a typed array.
5002
5003 // This behaves neither like String nor Uint8Array in that we set start/end
5004 // to their upper/lower bounds if the value passed is out of range.
5005 // undefined is handled specially as per ECMA-262 6th Edition,
5006 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5007 if (start === undefined || start < 0) {
5008 start = 0
5009 }
5010 // Return early if start > this.length. Done here to prevent potential uint32
5011 // coercion fail below.
5012 if (start > this.length) {
5013 return ''
5014 }
5015
5016 if (end === undefined || end > this.length) {
5017 end = this.length
5018 }
5019
5020 if (end <= 0) {
5021 return ''
5022 }
5023
5024 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5025 end >>>= 0
5026 start >>>= 0
5027
5028 if (end <= start) {
5029 return ''
5030 }
5031
5032 if (!encoding) encoding = 'utf8'
5033
5034 while (true) {
5035 switch (encoding) {
5036 case 'hex':
5037 return hexSlice(this, start, end)
5038
5039 case 'utf8':
5040 case 'utf-8':
5041 return utf8Slice(this, start, end)
5042
5043 case 'ascii':
5044 return asciiSlice(this, start, end)
5045
5046 case 'latin1':
5047 case 'binary':
5048 return latin1Slice(this, start, end)
5049
5050 case 'base64':
5051 return base64Slice(this, start, end)
5052
5053 case 'ucs2':
5054 case 'ucs-2':
5055 case 'utf16le':
5056 case 'utf-16le':
5057 return utf16leSlice(this, start, end)
5058
5059 default:
5060 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5061 encoding = (encoding + '').toLowerCase()
5062 loweredCase = true
5063 }
5064 }
5065}
5066
5067// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5068// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5069// reliably in a browserify context because there could be multiple different
5070// copies of the 'buffer' package in use. This method works even for Buffer
5071// instances that were created from another copy of the `buffer` package.
5072// See: https://github.com/feross/buffer/issues/154
5073Buffer.prototype._isBuffer = true
5074
5075function swap (b, n, m) {
5076 var i = b[n]
5077 b[n] = b[m]
5078 b[m] = i
5079}
5080
5081Buffer.prototype.swap16 = function swap16 () {
5082 var len = this.length
5083 if (len % 2 !== 0) {
5084 throw new RangeError('Buffer size must be a multiple of 16-bits')
5085 }
5086 for (var i = 0; i < len; i += 2) {
5087 swap(this, i, i + 1)
5088 }
5089 return this
5090}
5091
5092Buffer.prototype.swap32 = function swap32 () {
5093 var len = this.length
5094 if (len % 4 !== 0) {
5095 throw new RangeError('Buffer size must be a multiple of 32-bits')
5096 }
5097 for (var i = 0; i < len; i += 4) {
5098 swap(this, i, i + 3)
5099 swap(this, i + 1, i + 2)
5100 }
5101 return this
5102}
5103
5104Buffer.prototype.swap64 = function swap64 () {
5105 var len = this.length
5106 if (len % 8 !== 0) {
5107 throw new RangeError('Buffer size must be a multiple of 64-bits')
5108 }
5109 for (var i = 0; i < len; i += 8) {
5110 swap(this, i, i + 7)
5111 swap(this, i + 1, i + 6)
5112 swap(this, i + 2, i + 5)
5113 swap(this, i + 3, i + 4)
5114 }
5115 return this
5116}
5117
5118Buffer.prototype.toString = function toString () {
5119 var length = this.length
5120 if (length === 0) return ''
5121 if (arguments.length === 0) return utf8Slice(this, 0, length)
5122 return slowToString.apply(this, arguments)
5123}
5124
5125Buffer.prototype.equals = function equals (b) {
5126 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5127 if (this === b) return true
5128 return Buffer.compare(this, b) === 0
5129}
5130
5131Buffer.prototype.inspect = function inspect () {
5132 var str = ''
5133 var max = exports.INSPECT_MAX_BYTES
5134 if (this.length > 0) {
5135 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5136 if (this.length > max) str += ' ... '
5137 }
5138 return '<Buffer ' + str + '>'
5139}
5140
5141Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5142 if (!Buffer.isBuffer(target)) {
5143 throw new TypeError('Argument must be a Buffer')
5144 }
5145
5146 if (start === undefined) {
5147 start = 0
5148 }
5149 if (end === undefined) {
5150 end = target ? target.length : 0
5151 }
5152 if (thisStart === undefined) {
5153 thisStart = 0
5154 }
5155 if (thisEnd === undefined) {
5156 thisEnd = this.length
5157 }
5158
5159 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5160 throw new RangeError('out of range index')
5161 }
5162
5163 if (thisStart >= thisEnd && start >= end) {
5164 return 0
5165 }
5166 if (thisStart >= thisEnd) {
5167 return -1
5168 }
5169 if (start >= end) {
5170 return 1
5171 }
5172
5173 start >>>= 0
5174 end >>>= 0
5175 thisStart >>>= 0
5176 thisEnd >>>= 0
5177
5178 if (this === target) return 0
5179
5180 var x = thisEnd - thisStart
5181 var y = end - start
5182 var len = Math.min(x, y)
5183
5184 var thisCopy = this.slice(thisStart, thisEnd)
5185 var targetCopy = target.slice(start, end)
5186
5187 for (var i = 0; i < len; ++i) {
5188 if (thisCopy[i] !== targetCopy[i]) {
5189 x = thisCopy[i]
5190 y = targetCopy[i]
5191 break
5192 }
5193 }
5194
5195 if (x < y) return -1
5196 if (y < x) return 1
5197 return 0
5198}
5199
5200// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5201// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5202//
5203// Arguments:
5204// - buffer - a Buffer to search
5205// - val - a string, Buffer, or number
5206// - byteOffset - an index into `buffer`; will be clamped to an int32
5207// - encoding - an optional encoding, relevant is val is a string
5208// - dir - true for indexOf, false for lastIndexOf
5209function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5210 // Empty buffer means no match
5211 if (buffer.length === 0) return -1
5212
5213 // Normalize byteOffset
5214 if (typeof byteOffset === 'string') {
5215 encoding = byteOffset
5216 byteOffset = 0
5217 } else if (byteOffset > 0x7fffffff) {
5218 byteOffset = 0x7fffffff
5219 } else if (byteOffset < -0x80000000) {
5220 byteOffset = -0x80000000
5221 }
5222 byteOffset = +byteOffset // Coerce to Number.
5223 if (numberIsNaN(byteOffset)) {
5224 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5225 byteOffset = dir ? 0 : (buffer.length - 1)
5226 }
5227
5228 // Normalize byteOffset: negative offsets start from the end of the buffer
5229 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5230 if (byteOffset >= buffer.length) {
5231 if (dir) return -1
5232 else byteOffset = buffer.length - 1
5233 } else if (byteOffset < 0) {
5234 if (dir) byteOffset = 0
5235 else return -1
5236 }
5237
5238 // Normalize val
5239 if (typeof val === 'string') {
5240 val = Buffer.from(val, encoding)
5241 }
5242
5243 // Finally, search either indexOf (if dir is true) or lastIndexOf
5244 if (Buffer.isBuffer(val)) {
5245 // Special case: looking for empty string/buffer always fails
5246 if (val.length === 0) {
5247 return -1
5248 }
5249 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5250 } else if (typeof val === 'number') {
5251 val = val & 0xFF // Search for a byte value [0-255]
5252 if (typeof Uint8Array.prototype.indexOf === 'function') {
5253 if (dir) {
5254 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5255 } else {
5256 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5257 }
5258 }
5259 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5260 }
5261
5262 throw new TypeError('val must be string, number or Buffer')
5263}
5264
5265function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5266 var indexSize = 1
5267 var arrLength = arr.length
5268 var valLength = val.length
5269
5270 if (encoding !== undefined) {
5271 encoding = String(encoding).toLowerCase()
5272 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5273 encoding === 'utf16le' || encoding === 'utf-16le') {
5274 if (arr.length < 2 || val.length < 2) {
5275 return -1
5276 }
5277 indexSize = 2
5278 arrLength /= 2
5279 valLength /= 2
5280 byteOffset /= 2
5281 }
5282 }
5283
5284 function read (buf, i) {
5285 if (indexSize === 1) {
5286 return buf[i]
5287 } else {
5288 return buf.readUInt16BE(i * indexSize)
5289 }
5290 }
5291
5292 var i
5293 if (dir) {
5294 var foundIndex = -1
5295 for (i = byteOffset; i < arrLength; i++) {
5296 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5297 if (foundIndex === -1) foundIndex = i
5298 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5299 } else {
5300 if (foundIndex !== -1) i -= i - foundIndex
5301 foundIndex = -1
5302 }
5303 }
5304 } else {
5305 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5306 for (i = byteOffset; i >= 0; i--) {
5307 var found = true
5308 for (var j = 0; j < valLength; j++) {
5309 if (read(arr, i + j) !== read(val, j)) {
5310 found = false
5311 break
5312 }
5313 }
5314 if (found) return i
5315 }
5316 }
5317
5318 return -1
5319}
5320
5321Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5322 return this.indexOf(val, byteOffset, encoding) !== -1
5323}
5324
5325Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5326 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5327}
5328
5329Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5330 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5331}
5332
5333function hexWrite (buf, string, offset, length) {
5334 offset = Number(offset) || 0
5335 var remaining = buf.length - offset
5336 if (!length) {
5337 length = remaining
5338 } else {
5339 length = Number(length)
5340 if (length > remaining) {
5341 length = remaining
5342 }
5343 }
5344
5345 // must be an even number of digits
5346 var strLen = string.length
5347 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5348
5349 if (length > strLen / 2) {
5350 length = strLen / 2
5351 }
5352 for (var i = 0; i < length; ++i) {
5353 var parsed = parseInt(string.substr(i * 2, 2), 16)
5354 if (numberIsNaN(parsed)) return i
5355 buf[offset + i] = parsed
5356 }
5357 return i
5358}
5359
5360function utf8Write (buf, string, offset, length) {
5361 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5362}
5363
5364function asciiWrite (buf, string, offset, length) {
5365 return blitBuffer(asciiToBytes(string), buf, offset, length)
5366}
5367
5368function latin1Write (buf, string, offset, length) {
5369 return asciiWrite(buf, string, offset, length)
5370}
5371
5372function base64Write (buf, string, offset, length) {
5373 return blitBuffer(base64ToBytes(string), buf, offset, length)
5374}
5375
5376function ucs2Write (buf, string, offset, length) {
5377 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5378}
5379
5380Buffer.prototype.write = function write (string, offset, length, encoding) {
5381 // Buffer#write(string)
5382 if (offset === undefined) {
5383 encoding = 'utf8'
5384 length = this.length
5385 offset = 0
5386 // Buffer#write(string, encoding)
5387 } else if (length === undefined && typeof offset === 'string') {
5388 encoding = offset
5389 length = this.length
5390 offset = 0
5391 // Buffer#write(string, offset[, length][, encoding])
5392 } else if (isFinite(offset)) {
5393 offset = offset >>> 0
5394 if (isFinite(length)) {
5395 length = length >>> 0
5396 if (encoding === undefined) encoding = 'utf8'
5397 } else {
5398 encoding = length
5399 length = undefined
5400 }
5401 } else {
5402 throw new Error(
5403 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5404 )
5405 }
5406
5407 var remaining = this.length - offset
5408 if (length === undefined || length > remaining) length = remaining
5409
5410 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5411 throw new RangeError('Attempt to write outside buffer bounds')
5412 }
5413
5414 if (!encoding) encoding = 'utf8'
5415
5416 var loweredCase = false
5417 for (;;) {
5418 switch (encoding) {
5419 case 'hex':
5420 return hexWrite(this, string, offset, length)
5421
5422 case 'utf8':
5423 case 'utf-8':
5424 return utf8Write(this, string, offset, length)
5425
5426 case 'ascii':
5427 return asciiWrite(this, string, offset, length)
5428
5429 case 'latin1':
5430 case 'binary':
5431 return latin1Write(this, string, offset, length)
5432
5433 case 'base64':
5434 // Warning: maxLength not taken into account in base64Write
5435 return base64Write(this, string, offset, length)
5436
5437 case 'ucs2':
5438 case 'ucs-2':
5439 case 'utf16le':
5440 case 'utf-16le':
5441 return ucs2Write(this, string, offset, length)
5442
5443 default:
5444 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5445 encoding = ('' + encoding).toLowerCase()
5446 loweredCase = true
5447 }
5448 }
5449}
5450
5451Buffer.prototype.toJSON = function toJSON () {
5452 return {
5453 type: 'Buffer',
5454 data: Array.prototype.slice.call(this._arr || this, 0)
5455 }
5456}
5457
5458function base64Slice (buf, start, end) {
5459 if (start === 0 && end === buf.length) {
5460 return base64.fromByteArray(buf)
5461 } else {
5462 return base64.fromByteArray(buf.slice(start, end))
5463 }
5464}
5465
5466function utf8Slice (buf, start, end) {
5467 end = Math.min(buf.length, end)
5468 var res = []
5469
5470 var i = start
5471 while (i < end) {
5472 var firstByte = buf[i]
5473 var codePoint = null
5474 var bytesPerSequence = (firstByte > 0xEF) ? 4
5475 : (firstByte > 0xDF) ? 3
5476 : (firstByte > 0xBF) ? 2
5477 : 1
5478
5479 if (i + bytesPerSequence <= end) {
5480 var secondByte, thirdByte, fourthByte, tempCodePoint
5481
5482 switch (bytesPerSequence) {
5483 case 1:
5484 if (firstByte < 0x80) {
5485 codePoint = firstByte
5486 }
5487 break
5488 case 2:
5489 secondByte = buf[i + 1]
5490 if ((secondByte & 0xC0) === 0x80) {
5491 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5492 if (tempCodePoint > 0x7F) {
5493 codePoint = tempCodePoint
5494 }
5495 }
5496 break
5497 case 3:
5498 secondByte = buf[i + 1]
5499 thirdByte = buf[i + 2]
5500 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5501 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5502 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5503 codePoint = tempCodePoint
5504 }
5505 }
5506 break
5507 case 4:
5508 secondByte = buf[i + 1]
5509 thirdByte = buf[i + 2]
5510 fourthByte = buf[i + 3]
5511 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5512 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5513 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5514 codePoint = tempCodePoint
5515 }
5516 }
5517 }
5518 }
5519
5520 if (codePoint === null) {
5521 // we did not generate a valid codePoint so insert a
5522 // replacement char (U+FFFD) and advance only 1 byte
5523 codePoint = 0xFFFD
5524 bytesPerSequence = 1
5525 } else if (codePoint > 0xFFFF) {
5526 // encode to utf16 (surrogate pair dance)
5527 codePoint -= 0x10000
5528 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5529 codePoint = 0xDC00 | codePoint & 0x3FF
5530 }
5531
5532 res.push(codePoint)
5533 i += bytesPerSequence
5534 }
5535
5536 return decodeCodePointsArray(res)
5537}
5538
5539// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5540// the lowest limit is Chrome, with 0x10000 args.
5541// We go 1 magnitude less, for safety
5542var MAX_ARGUMENTS_LENGTH = 0x1000
5543
5544function decodeCodePointsArray (codePoints) {
5545 var len = codePoints.length
5546 if (len <= MAX_ARGUMENTS_LENGTH) {
5547 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5548 }
5549
5550 // Decode in chunks to avoid "call stack size exceeded".
5551 var res = ''
5552 var i = 0
5553 while (i < len) {
5554 res += String.fromCharCode.apply(
5555 String,
5556 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5557 )
5558 }
5559 return res
5560}
5561
5562function asciiSlice (buf, start, end) {
5563 var ret = ''
5564 end = Math.min(buf.length, end)
5565
5566 for (var i = start; i < end; ++i) {
5567 ret += String.fromCharCode(buf[i] & 0x7F)
5568 }
5569 return ret
5570}
5571
5572function latin1Slice (buf, start, end) {
5573 var ret = ''
5574 end = Math.min(buf.length, end)
5575
5576 for (var i = start; i < end; ++i) {
5577 ret += String.fromCharCode(buf[i])
5578 }
5579 return ret
5580}
5581
5582function hexSlice (buf, start, end) {
5583 var len = buf.length
5584
5585 if (!start || start < 0) start = 0
5586 if (!end || end < 0 || end > len) end = len
5587
5588 var out = ''
5589 for (var i = start; i < end; ++i) {
5590 out += toHex(buf[i])
5591 }
5592 return out
5593}
5594
5595function utf16leSlice (buf, start, end) {
5596 var bytes = buf.slice(start, end)
5597 var res = ''
5598 for (var i = 0; i < bytes.length; i += 2) {
5599 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5600 }
5601 return res
5602}
5603
5604Buffer.prototype.slice = function slice (start, end) {
5605 var len = this.length
5606 start = ~~start
5607 end = end === undefined ? len : ~~end
5608
5609 if (start < 0) {
5610 start += len
5611 if (start < 0) start = 0
5612 } else if (start > len) {
5613 start = len
5614 }
5615
5616 if (end < 0) {
5617 end += len
5618 if (end < 0) end = 0
5619 } else if (end > len) {
5620 end = len
5621 }
5622
5623 if (end < start) end = start
5624
5625 var newBuf = this.subarray(start, end)
5626 // Return an augmented `Uint8Array` instance
5627 newBuf.__proto__ = Buffer.prototype
5628 return newBuf
5629}
5630
5631/*
5632 * Need to make sure that buffer isn't trying to write out of bounds.
5633 */
5634function checkOffset (offset, ext, length) {
5635 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5636 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5637}
5638
5639Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5640 offset = offset >>> 0
5641 byteLength = byteLength >>> 0
5642 if (!noAssert) checkOffset(offset, byteLength, this.length)
5643
5644 var val = this[offset]
5645 var mul = 1
5646 var i = 0
5647 while (++i < byteLength && (mul *= 0x100)) {
5648 val += this[offset + i] * mul
5649 }
5650
5651 return val
5652}
5653
5654Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5655 offset = offset >>> 0
5656 byteLength = byteLength >>> 0
5657 if (!noAssert) {
5658 checkOffset(offset, byteLength, this.length)
5659 }
5660
5661 var val = this[offset + --byteLength]
5662 var mul = 1
5663 while (byteLength > 0 && (mul *= 0x100)) {
5664 val += this[offset + --byteLength] * mul
5665 }
5666
5667 return val
5668}
5669
5670Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5671 offset = offset >>> 0
5672 if (!noAssert) checkOffset(offset, 1, this.length)
5673 return this[offset]
5674}
5675
5676Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5677 offset = offset >>> 0
5678 if (!noAssert) checkOffset(offset, 2, this.length)
5679 return this[offset] | (this[offset + 1] << 8)
5680}
5681
5682Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5683 offset = offset >>> 0
5684 if (!noAssert) checkOffset(offset, 2, this.length)
5685 return (this[offset] << 8) | this[offset + 1]
5686}
5687
5688Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5689 offset = offset >>> 0
5690 if (!noAssert) checkOffset(offset, 4, this.length)
5691
5692 return ((this[offset]) |
5693 (this[offset + 1] << 8) |
5694 (this[offset + 2] << 16)) +
5695 (this[offset + 3] * 0x1000000)
5696}
5697
5698Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5699 offset = offset >>> 0
5700 if (!noAssert) checkOffset(offset, 4, this.length)
5701
5702 return (this[offset] * 0x1000000) +
5703 ((this[offset + 1] << 16) |
5704 (this[offset + 2] << 8) |
5705 this[offset + 3])
5706}
5707
5708Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5709 offset = offset >>> 0
5710 byteLength = byteLength >>> 0
5711 if (!noAssert) checkOffset(offset, byteLength, this.length)
5712
5713 var val = this[offset]
5714 var mul = 1
5715 var i = 0
5716 while (++i < byteLength && (mul *= 0x100)) {
5717 val += this[offset + i] * mul
5718 }
5719 mul *= 0x80
5720
5721 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5722
5723 return val
5724}
5725
5726Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5727 offset = offset >>> 0
5728 byteLength = byteLength >>> 0
5729 if (!noAssert) checkOffset(offset, byteLength, this.length)
5730
5731 var i = byteLength
5732 var mul = 1
5733 var val = this[offset + --i]
5734 while (i > 0 && (mul *= 0x100)) {
5735 val += this[offset + --i] * mul
5736 }
5737 mul *= 0x80
5738
5739 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5740
5741 return val
5742}
5743
5744Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5745 offset = offset >>> 0
5746 if (!noAssert) checkOffset(offset, 1, this.length)
5747 if (!(this[offset] & 0x80)) return (this[offset])
5748 return ((0xff - this[offset] + 1) * -1)
5749}
5750
5751Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5752 offset = offset >>> 0
5753 if (!noAssert) checkOffset(offset, 2, this.length)
5754 var val = this[offset] | (this[offset + 1] << 8)
5755 return (val & 0x8000) ? val | 0xFFFF0000 : val
5756}
5757
5758Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5759 offset = offset >>> 0
5760 if (!noAssert) checkOffset(offset, 2, this.length)
5761 var val = this[offset + 1] | (this[offset] << 8)
5762 return (val & 0x8000) ? val | 0xFFFF0000 : val
5763}
5764
5765Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5766 offset = offset >>> 0
5767 if (!noAssert) checkOffset(offset, 4, this.length)
5768
5769 return (this[offset]) |
5770 (this[offset + 1] << 8) |
5771 (this[offset + 2] << 16) |
5772 (this[offset + 3] << 24)
5773}
5774
5775Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5776 offset = offset >>> 0
5777 if (!noAssert) checkOffset(offset, 4, this.length)
5778
5779 return (this[offset] << 24) |
5780 (this[offset + 1] << 16) |
5781 (this[offset + 2] << 8) |
5782 (this[offset + 3])
5783}
5784
5785Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5786 offset = offset >>> 0
5787 if (!noAssert) checkOffset(offset, 4, this.length)
5788 return ieee754.read(this, offset, true, 23, 4)
5789}
5790
5791Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5792 offset = offset >>> 0
5793 if (!noAssert) checkOffset(offset, 4, this.length)
5794 return ieee754.read(this, offset, false, 23, 4)
5795}
5796
5797Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5798 offset = offset >>> 0
5799 if (!noAssert) checkOffset(offset, 8, this.length)
5800 return ieee754.read(this, offset, true, 52, 8)
5801}
5802
5803Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5804 offset = offset >>> 0
5805 if (!noAssert) checkOffset(offset, 8, this.length)
5806 return ieee754.read(this, offset, false, 52, 8)
5807}
5808
5809function checkInt (buf, value, offset, ext, max, min) {
5810 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5811 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5812 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5813}
5814
5815Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5816 value = +value
5817 offset = offset >>> 0
5818 byteLength = byteLength >>> 0
5819 if (!noAssert) {
5820 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5821 checkInt(this, value, offset, byteLength, maxBytes, 0)
5822 }
5823
5824 var mul = 1
5825 var i = 0
5826 this[offset] = value & 0xFF
5827 while (++i < byteLength && (mul *= 0x100)) {
5828 this[offset + i] = (value / mul) & 0xFF
5829 }
5830
5831 return offset + byteLength
5832}
5833
5834Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5835 value = +value
5836 offset = offset >>> 0
5837 byteLength = byteLength >>> 0
5838 if (!noAssert) {
5839 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5840 checkInt(this, value, offset, byteLength, maxBytes, 0)
5841 }
5842
5843 var i = byteLength - 1
5844 var mul = 1
5845 this[offset + i] = value & 0xFF
5846 while (--i >= 0 && (mul *= 0x100)) {
5847 this[offset + i] = (value / mul) & 0xFF
5848 }
5849
5850 return offset + byteLength
5851}
5852
5853Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5854 value = +value
5855 offset = offset >>> 0
5856 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5857 this[offset] = (value & 0xff)
5858 return offset + 1
5859}
5860
5861Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
5862 value = +value
5863 offset = offset >>> 0
5864 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5865 this[offset] = (value & 0xff)
5866 this[offset + 1] = (value >>> 8)
5867 return offset + 2
5868}
5869
5870Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
5871 value = +value
5872 offset = offset >>> 0
5873 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5874 this[offset] = (value >>> 8)
5875 this[offset + 1] = (value & 0xff)
5876 return offset + 2
5877}
5878
5879Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
5880 value = +value
5881 offset = offset >>> 0
5882 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5883 this[offset + 3] = (value >>> 24)
5884 this[offset + 2] = (value >>> 16)
5885 this[offset + 1] = (value >>> 8)
5886 this[offset] = (value & 0xff)
5887 return offset + 4
5888}
5889
5890Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
5891 value = +value
5892 offset = offset >>> 0
5893 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5894 this[offset] = (value >>> 24)
5895 this[offset + 1] = (value >>> 16)
5896 this[offset + 2] = (value >>> 8)
5897 this[offset + 3] = (value & 0xff)
5898 return offset + 4
5899}
5900
5901Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
5902 value = +value
5903 offset = offset >>> 0
5904 if (!noAssert) {
5905 var limit = Math.pow(2, (8 * byteLength) - 1)
5906
5907 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5908 }
5909
5910 var i = 0
5911 var mul = 1
5912 var sub = 0
5913 this[offset] = value & 0xFF
5914 while (++i < byteLength && (mul *= 0x100)) {
5915 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
5916 sub = 1
5917 }
5918 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5919 }
5920
5921 return offset + byteLength
5922}
5923
5924Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
5925 value = +value
5926 offset = offset >>> 0
5927 if (!noAssert) {
5928 var limit = Math.pow(2, (8 * byteLength) - 1)
5929
5930 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5931 }
5932
5933 var i = byteLength - 1
5934 var mul = 1
5935 var sub = 0
5936 this[offset + i] = value & 0xFF
5937 while (--i >= 0 && (mul *= 0x100)) {
5938 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
5939 sub = 1
5940 }
5941 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5942 }
5943
5944 return offset + byteLength
5945}
5946
5947Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
5948 value = +value
5949 offset = offset >>> 0
5950 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
5951 if (value < 0) value = 0xff + value + 1
5952 this[offset] = (value & 0xff)
5953 return offset + 1
5954}
5955
5956Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
5957 value = +value
5958 offset = offset >>> 0
5959 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5960 this[offset] = (value & 0xff)
5961 this[offset + 1] = (value >>> 8)
5962 return offset + 2
5963}
5964
5965Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
5966 value = +value
5967 offset = offset >>> 0
5968 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5969 this[offset] = (value >>> 8)
5970 this[offset + 1] = (value & 0xff)
5971 return offset + 2
5972}
5973
5974Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
5975 value = +value
5976 offset = offset >>> 0
5977 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5978 this[offset] = (value & 0xff)
5979 this[offset + 1] = (value >>> 8)
5980 this[offset + 2] = (value >>> 16)
5981 this[offset + 3] = (value >>> 24)
5982 return offset + 4
5983}
5984
5985Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
5986 value = +value
5987 offset = offset >>> 0
5988 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5989 if (value < 0) value = 0xffffffff + value + 1
5990 this[offset] = (value >>> 24)
5991 this[offset + 1] = (value >>> 16)
5992 this[offset + 2] = (value >>> 8)
5993 this[offset + 3] = (value & 0xff)
5994 return offset + 4
5995}
5996
5997function checkIEEE754 (buf, value, offset, ext, max, min) {
5998 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5999 if (offset < 0) throw new RangeError('Index out of range')
6000}
6001
6002function writeFloat (buf, value, offset, littleEndian, noAssert) {
6003 value = +value
6004 offset = offset >>> 0
6005 if (!noAssert) {
6006 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6007 }
6008 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6009 return offset + 4
6010}
6011
6012Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6013 return writeFloat(this, value, offset, true, noAssert)
6014}
6015
6016Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6017 return writeFloat(this, value, offset, false, noAssert)
6018}
6019
6020function writeDouble (buf, value, offset, littleEndian, noAssert) {
6021 value = +value
6022 offset = offset >>> 0
6023 if (!noAssert) {
6024 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6025 }
6026 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6027 return offset + 8
6028}
6029
6030Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6031 return writeDouble(this, value, offset, true, noAssert)
6032}
6033
6034Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6035 return writeDouble(this, value, offset, false, noAssert)
6036}
6037
6038// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6039Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6040 if (!start) start = 0
6041 if (!end && end !== 0) end = this.length
6042 if (targetStart >= target.length) targetStart = target.length
6043 if (!targetStart) targetStart = 0
6044 if (end > 0 && end < start) end = start
6045
6046 // Copy 0 bytes; we're done
6047 if (end === start) return 0
6048 if (target.length === 0 || this.length === 0) return 0
6049
6050 // Fatal error conditions
6051 if (targetStart < 0) {
6052 throw new RangeError('targetStart out of bounds')
6053 }
6054 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6055 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6056
6057 // Are we oob?
6058 if (end > this.length) end = this.length
6059 if (target.length - targetStart < end - start) {
6060 end = target.length - targetStart + start
6061 }
6062
6063 var len = end - start
6064 var i
6065
6066 if (this === target && start < targetStart && targetStart < end) {
6067 // descending copy from end
6068 for (i = len - 1; i >= 0; --i) {
6069 target[i + targetStart] = this[i + start]
6070 }
6071 } else if (len < 1000) {
6072 // ascending copy from start
6073 for (i = 0; i < len; ++i) {
6074 target[i + targetStart] = this[i + start]
6075 }
6076 } else {
6077 Uint8Array.prototype.set.call(
6078 target,
6079 this.subarray(start, start + len),
6080 targetStart
6081 )
6082 }
6083
6084 return len
6085}
6086
6087// Usage:
6088// buffer.fill(number[, offset[, end]])
6089// buffer.fill(buffer[, offset[, end]])
6090// buffer.fill(string[, offset[, end]][, encoding])
6091Buffer.prototype.fill = function fill (val, start, end, encoding) {
6092 // Handle string cases:
6093 if (typeof val === 'string') {
6094 if (typeof start === 'string') {
6095 encoding = start
6096 start = 0
6097 end = this.length
6098 } else if (typeof end === 'string') {
6099 encoding = end
6100 end = this.length
6101 }
6102 if (val.length === 1) {
6103 var code = val.charCodeAt(0)
6104 if (code < 256) {
6105 val = code
6106 }
6107 }
6108 if (encoding !== undefined && typeof encoding !== 'string') {
6109 throw new TypeError('encoding must be a string')
6110 }
6111 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6112 throw new TypeError('Unknown encoding: ' + encoding)
6113 }
6114 } else if (typeof val === 'number') {
6115 val = val & 255
6116 }
6117
6118 // Invalid ranges are not set to a default, so can range check early.
6119 if (start < 0 || this.length < start || this.length < end) {
6120 throw new RangeError('Out of range index')
6121 }
6122
6123 if (end <= start) {
6124 return this
6125 }
6126
6127 start = start >>> 0
6128 end = end === undefined ? this.length : end >>> 0
6129
6130 if (!val) val = 0
6131
6132 var i
6133 if (typeof val === 'number') {
6134 for (i = start; i < end; ++i) {
6135 this[i] = val
6136 }
6137 } else {
6138 var bytes = Buffer.isBuffer(val)
6139 ? val
6140 : new Buffer(val, encoding)
6141 var len = bytes.length
6142 for (i = 0; i < end - start; ++i) {
6143 this[i + start] = bytes[i % len]
6144 }
6145 }
6146
6147 return this
6148}
6149
6150// HELPER FUNCTIONS
6151// ================
6152
6153var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6154
6155function base64clean (str) {
6156 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6157 str = str.trim().replace(INVALID_BASE64_RE, '')
6158 // Node converts strings with length < 2 to ''
6159 if (str.length < 2) return ''
6160 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6161 while (str.length % 4 !== 0) {
6162 str = str + '='
6163 }
6164 return str
6165}
6166
6167function toHex (n) {
6168 if (n < 16) return '0' + n.toString(16)
6169 return n.toString(16)
6170}
6171
6172function utf8ToBytes (string, units) {
6173 units = units || Infinity
6174 var codePoint
6175 var length = string.length
6176 var leadSurrogate = null
6177 var bytes = []
6178
6179 for (var i = 0; i < length; ++i) {
6180 codePoint = string.charCodeAt(i)
6181
6182 // is surrogate component
6183 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6184 // last char was a lead
6185 if (!leadSurrogate) {
6186 // no lead yet
6187 if (codePoint > 0xDBFF) {
6188 // unexpected trail
6189 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6190 continue
6191 } else if (i + 1 === length) {
6192 // unpaired lead
6193 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6194 continue
6195 }
6196
6197 // valid lead
6198 leadSurrogate = codePoint
6199
6200 continue
6201 }
6202
6203 // 2 leads in a row
6204 if (codePoint < 0xDC00) {
6205 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6206 leadSurrogate = codePoint
6207 continue
6208 }
6209
6210 // valid surrogate pair
6211 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6212 } else if (leadSurrogate) {
6213 // valid bmp char, but last char was a lead
6214 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6215 }
6216
6217 leadSurrogate = null
6218
6219 // encode utf8
6220 if (codePoint < 0x80) {
6221 if ((units -= 1) < 0) break
6222 bytes.push(codePoint)
6223 } else if (codePoint < 0x800) {
6224 if ((units -= 2) < 0) break
6225 bytes.push(
6226 codePoint >> 0x6 | 0xC0,
6227 codePoint & 0x3F | 0x80
6228 )
6229 } else if (codePoint < 0x10000) {
6230 if ((units -= 3) < 0) break
6231 bytes.push(
6232 codePoint >> 0xC | 0xE0,
6233 codePoint >> 0x6 & 0x3F | 0x80,
6234 codePoint & 0x3F | 0x80
6235 )
6236 } else if (codePoint < 0x110000) {
6237 if ((units -= 4) < 0) break
6238 bytes.push(
6239 codePoint >> 0x12 | 0xF0,
6240 codePoint >> 0xC & 0x3F | 0x80,
6241 codePoint >> 0x6 & 0x3F | 0x80,
6242 codePoint & 0x3F | 0x80
6243 )
6244 } else {
6245 throw new Error('Invalid code point')
6246 }
6247 }
6248
6249 return bytes
6250}
6251
6252function asciiToBytes (str) {
6253 var byteArray = []
6254 for (var i = 0; i < str.length; ++i) {
6255 // Node's code seems to be doing this and not & 0x7F..
6256 byteArray.push(str.charCodeAt(i) & 0xFF)
6257 }
6258 return byteArray
6259}
6260
6261function utf16leToBytes (str, units) {
6262 var c, hi, lo
6263 var byteArray = []
6264 for (var i = 0; i < str.length; ++i) {
6265 if ((units -= 2) < 0) break
6266
6267 c = str.charCodeAt(i)
6268 hi = c >> 8
6269 lo = c % 256
6270 byteArray.push(lo)
6271 byteArray.push(hi)
6272 }
6273
6274 return byteArray
6275}
6276
6277function base64ToBytes (str) {
6278 return base64.toByteArray(base64clean(str))
6279}
6280
6281function blitBuffer (src, dst, offset, length) {
6282 for (var i = 0; i < length; ++i) {
6283 if ((i + offset >= dst.length) || (i >= src.length)) break
6284 dst[i + offset] = src[i]
6285 }
6286 return i
6287}
6288
6289// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6290function isArrayBufferView (obj) {
6291 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6292}
6293
6294function numberIsNaN (obj) {
6295 return obj !== obj // eslint-disable-line no-self-compare
6296}
6297
6298},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6299exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6300 var e, m
6301 var eLen = nBytes * 8 - mLen - 1
6302 var eMax = (1 << eLen) - 1
6303 var eBias = eMax >> 1
6304 var nBits = -7
6305 var i = isLE ? (nBytes - 1) : 0
6306 var d = isLE ? -1 : 1
6307 var s = buffer[offset + i]
6308
6309 i += d
6310
6311 e = s & ((1 << (-nBits)) - 1)
6312 s >>= (-nBits)
6313 nBits += eLen
6314 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6315
6316 m = e & ((1 << (-nBits)) - 1)
6317 e >>= (-nBits)
6318 nBits += mLen
6319 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6320
6321 if (e === 0) {
6322 e = 1 - eBias
6323 } else if (e === eMax) {
6324 return m ? NaN : ((s ? -1 : 1) * Infinity)
6325 } else {
6326 m = m + Math.pow(2, mLen)
6327 e = e - eBias
6328 }
6329 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6330}
6331
6332exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6333 var e, m, c
6334 var eLen = nBytes * 8 - mLen - 1
6335 var eMax = (1 << eLen) - 1
6336 var eBias = eMax >> 1
6337 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6338 var i = isLE ? 0 : (nBytes - 1)
6339 var d = isLE ? 1 : -1
6340 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6341
6342 value = Math.abs(value)
6343
6344 if (isNaN(value) || value === Infinity) {
6345 m = isNaN(value) ? 1 : 0
6346 e = eMax
6347 } else {
6348 e = Math.floor(Math.log(value) / Math.LN2)
6349 if (value * (c = Math.pow(2, -e)) < 1) {
6350 e--
6351 c *= 2
6352 }
6353 if (e + eBias >= 1) {
6354 value += rt / c
6355 } else {
6356 value += rt * Math.pow(2, 1 - eBias)
6357 }
6358 if (value * c >= 2) {
6359 e++
6360 c /= 2
6361 }
6362
6363 if (e + eBias >= eMax) {
6364 m = 0
6365 e = eMax
6366 } else if (e + eBias >= 1) {
6367 m = (value * c - 1) * Math.pow(2, mLen)
6368 e = e + eBias
6369 } else {
6370 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6371 e = 0
6372 }
6373 }
6374
6375 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6376
6377 e = (e << mLen) | m
6378 eLen += mLen
6379 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6380
6381 buffer[offset + i - d] |= s * 128
6382}
6383
6384},{}],4:[function(require,module,exports){
6385window.basex = require('base-x')
6386},{"base-x":5}],5:[function(require,module,exports){
6387// base-x encoding
6388// Forked from https://github.com/cryptocoinjs/bs58
6389// Originally written by Mike Hearn for BitcoinJ
6390// Copyright (c) 2011 Google Inc
6391// Ported to JavaScript by Stefan Thomas
6392// Merged Buffer refactorings from base58-native by Stephen Pair
6393// Copyright (c) 2013 BitPay Inc
6394
6395var Buffer = require('safe-buffer').Buffer
6396
6397module.exports = function base (ALPHABET) {
6398 var ALPHABET_MAP = {}
6399 var BASE = ALPHABET.length
6400 var LEADER = ALPHABET.charAt(0)
6401
6402 // pre-compute lookup table
6403 for (var z = 0; z < ALPHABET.length; z++) {
6404 var x = ALPHABET.charAt(z)
6405
6406 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6407 ALPHABET_MAP[x] = z
6408 }
6409
6410 function encode (source) {
6411 if (source.length === 0) return ''
6412
6413 var digits = [0]
6414 for (var i = 0; i < source.length; ++i) {
6415 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6416 carry += digits[j] << 8
6417 digits[j] = carry % BASE
6418 carry = (carry / BASE) | 0
6419 }
6420
6421 while (carry > 0) {
6422 digits.push(carry % BASE)
6423 carry = (carry / BASE) | 0
6424 }
6425 }
6426
6427 var string = ''
6428
6429 // deal with leading zeros
6430 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6431 // convert digits to a string
6432 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6433
6434 return string
6435 }
6436
6437 function decodeUnsafe (string) {
6438 if (string.length === 0) return Buffer.allocUnsafe(0)
6439
6440 var bytes = [0]
6441 for (var i = 0; i < string.length; i++) {
6442 var value = ALPHABET_MAP[string[i]]
6443 if (value === undefined) return
6444
6445 for (var j = 0, carry = value; j < bytes.length; ++j) {
6446 carry += bytes[j] * BASE
6447 bytes[j] = carry & 0xff
6448 carry >>= 8
6449 }
6450
6451 while (carry > 0) {
6452 bytes.push(carry & 0xff)
6453 carry >>= 8
6454 }
6455 }
6456
6457 // deal with leading zeros
6458 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6459 bytes.push(0)
6460 }
6461
6462 return Buffer.from(bytes.reverse())
6463 }
6464
6465 function decode (string) {
6466 var buffer = decodeUnsafe(string)
6467 if (buffer) return buffer
6468
6469 throw new Error('Non-base' + BASE + ' character')
6470 }
6471
6472 return {
6473 encode: encode,
6474 decodeUnsafe: decodeUnsafe,
6475 decode: decode
6476 }
6477}
6478
6479},{"safe-buffer":6}],6:[function(require,module,exports){
6480module.exports = require('buffer')
6481
6482},{"buffer":2}]},{},[4])(4)
6483});</script>
6e0f24b1
IC
6484 <script>(function (root) {
6485 "use strict";
6486
6487/***** unorm.js *****/
6488
6489/*
6490 * UnicodeNormalizer 1.0.0
6491 * Copyright (c) 2008 Matsuza
6492 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6493 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6494 * $Rev: 13309 $
6495 */
6496
6497 var DEFAULT_FEATURE = [null, 0, {}];
6498 var CACHE_THRESHOLD = 10;
6499 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6500 var NCount = VCount * TCount; // 588
6501 var SCount = LCount * NCount; // 11172
6502
6503 var UChar = function(cp, feature){
6504 this.codepoint = cp;
6505 this.feature = feature;
6506 };
6507
6508 // Strategies
6509 var cache = {};
6510 var cacheCounter = [];
6511 for (var i = 0; i <= 0xFF; ++i){
6512 cacheCounter[i] = 0;
6513 }
6514
6515 function fromCache(next, cp, needFeature){
6516 var ret = cache[cp];
6517 if(!ret){
6518 ret = next(cp, needFeature);
6519 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6520 cache[cp] = ret;
6521 }
6522 }
6523 return ret;
6524 }
6525
6526 function fromData(next, cp, needFeature){
6527 var hash = cp & 0xFF00;
6528 var dunit = UChar.udata[hash] || {};
6529 var f = dunit[cp];
6530 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6531 }
6532 function fromCpOnly(next, cp, needFeature){
6533 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6534 }
6535 function fromRuleBasedJamo(next, cp, needFeature){
6536 var j;
6537 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6538 return next(cp, needFeature);
6539 }
6540 if(LBase <= cp && cp < LBase + LCount){
6541 var c = {};
6542 var base = (cp - LBase) * VCount;
6543 for (j = 0; j < VCount; ++j){
6544 c[VBase + j] = SBase + TCount * (j + base);
6545 }
6546 return new UChar(cp, [,,c]);
6547 }
6548
6549 var SIndex = cp - SBase;
6550 var TIndex = SIndex % TCount;
6551 var feature = [];
6552 if(TIndex !== 0){
6553 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6554 } else {
6555 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6556 feature[2] = {};
6557 for (j = 1; j < TCount; ++j){
6558 feature[2][TBase + j] = cp + j;
6559 }
6560 }
6561 return new UChar(cp, feature);
6562 }
6563 function fromCpFilter(next, cp, needFeature){
6564 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6565 }
6566
6567 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6568
6569 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6570 return function (cp, needFeature) {
6571 return strategy(next, cp, needFeature);
6572 };
6573 }, null);
6574
6575 UChar.isHighSurrogate = function(cp){
6576 return cp >= 0xD800 && cp <= 0xDBFF;
6577 };
6578 UChar.isLowSurrogate = function(cp){
6579 return cp >= 0xDC00 && cp <= 0xDFFF;
6580 };
6581
6582 UChar.prototype.prepFeature = function(){
6583 if(!this.feature){
6584 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6585 }
6586 };
6587
6588 UChar.prototype.toString = function(){
6589 if(this.codepoint < 0x10000){
6590 return String.fromCharCode(this.codepoint);
6591 } else {
6592 var x = this.codepoint - 0x10000;
6593 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6594 }
6595 };
6596
6597 UChar.prototype.getDecomp = function(){
6598 this.prepFeature();
6599 return this.feature[0] || null;
6600 };
6601
6602 UChar.prototype.isCompatibility = function(){
6603 this.prepFeature();
6604 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6605 };
6606 UChar.prototype.isExclude = function(){
6607 this.prepFeature();
6608 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6609 };
6610 UChar.prototype.getCanonicalClass = function(){
6611 this.prepFeature();
6612 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6613 };
6614 UChar.prototype.getComposite = function(following){
6615 this.prepFeature();
6616 if(!this.feature[2]){
6617 return null;
6618 }
6619 var cp = this.feature[2][following.codepoint];
6620 return cp ? UChar.fromCharCode(cp) : null;
6621 };
6622
6623 var UCharIterator = function(str){
6624 this.str = str;
6625 this.cursor = 0;
6626 };
6627 UCharIterator.prototype.next = function(){
6628 if(!!this.str && this.cursor < this.str.length){
6629 var cp = this.str.charCodeAt(this.cursor++);
6630 var d;
6631 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6632 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6633 ++this.cursor;
6634 }
6635 return UChar.fromCharCode(cp);
6636 } else {
6637 this.str = null;
6638 return null;
6639 }
6640 };
6641
6642 var RecursDecompIterator = function(it, cano){
6643 this.it = it;
6644 this.canonical = cano;
6645 this.resBuf = [];
6646 };
6647
6648 RecursDecompIterator.prototype.next = function(){
6649 function recursiveDecomp(cano, uchar){
6650 var decomp = uchar.getDecomp();
6651 if(!!decomp && !(cano && uchar.isCompatibility())){
6652 var ret = [];
6653 for(var i = 0; i < decomp.length; ++i){
6654 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6655 ret = ret.concat(a);
6656 }
6657 return ret;
6658 } else {
6659 return [uchar];
6660 }
6661 }
6662 if(this.resBuf.length === 0){
6663 var uchar = this.it.next();
6664 if(!uchar){
6665 return null;
6666 }
6667 this.resBuf = recursiveDecomp(this.canonical, uchar);
6668 }
6669 return this.resBuf.shift();
6670 };
6671
6672 var DecompIterator = function(it){
6673 this.it = it;
6674 this.resBuf = [];
6675 };
6676
6677 DecompIterator.prototype.next = function(){
6678 var cc;
6679 if(this.resBuf.length === 0){
6680 do{
6681 var uchar = this.it.next();
6682 if(!uchar){
6683 break;
6684 }
6685 cc = uchar.getCanonicalClass();
6686 var inspt = this.resBuf.length;
6687 if(cc !== 0){
6688 for(; inspt > 0; --inspt){
6689 var uchar2 = this.resBuf[inspt - 1];
6690 var cc2 = uchar2.getCanonicalClass();
6691 if(cc2 <= cc){
6692 break;
6693 }
6694 }
6695 }
6696 this.resBuf.splice(inspt, 0, uchar);
6697 } while(cc !== 0);
6698 }
6699 return this.resBuf.shift();
6700 };
6701
6702 var CompIterator = function(it){
6703 this.it = it;
6704 this.procBuf = [];
6705 this.resBuf = [];
6706 this.lastClass = null;
6707 };
6708
6709 CompIterator.prototype.next = function(){
6710 while(this.resBuf.length === 0){
6711 var uchar = this.it.next();
6712 if(!uchar){
6713 this.resBuf = this.procBuf;
6714 this.procBuf = [];
6715 break;
6716 }
6717 if(this.procBuf.length === 0){
6718 this.lastClass = uchar.getCanonicalClass();
6719 this.procBuf.push(uchar);
6720 } else {
6721 var starter = this.procBuf[0];
6722 var composite = starter.getComposite(uchar);
6723 var cc = uchar.getCanonicalClass();
6724 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6725 this.procBuf[0] = composite;
6726 } else {
6727 if(cc === 0){
6728 this.resBuf = this.procBuf;
6729 this.procBuf = [];
6730 }
6731 this.lastClass = cc;
6732 this.procBuf.push(uchar);
6733 }
6734 }
6735 }
6736 return this.resBuf.shift();
6737 };
6738
6739 var createIterator = function(mode, str){
6740 switch(mode){
6741 case "NFD":
6742 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6743 case "NFKD":
6744 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6745 case "NFC":
6746 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6747 case "NFKC":
6748 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6749 }
6750 throw mode + " is invalid";
6751 };
6752 var normalize = function(mode, str){
6753 var it = createIterator(mode, str);
6754 var ret = "";
6755 var uchar;
6756 while(!!(uchar = it.next())){
6757 ret += uchar.toString();
6758 }
6759 return ret;
6760 };
6761
6762 /* API functions */
6763 function nfd(str){
6764 return normalize("NFD", str);
6765 }
6766
6767 function nfkd(str){
6768 return normalize("NFKD", str);
6769 }
6770
6771 function nfc(str){
6772 return normalize("NFC", str);
6773 }
6774
6775 function nfkc(str){
6776 return normalize("NFKC", str);
6777 }
6778
6779/* Unicode data */
6780UChar.udata={
67810:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6782256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6783512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6784768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
67851024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
67861280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
67871536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
67881792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
67892048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
67902304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
67912560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
67922816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
67933072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
67943328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
67953584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
67963840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
67974096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
67984352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
67994608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
68004864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
68015120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
68025376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
68035632:{71231:[,9],71350:[,9],71351:[,7]},
68045888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
68056144:{6313:[,228]},
68066400:{6457:[,222],6458:[,230],6459:[,220]},
68076656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
68086912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
68097168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
68107424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
68117680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
68127936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
68138192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
68148448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
68158704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
68168960:{9001:[[12296]],9002:[[12297]]},
68179216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
681810752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
681911264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
682011520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
682111776:{11935:[[27597],256],12019:[[40863],256]},
682212032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
682312288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
682412544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
682512800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
682613056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
682727136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
682827392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
682942496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
683042752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
683143008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
683243264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
683343520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
683443776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
683548128:{113822:[,1]},
683653504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
683753760:{119362:[,230],119363:[,230],119364:[,230]},
683854272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
683954528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
684054784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
684155040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
684259392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
684360928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
684461696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
684561952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
684663488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
684763744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
684864000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
684964256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
685064512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
685164768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
685265024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
685365280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
6854
6855};
6856
6857 /***** Module to export */
6858 var unorm = {
6859 nfc: nfc,
6860 nfd: nfd,
6861 nfkc: nfkc,
6862 nfkd: nfkd
6863 };
6864
6865 /*globals module:true,define:true*/
6866
6867 // CommonJS
6868 if (typeof module === "object") {
6869 module.exports = unorm;
6870
6871 // AMD
6872 } else if (typeof define === "function" && define.amd) {
6873 define("unorm", function () {
6874 return unorm;
6875 });
6876
6877 // Global
6878 } else {
6879 root.unorm = unorm;
6880 }
6881
6882 /***** Export as shim for String::normalize method *****/
6883 /*
6884 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
6885
6886 21.1.3.12 String.prototype.normalize(form="NFC")
6887 When the normalize method is called with one argument form, the following steps are taken:
6888
6889 1. Let O be CheckObjectCoercible(this value).
6890 2. Let S be ToString(O).
6891 3. ReturnIfAbrupt(S).
6892 4. If form is not provided or undefined let form be "NFC".
6893 5. Let f be ToString(form).
6894 6. ReturnIfAbrupt(f).
6895 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
6896 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
6897 9. Return ns.
6898
6899 The length property of the normalize method is 0.
6900
6901 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
6902 */
6903 unorm.shimApplied = false;
6904
6905 if (!String.prototype.normalize) {
6906 String.prototype.normalize = function(form) {
6907 var str = "" + this;
6908 form = form === undefined ? "NFC" : form;
6909
6910 if (form === "NFC") {
6911 return unorm.nfc(str);
6912 } else if (form === "NFD") {
6913 return unorm.nfd(str);
6914 } else if (form === "NFKC") {
6915 return unorm.nfkc(str);
6916 } else if (form === "NFKD") {
6917 return unorm.nfkd(str);
6918 } else {
6919 throw new RangeError("Invalid normalization form: " + form);
6920 }
6921 };
6922
6923 unorm.shimApplied = true;
6924 }
6925}(this));
8b095871
IC
6926</script>
6927 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
6928!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)
6929},_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))
6930},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});
6931</script>
6932 <script>/*!
6933 * Bootstrap v3.2.0 (http://getbootstrap.com)
6934 * Copyright 2011-2014 Twitter, Inc.
6935 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6936 */
6937if("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>
6938 <script>(function() {
6939 'use strict';
6940
6941 /**
6942 * Extend an Object with another Object's properties.
6943 *
6944 * The source objects are specified as additional arguments.
6945 *
6946 * @param dst Object the object to extend.
6947 *
6948 * @return Object the final object.
6949 */
6950 var _extend = function(dst) {
6951 var sources = Array.prototype.slice.call(arguments, 1);
6952 for (var i=0; i<sources.length; ++i) {
6953 var src = sources[i];
6954 for (var p in src) {
6955 if (src.hasOwnProperty(p)) dst[p] = src[p];
6956 }
6957 }
6958 return dst;
6959 };
6960
6961
6962 /**
6963 * Defer execution of given function.
6964 * @param {Function} func
6965 */
6966 var _defer = function(func) {
6967 if (typeof setImmediate === 'function') {
6968 return setImmediate(func);
6969 } else {
6970 return setTimeout(func, 0);
6971 }
6972 };
6973
6974 /**
6975 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
6976 */
6977 var Levenshtein = {
6978 /**
6979 * Calculate levenshtein distance of the two strings.
6980 *
6981 * @param str1 String the first string.
6982 * @param str2 String the second string.
6983 * @return Integer the levenshtein distance (0 and above).
6984 */
6985 get: function(str1, str2) {
6986 // base cases
6987 if (str1 === str2) return 0;
6988 if (str1.length === 0) return str2.length;
6989 if (str2.length === 0) return str1.length;
6990
6991 // two rows
6992 var prevRow = new Array(str2.length + 1),
6993 curCol, nextCol, i, j, tmp;
6994
6995 // initialise previous row
6996 for (i=0; i<prevRow.length; ++i) {
6997 prevRow[i] = i;
6998 }
6999
7000 // calculate current row distance from previous row
7001 for (i=0; i<str1.length; ++i) {
7002 nextCol = i + 1;
7003
7004 for (j=0; j<str2.length; ++j) {
7005 curCol = nextCol;
7006
7007 // substution
7008 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7009 // insertion
7010 tmp = curCol + 1;
7011 if (nextCol > tmp) {
7012 nextCol = tmp;
7013 }
7014 // deletion
7015 tmp = prevRow[j + 1] + 1;
7016 if (nextCol > tmp) {
7017 nextCol = tmp;
7018 }
7019
7020 // copy current col value into previous (in preparation for next iteration)
7021 prevRow[j] = curCol;
7022 }
7023
7024 // copy last col value into previous (in preparation for next iteration)
7025 prevRow[j] = nextCol;
7026 }
7027
7028 return nextCol;
7029 },
7030
7031 /**
7032 * Asynchronously calculate levenshtein distance of the two strings.
7033 *
7034 * @param str1 String the first string.
7035 * @param str2 String the second string.
7036 * @param cb Function callback function with signature: function(Error err, int distance)
7037 * @param [options] Object additional options.
7038 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7039 */
7040 getAsync: function(str1, str2, cb, options) {
7041 options = _extend({}, {
7042 progress: null
7043 }, options);
7044
7045 // base cases
7046 if (str1 === str2) return cb(null, 0);
7047 if (str1.length === 0) return cb(null, str2.length);
7048 if (str2.length === 0) return cb(null, str1.length);
7049
7050 // two rows
7051 var prevRow = new Array(str2.length + 1),
7052 curCol, nextCol,
7053 i, j, tmp,
7054 startTime, currentTime;
7055
7056 // initialise previous row
7057 for (i=0; i<prevRow.length; ++i) {
7058 prevRow[i] = i;
7059 }
7060
7061 nextCol = 1;
7062 i = 0;
7063 j = -1;
7064
7065 var __calculate = function() {
7066 // reset timer
7067 startTime = new Date().valueOf();
7068 currentTime = startTime;
7069
7070 // keep going until one second has elapsed
7071 while (currentTime - startTime < 1000) {
7072 // reached end of current row?
7073 if (str2.length <= (++j)) {
7074 // copy current into previous (in preparation for next iteration)
7075 prevRow[j] = nextCol;
7076
7077 // if already done all chars
7078 if (str1.length <= (++i)) {
7079 return cb(null, nextCol);
7080 }
7081 // else if we have more left to do
7082 else {
7083 nextCol = i + 1;
7084 j = 0;
7085 }
7086 }
7087
7088 // calculation
7089 curCol = nextCol;
7090
7091 // substution
7092 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7093 // insertion
7094 tmp = curCol + 1;
7095 if (nextCol > tmp) {
7096 nextCol = tmp;
7097 }
7098 // deletion
7099 tmp = prevRow[j + 1] + 1;
7100 if (nextCol > tmp) {
7101 nextCol = tmp;
7102 }
7103
7104 // copy current into previous (in preparation for next iteration)
7105 prevRow[j] = curCol;
7106
7107 // get current time
7108 currentTime = new Date().valueOf();
7109 }
7110
7111 // send a progress update?
7112 if (null !== options.progress) {
7113 try {
7114 options.progress.call(null, (i * 100.0/ str1.length));
7115 } catch (err) {
7116 return cb('Progress callback: ' + err.toString());
7117 }
7118 }
7119
7120 // next iteration
7121 _defer(__calculate);
7122 };
7123
7124 __calculate();
7125 }
7126
7127 };
7128
7129 // amd
7130 if (typeof define !== "undefined" && define !== null && define.amd) {
7131 define(function() {
7132 return Levenshtein;
7133 });
7134 }
7135 // commonjs
7136 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7137 module.exports = Levenshtein;
7138 }
7139 // web worker
7140 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7141 self.Levenshtein = Levenshtein;
7142 }
7143 // browser main thread
7144 else if (typeof window !== "undefined" && window !== null) {
7145 window.Levenshtein = Levenshtein;
7146 }
7147}());
7148
7149</script>
7150 <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},
7151write: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;
7152for(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-
71537,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]=
71540<=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},
7155setupTimingPattern: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=
7156j.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-
7157b-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,
7158c),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=
71590,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&&
7160(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,
716178,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)-
7162j.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:"+
7163a);}},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:"+
7164a);}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+
71652)&&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),
7166LOG_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>
7167this.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],
7168[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,
7169116],[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,
717043,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,
71713,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,
717255,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,
717345,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*
7174(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,
7175correctLevel: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),
7176j=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",
7177d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7178</script>
7179 <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){
7180// (public) Constructor
7181function BigInteger(a, b, c) {
7182 if (!(this instanceof BigInteger))
7183 return new BigInteger(a, b, c)
7184
7185 if (a != null) {
7186 if ("number" == typeof a) this.fromNumber(a, b, c)
7187 else if (b == null && "string" != typeof a) this.fromString(a, 256)
7188 else this.fromString(a, b)
7189 }
7190}
7191
7192var proto = BigInteger.prototype
7193
7194// duck-typed isBigInteger
7195proto.__bigi = require('../package.json').version
7196BigInteger.isBigInteger = function (obj, check_ver) {
7197 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
7198}
7199
7200// Bits per digit
7201var dbits
7202
7203// am: Compute w_j += (x*this_i), propagate carries,
7204// c is initial carry, returns final carry.
7205// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
7206// We need to select the fastest one that works in this environment.
7207
7208// am1: use a single mult and divide to get the high bits,
7209// max digit bits should be 26 because
7210// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
7211function am1(i, x, w, j, c, n) {
7212 while (--n >= 0) {
7213 var v = x * this[i++] + w[j] + c
7214 c = Math.floor(v / 0x4000000)
7215 w[j++] = v & 0x3ffffff
7216 }
7217 return c
7218}
7219// am2 avoids a big mult-and-extract completely.
7220// Max digit bits should be <= 30 because we do bitwise ops
7221// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
7222function am2(i, x, w, j, c, n) {
7223 var xl = x & 0x7fff,
7224 xh = x >> 15
7225 while (--n >= 0) {
7226 var l = this[i] & 0x7fff
7227 var h = this[i++] >> 15
7228 var m = xh * l + h * xl
7229 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
7230 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
7231 w[j++] = l & 0x3fffffff
7232 }
7233 return c
7234}
7235// Alternately, set max digit bits to 28 since some
7236// browsers slow down when dealing with 32-bit numbers.
7237function am3(i, x, w, j, c, n) {
7238 var xl = x & 0x3fff,
7239 xh = x >> 14
7240 while (--n >= 0) {
7241 var l = this[i] & 0x3fff
7242 var h = this[i++] >> 14
7243 var m = xh * l + h * xl
7244 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
7245 c = (l >> 28) + (m >> 14) + xh * h
7246 w[j++] = l & 0xfffffff
7247 }
7248 return c
7249}
7250
7251// wtf?
7252BigInteger.prototype.am = am1
7253dbits = 26
7254
7255BigInteger.prototype.DB = dbits
7256BigInteger.prototype.DM = ((1 << dbits) - 1)
7257var DV = BigInteger.prototype.DV = (1 << dbits)
7258
7259var BI_FP = 52
7260BigInteger.prototype.FV = Math.pow(2, BI_FP)
7261BigInteger.prototype.F1 = BI_FP - dbits
7262BigInteger.prototype.F2 = 2 * dbits - BI_FP
7263
7264// Digit conversions
7265var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
7266var BI_RC = new Array()
7267var rr, vv
7268rr = "0".charCodeAt(0)
7269for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
7270rr = "a".charCodeAt(0)
7271for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
7272rr = "A".charCodeAt(0)
7273for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
7274
7275function int2char(n) {
7276 return BI_RM.charAt(n)
7277}
7278
7279function intAt(s, i) {
7280 var c = BI_RC[s.charCodeAt(i)]
7281 return (c == null) ? -1 : c
7282}
7283
7284// (protected) copy this to r
7285function bnpCopyTo(r) {
7286 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
7287 r.t = this.t
7288 r.s = this.s
7289}
7290
7291// (protected) set from integer value x, -DV <= x < DV
7292function bnpFromInt(x) {
7293 this.t = 1
7294 this.s = (x < 0) ? -1 : 0
7295 if (x > 0) this[0] = x
7296 else if (x < -1) this[0] = x + DV
7297 else this.t = 0
7298}
7299
7300// return bigint initialized to value
7301function nbv(i) {
7302 var r = new BigInteger()
7303 r.fromInt(i)
7304 return r
7305}
7306
7307// (protected) set from string and radix
7308function bnpFromString(s, b) {
7309 var self = this
7310
7311 var k
7312 if (b == 16) k = 4
7313 else if (b == 8) k = 3
7314 else if (b == 256) k = 8; // byte array
7315 else if (b == 2) k = 1
7316 else if (b == 32) k = 5
7317 else if (b == 4) k = 2
7318 else {
7319 self.fromRadix(s, b)
7320 return
7321 }
7322 self.t = 0
7323 self.s = 0
7324 var i = s.length,
7325 mi = false,
7326 sh = 0
7327 while (--i >= 0) {
7328 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
7329 if (x < 0) {
7330 if (s.charAt(i) == "-") mi = true
7331 continue
7332 }
7333 mi = false
7334 if (sh == 0)
7335 self[self.t++] = x
7336 else if (sh + k > self.DB) {
7337 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
7338 self[self.t++] = (x >> (self.DB - sh))
7339 } else
7340 self[self.t - 1] |= x << sh
7341 sh += k
7342 if (sh >= self.DB) sh -= self.DB
7343 }
7344 if (k == 8 && (s[0] & 0x80) != 0) {
7345 self.s = -1
7346 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
7347 }
7348 self.clamp()
7349 if (mi) BigInteger.ZERO.subTo(self, self)
7350}
7351
7352// (protected) clamp off excess high words
7353function bnpClamp() {
7354 var c = this.s & this.DM
7355 while (this.t > 0 && this[this.t - 1] == c)--this.t
7356}
7357
7358// (public) return string representation in given radix
7359function bnToString(b) {
7360 var self = this
7361 if (self.s < 0) return "-" + self.negate()
7362 .toString(b)
7363 var k
7364 if (b == 16) k = 4
7365 else if (b == 8) k = 3
7366 else if (b == 2) k = 1
7367 else if (b == 32) k = 5
7368 else if (b == 4) k = 2
7369 else return self.toRadix(b)
7370 var km = (1 << k) - 1,
7371 d, m = false,
7372 r = "",
7373 i = self.t
7374 var p = self.DB - (i * self.DB) % k
7375 if (i-- > 0) {
7376 if (p < self.DB && (d = self[i] >> p) > 0) {
7377 m = true
7378 r = int2char(d)
7379 }
7380 while (i >= 0) {
7381 if (p < k) {
7382 d = (self[i] & ((1 << p) - 1)) << (k - p)
7383 d |= self[--i] >> (p += self.DB - k)
7384 } else {
7385 d = (self[i] >> (p -= k)) & km
7386 if (p <= 0) {
7387 p += self.DB
7388 --i
7389 }
7390 }
7391 if (d > 0) m = true
7392 if (m) r += int2char(d)
7393 }
7394 }
7395 return m ? r : "0"
7396}
7397
7398// (public) -this
7399function bnNegate() {
7400 var r = new BigInteger()
7401 BigInteger.ZERO.subTo(this, r)
7402 return r
7403}
7404
7405// (public) |this|
7406function bnAbs() {
7407 return (this.s < 0) ? this.negate() : this
7408}
7409
7410// (public) return + if this > a, - if this < a, 0 if equal
7411function bnCompareTo(a) {
7412 var r = this.s - a.s
ab78acc6
IC
7413 if (r != 0) return r
7414 var i = this.t
7415 r = i - a.t
7416 if (r != 0) return (this.s < 0) ? -r : r
7417 while (--i >= 0)
7418 if ((r = this[i] - a[i]) != 0) return r
7419 return 0
7420}
3af2954a 7421
8b095871
IC
7422// returns bit length of the integer x
7423function nbits(x) {
7424 var r = 1,
7425 t
7426 if ((t = x >>> 16) != 0) {
7427 x = t
7428 r += 16
7429 }
7430 if ((t = x >> 8) != 0) {
7431 x = t
7432 r += 8
7433 }
7434 if ((t = x >> 4) != 0) {
7435 x = t
7436 r += 4
7437 }
7438 if ((t = x >> 2) != 0) {
7439 x = t
7440 r += 2
7441 }
7442 if ((t = x >> 1) != 0) {
7443 x = t
7444 r += 1
7445 }
7446 return r
7447}
7448
7449// (public) return the number of bits in "this"
7450function bnBitLength() {
7451 if (this.t <= 0) return 0
7452 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
7453}
7454
7455// (public) return the number of bytes in "this"
7456function bnByteLength() {
7457 return this.bitLength() >> 3
7458}
7459
7460// (protected) r = this << n*DB
7461function bnpDLShiftTo(n, r) {
7462 var i
7463 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
7464 for (i = n - 1; i >= 0; --i) r[i] = 0
7465 r.t = this.t + n
7466 r.s = this.s
7467}
7468
7469// (protected) r = this >> n*DB
7470function bnpDRShiftTo(n, r) {
7471 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
7472 r.t = Math.max(this.t - n, 0)
7473 r.s = this.s
7474}
7475
7476// (protected) r = this << n
7477function bnpLShiftTo(n, r) {
7478 var self = this
7479 var bs = n % self.DB
7480 var cbs = self.DB - bs
7481 var bm = (1 << cbs) - 1
7482 var ds = Math.floor(n / self.DB),
7483 c = (self.s << bs) & self.DM,
7484 i
7485 for (i = self.t - 1; i >= 0; --i) {
7486 r[i + ds + 1] = (self[i] >> cbs) | c
7487 c = (self[i] & bm) << bs
7488 }
7489 for (i = ds - 1; i >= 0; --i) r[i] = 0
7490 r[ds] = c
7491 r.t = self.t + ds + 1
7492 r.s = self.s
7493 r.clamp()
7494}
7495
7496// (protected) r = this >> n
7497function bnpRShiftTo(n, r) {
7498 var self = this
7499 r.s = self.s
7500 var ds = Math.floor(n / self.DB)
7501 if (ds >= self.t) {
7502 r.t = 0
7503 return
7504 }
7505 var bs = n % self.DB
7506 var cbs = self.DB - bs
7507 var bm = (1 << bs) - 1
7508 r[0] = self[ds] >> bs
7509 for (var i = ds + 1; i < self.t; ++i) {
7510 r[i - ds - 1] |= (self[i] & bm) << cbs
7511 r[i - ds] = self[i] >> bs
7512 }
7513 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
7514 r.t = self.t - ds
7515 r.clamp()
7516}
7517
7518// (protected) r = this - a
7519function bnpSubTo(a, r) {
7520 var self = this
7521 var i = 0,
7522 c = 0,
7523 m = Math.min(a.t, self.t)
7524 while (i < m) {
7525 c += self[i] - a[i]
7526 r[i++] = c & self.DM
7527 c >>= self.DB
7528 }
7529 if (a.t < self.t) {
7530 c -= a.s
7531 while (i < self.t) {
7532 c += self[i]
7533 r[i++] = c & self.DM
7534 c >>= self.DB
7535 }
7536 c += self.s
7537 } else {
7538 c += self.s
7539 while (i < a.t) {
7540 c -= a[i]
7541 r[i++] = c & self.DM
7542 c >>= self.DB
7543 }
7544 c -= a.s
7545 }
7546 r.s = (c < 0) ? -1 : 0
7547 if (c < -1) r[i++] = self.DV + c
7548 else if (c > 0) r[i++] = c
7549 r.t = i
7550 r.clamp()
7551}
7552
7553// (protected) r = this * a, r != this,a (HAC 14.12)
7554// "this" should be the larger one if appropriate.
7555function bnpMultiplyTo(a, r) {
7556 var x = this.abs(),
7557 y = a.abs()
7558 var i = x.t
7559 r.t = i + y.t
7560 while (--i >= 0) r[i] = 0
7561 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
7562 r.s = 0
7563 r.clamp()
7564 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
7565}
7566
7567// (protected) r = this^2, r != this (HAC 14.16)
7568function bnpSquareTo(r) {
7569 var x = this.abs()
7570 var i = r.t = 2 * x.t
7571 while (--i >= 0) r[i] = 0
7572 for (i = 0; i < x.t - 1; ++i) {
7573 var c = x.am(i, x[i], r, 2 * i, 0, 1)
7574 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
7575 r[i + x.t] -= x.DV
7576 r[i + x.t + 1] = 1
7577 }
7578 }
7579 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
7580 r.s = 0
7581 r.clamp()
7582}
7583
7584// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
7585// r != q, this != m. q or r may be null.
7586function bnpDivRemTo(m, q, r) {
7587 var self = this
7588 var pm = m.abs()
7589 if (pm.t <= 0) return
7590 var pt = self.abs()
7591 if (pt.t < pm.t) {
7592 if (q != null) q.fromInt(0)
7593 if (r != null) self.copyTo(r)
7594 return
7595 }
7596 if (r == null) r = new BigInteger()
7597 var y = new BigInteger(),
7598 ts = self.s,
7599 ms = m.s
7600 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
7601 if (nsh > 0) {
7602 pm.lShiftTo(nsh, y)
7603 pt.lShiftTo(nsh, r)
7604 } else {
7605 pm.copyTo(y)
7606 pt.copyTo(r)
7607 }
7608 var ys = y.t
7609 var y0 = y[ys - 1]
7610 if (y0 == 0) return
7611 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
7612 var d1 = self.FV / yt,
7613 d2 = (1 << self.F1) / yt,
7614 e = 1 << self.F2
7615 var i = r.t,
7616 j = i - ys,
7617 t = (q == null) ? new BigInteger() : q
7618 y.dlShiftTo(j, t)
7619 if (r.compareTo(t) >= 0) {
7620 r[r.t++] = 1
7621 r.subTo(t, r)
7622 }
7623 BigInteger.ONE.dlShiftTo(ys, t)
7624 t.subTo(y, y); // "negative" y so we can replace sub with am later
7625 while (y.t < ys) y[y.t++] = 0
7626 while (--j >= 0) {
7627 // Estimate quotient digit
7628 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
7629 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
7630 y.dlShiftTo(j, t)
7631 r.subTo(t, r)
7632 while (r[i] < --qd) r.subTo(t, r)
7633 }
7634 }
7635 if (q != null) {
7636 r.drShiftTo(ys, q)
7637 if (ts != ms) BigInteger.ZERO.subTo(q, q)
7638 }
7639 r.t = ys
7640 r.clamp()
7641 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
7642 if (ts < 0) BigInteger.ZERO.subTo(r, r)
7643}
7644
7645// (public) this mod a
7646function bnMod(a) {
7647 var r = new BigInteger()
7648 this.abs()
7649 .divRemTo(a, null, r)
7650 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
7651 return r
7652}
7653
7654// Modular reduction using "classic" algorithm
7655function Classic(m) {
7656 this.m = m
7657}
7658
7659function cConvert(x) {
7660 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
7661 else return x
7662}
7663
7664function cRevert(x) {
7665 return x
7666}
7667
7668function cReduce(x) {
7669 x.divRemTo(this.m, null, x)
7670}
7671
7672function cMulTo(x, y, r) {
7673 x.multiplyTo(y, r)
7674 this.reduce(r)
7675}
7676
7677function cSqrTo(x, r) {
7678 x.squareTo(r)
7679 this.reduce(r)
7680}
7681
7682Classic.prototype.convert = cConvert
7683Classic.prototype.revert = cRevert
7684Classic.prototype.reduce = cReduce
7685Classic.prototype.mulTo = cMulTo
7686Classic.prototype.sqrTo = cSqrTo
7687
7688// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
7689// justification:
7690// xy == 1 (mod m)
7691// xy = 1+km
7692// xy(2-xy) = (1+km)(1-km)
7693// x[y(2-xy)] = 1-k^2m^2
7694// x[y(2-xy)] == 1 (mod m^2)
7695// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
7696// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
7697// JS multiply "overflows" differently from C/C++, so care is needed here.
7698function bnpInvDigit() {
7699 if (this.t < 1) return 0
7700 var x = this[0]
7701 if ((x & 1) == 0) return 0
7702 var y = x & 3; // y == 1/x mod 2^2
7703 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
7704 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
7705 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
7706 // last step - calculate inverse mod DV directly
7707 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
7708 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
7709 // we really want the negative inverse, and -DV < y < DV
7710 return (y > 0) ? this.DV - y : -y
7711}
7712
7713// Montgomery reduction
7714function Montgomery(m) {
7715 this.m = m
7716 this.mp = m.invDigit()
7717 this.mpl = this.mp & 0x7fff
7718 this.mph = this.mp >> 15
7719 this.um = (1 << (m.DB - 15)) - 1
7720 this.mt2 = 2 * m.t
7721}
7722
7723// xR mod m
7724function montConvert(x) {
7725 var r = new BigInteger()
7726 x.abs()
7727 .dlShiftTo(this.m.t, r)
7728 r.divRemTo(this.m, null, r)
7729 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
7730 return r
7731}
7732
7733// x/R mod m
7734function montRevert(x) {
7735 var r = new BigInteger()
7736 x.copyTo(r)
7737 this.reduce(r)
7738 return r
7739}
7740
7741// x = x/R mod m (HAC 14.32)
7742function montReduce(x) {
7743 while (x.t <= this.mt2) // pad x so am has enough room later
7744 x[x.t++] = 0
7745 for (var i = 0; i < this.m.t; ++i) {
7746 // faster way of calculating u0 = x[i]*mp mod DV
7747 var j = x[i] & 0x7fff
7748 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
7749 // use am to combine the multiply-shift-add into one call
7750 j = i + this.m.t
7751 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
7752 // propagate carry
7753 while (x[j] >= x.DV) {
7754 x[j] -= x.DV
7755 x[++j]++
7756 }
7757 }
7758 x.clamp()
7759 x.drShiftTo(this.m.t, x)
7760 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
7761}
7762
7763// r = "x^2/R mod m"; x != r
7764function montSqrTo(x, r) {
7765 x.squareTo(r)
7766 this.reduce(r)
7767}
7768
7769// r = "xy/R mod m"; x,y != r
7770function montMulTo(x, y, r) {
7771 x.multiplyTo(y, r)
7772 this.reduce(r)
7773}
7774
7775Montgomery.prototype.convert = montConvert
7776Montgomery.prototype.revert = montRevert
7777Montgomery.prototype.reduce = montReduce
7778Montgomery.prototype.mulTo = montMulTo
7779Montgomery.prototype.sqrTo = montSqrTo
7780
7781// (protected) true iff this is even
7782function bnpIsEven() {
7783 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
7784}
7785
7786// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
7787function bnpExp(e, z) {
7788 if (e > 0xffffffff || e < 1) return BigInteger.ONE
7789 var r = new BigInteger(),
7790 r2 = new BigInteger(),
7791 g = z.convert(this),
7792 i = nbits(e) - 1
7793 g.copyTo(r)
7794 while (--i >= 0) {
7795 z.sqrTo(r, r2)
7796 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
7797 else {
7798 var t = r
7799 r = r2
7800 r2 = t
7801 }
7802 }
7803 return z.revert(r)
7804}
7805
7806// (public) this^e % m, 0 <= e < 2^32
7807function bnModPowInt(e, m) {
7808 var z
7809 if (e < 256 || m.isEven()) z = new Classic(m)
7810 else z = new Montgomery(m)
7811 return this.exp(e, z)
7812}
7813
7814// protected
7815proto.copyTo = bnpCopyTo
7816proto.fromInt = bnpFromInt
7817proto.fromString = bnpFromString
7818proto.clamp = bnpClamp
7819proto.dlShiftTo = bnpDLShiftTo
7820proto.drShiftTo = bnpDRShiftTo
7821proto.lShiftTo = bnpLShiftTo
7822proto.rShiftTo = bnpRShiftTo
7823proto.subTo = bnpSubTo
7824proto.multiplyTo = bnpMultiplyTo
7825proto.squareTo = bnpSquareTo
7826proto.divRemTo = bnpDivRemTo
7827proto.invDigit = bnpInvDigit
7828proto.isEven = bnpIsEven
7829proto.exp = bnpExp
7830
7831// public
7832proto.toString = bnToString
7833proto.negate = bnNegate
7834proto.abs = bnAbs
7835proto.compareTo = bnCompareTo
7836proto.bitLength = bnBitLength
7837proto.byteLength = bnByteLength
7838proto.mod = bnMod
7839proto.modPowInt = bnModPowInt
7840
7841// (public)
7842function bnClone() {
7843 var r = new BigInteger()
7844 this.copyTo(r)
7845 return r
7846}
7847
7848// (public) return value as integer
7849function bnIntValue() {
7850 if (this.s < 0) {
7851 if (this.t == 1) return this[0] - this.DV
7852 else if (this.t == 0) return -1
7853 } else if (this.t == 1) return this[0]
7854 else if (this.t == 0) return 0
7855 // assumes 16 < DB < 32
7856 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
7857}
7858
7859// (public) return value as byte
7860function bnByteValue() {
7861 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
7862}
7863
7864// (public) return value as short (assumes DB>=16)
7865function bnShortValue() {
7866 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
7867}
7868
7869// (protected) return x s.t. r^x < DV
7870function bnpChunkSize(r) {
7871 return Math.floor(Math.LN2 * this.DB / Math.log(r))
7872}
7873
7874// (public) 0 if this == 0, 1 if this > 0
7875function bnSigNum() {
7876 if (this.s < 0) return -1
7877 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
7878 else return 1
7879}
7880
7881// (protected) convert to radix string
7882function bnpToRadix(b) {
7883 if (b == null) b = 10
7884 if (this.signum() == 0 || b < 2 || b > 36) return "0"
7885 var cs = this.chunkSize(b)
7886 var a = Math.pow(b, cs)
7887 var d = nbv(a),
7888 y = new BigInteger(),
7889 z = new BigInteger(),
7890 r = ""
7891 this.divRemTo(d, y, z)
7892 while (y.signum() > 0) {
7893 r = (a + z.intValue())
7894 .toString(b)
7895 .substr(1) + r
7896 y.divRemTo(d, y, z)
7897 }
7898 return z.intValue()
7899 .toString(b) + r
7900}
7901
7902// (protected) convert from radix string
7903function bnpFromRadix(s, b) {
7904 var self = this
7905 self.fromInt(0)
7906 if (b == null) b = 10
7907 var cs = self.chunkSize(b)
7908 var d = Math.pow(b, cs),
7909 mi = false,
7910 j = 0,
7911 w = 0
7912 for (var i = 0; i < s.length; ++i) {
7913 var x = intAt(s, i)
7914 if (x < 0) {
7915 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
7916 continue
7917 }
7918 w = b * w + x
7919 if (++j >= cs) {
7920 self.dMultiply(d)
7921 self.dAddOffset(w, 0)
7922 j = 0
7923 w = 0
7924 }
7925 }
7926 if (j > 0) {
7927 self.dMultiply(Math.pow(b, j))
7928 self.dAddOffset(w, 0)
7929 }
7930 if (mi) BigInteger.ZERO.subTo(self, self)
7931}
7932
7933// (protected) alternate constructor
7934function bnpFromNumber(a, b, c) {
7935 var self = this
7936 if ("number" == typeof b) {
7937 // new BigInteger(int,int,RNG)
7938 if (a < 2) self.fromInt(1)
7939 else {
7940 self.fromNumber(a, c)
7941 if (!self.testBit(a - 1)) // force MSB set
7942 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
7943 if (self.isEven()) self.dAddOffset(1, 0); // force odd
7944 while (!self.isProbablePrime(b)) {
7945 self.dAddOffset(2, 0)
7946 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
7947 }
7948 }
7949 } else {
7950 // new BigInteger(int,RNG)
7951 var x = new Array(),
7952 t = a & 7
7953 x.length = (a >> 3) + 1
7954 b.nextBytes(x)
7955 if (t > 0) x[0] &= ((1 << t) - 1)
7956 else x[0] = 0
7957 self.fromString(x, 256)
7958 }
7959}
7960
7961// (public) convert to bigendian byte array
7962function bnToByteArray() {
7963 var self = this
7964 var i = self.t,
7965 r = new Array()
7966 r[0] = self.s
7967 var p = self.DB - (i * self.DB) % 8,
7968 d, k = 0
7969 if (i-- > 0) {
7970 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
7971 r[k++] = d | (self.s << (self.DB - p))
7972 while (i >= 0) {
7973 if (p < 8) {
7974 d = (self[i] & ((1 << p) - 1)) << (8 - p)
7975 d |= self[--i] >> (p += self.DB - 8)
7976 } else {
7977 d = (self[i] >> (p -= 8)) & 0xff
7978 if (p <= 0) {
7979 p += self.DB
7980 --i
7981 }
7982 }
7983 if ((d & 0x80) != 0) d |= -256
7984 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
7985 if (k > 0 || d != self.s) r[k++] = d
7986 }
7987 }
7988 return r
7989}
7990
7991function bnEquals(a) {
7992 return (this.compareTo(a) == 0)
7993}
7994
7995function bnMin(a) {
7996 return (this.compareTo(a) < 0) ? this : a
7997}
7998
7999function bnMax(a) {
8000 return (this.compareTo(a) > 0) ? this : a
8001}
8002
8003// (protected) r = this op a (bitwise)
8004function bnpBitwiseTo(a, op, r) {
8005 var self = this
8006 var i, f, m = Math.min(a.t, self.t)
8007 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
8008 if (a.t < self.t) {
8009 f = a.s & self.DM
8010 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
8011 r.t = self.t
8012 } else {
8013 f = self.s & self.DM
8014 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
8015 r.t = a.t
8016 }
8017 r.s = op(self.s, a.s)
8018 r.clamp()
8019}
8020
8021// (public) this & a
8022function op_and(x, y) {
8023 return x & y
8024}
8025
8026function bnAnd(a) {
8027 var r = new BigInteger()
8028 this.bitwiseTo(a, op_and, r)
8029 return r
8030}
8031
8032// (public) this | a
8033function op_or(x, y) {
8034 return x | y
8035}
8036
8037function bnOr(a) {
8038 var r = new BigInteger()
8039 this.bitwiseTo(a, op_or, r)
8040 return r
8041}
8042
8043// (public) this ^ a
8044function op_xor(x, y) {
8045 return x ^ y
8046}
8047
8048function bnXor(a) {
8049 var r = new BigInteger()
8050 this.bitwiseTo(a, op_xor, r)
8051 return r
8052}
8053
8054// (public) this & ~a
8055function op_andnot(x, y) {
8056 return x & ~y
8057}
8058
8059function bnAndNot(a) {
8060 var r = new BigInteger()
8061 this.bitwiseTo(a, op_andnot, r)
8062 return r
8063}
8064
8065// (public) ~this
8066function bnNot() {
8067 var r = new BigInteger()
8068 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
8069 r.t = this.t
8070 r.s = ~this.s
8071 return r
8072}
8073
8074// (public) this << n
8075function bnShiftLeft(n) {
8076 var r = new BigInteger()
8077 if (n < 0) this.rShiftTo(-n, r)
8078 else this.lShiftTo(n, r)
8079 return r
8080}
8081
8082// (public) this >> n
8083function bnShiftRight(n) {
8084 var r = new BigInteger()
8085 if (n < 0) this.lShiftTo(-n, r)
8086 else this.rShiftTo(n, r)
8087 return r
8088}
8089
8090// return index of lowest 1-bit in x, x < 2^31
8091function lbit(x) {
8092 if (x == 0) return -1
8093 var r = 0
8094 if ((x & 0xffff) == 0) {
8095 x >>= 16
8096 r += 16
8097 }
8098 if ((x & 0xff) == 0) {
8099 x >>= 8
8100 r += 8
8101 }
8102 if ((x & 0xf) == 0) {
8103 x >>= 4
8104 r += 4
8105 }
8106 if ((x & 3) == 0) {
8107 x >>= 2
8108 r += 2
8109 }
8110 if ((x & 1) == 0)++r
8111 return r
8112}
8113
8114// (public) returns index of lowest 1-bit (or -1 if none)
8115function bnGetLowestSetBit() {
8116 for (var i = 0; i < this.t; ++i)
8117 if (this[i] != 0) return i * this.DB + lbit(this[i])
8118 if (this.s < 0) return this.t * this.DB
8119 return -1
8120}
8121
8122// return number of 1 bits in x
8123function cbit(x) {
8124 var r = 0
8125 while (x != 0) {
8126 x &= x - 1
8127 ++r
8128 }
8129 return r
8130}
8131
8132// (public) return number of set bits
8133function bnBitCount() {
8134 var r = 0,
8135 x = this.s & this.DM
8136 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
8137 return r
8138}
8139
8140// (public) true iff nth bit is set
8141function bnTestBit(n) {
8142 var j = Math.floor(n / this.DB)
8143 if (j >= this.t) return (this.s != 0)
8144 return ((this[j] & (1 << (n % this.DB))) != 0)
8145}
8146
8147// (protected) this op (1<<n)
8148function bnpChangeBit(n, op) {
8149 var r = BigInteger.ONE.shiftLeft(n)
8150 this.bitwiseTo(r, op, r)
8151 return r
8152}
8153
8154// (public) this | (1<<n)
8155function bnSetBit(n) {
8156 return this.changeBit(n, op_or)
8157}
8158
8159// (public) this & ~(1<<n)
8160function bnClearBit(n) {
8161 return this.changeBit(n, op_andnot)
8162}
8163
8164// (public) this ^ (1<<n)
8165function bnFlipBit(n) {
8166 return this.changeBit(n, op_xor)
8167}
8168
8169// (protected) r = this + a
8170function bnpAddTo(a, r) {
8171 var self = this
8172
8173 var i = 0,
8174 c = 0,
8175 m = Math.min(a.t, self.t)
8176 while (i < m) {
8177 c += self[i] + a[i]
8178 r[i++] = c & self.DM
8179 c >>= self.DB
8180 }
8181 if (a.t < self.t) {
8182 c += a.s
8183 while (i < self.t) {
8184 c += self[i]
8185 r[i++] = c & self.DM
8186 c >>= self.DB
8187 }
8188 c += self.s
8189 } else {
8190 c += self.s
8191 while (i < a.t) {
8192 c += a[i]
8193 r[i++] = c & self.DM
8194 c >>= self.DB
8195 }
8196 c += a.s
8197 }
8198 r.s = (c < 0) ? -1 : 0
8199 if (c > 0) r[i++] = c
8200 else if (c < -1) r[i++] = self.DV + c
8201 r.t = i
8202 r.clamp()
8203}
8204
8205// (public) this + a
8206function bnAdd(a) {
8207 var r = new BigInteger()
8208 this.addTo(a, r)
8209 return r
8210}
8211
8212// (public) this - a
8213function bnSubtract(a) {
8214 var r = new BigInteger()
8215 this.subTo(a, r)
8216 return r
8217}
8218
8219// (public) this * a
8220function bnMultiply(a) {
8221 var r = new BigInteger()
8222 this.multiplyTo(a, r)
8223 return r
8224}
8225
8226// (public) this^2
8227function bnSquare() {
8228 var r = new BigInteger()
8229 this.squareTo(r)
8230 return r
8231}
8232
8233// (public) this / a
8234function bnDivide(a) {
8235 var r = new BigInteger()
8236 this.divRemTo(a, r, null)
8237 return r
8238}
8239
8240// (public) this % a
8241function bnRemainder(a) {
8242 var r = new BigInteger()
8243 this.divRemTo(a, null, r)
8244 return r
8245}
8246
8247// (public) [this/a,this%a]
8248function bnDivideAndRemainder(a) {
8249 var q = new BigInteger(),
8250 r = new BigInteger()
8251 this.divRemTo(a, q, r)
8252 return new Array(q, r)
8253}
8254
8255// (protected) this *= n, this >= 0, 1 < n < DV
8256function bnpDMultiply(n) {
8257 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
8258 ++this.t
8259 this.clamp()
8260}
8261
8262// (protected) this += n << w words, this >= 0
8263function bnpDAddOffset(n, w) {
8264 if (n == 0) return
8265 while (this.t <= w) this[this.t++] = 0
8266 this[w] += n
8267 while (this[w] >= this.DV) {
8268 this[w] -= this.DV
8269 if (++w >= this.t) this[this.t++] = 0
8270 ++this[w]
8271 }
8272}
8273
8274// A "null" reducer
8275function NullExp() {}
8276
8277function nNop(x) {
8278 return x
8279}
8280
8281function nMulTo(x, y, r) {
8282 x.multiplyTo(y, r)
8283}
8284
8285function nSqrTo(x, r) {
8286 x.squareTo(r)
8287}
8288
8289NullExp.prototype.convert = nNop
8290NullExp.prototype.revert = nNop
8291NullExp.prototype.mulTo = nMulTo
8292NullExp.prototype.sqrTo = nSqrTo
8293
8294// (public) this^e
8295function bnPow(e) {
8296 return this.exp(e, new NullExp())
8297}
8298
8299// (protected) r = lower n words of "this * a", a.t <= n
8300// "this" should be the larger one if appropriate.
8301function bnpMultiplyLowerTo(a, n, r) {
8302 var i = Math.min(this.t + a.t, n)
8303 r.s = 0; // assumes a,this >= 0
8304 r.t = i
8305 while (i > 0) r[--i] = 0
8306 var j
8307 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
8308 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
8309 r.clamp()
8310}
8311
8312// (protected) r = "this * a" without lower n words, n > 0
8313// "this" should be the larger one if appropriate.
8314function bnpMultiplyUpperTo(a, n, r) {
8315 --n
8316 var i = r.t = this.t + a.t - n
8317 r.s = 0; // assumes a,this >= 0
8318 while (--i >= 0) r[i] = 0
8319 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
8320 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
8321 r.clamp()
8322 r.drShiftTo(1, r)
8323}
8324
8325// Barrett modular reduction
8326function Barrett(m) {
8327 // setup Barrett
8328 this.r2 = new BigInteger()
8329 this.q3 = new BigInteger()
8330 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
8331 this.mu = this.r2.divide(m)
8332 this.m = m
8333}
8334
8335function barrettConvert(x) {
8336 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
8337 else if (x.compareTo(this.m) < 0) return x
8338 else {
8339 var r = new BigInteger()
8340 x.copyTo(r)
8341 this.reduce(r)
8342 return r
8343 }
8344}
8345
8346function barrettRevert(x) {
8347 return x
8348}
8349
8350// x = x mod m (HAC 14.42)
8351function barrettReduce(x) {
8352 var self = this
8353 x.drShiftTo(self.m.t - 1, self.r2)
8354 if (x.t > self.m.t + 1) {
8355 x.t = self.m.t + 1
8356 x.clamp()
8357 }
8358 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
8359 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
8360 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
8361 x.subTo(self.r2, x)
8362 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
8363}
8364
8365// r = x^2 mod m; x != r
8366function barrettSqrTo(x, r) {
8367 x.squareTo(r)
8368 this.reduce(r)
8369}
8370
8371// r = x*y mod m; x,y != r
8372function barrettMulTo(x, y, r) {
8373 x.multiplyTo(y, r)
8374 this.reduce(r)
8375}
8376
8377Barrett.prototype.convert = barrettConvert
8378Barrett.prototype.revert = barrettRevert
8379Barrett.prototype.reduce = barrettReduce
8380Barrett.prototype.mulTo = barrettMulTo
8381Barrett.prototype.sqrTo = barrettSqrTo
8382
8383// (public) this^e % m (HAC 14.85)
8384function bnModPow(e, m) {
8385 var i = e.bitLength(),
8386 k, r = nbv(1),
8387 z
8388 if (i <= 0) return r
8389 else if (i < 18) k = 1
8390 else if (i < 48) k = 3
8391 else if (i < 144) k = 4
8392 else if (i < 768) k = 5
8393 else k = 6
8394 if (i < 8)
8395 z = new Classic(m)
8396 else if (m.isEven())
8397 z = new Barrett(m)
8398 else
8399 z = new Montgomery(m)
8400
8401 // precomputation
8402 var g = new Array(),
8403 n = 3,
8404 k1 = k - 1,
8405 km = (1 << k) - 1
8406 g[1] = z.convert(this)
8407 if (k > 1) {
8408 var g2 = new BigInteger()
8409 z.sqrTo(g[1], g2)
8410 while (n <= km) {
8411 g[n] = new BigInteger()
8412 z.mulTo(g2, g[n - 2], g[n])
8413 n += 2
8414 }
8415 }
8416
8417 var j = e.t - 1,
8418 w, is1 = true,
8419 r2 = new BigInteger(),
8420 t
8421 i = nbits(e[j]) - 1
8422 while (j >= 0) {
8423 if (i >= k1) w = (e[j] >> (i - k1)) & km
8424 else {
8425 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
8426 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8427 }
8428
8429 n = k
8430 while ((w & 1) == 0) {
8431 w >>= 1
8432 --n
8433 }
8434 if ((i -= n) < 0) {
8435 i += this.DB
8436 --j
8437 }
8438 if (is1) { // ret == 1, don't bother squaring or multiplying it
8439 g[w].copyTo(r)
8440 is1 = false
8441 } else {
8442 while (n > 1) {
8443 z.sqrTo(r, r2)
8444 z.sqrTo(r2, r)
8445 n -= 2
8446 }
8447 if (n > 0) z.sqrTo(r, r2)
8448 else {
8449 t = r
8450 r = r2
8451 r2 = t
8452 }
8453 z.mulTo(r2, g[w], r)
8454 }
8455
8456 while (j >= 0 && (e[j] & (1 << i)) == 0) {
8457 z.sqrTo(r, r2)
8458 t = r
8459 r = r2
8460 r2 = t
8461 if (--i < 0) {
8462 i = this.DB - 1
8463 --j
8464 }
8465 }
8466 }
8467 return z.revert(r)
8468}
8469
8470// (public) gcd(this,a) (HAC 14.54)
8471function bnGCD(a) {
8472 var x = (this.s < 0) ? this.negate() : this.clone()
8473 var y = (a.s < 0) ? a.negate() : a.clone()
8474 if (x.compareTo(y) < 0) {
8475 var t = x
8476 x = y
8477 y = t
8478 }
8479 var i = x.getLowestSetBit(),
8480 g = y.getLowestSetBit()
8481 if (g < 0) return x
8482 if (i < g) g = i
8483 if (g > 0) {
8484 x.rShiftTo(g, x)
8485 y.rShiftTo(g, y)
8486 }
8487 while (x.signum() > 0) {
8488 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
8489 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
8490 if (x.compareTo(y) >= 0) {
8491 x.subTo(y, x)
8492 x.rShiftTo(1, x)
8493 } else {
8494 y.subTo(x, y)
8495 y.rShiftTo(1, y)
8496 }
8497 }
8498 if (g > 0) y.lShiftTo(g, y)
8499 return y
8500}
8501
8502// (protected) this % n, n < 2^26
8503function bnpModInt(n) {
8504 if (n <= 0) return 0
8505 var d = this.DV % n,
8506 r = (this.s < 0) ? n - 1 : 0
8507 if (this.t > 0)
8508 if (d == 0) r = this[0] % n
8509 else
8510 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
8511 return r
8512}
8513
8514// (public) 1/this % m (HAC 14.61)
8515function bnModInverse(m) {
8516 var ac = m.isEven()
8517 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
8518 var u = m.clone(),
8519 v = this.clone()
8520 var a = nbv(1),
8521 b = nbv(0),
8522 c = nbv(0),
8523 d = nbv(1)
8524 while (u.signum() != 0) {
8525 while (u.isEven()) {
8526 u.rShiftTo(1, u)
8527 if (ac) {
8528 if (!a.isEven() || !b.isEven()) {
8529 a.addTo(this, a)
8530 b.subTo(m, b)
8531 }
8532 a.rShiftTo(1, a)
8533 } else if (!b.isEven()) b.subTo(m, b)
8534 b.rShiftTo(1, b)
8535 }
8536 while (v.isEven()) {
8537 v.rShiftTo(1, v)
8538 if (ac) {
8539 if (!c.isEven() || !d.isEven()) {
8540 c.addTo(this, c)
8541 d.subTo(m, d)
8542 }
8543 c.rShiftTo(1, c)
8544 } else if (!d.isEven()) d.subTo(m, d)
8545 d.rShiftTo(1, d)
8546 }
8547 if (u.compareTo(v) >= 0) {
8548 u.subTo(v, u)
8549 if (ac) a.subTo(c, a)
8550 b.subTo(d, b)
8551 } else {
8552 v.subTo(u, v)
8553 if (ac) c.subTo(a, c)
8554 d.subTo(b, d)
8555 }
8556 }
8557 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
8558 if (d.compareTo(m) >= 0) return d.subtract(m)
8559 if (d.signum() < 0) d.addTo(m, d)
8560 else return d
8561 if (d.signum() < 0) return d.add(m)
8562 else return d
8563}
8564
8565var lowprimes = [
8566 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
8567 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
8568 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
8569 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
8570 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
8571 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
8572 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
8573 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
8574 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
8575 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
8576 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
8577]
8578
8579var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8580
8581// (public) test primality with certainty >= 1-.5^t
8582function bnIsProbablePrime(t) {
8583 var i, x = this.abs()
8584 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
8585 for (i = 0; i < lowprimes.length; ++i)
8586 if (x[0] == lowprimes[i]) return true
8587 return false
8588 }
8589 if (x.isEven()) return false
8590 i = 1
8591 while (i < lowprimes.length) {
8592 var m = lowprimes[i],
8593 j = i + 1
8594 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
8595 m = x.modInt(m)
8596 while (i < j) if (m % lowprimes[i++] == 0) return false
8597 }
8598 return x.millerRabin(t)
8599}
8600
8601// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
8602function bnpMillerRabin(t) {
8603 var n1 = this.subtract(BigInteger.ONE)
8604 var k = n1.getLowestSetBit()
8605 if (k <= 0) return false
8606 var r = n1.shiftRight(k)
8607 t = (t + 1) >> 1
8608 if (t > lowprimes.length) t = lowprimes.length
8609 var a = new BigInteger(null)
8610 var j, bases = []
8611 for (var i = 0; i < t; ++i) {
8612 for (;;) {
8613 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
8614 if (bases.indexOf(j) == -1) break
8615 }
8616 bases.push(j)
8617 a.fromInt(j)
8618 var y = a.modPow(r, this)
8619 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
8620 var j = 1
8621 while (j++ < k && y.compareTo(n1) != 0) {
8622 y = y.modPowInt(2, this)
8623 if (y.compareTo(BigInteger.ONE) == 0) return false
8624 }
8625 if (y.compareTo(n1) != 0) return false
8626 }
8627 }
8628 return true
8629}
8630
8631// protected
8632proto.chunkSize = bnpChunkSize
8633proto.toRadix = bnpToRadix
8634proto.fromRadix = bnpFromRadix
8635proto.fromNumber = bnpFromNumber
8636proto.bitwiseTo = bnpBitwiseTo
8637proto.changeBit = bnpChangeBit
8638proto.addTo = bnpAddTo
8639proto.dMultiply = bnpDMultiply
8640proto.dAddOffset = bnpDAddOffset
8641proto.multiplyLowerTo = bnpMultiplyLowerTo
8642proto.multiplyUpperTo = bnpMultiplyUpperTo
8643proto.modInt = bnpModInt
8644proto.millerRabin = bnpMillerRabin
8645
8646// public
8647proto.clone = bnClone
8648proto.intValue = bnIntValue
8649proto.byteValue = bnByteValue
8650proto.shortValue = bnShortValue
8651proto.signum = bnSigNum
8652proto.toByteArray = bnToByteArray
8653proto.equals = bnEquals
8654proto.min = bnMin
8655proto.max = bnMax
8656proto.and = bnAnd
8657proto.or = bnOr
8658proto.xor = bnXor
8659proto.andNot = bnAndNot
8660proto.not = bnNot
8661proto.shiftLeft = bnShiftLeft
8662proto.shiftRight = bnShiftRight
8663proto.getLowestSetBit = bnGetLowestSetBit
8664proto.bitCount = bnBitCount
8665proto.testBit = bnTestBit
8666proto.setBit = bnSetBit
8667proto.clearBit = bnClearBit
8668proto.flipBit = bnFlipBit
8669proto.add = bnAdd
8670proto.subtract = bnSubtract
8671proto.multiply = bnMultiply
8672proto.divide = bnDivide
8673proto.remainder = bnRemainder
8674proto.divideAndRemainder = bnDivideAndRemainder
8675proto.modPow = bnModPow
8676proto.modInverse = bnModInverse
8677proto.pow = bnPow
8678proto.gcd = bnGCD
8679proto.isProbablePrime = bnIsProbablePrime
8680
8681// JSBN-specific extension
8682proto.square = bnSquare
8683
8684// constants
8685BigInteger.ZERO = nbv(0)
8686BigInteger.ONE = nbv(1)
8687BigInteger.valueOf = nbv
8688
8689module.exports = BigInteger
8690
8691},{"../package.json":4}],2:[function(require,module,exports){
8692(function (Buffer){
8693// FIXME: Kind of a weird way to throw exceptions, consider removing
8694var assert = require('assert')
8695var BigInteger = require('./bigi')
8696
8697/**
8698 * Turns a byte array into a big integer.
8699 *
8700 * This function will interpret a byte array as a big integer in big
8701 * endian notation.
8702 */
8703BigInteger.fromByteArrayUnsigned = function(byteArray) {
8704 // BigInteger expects a DER integer conformant byte array
8705 if (byteArray[0] & 0x80) {
8706 return new BigInteger([0].concat(byteArray))
8707 }
8708
8709 return new BigInteger(byteArray)
8710}
8711
8712/**
8713 * Returns a byte array representation of the big integer.
8714 *
8715 * This returns the absolute of the contained value in big endian
8716 * form. A value of zero results in an empty array.
8717 */
8718BigInteger.prototype.toByteArrayUnsigned = function() {
8719 var byteArray = this.toByteArray()
8720 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
8721}
8722
8723BigInteger.fromDERInteger = function(byteArray) {
8724 return new BigInteger(byteArray)
8725}
8726
8727/*
8728 * Converts BigInteger to a DER integer representation.
8729 *
8730 * The format for this value uses the most significant bit as a sign
8731 * bit. If the most significant bit is already set and the integer is
8732 * positive, a 0x00 is prepended.
8733 *
8734 * Examples:
8735 *
8736 * 0 => 0x00
8737 * 1 => 0x01
8738 * -1 => 0xff
8739 * 127 => 0x7f
8740 * -127 => 0x81
8741 * 128 => 0x0080
8742 * -128 => 0x80
8743 * 255 => 0x00ff
8744 * -255 => 0xff01
8745 * 16300 => 0x3fac
8746 * -16300 => 0xc054
8747 * 62300 => 0x00f35c
8748 * -62300 => 0xff0ca4
8749*/
8750BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8751
8752BigInteger.fromBuffer = function(buffer) {
8753 // BigInteger expects a DER integer conformant byte array
8754 if (buffer[0] & 0x80) {
8755 var byteArray = Array.prototype.slice.call(buffer)
8756
8757 return new BigInteger([0].concat(byteArray))
8758 }
8759
8760 return new BigInteger(buffer)
8761}
8762
8763BigInteger.fromHex = function(hex) {
8764 if (hex === '') return BigInteger.ZERO
8765
8766 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
8767 assert.equal(hex.length % 2, 0, 'Incomplete hex')
8768 return new BigInteger(hex, 16)
8769}
8770
8771BigInteger.prototype.toBuffer = function(size) {
8772 var byteArray = this.toByteArrayUnsigned()
8773 var zeros = []
8774
8775 var padding = size - byteArray.length
8776 while (zeros.length < padding) zeros.push(0)
8777
8778 return new Buffer(zeros.concat(byteArray))
8779}
8780
8781BigInteger.prototype.toHex = function(size) {
8782 return this.toBuffer(size).toString('hex')
8783}
8784
8785}).call(this,require("buffer").Buffer)
8786},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
8787var BigInteger = require('./bigi')
8788
8789//addons
8790require('./convert')
8791
8792module.exports = BigInteger
8793},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
8794module.exports={
8795 "name": "bigi",
8796 "version": "1.4.0",
8797 "description": "Big integers.",
8798 "keywords": [
8799 "cryptography",
8800 "math",
8801 "bitcoin",
8802 "arbitrary",
8803 "precision",
8804 "arithmetic",
8805 "big",
8806 "integer",
8807 "int",
8808 "number",
8809 "biginteger",
8810 "bigint",
8811 "bignumber",
8812 "decimal",
8813 "float"
8814 ],
8815 "devDependencies": {
8816 "mocha": "^1.20.1",
8817 "jshint": "^2.5.1",
8818 "coveralls": "^2.10.0",
8819 "istanbul": "^0.2.11"
8820 },
8821 "repository": {
8822 "url": "https://github.com/cryptocoinjs/bigi",
8823 "type": "git"
8824 },
8825 "main": "./lib/index.js",
8826 "scripts": {
8827 "test": "_mocha -- test/*.js",
8828 "jshint": "jshint --config jshint.json lib/*.js ; true",
8829 "unit": "mocha",
8830 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
8831 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
8832 },
8833 "dependencies": {},
8834 "testling": {
8835 "files": "test/*.js",
8836 "harness": "mocha",
8837 "browsers": [
8838 "ie/9..latest",
8839 "firefox/latest",
8840 "chrome/latest",
8841 "safari/6.0..latest",
8842 "iphone/6.0..latest",
8843 "android-browser/4.2..latest"
8844 ]
8845 },
8846 "bugs": {
8847 "url": "https://github.com/cryptocoinjs/bigi/issues"
8848 },
8849 "homepage": "https://github.com/cryptocoinjs/bigi",
8850 "_id": "bigi@1.4.0",
8851 "dist": {
8852 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
8853 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
8854 },
8855 "_from": "bigi@^1.4.0",
8856 "_npmVersion": "1.4.3",
8857 "_npmUser": {
8858 "name": "jp",
8859 "email": "jprichardson@gmail.com"
8860 },
8861 "maintainers": [
8862 {
8863 "name": "jp",
8864 "email": "jprichardson@gmail.com"
8865 },
8866 {
8867 "name": "midnightlightning",
8868 "email": "boydb@midnightdesign.ws"
8869 },
8870 {
8871 "name": "sidazhang",
8872 "email": "sidazhang89@gmail.com"
8873 },
8874 {
8875 "name": "nadav",
8876 "email": "npm@shesek.info"
8877 }
8878 ],
8879 "directories": {},
8880 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
8881 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
8882}
8883
8884},{}],5:[function(require,module,exports){
8885// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
8886//
8887// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
8888//
8889// Originally from narwhal.js (http://narwhaljs.org)
8890// Copyright (c) 2009 Thomas Robinson <280north.com>
8891//
8892// Permission is hereby granted, free of charge, to any person obtaining a copy
8893// of this software and associated documentation files (the 'Software'), to
8894// deal in the Software without restriction, including without limitation the
8895// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8896// sell copies of the Software, and to permit persons to whom the Software is
8897// furnished to do so, subject to the following conditions:
8898//
8899// The above copyright notice and this permission notice shall be included in
8900// all copies or substantial portions of the Software.
8901//
8902// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8903// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
8904// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
8905// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
8906// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
8907// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8908
8909// when used in node, this will actually load the util module we depend on
8910// versus loading the builtin util module as happens otherwise
8911// this is a bug in node module loading as far as I am concerned
8912var util = require('util/');
8913
8914var pSlice = Array.prototype.slice;
8915var hasOwn = Object.prototype.hasOwnProperty;
8916
8917// 1. The assert module provides functions that throw
8918// AssertionError's when particular conditions are not met. The
8919// assert module must conform to the following interface.
8920
8921var assert = module.exports = ok;
8922
8923// 2. The AssertionError is defined in assert.
8924// new assert.AssertionError({ message: message,
8925// actual: actual,
8926// expected: expected })
8927
8928assert.AssertionError = function AssertionError(options) {
8929 this.name = 'AssertionError';
8930 this.actual = options.actual;
8931 this.expected = options.expected;
8932 this.operator = options.operator;
8933 if (options.message) {
8934 this.message = options.message;
8935 this.generatedMessage = false;
8936 } else {
8937 this.message = getMessage(this);
8938 this.generatedMessage = true;
8939 }
8940 var stackStartFunction = options.stackStartFunction || fail;
8941
8942 if (Error.captureStackTrace) {
8943 Error.captureStackTrace(this, stackStartFunction);
8944 }
8945 else {
8946 // non v8 browsers so we can have a stacktrace
8947 var err = new Error();
8948 if (err.stack) {
8949 var out = err.stack;
8950
8951 // try to strip useless frames
8952 var fn_name = stackStartFunction.name;
8953 var idx = out.indexOf('\n' + fn_name);
8954 if (idx >= 0) {
8955 // once we have located the function frame
8956 // we need to strip out everything before it (and its line)
8957 var next_line = out.indexOf('\n', idx + 1);
8958 out = out.substring(next_line + 1);
8959 }
8960
8961 this.stack = out;
8962 }
8963 }
8964};
8965
8966// assert.AssertionError instanceof Error
8967util.inherits(assert.AssertionError, Error);
8968
8969function replacer(key, value) {
8970 if (util.isUndefined(value)) {
8971 return '' + value;
8972 }
8973 if (util.isNumber(value) && !isFinite(value)) {
8974 return value.toString();
8975 }
8976 if (util.isFunction(value) || util.isRegExp(value)) {
8977 return value.toString();
8978 }
8979 return value;
8980}
8981
8982function truncate(s, n) {
8983 if (util.isString(s)) {
8984 return s.length < n ? s : s.slice(0, n);
8985 } else {
8986 return s;
8987 }
8988}
8989
8990function getMessage(self) {
8991 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
8992 self.operator + ' ' +
8993 truncate(JSON.stringify(self.expected, replacer), 128);
8994}
8995
8996// At present only the three keys mentioned above are used and
8997// understood by the spec. Implementations or sub modules can pass
8998// other keys to the AssertionError's constructor - they will be
8999// ignored.
9000
9001// 3. All of the following functions must throw an AssertionError
9002// when a corresponding condition is not met, with a message that
9003// may be undefined if not provided. All assertion methods provide
9004// both the actual and expected values to the assertion error for
9005// display purposes.
9006
9007function fail(actual, expected, message, operator, stackStartFunction) {
9008 throw new assert.AssertionError({
9009 message: message,
9010 actual: actual,
9011 expected: expected,
9012 operator: operator,
9013 stackStartFunction: stackStartFunction
9014 });
9015}
9016
9017// EXTENSION! allows for well behaved errors defined elsewhere.
9018assert.fail = fail;
9019
9020// 4. Pure assertion tests whether a value is truthy, as determined
9021// by !!guard.
9022// assert.ok(guard, message_opt);
9023// This statement is equivalent to assert.equal(true, !!guard,
9024// message_opt);. To test strictly for the value true, use
9025// assert.strictEqual(true, guard, message_opt);.
9026
9027function ok(value, message) {
9028 if (!value) fail(value, true, message, '==', assert.ok);
9029}
9030assert.ok = ok;
9031
9032// 5. The equality assertion tests shallow, coercive equality with
9033// ==.
9034// assert.equal(actual, expected, message_opt);
9035
9036assert.equal = function equal(actual, expected, message) {
9037 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
9038};
9039
9040// 6. The non-equality assertion tests for whether two objects are not equal
9041// with != assert.notEqual(actual, expected, message_opt);
9042
9043assert.notEqual = function notEqual(actual, expected, message) {
9044 if (actual == expected) {
9045 fail(actual, expected, message, '!=', assert.notEqual);
9046 }
9047};
9048
9049// 7. The equivalence assertion tests a deep equality relation.
9050// assert.deepEqual(actual, expected, message_opt);
9051
9052assert.deepEqual = function deepEqual(actual, expected, message) {
9053 if (!_deepEqual(actual, expected)) {
9054 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
9055 }
9056};
9057
9058function _deepEqual(actual, expected) {
9059 // 7.1. All identical values are equivalent, as determined by ===.
9060 if (actual === expected) {
9061 return true;
9062
9063 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
9064 if (actual.length != expected.length) return false;
9065
9066 for (var i = 0; i < actual.length; i++) {
9067 if (actual[i] !== expected[i]) return false;
9068 }
9069
9070 return true;
9071
9072 // 7.2. If the expected value is a Date object, the actual value is
9073 // equivalent if it is also a Date object that refers to the same time.
9074 } else if (util.isDate(actual) && util.isDate(expected)) {
9075 return actual.getTime() === expected.getTime();
9076
9077 // 7.3 If the expected value is a RegExp object, the actual value is
9078 // equivalent if it is also a RegExp object with the same source and
9079 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
9080 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
9081 return actual.source === expected.source &&
9082 actual.global === expected.global &&
9083 actual.multiline === expected.multiline &&
9084 actual.lastIndex === expected.lastIndex &&
9085 actual.ignoreCase === expected.ignoreCase;
9086
9087 // 7.4. Other pairs that do not both pass typeof value == 'object',
9088 // equivalence is determined by ==.
9089 } else if (!util.isObject(actual) && !util.isObject(expected)) {
9090 return actual == expected;
9091
9092 // 7.5 For all other Object pairs, including Array objects, equivalence is
9093 // determined by having the same number of owned properties (as verified
9094 // with Object.prototype.hasOwnProperty.call), the same set of keys
9095 // (although not necessarily the same order), equivalent values for every
9096 // corresponding key, and an identical 'prototype' property. Note: this
9097 // accounts for both named and indexed properties on Arrays.
9098 } else {
9099 return objEquiv(actual, expected);
9100 }
9101}
9102
9103function isArguments(object) {
9104 return Object.prototype.toString.call(object) == '[object Arguments]';
9105}
9106
9107function objEquiv(a, b) {
9108 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
9109 return false;
9110 // an identical 'prototype' property.
9111 if (a.prototype !== b.prototype) return false;
9112 // if one is a primitive, the other must be same
9113 if (util.isPrimitive(a) || util.isPrimitive(b)) {
9114 return a === b;
9115 }
9116 var aIsArgs = isArguments(a),
9117 bIsArgs = isArguments(b);
9118 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
9119 return false;
9120 if (aIsArgs) {
9121 a = pSlice.call(a);
9122 b = pSlice.call(b);
9123 return _deepEqual(a, b);
9124 }
9125 var ka = objectKeys(a),
9126 kb = objectKeys(b),
9127 key, i;
9128 // having the same number of owned properties (keys incorporates
9129 // hasOwnProperty)
9130 if (ka.length != kb.length)
9131 return false;
9132 //the same set of keys (although not necessarily the same order),
9133 ka.sort();
9134 kb.sort();
9135 //~~~cheap key test
9136 for (i = ka.length - 1; i >= 0; i--) {
9137 if (ka[i] != kb[i])
9138 return false;
9139 }
9140 //equivalent values for every corresponding key, and
9141 //~~~possibly expensive deep test
9142 for (i = ka.length - 1; i >= 0; i--) {
9143 key = ka[i];
9144 if (!_deepEqual(a[key], b[key])) return false;
9145 }
9146 return true;
9147}
9148
9149// 8. The non-equivalence assertion tests for any deep inequality.
9150// assert.notDeepEqual(actual, expected, message_opt);
9151
9152assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
9153 if (_deepEqual(actual, expected)) {
9154 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
9155 }
9156};
9157
9158// 9. The strict equality assertion tests strict equality, as determined by ===.
9159// assert.strictEqual(actual, expected, message_opt);
9160
9161assert.strictEqual = function strictEqual(actual, expected, message) {
9162 if (actual !== expected) {
9163 fail(actual, expected, message, '===', assert.strictEqual);
9164 }
9165};
9166
9167// 10. The strict non-equality assertion tests for strict inequality, as
9168// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
9169
9170assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
9171 if (actual === expected) {
9172 fail(actual, expected, message, '!==', assert.notStrictEqual);
9173 }
9174};
9175
9176function expectedException(actual, expected) {
9177 if (!actual || !expected) {
9178 return false;
9179 }
9180
9181 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
9182 return expected.test(actual);
9183 } else if (actual instanceof expected) {
9184 return true;
9185 } else if (expected.call({}, actual) === true) {
9186 return true;
9187 }
9188
9189 return false;
9190}
9191
9192function _throws(shouldThrow, block, expected, message) {
9193 var actual;
9194
9195 if (util.isString(expected)) {
9196 message = expected;
9197 expected = null;
9198 }
9199
9200 try {
9201 block();
9202 } catch (e) {
9203 actual = e;
9204 }
9205
9206 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
9207 (message ? ' ' + message : '.');
9208
9209 if (shouldThrow && !actual) {
9210 fail(actual, expected, 'Missing expected exception' + message);
9211 }
9212
9213 if (!shouldThrow && expectedException(actual, expected)) {
9214 fail(actual, expected, 'Got unwanted exception' + message);
9215 }
9216
9217 if ((shouldThrow && actual && expected &&
9218 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
9219 throw actual;
9220 }
9221}
9222
9223// 11. Expected to throw an error:
9224// assert.throws(block, Error_opt, message_opt);
9225
9226assert.throws = function(block, /*optional*/error, /*optional*/message) {
9227 _throws.apply(this, [true].concat(pSlice.call(arguments)));
9228};
9229
9230// EXTENSION! This is annoying to write outside this module.
9231assert.doesNotThrow = function(block, /*optional*/message) {
9232 _throws.apply(this, [false].concat(pSlice.call(arguments)));
9233};
9234
9235assert.ifError = function(err) { if (err) {throw err;}};
9236
9237var objectKeys = Object.keys || function (obj) {
9238 var keys = [];
9239 for (var key in obj) {
9240 if (hasOwn.call(obj, key)) keys.push(key);
9241 }
9242 return keys;
9243};
9244
9245},{"util/":29}],6:[function(require,module,exports){
9246
9247},{}],7:[function(require,module,exports){
9248/*!
9249 * The buffer module from node.js, for the browser.
9250 *
9251 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
9252 * @license MIT
9253 */
9254
9255var base64 = require('base64-js')
9256var ieee754 = require('ieee754')
9257var isArray = require('is-array')
9258
9259exports.Buffer = Buffer
9260exports.SlowBuffer = SlowBuffer
9261exports.INSPECT_MAX_BYTES = 50
9262Buffer.poolSize = 8192 // not used by this implementation
9263
9264var rootParent = {}
9265
9266/**
9267 * If `Buffer.TYPED_ARRAY_SUPPORT`:
9268 * === true Use Uint8Array implementation (fastest)
9269 * === false Use Object implementation (most compatible, even IE6)
9270 *
9271 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
9272 * Opera 11.6+, iOS 4.2+.
9273 *
9274 * Due to various browser bugs, sometimes the Object implementation will be used even
9275 * when the browser supports typed arrays.
9276 *
9277 * Note:
9278 *
9279 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
9280 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
9281 *
9282 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
9283 * on objects.
9284 *
9285 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
9286 *
9287 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
9288 * incorrect length in some situations.
9289
9290 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
9291 * get the Object implementation, which is slower but behaves correctly.
9292 */
9293Buffer.TYPED_ARRAY_SUPPORT = (function () {
9294 function Bar () {}
9295 try {
9296 var arr = new Uint8Array(1)
9297 arr.foo = function () { return 42 }
9298 arr.constructor = Bar
9299 return arr.foo() === 42 && // typed array instances can be augmented
9300 arr.constructor === Bar && // constructor can be set
9301 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
9302 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
9303 } catch (e) {
9304 return false
9305 }
9306})()
9307
9308function kMaxLength () {
9309 return Buffer.TYPED_ARRAY_SUPPORT
9310 ? 0x7fffffff
9311 : 0x3fffffff
9312}
9313
9314/**
9315 * Class: Buffer
9316 * =============
9317 *
9318 * The Buffer constructor returns instances of `Uint8Array` that are augmented
9319 * with function properties for all the node `Buffer` API functions. We use
9320 * `Uint8Array` so that square bracket notation works as expected -- it returns
9321 * a single octet.
9322 *
9323 * By augmenting the instances, we can avoid modifying the `Uint8Array`
9324 * prototype.
9325 */
9326function Buffer (arg) {
9327 if (!(this instanceof Buffer)) {
9328 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
9329 if (arguments.length > 1) return new Buffer(arg, arguments[1])
9330 return new Buffer(arg)
9331 }
9332
9333 this.length = 0
9334 this.parent = undefined
9335
9336 // Common case.
9337 if (typeof arg === 'number') {
9338 return fromNumber(this, arg)
9339 }
9340
9341 // Slightly less common case.
9342 if (typeof arg === 'string') {
9343 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
9344 }
9345
9346 // Unusual.
9347 return fromObject(this, arg)
9348}
9349
9350function fromNumber (that, length) {
9351 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
9352 if (!Buffer.TYPED_ARRAY_SUPPORT) {
9353 for (var i = 0; i < length; i++) {
9354 that[i] = 0
9355 }
9356 }
9357 return that
9358}
9359
9360function fromString (that, string, encoding) {
9361 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
9362
9363 // Assumption: byteLength() return value is always < kMaxLength.
9364 var length = byteLength(string, encoding) | 0
9365 that = allocate(that, length)
9366
9367 that.write(string, encoding)
9368 return that
9369}
9370
9371function fromObject (that, object) {
9372 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
9373
9374 if (isArray(object)) return fromArray(that, object)
9375
9376 if (object == null) {
9377 throw new TypeError('must start with number, buffer, array or string')
9378 }
9379
9380 if (typeof ArrayBuffer !== 'undefined') {
9381 if (object.buffer instanceof ArrayBuffer) {
9382 return fromTypedArray(that, object)
9383 }
9384 if (object instanceof ArrayBuffer) {
9385 return fromArrayBuffer(that, object)
9386 }
9387 }
9388
9389 if (object.length) return fromArrayLike(that, object)
9390
9391 return fromJsonObject(that, object)
9392}
9393
9394function fromBuffer (that, buffer) {
9395 var length = checked(buffer.length) | 0
9396 that = allocate(that, length)
9397 buffer.copy(that, 0, 0, length)
9398 return that
9399}
9400
9401function fromArray (that, array) {
9402 var length = checked(array.length) | 0
9403 that = allocate(that, length)
9404 for (var i = 0; i < length; i += 1) {
9405 that[i] = array[i] & 255
9406 }
9407 return that
9408}
9409
9410// Duplicate of fromArray() to keep fromArray() monomorphic.
9411function fromTypedArray (that, array) {
9412 var length = checked(array.length) | 0
9413 that = allocate(that, length)
9414 // Truncating the elements is probably not what people expect from typed
9415 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
9416 // of the old Buffer constructor.
9417 for (var i = 0; i < length; i += 1) {
9418 that[i] = array[i] & 255
9419 }
9420 return that
9421}
9422
9423function fromArrayBuffer (that, array) {
9424 if (Buffer.TYPED_ARRAY_SUPPORT) {
9425 // Return an augmented `Uint8Array` instance, for best performance
9426 array.byteLength
9427 that = Buffer._augment(new Uint8Array(array))
9428 } else {
9429 // Fallback: Return an object instance of the Buffer class
9430 that = fromTypedArray(that, new Uint8Array(array))
9431 }
9432 return that
9433}
9434
9435function fromArrayLike (that, array) {
9436 var length = checked(array.length) | 0
9437 that = allocate(that, length)
9438 for (var i = 0; i < length; i += 1) {
9439 that[i] = array[i] & 255
9440 }
9441 return that
9442}
9443
9444// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
9445// Returns a zero-length buffer for inputs that don't conform to the spec.
9446function fromJsonObject (that, object) {
9447 var array
9448 var length = 0
9449
9450 if (object.type === 'Buffer' && isArray(object.data)) {
9451 array = object.data
9452 length = checked(array.length) | 0
9453 }
9454 that = allocate(that, length)
9455
9456 for (var i = 0; i < length; i += 1) {
9457 that[i] = array[i] & 255
9458 }
9459 return that
9460}
9461
9462function allocate (that, length) {
9463 if (Buffer.TYPED_ARRAY_SUPPORT) {
9464 // Return an augmented `Uint8Array` instance, for best performance
9465 that = Buffer._augment(new Uint8Array(length))
9466 } else {
9467 // Fallback: Return an object instance of the Buffer class
9468 that.length = length
9469 that._isBuffer = true
9470 }
9471
9472 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
9473 if (fromPool) that.parent = rootParent
9474
9475 return that
9476}
9477
9478function checked (length) {
9479 // Note: cannot use `length < kMaxLength` here because that fails when
9480 // length is NaN (which is otherwise coerced to zero.)
9481 if (length >= kMaxLength()) {
9482 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
9483 'size: 0x' + kMaxLength().toString(16) + ' bytes')
9484 }
9485 return length | 0
9486}
9487
9488function SlowBuffer (subject, encoding) {
9489 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
9490
9491 var buf = new Buffer(subject, encoding)
9492 delete buf.parent
9493 return buf
9494}
9495
9496Buffer.isBuffer = function isBuffer (b) {
9497 return !!(b != null && b._isBuffer)
9498}
9499
9500Buffer.compare = function compare (a, b) {
9501 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
9502 throw new TypeError('Arguments must be Buffers')
9503 }
9504
9505 if (a === b) return 0
9506
9507 var x = a.length
9508 var y = b.length
9509
9510 var i = 0
9511 var len = Math.min(x, y)
9512 while (i < len) {
9513 if (a[i] !== b[i]) break
9514
9515 ++i
9516 }
9517
9518 if (i !== len) {
9519 x = a[i]
9520 y = b[i]
9521 }
9522
9523 if (x < y) return -1
9524 if (y < x) return 1
9525 return 0
9526}
9527
9528Buffer.isEncoding = function isEncoding (encoding) {
9529 switch (String(encoding).toLowerCase()) {
9530 case 'hex':
9531 case 'utf8':
9532 case 'utf-8':
9533 case 'ascii':
9534 case 'binary':
9535 case 'base64':
9536 case 'raw':
9537 case 'ucs2':
9538 case 'ucs-2':
9539 case 'utf16le':
9540 case 'utf-16le':
9541 return true
9542 default:
9543 return false
9544 }
9545}
9546
9547Buffer.concat = function concat (list, length) {
9548 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
9549
9550 if (list.length === 0) {
9551 return new Buffer(0)
9552 }
9553
9554 var i
9555 if (length === undefined) {
9556 length = 0
9557 for (i = 0; i < list.length; i++) {
9558 length += list[i].length
9559 }
9560 }
9561
9562 var buf = new Buffer(length)
9563 var pos = 0
9564 for (i = 0; i < list.length; i++) {
9565 var item = list[i]
9566 item.copy(buf, pos)
9567 pos += item.length
9568 }
9569 return buf
9570}
9571
9572function byteLength (string, encoding) {
9573 if (typeof string !== 'string') string = '' + string
9574
9575 var len = string.length
9576 if (len === 0) return 0
9577
9578 // Use a for loop to avoid recursion
9579 var loweredCase = false
9580 for (;;) {
9581 switch (encoding) {
9582 case 'ascii':
9583 case 'binary':
9584 // Deprecated
9585 case 'raw':
9586 case 'raws':
9587 return len
9588 case 'utf8':
9589 case 'utf-8':
9590 return utf8ToBytes(string).length
9591 case 'ucs2':
9592 case 'ucs-2':
9593 case 'utf16le':
9594 case 'utf-16le':
9595 return len * 2
9596 case 'hex':
9597 return len >>> 1
9598 case 'base64':
9599 return base64ToBytes(string).length
9600 default:
9601 if (loweredCase) return utf8ToBytes(string).length // assume utf8
9602 encoding = ('' + encoding).toLowerCase()
9603 loweredCase = true
9604 }
9605 }
9606}
9607Buffer.byteLength = byteLength
9608
9609// pre-set for values that may exist in the future
9610Buffer.prototype.length = undefined
9611Buffer.prototype.parent = undefined
9612
9613function slowToString (encoding, start, end) {
9614 var loweredCase = false
9615
9616 start = start | 0
9617 end = end === undefined || end === Infinity ? this.length : end | 0
9618
9619 if (!encoding) encoding = 'utf8'
9620 if (start < 0) start = 0
9621 if (end > this.length) end = this.length
9622 if (end <= start) return ''
9623
9624 while (true) {
9625 switch (encoding) {
9626 case 'hex':
9627 return hexSlice(this, start, end)
9628
9629 case 'utf8':
9630 case 'utf-8':
9631 return utf8Slice(this, start, end)
9632
9633 case 'ascii':
9634 return asciiSlice(this, start, end)
9635
9636 case 'binary':
9637 return binarySlice(this, start, end)
9638
9639 case 'base64':
9640 return base64Slice(this, start, end)
9641
9642 case 'ucs2':
9643 case 'ucs-2':
9644 case 'utf16le':
9645 case 'utf-16le':
9646 return utf16leSlice(this, start, end)
9647
9648 default:
9649 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
9650 encoding = (encoding + '').toLowerCase()
9651 loweredCase = true
9652 }
9653 }
9654}
9655
9656Buffer.prototype.toString = function toString () {
9657 var length = this.length | 0
9658 if (length === 0) return ''
9659 if (arguments.length === 0) return utf8Slice(this, 0, length)
9660 return slowToString.apply(this, arguments)
9661}
9662
9663Buffer.prototype.equals = function equals (b) {
9664 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
9665 if (this === b) return true
9666 return Buffer.compare(this, b) === 0
9667}
9668
9669Buffer.prototype.inspect = function inspect () {
9670 var str = ''
9671 var max = exports.INSPECT_MAX_BYTES
9672 if (this.length > 0) {
9673 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
9674 if (this.length > max) str += ' ... '
9675 }
9676 return '<Buffer ' + str + '>'
9677}
9678
9679Buffer.prototype.compare = function compare (b) {
9680 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
9681 if (this === b) return 0
9682 return Buffer.compare(this, b)
9683}
9684
9685Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
9686 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
9687 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
9688 byteOffset >>= 0
9689
9690 if (this.length === 0) return -1
9691 if (byteOffset >= this.length) return -1
9692
9693 // Negative offsets start from the end of the buffer
9694 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
9695
9696 if (typeof val === 'string') {
9697 if (val.length === 0) return -1 // special case: looking for empty string always fails
9698 return String.prototype.indexOf.call(this, val, byteOffset)
9699 }
9700 if (Buffer.isBuffer(val)) {
9701 return arrayIndexOf(this, val, byteOffset)
9702 }
9703 if (typeof val === 'number') {
9704 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
9705 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
9706 }
9707 return arrayIndexOf(this, [ val ], byteOffset)
9708 }
9709
9710 function arrayIndexOf (arr, val, byteOffset) {
9711 var foundIndex = -1
9712 for (var i = 0; byteOffset + i < arr.length; i++) {
9713 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
9714 if (foundIndex === -1) foundIndex = i
9715 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
9716 } else {
9717 foundIndex = -1
9718 }
9719 }
9720 return -1
9721 }
9722
9723 throw new TypeError('val must be string, number or Buffer')
9724}
9725
9726// `get` is deprecated
9727Buffer.prototype.get = function get (offset) {
9728 console.log('.get() is deprecated. Access using array indexes instead.')
9729 return this.readUInt8(offset)
9730}
9731
9732// `set` is deprecated
9733Buffer.prototype.set = function set (v, offset) {
9734 console.log('.set() is deprecated. Access using array indexes instead.')
9735 return this.writeUInt8(v, offset)
9736}
9737
9738function hexWrite (buf, string, offset, length) {
9739 offset = Number(offset) || 0
9740 var remaining = buf.length - offset
9741 if (!length) {
9742 length = remaining
9743 } else {
9744 length = Number(length)
9745 if (length > remaining) {
9746 length = remaining
9747 }
9748 }
9749
9750 // must be an even number of digits
9751 var strLen = string.length
9752 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
9753
9754 if (length > strLen / 2) {
9755 length = strLen / 2
9756 }
9757 for (var i = 0; i < length; i++) {
9758 var parsed = parseInt(string.substr(i * 2, 2), 16)
9759 if (isNaN(parsed)) throw new Error('Invalid hex string')
9760 buf[offset + i] = parsed
9761 }
9762 return i
9763}
9764
9765function utf8Write (buf, string, offset, length) {
9766 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
9767}
9768
9769function asciiWrite (buf, string, offset, length) {
9770 return blitBuffer(asciiToBytes(string), buf, offset, length)
9771}
9772
9773function binaryWrite (buf, string, offset, length) {
9774 return asciiWrite(buf, string, offset, length)
9775}
9776
9777function base64Write (buf, string, offset, length) {
9778 return blitBuffer(base64ToBytes(string), buf, offset, length)
9779}
9780
9781function ucs2Write (buf, string, offset, length) {
9782 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
9783}
9784
9785Buffer.prototype.write = function write (string, offset, length, encoding) {
9786 // Buffer#write(string)
9787 if (offset === undefined) {
9788 encoding = 'utf8'
9789 length = this.length
9790 offset = 0
9791 // Buffer#write(string, encoding)
9792 } else if (length === undefined && typeof offset === 'string') {
9793 encoding = offset
9794 length = this.length
9795 offset = 0
9796 // Buffer#write(string, offset[, length][, encoding])
9797 } else if (isFinite(offset)) {
9798 offset = offset | 0
9799 if (isFinite(length)) {
9800 length = length | 0
9801 if (encoding === undefined) encoding = 'utf8'
9802 } else {
9803 encoding = length
9804 length = undefined
9805 }
9806 // legacy write(string, encoding, offset, length) - remove in v0.13
9807 } else {
9808 var swap = encoding
9809 encoding = offset
9810 offset = length | 0
9811 length = swap
9812 }
9813
9814 var remaining = this.length - offset
9815 if (length === undefined || length > remaining) length = remaining
9816
9817 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
9818 throw new RangeError('attempt to write outside buffer bounds')
9819 }
9820
9821 if (!encoding) encoding = 'utf8'
9822
9823 var loweredCase = false
9824 for (;;) {
9825 switch (encoding) {
9826 case 'hex':
9827 return hexWrite(this, string, offset, length)
9828
9829 case 'utf8':
9830 case 'utf-8':
9831 return utf8Write(this, string, offset, length)
9832
9833 case 'ascii':
9834 return asciiWrite(this, string, offset, length)
9835
9836 case 'binary':
9837 return binaryWrite(this, string, offset, length)
9838
9839 case 'base64':
9840 // Warning: maxLength not taken into account in base64Write
9841 return base64Write(this, string, offset, length)
9842
9843 case 'ucs2':
9844 case 'ucs-2':
9845 case 'utf16le':
9846 case 'utf-16le':
9847 return ucs2Write(this, string, offset, length)
9848
9849 default:
9850 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
9851 encoding = ('' + encoding).toLowerCase()
9852 loweredCase = true
9853 }
9854 }
9855}
9856
9857Buffer.prototype.toJSON = function toJSON () {
9858 return {
9859 type: 'Buffer',
9860 data: Array.prototype.slice.call(this._arr || this, 0)
9861 }
9862}
9863
9864function base64Slice (buf, start, end) {
9865 if (start === 0 && end === buf.length) {
9866 return base64.fromByteArray(buf)
9867 } else {
9868 return base64.fromByteArray(buf.slice(start, end))
9869 }
9870}
9871
9872function utf8Slice (buf, start, end) {
9873 end = Math.min(buf.length, end)
9874 var firstByte
9875 var secondByte
9876 var thirdByte
9877 var fourthByte
9878 var bytesPerSequence
9879 var tempCodePoint
9880 var codePoint
9881 var res = []
9882 var i = start
9883
9884 for (; i < end; i += bytesPerSequence) {
9885 firstByte = buf[i]
9886 codePoint = 0xFFFD
9887
9888 if (firstByte > 0xEF) {
9889 bytesPerSequence = 4
9890 } else if (firstByte > 0xDF) {
9891 bytesPerSequence = 3
9892 } else if (firstByte > 0xBF) {
9893 bytesPerSequence = 2
9894 } else {
9895 bytesPerSequence = 1
9896 }
9897
9898 if (i + bytesPerSequence <= end) {
9899 switch (bytesPerSequence) {
9900 case 1:
9901 if (firstByte < 0x80) {
9902 codePoint = firstByte
9903 }
9904 break
9905 case 2:
9906 secondByte = buf[i + 1]
9907 if ((secondByte & 0xC0) === 0x80) {
9908 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
9909 if (tempCodePoint > 0x7F) {
9910 codePoint = tempCodePoint
9911 }
9912 }
9913 break
9914 case 3:
9915 secondByte = buf[i + 1]
9916 thirdByte = buf[i + 2]
9917 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
9918 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
9919 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
9920 codePoint = tempCodePoint
9921 }
9922 }
9923 break
9924 case 4:
9925 secondByte = buf[i + 1]
9926 thirdByte = buf[i + 2]
9927 fourthByte = buf[i + 3]
9928 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
9929 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
9930 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
9931 codePoint = tempCodePoint
9932 }
9933 }
9934 }
9935 }
9936
9937 if (codePoint === 0xFFFD) {
9938 // we generated an invalid codePoint so make sure to only advance by 1 byte
9939 bytesPerSequence = 1
9940 } else if (codePoint > 0xFFFF) {
9941 // encode to utf16 (surrogate pair dance)
9942 codePoint -= 0x10000
9943 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
9944 codePoint = 0xDC00 | codePoint & 0x3FF
9945 }
9946
9947 res.push(codePoint)
9948 }
9949
9950 return String.fromCharCode.apply(String, res)
9951}
9952
9953function asciiSlice (buf, start, end) {
9954 var ret = ''
9955 end = Math.min(buf.length, end)
9956
9957 for (var i = start; i < end; i++) {
9958 ret += String.fromCharCode(buf[i] & 0x7F)
9959 }
9960 return ret
9961}
9962
9963function binarySlice (buf, start, end) {
9964 var ret = ''
9965 end = Math.min(buf.length, end)
9966
9967 for (var i = start; i < end; i++) {
9968 ret += String.fromCharCode(buf[i])
9969 }
9970 return ret
9971}
9972
9973function hexSlice (buf, start, end) {
9974 var len = buf.length
9975
9976 if (!start || start < 0) start = 0
9977 if (!end || end < 0 || end > len) end = len
9978
9979 var out = ''
9980 for (var i = start; i < end; i++) {
9981 out += toHex(buf[i])
9982 }
9983 return out
9984}
9985
9986function utf16leSlice (buf, start, end) {
9987 var bytes = buf.slice(start, end)
9988 var res = ''
9989 for (var i = 0; i < bytes.length; i += 2) {
9990 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
9991 }
9992 return res
9993}
9994
9995Buffer.prototype.slice = function slice (start, end) {
9996 var len = this.length
9997 start = ~~start
9998 end = end === undefined ? len : ~~end
9999
10000 if (start < 0) {
10001 start += len
10002 if (start < 0) start = 0
10003 } else if (start > len) {
10004 start = len
10005 }
10006
10007 if (end < 0) {
10008 end += len
10009 if (end < 0) end = 0
10010 } else if (end > len) {
10011 end = len
10012 }
10013
10014 if (end < start) end = start
10015
10016 var newBuf
10017 if (Buffer.TYPED_ARRAY_SUPPORT) {
10018 newBuf = Buffer._augment(this.subarray(start, end))
10019 } else {
10020 var sliceLen = end - start
10021 newBuf = new Buffer(sliceLen, undefined)
10022 for (var i = 0; i < sliceLen; i++) {
10023 newBuf[i] = this[i + start]
10024 }
10025 }
10026
10027 if (newBuf.length) newBuf.parent = this.parent || this
10028
10029 return newBuf
10030}
10031
10032/*
10033 * Need to make sure that buffer isn't trying to write out of bounds.
10034 */
10035function checkOffset (offset, ext, length) {
10036 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
10037 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
10038}
10039
10040Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
10041 offset = offset | 0
10042 byteLength = byteLength | 0
10043 if (!noAssert) checkOffset(offset, byteLength, this.length)
10044
10045 var val = this[offset]
10046 var mul = 1
10047 var i = 0
10048 while (++i < byteLength && (mul *= 0x100)) {
10049 val += this[offset + i] * mul
10050 }
10051
10052 return val
10053}
10054
10055Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
10056 offset = offset | 0
10057 byteLength = byteLength | 0
10058 if (!noAssert) {
10059 checkOffset(offset, byteLength, this.length)
10060 }
10061
10062 var val = this[offset + --byteLength]
10063 var mul = 1
10064 while (byteLength > 0 && (mul *= 0x100)) {
10065 val += this[offset + --byteLength] * mul
10066 }
10067
10068 return val
10069}
10070
10071Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
10072 if (!noAssert) checkOffset(offset, 1, this.length)
10073 return this[offset]
10074}
10075
10076Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
10077 if (!noAssert) checkOffset(offset, 2, this.length)
10078 return this[offset] | (this[offset + 1] << 8)
10079}
10080
10081Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
10082 if (!noAssert) checkOffset(offset, 2, this.length)
10083 return (this[offset] << 8) | this[offset + 1]
10084}
10085
10086Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
10087 if (!noAssert) checkOffset(offset, 4, this.length)
10088
10089 return ((this[offset]) |
10090 (this[offset + 1] << 8) |
10091 (this[offset + 2] << 16)) +
10092 (this[offset + 3] * 0x1000000)
10093}
10094
10095Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
10096 if (!noAssert) checkOffset(offset, 4, this.length)
10097
10098 return (this[offset] * 0x1000000) +
10099 ((this[offset + 1] << 16) |
10100 (this[offset + 2] << 8) |
10101 this[offset + 3])
10102}
10103
10104Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
10105 offset = offset | 0
10106 byteLength = byteLength | 0
10107 if (!noAssert) checkOffset(offset, byteLength, this.length)
10108
10109 var val = this[offset]
10110 var mul = 1
10111 var i = 0
10112 while (++i < byteLength && (mul *= 0x100)) {
10113 val += this[offset + i] * mul
10114 }
10115 mul *= 0x80
10116
10117 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
10118
10119 return val
10120}
10121
10122Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
10123 offset = offset | 0
10124 byteLength = byteLength | 0
10125 if (!noAssert) checkOffset(offset, byteLength, this.length)
10126
10127 var i = byteLength
10128 var mul = 1
10129 var val = this[offset + --i]
10130 while (i > 0 && (mul *= 0x100)) {
10131 val += this[offset + --i] * mul
10132 }
10133 mul *= 0x80
10134
10135 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
10136
10137 return val
10138}
10139
10140Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
10141 if (!noAssert) checkOffset(offset, 1, this.length)
10142 if (!(this[offset] & 0x80)) return (this[offset])
10143 return ((0xff - this[offset] + 1) * -1)
10144}
10145
10146Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
10147 if (!noAssert) checkOffset(offset, 2, this.length)
10148 var val = this[offset] | (this[offset + 1] << 8)
10149 return (val & 0x8000) ? val | 0xFFFF0000 : val
10150}
10151
10152Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
10153 if (!noAssert) checkOffset(offset, 2, this.length)
10154 var val = this[offset + 1] | (this[offset] << 8)
10155 return (val & 0x8000) ? val | 0xFFFF0000 : val
10156}
10157
10158Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
10159 if (!noAssert) checkOffset(offset, 4, this.length)
10160
10161 return (this[offset]) |
10162 (this[offset + 1] << 8) |
10163 (this[offset + 2] << 16) |
10164 (this[offset + 3] << 24)
10165}
10166
10167Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
10168 if (!noAssert) checkOffset(offset, 4, this.length)
10169
10170 return (this[offset] << 24) |
10171 (this[offset + 1] << 16) |
10172 (this[offset + 2] << 8) |
10173 (this[offset + 3])
10174}
10175
10176Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
10177 if (!noAssert) checkOffset(offset, 4, this.length)
10178 return ieee754.read(this, offset, true, 23, 4)
10179}
10180
10181Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
10182 if (!noAssert) checkOffset(offset, 4, this.length)
10183 return ieee754.read(this, offset, false, 23, 4)
10184}
10185
10186Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
10187 if (!noAssert) checkOffset(offset, 8, this.length)
10188 return ieee754.read(this, offset, true, 52, 8)
10189}
10190
10191Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
10192 if (!noAssert) checkOffset(offset, 8, this.length)
10193 return ieee754.read(this, offset, false, 52, 8)
10194}
10195
10196function checkInt (buf, value, offset, ext, max, min) {
10197 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
10198 if (value > max || value < min) throw new RangeError('value is out of bounds')
10199 if (offset + ext > buf.length) throw new RangeError('index out of range')
10200}
10201
10202Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
10203 value = +value
10204 offset = offset | 0
10205 byteLength = byteLength | 0
10206 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
10207
10208 var mul = 1
10209 var i = 0
10210 this[offset] = value & 0xFF
10211 while (++i < byteLength && (mul *= 0x100)) {
10212 this[offset + i] = (value / mul) & 0xFF
10213 }
10214
10215 return offset + byteLength
10216}
10217
10218Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
10219 value = +value
10220 offset = offset | 0
10221 byteLength = byteLength | 0
10222 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
10223
10224 var i = byteLength - 1
10225 var mul = 1
10226 this[offset + i] = value & 0xFF
10227 while (--i >= 0 && (mul *= 0x100)) {
10228 this[offset + i] = (value / mul) & 0xFF
10229 }
10230
10231 return offset + byteLength
10232}
10233
10234Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
10235 value = +value
10236 offset = offset | 0
10237 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
10238 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
10239 this[offset] = value
10240 return offset + 1
10241}
10242
10243function objectWriteUInt16 (buf, value, offset, littleEndian) {
10244 if (value < 0) value = 0xffff + value + 1
10245 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
10246 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
10247 (littleEndian ? i : 1 - i) * 8
10248 }
10249}
10250
10251Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
10252 value = +value
10253 offset = offset | 0
10254 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
10255 if (Buffer.TYPED_ARRAY_SUPPORT) {
10256 this[offset] = value
10257 this[offset + 1] = (value >>> 8)
10258 } else {
10259 objectWriteUInt16(this, value, offset, true)
10260 }
10261 return offset + 2
10262}
10263
10264Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
10265 value = +value
10266 offset = offset | 0
10267 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
10268 if (Buffer.TYPED_ARRAY_SUPPORT) {
10269 this[offset] = (value >>> 8)
10270 this[offset + 1] = value
10271 } else {
10272 objectWriteUInt16(this, value, offset, false)
10273 }
10274 return offset + 2
10275}
10276
10277function objectWriteUInt32 (buf, value, offset, littleEndian) {
10278 if (value < 0) value = 0xffffffff + value + 1
10279 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
10280 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
10281 }
10282}
10283
10284Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
10285 value = +value
10286 offset = offset | 0
10287 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
10288 if (Buffer.TYPED_ARRAY_SUPPORT) {
10289 this[offset + 3] = (value >>> 24)
10290 this[offset + 2] = (value >>> 16)
10291 this[offset + 1] = (value >>> 8)
10292 this[offset] = value
10293 } else {
10294 objectWriteUInt32(this, value, offset, true)
10295 }
10296 return offset + 4
10297}
10298
10299Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
10300 value = +value
10301 offset = offset | 0
10302 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
10303 if (Buffer.TYPED_ARRAY_SUPPORT) {
10304 this[offset] = (value >>> 24)
10305 this[offset + 1] = (value >>> 16)
10306 this[offset + 2] = (value >>> 8)
10307 this[offset + 3] = value
10308 } else {
10309 objectWriteUInt32(this, value, offset, false)
10310 }
10311 return offset + 4
10312}
10313
10314Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
10315 value = +value
10316 offset = offset | 0
10317 if (!noAssert) {
10318 var limit = Math.pow(2, 8 * byteLength - 1)
10319
10320 checkInt(this, value, offset, byteLength, limit - 1, -limit)
10321 }
10322
10323 var i = 0
10324 var mul = 1
10325 var sub = value < 0 ? 1 : 0
10326 this[offset] = value & 0xFF
10327 while (++i < byteLength && (mul *= 0x100)) {
10328 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
10329 }
10330
10331 return offset + byteLength
10332}
10333
10334Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
10335 value = +value
10336 offset = offset | 0
10337 if (!noAssert) {
10338 var limit = Math.pow(2, 8 * byteLength - 1)
10339
10340 checkInt(this, value, offset, byteLength, limit - 1, -limit)
10341 }
10342
10343 var i = byteLength - 1
10344 var mul = 1
10345 var sub = value < 0 ? 1 : 0
10346 this[offset + i] = value & 0xFF
10347 while (--i >= 0 && (mul *= 0x100)) {
10348 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
10349 }
10350
10351 return offset + byteLength
10352}
10353
10354Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
10355 value = +value
10356 offset = offset | 0
10357 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
10358 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
10359 if (value < 0) value = 0xff + value + 1
10360 this[offset] = value
10361 return offset + 1
10362}
10363
10364Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
10365 value = +value
10366 offset = offset | 0
10367 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
10368 if (Buffer.TYPED_ARRAY_SUPPORT) {
10369 this[offset] = value
10370 this[offset + 1] = (value >>> 8)
10371 } else {
10372 objectWriteUInt16(this, value, offset, true)
10373 }
10374 return offset + 2
10375}
10376
10377Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
10378 value = +value
10379 offset = offset | 0
10380 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
10381 if (Buffer.TYPED_ARRAY_SUPPORT) {
10382 this[offset] = (value >>> 8)
10383 this[offset + 1] = value
10384 } else {
10385 objectWriteUInt16(this, value, offset, false)
10386 }
10387 return offset + 2
10388}
10389
10390Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
10391 value = +value
10392 offset = offset | 0
10393 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
10394 if (Buffer.TYPED_ARRAY_SUPPORT) {
10395 this[offset] = value
10396 this[offset + 1] = (value >>> 8)
10397 this[offset + 2] = (value >>> 16)
10398 this[offset + 3] = (value >>> 24)
10399 } else {
10400 objectWriteUInt32(this, value, offset, true)
10401 }
10402 return offset + 4
10403}
10404
10405Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
10406 value = +value
10407 offset = offset | 0
10408 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
10409 if (value < 0) value = 0xffffffff + value + 1
10410 if (Buffer.TYPED_ARRAY_SUPPORT) {
10411 this[offset] = (value >>> 24)
10412 this[offset + 1] = (value >>> 16)
10413 this[offset + 2] = (value >>> 8)
10414 this[offset + 3] = value
10415 } else {
10416 objectWriteUInt32(this, value, offset, false)
10417 }
10418 return offset + 4
10419}
10420
10421function checkIEEE754 (buf, value, offset, ext, max, min) {
10422 if (value > max || value < min) throw new RangeError('value is out of bounds')
10423 if (offset + ext > buf.length) throw new RangeError('index out of range')
10424 if (offset < 0) throw new RangeError('index out of range')
10425}
10426
10427function writeFloat (buf, value, offset, littleEndian, noAssert) {
10428 if (!noAssert) {
10429 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
10430 }
10431 ieee754.write(buf, value, offset, littleEndian, 23, 4)
10432 return offset + 4
10433}
10434
10435Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
10436 return writeFloat(this, value, offset, true, noAssert)
10437}
10438
10439Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
10440 return writeFloat(this, value, offset, false, noAssert)
10441}
10442
10443function writeDouble (buf, value, offset, littleEndian, noAssert) {
10444 if (!noAssert) {
10445 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
10446 }
10447 ieee754.write(buf, value, offset, littleEndian, 52, 8)
10448 return offset + 8
10449}
10450
10451Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
10452 return writeDouble(this, value, offset, true, noAssert)
10453}
10454
10455Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
10456 return writeDouble(this, value, offset, false, noAssert)
10457}
10458
10459// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
10460Buffer.prototype.copy = function copy (target, targetStart, start, end) {
10461 if (!start) start = 0
10462 if (!end && end !== 0) end = this.length
10463 if (targetStart >= target.length) targetStart = target.length
10464 if (!targetStart) targetStart = 0
10465 if (end > 0 && end < start) end = start
10466
10467 // Copy 0 bytes; we're done
10468 if (end === start) return 0
10469 if (target.length === 0 || this.length === 0) return 0
10470
10471 // Fatal error conditions
10472 if (targetStart < 0) {
10473 throw new RangeError('targetStart out of bounds')
10474 }
10475 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
10476 if (end < 0) throw new RangeError('sourceEnd out of bounds')
10477
10478 // Are we oob?
10479 if (end > this.length) end = this.length
10480 if (target.length - targetStart < end - start) {
10481 end = target.length - targetStart + start
10482 }
10483
10484 var len = end - start
10485 var i
10486
10487 if (this === target && start < targetStart && targetStart < end) {
10488 // descending copy from end
10489 for (i = len - 1; i >= 0; i--) {
10490 target[i + targetStart] = this[i + start]
10491 }
10492 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
10493 // ascending copy from start
10494 for (i = 0; i < len; i++) {
10495 target[i + targetStart] = this[i + start]
10496 }
10497 } else {
10498 target._set(this.subarray(start, start + len), targetStart)
10499 }
10500
10501 return len
10502}
10503
10504// fill(value, start=0, end=buffer.length)
10505Buffer.prototype.fill = function fill (value, start, end) {
10506 if (!value) value = 0
10507 if (!start) start = 0
10508 if (!end) end = this.length
10509
10510 if (end < start) throw new RangeError('end < start')
10511
10512 // Fill 0 bytes; we're done
10513 if (end === start) return
10514 if (this.length === 0) return
10515
10516 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
10517 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
10518
10519 var i
10520 if (typeof value === 'number') {
10521 for (i = start; i < end; i++) {
10522 this[i] = value
10523 }
10524 } else {
10525 var bytes = utf8ToBytes(value.toString())
10526 var len = bytes.length
10527 for (i = start; i < end; i++) {
10528 this[i] = bytes[i % len]
10529 }
10530 }
10531
10532 return this
10533}
10534
10535/**
10536 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
10537 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
10538 */
10539Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
10540 if (typeof Uint8Array !== 'undefined') {
10541 if (Buffer.TYPED_ARRAY_SUPPORT) {
10542 return (new Buffer(this)).buffer
10543 } else {
10544 var buf = new Uint8Array(this.length)
10545 for (var i = 0, len = buf.length; i < len; i += 1) {
10546 buf[i] = this[i]
10547 }
10548 return buf.buffer
10549 }
10550 } else {
10551 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
10552 }
10553}
10554
10555// HELPER FUNCTIONS
10556// ================
10557
10558var BP = Buffer.prototype
10559
10560/**
10561 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
10562 */
10563Buffer._augment = function _augment (arr) {
10564 arr.constructor = Buffer
10565 arr._isBuffer = true
10566
10567 // save reference to original Uint8Array set method before overwriting
10568 arr._set = arr.set
10569
10570 // deprecated
10571 arr.get = BP.get
10572 arr.set = BP.set
10573
10574 arr.write = BP.write
10575 arr.toString = BP.toString
10576 arr.toLocaleString = BP.toString
10577 arr.toJSON = BP.toJSON
10578 arr.equals = BP.equals
10579 arr.compare = BP.compare
10580 arr.indexOf = BP.indexOf
10581 arr.copy = BP.copy
10582 arr.slice = BP.slice
10583 arr.readUIntLE = BP.readUIntLE
10584 arr.readUIntBE = BP.readUIntBE
10585 arr.readUInt8 = BP.readUInt8
10586 arr.readUInt16LE = BP.readUInt16LE
10587 arr.readUInt16BE = BP.readUInt16BE
10588 arr.readUInt32LE = BP.readUInt32LE
10589 arr.readUInt32BE = BP.readUInt32BE
10590 arr.readIntLE = BP.readIntLE
10591 arr.readIntBE = BP.readIntBE
10592 arr.readInt8 = BP.readInt8
10593 arr.readInt16LE = BP.readInt16LE
10594 arr.readInt16BE = BP.readInt16BE
10595 arr.readInt32LE = BP.readInt32LE
10596 arr.readInt32BE = BP.readInt32BE
10597 arr.readFloatLE = BP.readFloatLE
10598 arr.readFloatBE = BP.readFloatBE
10599 arr.readDoubleLE = BP.readDoubleLE
10600 arr.readDoubleBE = BP.readDoubleBE
10601 arr.writeUInt8 = BP.writeUInt8
10602 arr.writeUIntLE = BP.writeUIntLE
10603 arr.writeUIntBE = BP.writeUIntBE
10604 arr.writeUInt16LE = BP.writeUInt16LE
10605 arr.writeUInt16BE = BP.writeUInt16BE
10606 arr.writeUInt32LE = BP.writeUInt32LE
10607 arr.writeUInt32BE = BP.writeUInt32BE
10608 arr.writeIntLE = BP.writeIntLE
10609 arr.writeIntBE = BP.writeIntBE
10610 arr.writeInt8 = BP.writeInt8
10611 arr.writeInt16LE = BP.writeInt16LE
10612 arr.writeInt16BE = BP.writeInt16BE
10613 arr.writeInt32LE = BP.writeInt32LE
10614 arr.writeInt32BE = BP.writeInt32BE
10615 arr.writeFloatLE = BP.writeFloatLE
10616 arr.writeFloatBE = BP.writeFloatBE
10617 arr.writeDoubleLE = BP.writeDoubleLE
10618 arr.writeDoubleBE = BP.writeDoubleBE
10619 arr.fill = BP.fill
10620 arr.inspect = BP.inspect
10621 arr.toArrayBuffer = BP.toArrayBuffer
10622
10623 return arr
10624}
10625
10626var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
10627
10628function base64clean (str) {
10629 // Node strips out invalid characters like \n and \t from the string, base64-js does not
10630 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
10631 // Node converts strings with length < 2 to ''
10632 if (str.length < 2) return ''
10633 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
10634 while (str.length % 4 !== 0) {
10635 str = str + '='
10636 }
10637 return str
10638}
10639
10640function stringtrim (str) {
10641 if (str.trim) return str.trim()
10642 return str.replace(/^\s+|\s+$/g, '')
10643}
10644
10645function toHex (n) {
10646 if (n < 16) return '0' + n.toString(16)
10647 return n.toString(16)
10648}
10649
10650function utf8ToBytes (string, units) {
10651 units = units || Infinity
10652 var codePoint
10653 var length = string.length
10654 var leadSurrogate = null
10655 var bytes = []
10656
10657 for (var i = 0; i < length; i++) {
10658 codePoint = string.charCodeAt(i)
10659
10660 // is surrogate component
10661 if (codePoint > 0xD7FF && codePoint < 0xE000) {
10662 // last char was a lead
10663 if (!leadSurrogate) {
10664 // no lead yet
10665 if (codePoint > 0xDBFF) {
10666 // unexpected trail
10667 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10668 continue
10669
10670 } else if (i + 1 === length) {
10671 // unpaired lead
10672 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10673 continue
10674 }
10675
10676 // valid lead
10677 leadSurrogate = codePoint
10678
10679 continue
10680 }
10681
10682 // 2 leads in a row
10683 if (codePoint < 0xDC00) {
10684 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10685 leadSurrogate = codePoint
10686 continue
10687 }
10688
10689 // valid surrogate pair
10690 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
10691
10692 } else if (leadSurrogate) {
10693 // valid bmp char, but last char was a lead
10694 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10695 }
10696
10697 leadSurrogate = null
10698
10699 // encode utf8
10700 if (codePoint < 0x80) {
10701 if ((units -= 1) < 0) break
10702 bytes.push(codePoint)
10703 } else if (codePoint < 0x800) {
10704 if ((units -= 2) < 0) break
10705 bytes.push(
10706 codePoint >> 0x6 | 0xC0,
10707 codePoint & 0x3F | 0x80
10708 )
10709 } else if (codePoint < 0x10000) {
10710 if ((units -= 3) < 0) break
10711 bytes.push(
10712 codePoint >> 0xC | 0xE0,
10713 codePoint >> 0x6 & 0x3F | 0x80,
10714 codePoint & 0x3F | 0x80
10715 )
10716 } else if (codePoint < 0x110000) {
10717 if ((units -= 4) < 0) break
10718 bytes.push(
10719 codePoint >> 0x12 | 0xF0,
10720 codePoint >> 0xC & 0x3F | 0x80,
10721 codePoint >> 0x6 & 0x3F | 0x80,
10722 codePoint & 0x3F | 0x80
10723 )
10724 } else {
10725 throw new Error('Invalid code point')
10726 }
10727 }
10728
10729 return bytes
10730}
10731
10732function asciiToBytes (str) {
10733 var byteArray = []
10734 for (var i = 0; i < str.length; i++) {
10735 // Node's code seems to be doing this and not & 0x7F..
10736 byteArray.push(str.charCodeAt(i) & 0xFF)
10737 }
10738 return byteArray
10739}
10740
10741function utf16leToBytes (str, units) {
10742 var c, hi, lo
10743 var byteArray = []
10744 for (var i = 0; i < str.length; i++) {
10745 if ((units -= 2) < 0) break
10746
10747 c = str.charCodeAt(i)
10748 hi = c >> 8
10749 lo = c % 256
10750 byteArray.push(lo)
10751 byteArray.push(hi)
10752 }
10753
10754 return byteArray
10755}
10756
10757function base64ToBytes (str) {
10758 return base64.toByteArray(base64clean(str))
10759}
10760
10761function blitBuffer (src, dst, offset, length) {
10762 for (var i = 0; i < length; i++) {
10763 if ((i + offset >= dst.length) || (i >= src.length)) break
10764 dst[i + offset] = src[i]
10765 }
10766 return i
10767}
10768
10769},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
10770var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
10771
10772;(function (exports) {
10773 'use strict';
10774
10775 var Arr = (typeof Uint8Array !== 'undefined')
10776 ? Uint8Array
10777 : Array
10778
10779 var PLUS = '+'.charCodeAt(0)
10780 var SLASH = '/'.charCodeAt(0)
10781 var NUMBER = '0'.charCodeAt(0)
10782 var LOWER = 'a'.charCodeAt(0)
10783 var UPPER = 'A'.charCodeAt(0)
10784 var PLUS_URL_SAFE = '-'.charCodeAt(0)
10785 var SLASH_URL_SAFE = '_'.charCodeAt(0)
10786
10787 function decode (elt) {
10788 var code = elt.charCodeAt(0)
10789 if (code === PLUS ||
10790 code === PLUS_URL_SAFE)
10791 return 62 // '+'
10792 if (code === SLASH ||
10793 code === SLASH_URL_SAFE)
10794 return 63 // '/'
10795 if (code < NUMBER)
10796 return -1 //no match
10797 if (code < NUMBER + 10)
10798 return code - NUMBER + 26 + 26
10799 if (code < UPPER + 26)
10800 return code - UPPER
10801 if (code < LOWER + 26)
10802 return code - LOWER + 26
10803 }
10804
10805 function b64ToByteArray (b64) {
10806 var i, j, l, tmp, placeHolders, arr
10807
10808 if (b64.length % 4 > 0) {
10809 throw new Error('Invalid string. Length must be a multiple of 4')
10810 }
10811
10812 // the number of equal signs (place holders)
10813 // if there are two placeholders, than the two characters before it
10814 // represent one byte
10815 // if there is only one, then the three characters before it represent 2 bytes
10816 // this is just a cheap hack to not do indexOf twice
10817 var len = b64.length
10818 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
10819
10820 // base64 is 4/3 + up to two characters of the original data
10821 arr = new Arr(b64.length * 3 / 4 - placeHolders)
10822
10823 // if there are placeholders, only get up to the last complete 4 chars
10824 l = placeHolders > 0 ? b64.length - 4 : b64.length
10825
10826 var L = 0
10827
10828 function push (v) {
10829 arr[L++] = v
10830 }
10831
10832 for (i = 0, j = 0; i < l; i += 4, j += 3) {
10833 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
10834 push((tmp & 0xFF0000) >> 16)
10835 push((tmp & 0xFF00) >> 8)
10836 push(tmp & 0xFF)
10837 }
10838
10839 if (placeHolders === 2) {
10840 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
10841 push(tmp & 0xFF)
10842 } else if (placeHolders === 1) {
10843 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
10844 push((tmp >> 8) & 0xFF)
10845 push(tmp & 0xFF)
10846 }
10847
10848 return arr
10849 }
10850
10851 function uint8ToBase64 (uint8) {
10852 var i,
10853 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
10854 output = "",
10855 temp, length
10856
10857 function encode (num) {
10858 return lookup.charAt(num)
10859 }
10860
10861 function tripletToBase64 (num) {
10862 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
10863 }
10864
10865 // go through the array every three bytes, we'll deal with trailing stuff later
10866 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
10867 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
10868 output += tripletToBase64(temp)
10869 }
10870
10871 // pad the end with zeros, but make sure to not forget the extra bytes
10872 switch (extraBytes) {
10873 case 1:
10874 temp = uint8[uint8.length - 1]
10875 output += encode(temp >> 2)
10876 output += encode((temp << 4) & 0x3F)
10877 output += '=='
10878 break
10879 case 2:
10880 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
10881 output += encode(temp >> 10)
10882 output += encode((temp >> 4) & 0x3F)
10883 output += encode((temp << 2) & 0x3F)
10884 output += '='
10885 break
10886 }
10887
10888 return output
10889 }
10890
10891 exports.toByteArray = b64ToByteArray
10892 exports.fromByteArray = uint8ToBase64
10893}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
10894
10895},{}],9:[function(require,module,exports){
10896exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10897 var e, m
10898 var eLen = nBytes * 8 - mLen - 1
10899 var eMax = (1 << eLen) - 1
10900 var eBias = eMax >> 1
10901 var nBits = -7
10902 var i = isLE ? (nBytes - 1) : 0
10903 var d = isLE ? -1 : 1
10904 var s = buffer[offset + i]
10905
10906 i += d
10907
10908 e = s & ((1 << (-nBits)) - 1)
10909 s >>= (-nBits)
10910 nBits += eLen
10911 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
10912
10913 m = e & ((1 << (-nBits)) - 1)
10914 e >>= (-nBits)
10915 nBits += mLen
10916 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
10917
10918 if (e === 0) {
10919 e = 1 - eBias
10920 } else if (e === eMax) {
10921 return m ? NaN : ((s ? -1 : 1) * Infinity)
10922 } else {
10923 m = m + Math.pow(2, mLen)
10924 e = e - eBias
10925 }
10926 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
10927}
10928
10929exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10930 var e, m, c
10931 var eLen = nBytes * 8 - mLen - 1
10932 var eMax = (1 << eLen) - 1
10933 var eBias = eMax >> 1
10934 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10935 var i = isLE ? 0 : (nBytes - 1)
10936 var d = isLE ? 1 : -1
10937 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
10938
10939 value = Math.abs(value)
10940
10941 if (isNaN(value) || value === Infinity) {
10942 m = isNaN(value) ? 1 : 0
10943 e = eMax
10944 } else {
10945 e = Math.floor(Math.log(value) / Math.LN2)
10946 if (value * (c = Math.pow(2, -e)) < 1) {
10947 e--
10948 c *= 2
10949 }
10950 if (e + eBias >= 1) {
10951 value += rt / c
10952 } else {
10953 value += rt * Math.pow(2, 1 - eBias)
10954 }
10955 if (value * c >= 2) {
10956 e++
10957 c /= 2
10958 }
10959
10960 if (e + eBias >= eMax) {
10961 m = 0
10962 e = eMax
10963 } else if (e + eBias >= 1) {
10964 m = (value * c - 1) * Math.pow(2, mLen)
10965 e = e + eBias
10966 } else {
10967 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10968 e = 0
10969 }
10970 }
10971
10972 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10973
10974 e = (e << mLen) | m
10975 eLen += mLen
10976 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10977
10978 buffer[offset + i - d] |= s * 128
10979}
10980
10981},{}],10:[function(require,module,exports){
10982
10983/**
10984 * isArray
10985 */
10986
10987var isArray = Array.isArray;
10988
10989/**
10990 * toString
10991 */
10992
10993var str = Object.prototype.toString;
10994
10995/**
10996 * Whether or not the given `val`
10997 * is an array.
10998 *
10999 * example:
11000 *
11001 * isArray([]);
11002 * // > true
11003 * isArray(arguments);
11004 * // > false
11005 * isArray('');
11006 * // > false
11007 *
11008 * @param {mixed} val
11009 * @return {bool}
11010 */
11011
11012module.exports = isArray || function (val) {
11013 return !! val && '[object Array]' == str.call(val);
11014};
11015
11016},{}],11:[function(require,module,exports){
11017// Copyright Joyent, Inc. and other Node contributors.
11018//
11019// Permission is hereby granted, free of charge, to any person obtaining a
11020// copy of this software and associated documentation files (the
11021// "Software"), to deal in the Software without restriction, including
11022// without limitation the rights to use, copy, modify, merge, publish,
11023// distribute, sublicense, and/or sell copies of the Software, and to permit
11024// persons to whom the Software is furnished to do so, subject to the
11025// following conditions:
11026//
11027// The above copyright notice and this permission notice shall be included
11028// in all copies or substantial portions of the Software.
11029//
11030// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11031// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11032// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11033// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11034// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11035// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11036// USE OR OTHER DEALINGS IN THE SOFTWARE.
11037
11038function EventEmitter() {
11039 this._events = this._events || {};
11040 this._maxListeners = this._maxListeners || undefined;
11041}
11042module.exports = EventEmitter;
11043
11044// Backwards-compat with node 0.10.x
11045EventEmitter.EventEmitter = EventEmitter;
11046
11047EventEmitter.prototype._events = undefined;
11048EventEmitter.prototype._maxListeners = undefined;
11049
11050// By default EventEmitters will print a warning if more than 10 listeners are
11051// added to it. This is a useful default which helps finding memory leaks.
11052EventEmitter.defaultMaxListeners = 10;
11053
11054// Obviously not all Emitters should be limited to 10. This function allows
11055// that to be increased. Set to zero for unlimited.
11056EventEmitter.prototype.setMaxListeners = function(n) {
11057 if (!isNumber(n) || n < 0 || isNaN(n))
11058 throw TypeError('n must be a positive number');
11059 this._maxListeners = n;
11060 return this;
11061};
11062
11063EventEmitter.prototype.emit = function(type) {
11064 var er, handler, len, args, i, listeners;
11065
11066 if (!this._events)
11067 this._events = {};
11068
11069 // If there is no 'error' event listener then throw.
11070 if (type === 'error') {
11071 if (!this._events.error ||
11072 (isObject(this._events.error) && !this._events.error.length)) {
11073 er = arguments[1];
11074 if (er instanceof Error) {
11075 throw er; // Unhandled 'error' event
11076 }
11077 throw TypeError('Uncaught, unspecified "error" event.');
11078 }
11079 }
11080
11081 handler = this._events[type];
11082
11083 if (isUndefined(handler))
11084 return false;
11085
11086 if (isFunction(handler)) {
11087 switch (arguments.length) {
11088 // fast cases
11089 case 1:
11090 handler.call(this);
11091 break;
11092 case 2:
11093 handler.call(this, arguments[1]);
11094 break;
11095 case 3:
11096 handler.call(this, arguments[1], arguments[2]);
11097 break;
11098 // slower
11099 default:
11100 len = arguments.length;
11101 args = new Array(len - 1);
11102 for (i = 1; i < len; i++)
11103 args[i - 1] = arguments[i];
11104 handler.apply(this, args);
11105 }
11106 } else if (isObject(handler)) {
11107 len = arguments.length;
11108 args = new Array(len - 1);
11109 for (i = 1; i < len; i++)
11110 args[i - 1] = arguments[i];
11111
11112 listeners = handler.slice();
11113 len = listeners.length;
11114 for (i = 0; i < len; i++)
11115 listeners[i].apply(this, args);
11116 }
11117
11118 return true;
11119};
11120
11121EventEmitter.prototype.addListener = function(type, listener) {
11122 var m;
11123
11124 if (!isFunction(listener))
11125 throw TypeError('listener must be a function');
11126
11127 if (!this._events)
11128 this._events = {};
11129
11130 // To avoid recursion in the case that type === "newListener"! Before
11131 // adding it to the listeners, first emit "newListener".
11132 if (this._events.newListener)
11133 this.emit('newListener', type,
11134 isFunction(listener.listener) ?
11135 listener.listener : listener);
11136
11137 if (!this._events[type])
11138 // Optimize the case of one listener. Don't need the extra array object.
11139 this._events[type] = listener;
11140 else if (isObject(this._events[type]))
11141 // If we've already got an array, just append.
11142 this._events[type].push(listener);
11143 else
11144 // Adding the second element, need to change to array.
11145 this._events[type] = [this._events[type], listener];
11146
11147 // Check for listener leak
11148 if (isObject(this._events[type]) && !this._events[type].warned) {
11149 var m;
11150 if (!isUndefined(this._maxListeners)) {
11151 m = this._maxListeners;
11152 } else {
11153 m = EventEmitter.defaultMaxListeners;
11154 }
11155
11156 if (m && m > 0 && this._events[type].length > m) {
11157 this._events[type].warned = true;
11158 console.error('(node) warning: possible EventEmitter memory ' +
11159 'leak detected. %d listeners added. ' +
11160 'Use emitter.setMaxListeners() to increase limit.',
11161 this._events[type].length);
11162 if (typeof console.trace === 'function') {
11163 // not supported in IE 10
11164 console.trace();
11165 }
11166 }
11167 }
11168
11169 return this;
11170};
11171
11172EventEmitter.prototype.on = EventEmitter.prototype.addListener;
11173
11174EventEmitter.prototype.once = function(type, listener) {
11175 if (!isFunction(listener))
11176 throw TypeError('listener must be a function');
11177
11178 var fired = false;
11179
11180 function g() {
11181 this.removeListener(type, g);
11182
11183 if (!fired) {
11184 fired = true;
11185 listener.apply(this, arguments);
11186 }
11187 }
11188
11189 g.listener = listener;
11190 this.on(type, g);
11191
11192 return this;
11193};
11194
11195// emits a 'removeListener' event iff the listener was removed
11196EventEmitter.prototype.removeListener = function(type, listener) {
11197 var list, position, length, i;
11198
11199 if (!isFunction(listener))
11200 throw TypeError('listener must be a function');
11201
11202 if (!this._events || !this._events[type])
11203 return this;
11204
11205 list = this._events[type];
11206 length = list.length;
11207 position = -1;
11208
11209 if (list === listener ||
11210 (isFunction(list.listener) && list.listener === listener)) {
11211 delete this._events[type];
11212 if (this._events.removeListener)
11213 this.emit('removeListener', type, listener);
11214
11215 } else if (isObject(list)) {
11216 for (i = length; i-- > 0;) {
11217 if (list[i] === listener ||
11218 (list[i].listener && list[i].listener === listener)) {
11219 position = i;
11220 break;
11221 }
11222 }
11223
11224 if (position < 0)
11225 return this;
11226
11227 if (list.length === 1) {
11228 list.length = 0;
11229 delete this._events[type];
11230 } else {
11231 list.splice(position, 1);
11232 }
11233
11234 if (this._events.removeListener)
11235 this.emit('removeListener', type, listener);
11236 }
11237
11238 return this;
11239};
11240
11241EventEmitter.prototype.removeAllListeners = function(type) {
11242 var key, listeners;
11243
11244 if (!this._events)
11245 return this;
11246
11247 // not listening for removeListener, no need to emit
11248 if (!this._events.removeListener) {
11249 if (arguments.length === 0)
11250 this._events = {};
11251 else if (this._events[type])
11252 delete this._events[type];
11253 return this;
11254 }
11255
11256 // emit removeListener for all listeners on all events
11257 if (arguments.length === 0) {
11258 for (key in this._events) {
11259 if (key === 'removeListener') continue;
11260 this.removeAllListeners(key);
11261 }
11262 this.removeAllListeners('removeListener');
11263 this._events = {};
11264 return this;
11265 }
11266
11267 listeners = this._events[type];
11268
11269 if (isFunction(listeners)) {
11270 this.removeListener(type, listeners);
11271 } else {
11272 // LIFO order
11273 while (listeners.length)
11274 this.removeListener(type, listeners[listeners.length - 1]);
11275 }
11276 delete this._events[type];
11277
11278 return this;
11279};
11280
11281EventEmitter.prototype.listeners = function(type) {
11282 var ret;
11283 if (!this._events || !this._events[type])
11284 ret = [];
11285 else if (isFunction(this._events[type]))
11286 ret = [this._events[type]];
11287 else
11288 ret = this._events[type].slice();
11289 return ret;
11290};
11291
11292EventEmitter.listenerCount = function(emitter, type) {
11293 var ret;
11294 if (!emitter._events || !emitter._events[type])
11295 ret = 0;
11296 else if (isFunction(emitter._events[type]))
11297 ret = 1;
11298 else
11299 ret = emitter._events[type].length;
11300 return ret;
11301};
11302
11303function isFunction(arg) {
11304 return typeof arg === 'function';
11305}
11306
11307function isNumber(arg) {
11308 return typeof arg === 'number';
11309}
11310
11311function isObject(arg) {
11312 return typeof arg === 'object' && arg !== null;
11313}
11314
11315function isUndefined(arg) {
11316 return arg === void 0;
11317}
11318
11319},{}],12:[function(require,module,exports){
11320if (typeof Object.create === 'function') {
11321 // implementation from standard node.js 'util' module
11322 module.exports = function inherits(ctor, superCtor) {
11323 ctor.super_ = superCtor
11324 ctor.prototype = Object.create(superCtor.prototype, {
11325 constructor: {
11326 value: ctor,
11327 enumerable: false,
11328 writable: true,
11329 configurable: true
11330 }
11331 });
11332 };
11333} else {
11334 // old school shim for old browsers
11335 module.exports = function inherits(ctor, superCtor) {
11336 ctor.super_ = superCtor
11337 var TempCtor = function () {}
11338 TempCtor.prototype = superCtor.prototype
11339 ctor.prototype = new TempCtor()
11340 ctor.prototype.constructor = ctor
11341 }
11342}
11343
11344},{}],13:[function(require,module,exports){
11345module.exports = Array.isArray || function (arr) {
11346 return Object.prototype.toString.call(arr) == '[object Array]';
11347};
11348
11349},{}],14:[function(require,module,exports){
11350// shim for using process in browser
11351
11352var process = module.exports = {};
11353var queue = [];
11354var draining = false;
11355var currentQueue;
11356var queueIndex = -1;
11357
11358function cleanUpNextTick() {
11359 draining = false;
11360 if (currentQueue.length) {
11361 queue = currentQueue.concat(queue);
11362 } else {
11363 queueIndex = -1;
11364 }
11365 if (queue.length) {
11366 drainQueue();
11367 }
11368}
11369
11370function drainQueue() {
11371 if (draining) {
11372 return;
11373 }
11374 var timeout = setTimeout(cleanUpNextTick);
11375 draining = true;
11376
11377 var len = queue.length;
11378 while(len) {
11379 currentQueue = queue;
11380 queue = [];
11381 while (++queueIndex < len) {
11382 currentQueue[queueIndex].run();
11383 }
11384 queueIndex = -1;
11385 len = queue.length;
11386 }
11387 currentQueue = null;
11388 draining = false;
11389 clearTimeout(timeout);
11390}
11391
11392process.nextTick = function (fun) {
11393 var args = new Array(arguments.length - 1);
11394 if (arguments.length > 1) {
11395 for (var i = 1; i < arguments.length; i++) {
11396 args[i - 1] = arguments[i];
11397 }
11398 }
11399 queue.push(new Item(fun, args));
11400 if (queue.length === 1 && !draining) {
11401 setTimeout(drainQueue, 0);
11402 }
11403};
11404
11405// v8 likes predictible objects
11406function Item(fun, array) {
11407 this.fun = fun;
11408 this.array = array;
11409}
11410Item.prototype.run = function () {
11411 this.fun.apply(null, this.array);
11412};
11413process.title = 'browser';
11414process.browser = true;
11415process.env = {};
11416process.argv = [];
11417process.version = ''; // empty string to avoid regexp issues
11418process.versions = {};
11419
11420function noop() {}
11421
11422process.on = noop;
11423process.addListener = noop;
11424process.once = noop;
11425process.off = noop;
11426process.removeListener = noop;
11427process.removeAllListeners = noop;
11428process.emit = noop;
11429
11430process.binding = function (name) {
11431 throw new Error('process.binding is not supported');
11432};
11433
11434// TODO(shtylman)
11435process.cwd = function () { return '/' };
11436process.chdir = function (dir) {
11437 throw new Error('process.chdir is not supported');
11438};
11439process.umask = function() { return 0; };
11440
11441},{}],15:[function(require,module,exports){
11442module.exports = require("./lib/_stream_duplex.js")
11443
11444},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
11445(function (process){
11446// Copyright Joyent, Inc. and other Node contributors.
11447//
11448// Permission is hereby granted, free of charge, to any person obtaining a
11449// copy of this software and associated documentation files (the
11450// "Software"), to deal in the Software without restriction, including
11451// without limitation the rights to use, copy, modify, merge, publish,
11452// distribute, sublicense, and/or sell copies of the Software, and to permit
11453// persons to whom the Software is furnished to do so, subject to the
11454// following conditions:
11455//
11456// The above copyright notice and this permission notice shall be included
11457// in all copies or substantial portions of the Software.
11458//
11459// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11460// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11461// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11462// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11463// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11464// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11465// USE OR OTHER DEALINGS IN THE SOFTWARE.
11466
11467// a duplex stream is just a stream that is both readable and writable.
11468// Since JS doesn't have multiple prototypal inheritance, this class
11469// prototypally inherits from Readable, and then parasitically from
11470// Writable.
11471
11472module.exports = Duplex;
11473
11474/*<replacement>*/
11475var objectKeys = Object.keys || function (obj) {
11476 var keys = [];
11477 for (var key in obj) keys.push(key);
11478 return keys;
11479}
11480/*</replacement>*/
11481
11482
11483/*<replacement>*/
11484var util = require('core-util-is');
11485util.inherits = require('inherits');
11486/*</replacement>*/
11487
11488var Readable = require('./_stream_readable');
11489var Writable = require('./_stream_writable');
11490
11491util.inherits(Duplex, Readable);
11492
11493forEach(objectKeys(Writable.prototype), function(method) {
11494 if (!Duplex.prototype[method])
11495 Duplex.prototype[method] = Writable.prototype[method];
11496});
11497
11498function Duplex(options) {
11499 if (!(this instanceof Duplex))
11500 return new Duplex(options);
11501
11502 Readable.call(this, options);
11503 Writable.call(this, options);
11504
11505 if (options && options.readable === false)
11506 this.readable = false;
11507
11508 if (options && options.writable === false)
11509 this.writable = false;
11510
11511 this.allowHalfOpen = true;
11512 if (options && options.allowHalfOpen === false)
11513 this.allowHalfOpen = false;
11514
11515 this.once('end', onend);
11516}
11517
11518// the no-half-open enforcer
11519function onend() {
11520 // if we allow half-open state, or if the writable side ended,
11521 // then we're ok.
11522 if (this.allowHalfOpen || this._writableState.ended)
11523 return;
11524
11525 // no more data can be written.
11526 // But allow more writes to happen in this tick.
11527 process.nextTick(this.end.bind(this));
11528}
11529
11530function forEach (xs, f) {
11531 for (var i = 0, l = xs.length; i < l; i++) {
11532 f(xs[i], i);
11533 }
11534}
11535
11536}).call(this,require('_process'))
11537},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
11538// Copyright Joyent, Inc. and other Node contributors.
11539//
11540// Permission is hereby granted, free of charge, to any person obtaining a
11541// copy of this software and associated documentation files (the
11542// "Software"), to deal in the Software without restriction, including
11543// without limitation the rights to use, copy, modify, merge, publish,
11544// distribute, sublicense, and/or sell copies of the Software, and to permit
11545// persons to whom the Software is furnished to do so, subject to the
11546// following conditions:
11547//
11548// The above copyright notice and this permission notice shall be included
11549// in all copies or substantial portions of the Software.
11550//
11551// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11552// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11553// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11554// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11555// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11556// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11557// USE OR OTHER DEALINGS IN THE SOFTWARE.
11558
11559// a passthrough stream.
11560// basically just the most minimal sort of Transform stream.
11561// Every written chunk gets output as-is.
11562
11563module.exports = PassThrough;
11564
11565var Transform = require('./_stream_transform');
11566
11567/*<replacement>*/
11568var util = require('core-util-is');
11569util.inherits = require('inherits');
11570/*</replacement>*/
11571
11572util.inherits(PassThrough, Transform);
11573
11574function PassThrough(options) {
11575 if (!(this instanceof PassThrough))
11576 return new PassThrough(options);
11577
11578 Transform.call(this, options);
11579}
11580
11581PassThrough.prototype._transform = function(chunk, encoding, cb) {
11582 cb(null, chunk);
11583};
11584
11585},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
11586(function (process){
11587// Copyright Joyent, Inc. and other Node contributors.
11588//
11589// Permission is hereby granted, free of charge, to any person obtaining a
11590// copy of this software and associated documentation files (the
11591// "Software"), to deal in the Software without restriction, including
11592// without limitation the rights to use, copy, modify, merge, publish,
11593// distribute, sublicense, and/or sell copies of the Software, and to permit
11594// persons to whom the Software is furnished to do so, subject to the
11595// following conditions:
11596//
11597// The above copyright notice and this permission notice shall be included
11598// in all copies or substantial portions of the Software.
11599//
11600// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11601// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11602// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11603// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11604// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11605// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11606// USE OR OTHER DEALINGS IN THE SOFTWARE.
11607
11608module.exports = Readable;
11609
11610/*<replacement>*/
11611var isArray = require('isarray');
11612/*</replacement>*/
11613
11614
11615/*<replacement>*/
11616var Buffer = require('buffer').Buffer;
11617/*</replacement>*/
11618
11619Readable.ReadableState = ReadableState;
11620
11621var EE = require('events').EventEmitter;
11622
11623/*<replacement>*/
11624if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
11625 return emitter.listeners(type).length;
11626};
11627/*</replacement>*/
11628
11629var Stream = require('stream');
11630
11631/*<replacement>*/
11632var util = require('core-util-is');
11633util.inherits = require('inherits');
11634/*</replacement>*/
11635
11636var StringDecoder;
11637
11638
11639/*<replacement>*/
11640var debug = require('util');
11641if (debug && debug.debuglog) {
11642 debug = debug.debuglog('stream');
11643} else {
11644 debug = function () {};
11645}
11646/*</replacement>*/
11647
11648
11649util.inherits(Readable, Stream);
11650
11651function ReadableState(options, stream) {
11652 var Duplex = require('./_stream_duplex');
11653
11654 options = options || {};
11655
11656 // the point at which it stops calling _read() to fill the buffer
11657 // Note: 0 is a valid value, means "don't call _read preemptively ever"
11658 var hwm = options.highWaterMark;
11659 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
11660 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
11661
11662 // cast to ints.
11663 this.highWaterMark = ~~this.highWaterMark;
11664
11665 this.buffer = [];
11666 this.length = 0;
11667 this.pipes = null;
11668 this.pipesCount = 0;
11669 this.flowing = null;
11670 this.ended = false;
11671 this.endEmitted = false;
11672 this.reading = false;
11673
11674 // a flag to be able to tell if the onwrite cb is called immediately,
11675 // or on a later tick. We set this to true at first, because any
11676 // actions that shouldn't happen until "later" should generally also
11677 // not happen before the first write call.
11678 this.sync = true;
11679
11680 // whenever we return null, then we set a flag to say
11681 // that we're awaiting a 'readable' event emission.
11682 this.needReadable = false;
11683 this.emittedReadable = false;
11684 this.readableListening = false;
11685
11686
11687 // object stream flag. Used to make read(n) ignore n and to
11688 // make all the buffer merging and length checks go away
11689 this.objectMode = !!options.objectMode;
11690
11691 if (stream instanceof Duplex)
11692 this.objectMode = this.objectMode || !!options.readableObjectMode;
11693
11694 // Crypto is kind of old and crusty. Historically, its default string
11695 // encoding is 'binary' so we have to make this configurable.
11696 // Everything else in the universe uses 'utf8', though.
11697 this.defaultEncoding = options.defaultEncoding || 'utf8';
11698
11699 // when piping, we only care about 'readable' events that happen
11700 // after read()ing all the bytes and not getting any pushback.
11701 this.ranOut = false;
11702
11703 // the number of writers that are awaiting a drain event in .pipe()s
11704 this.awaitDrain = 0;
11705
11706 // if true, a maybeReadMore has been scheduled
11707 this.readingMore = false;
11708
11709 this.decoder = null;
11710 this.encoding = null;
11711 if (options.encoding) {
11712 if (!StringDecoder)
11713 StringDecoder = require('string_decoder/').StringDecoder;
11714 this.decoder = new StringDecoder(options.encoding);
11715 this.encoding = options.encoding;
11716 }
11717}
11718
11719function Readable(options) {
11720 var Duplex = require('./_stream_duplex');
11721
11722 if (!(this instanceof Readable))
11723 return new Readable(options);
11724
11725 this._readableState = new ReadableState(options, this);
11726
11727 // legacy
11728 this.readable = true;
11729
11730 Stream.call(this);
11731}
11732
11733// Manually shove something into the read() buffer.
11734// This returns true if the highWaterMark has not been hit yet,
11735// similar to how Writable.write() returns true if you should
11736// write() some more.
11737Readable.prototype.push = function(chunk, encoding) {
11738 var state = this._readableState;
11739
11740 if (util.isString(chunk) && !state.objectMode) {
11741 encoding = encoding || state.defaultEncoding;
11742 if (encoding !== state.encoding) {
11743 chunk = new Buffer(chunk, encoding);
11744 encoding = '';
11745 }
11746 }
11747
11748 return readableAddChunk(this, state, chunk, encoding, false);
11749};
11750
11751// Unshift should *always* be something directly out of read()
11752Readable.prototype.unshift = function(chunk) {
11753 var state = this._readableState;
11754 return readableAddChunk(this, state, chunk, '', true);
11755};
11756
11757function readableAddChunk(stream, state, chunk, encoding, addToFront) {
11758 var er = chunkInvalid(state, chunk);
11759 if (er) {
11760 stream.emit('error', er);
11761 } else if (util.isNullOrUndefined(chunk)) {
11762 state.reading = false;
11763 if (!state.ended)
11764 onEofChunk(stream, state);
11765 } else if (state.objectMode || chunk && chunk.length > 0) {
11766 if (state.ended && !addToFront) {
11767 var e = new Error('stream.push() after EOF');
11768 stream.emit('error', e);
11769 } else if (state.endEmitted && addToFront) {
11770 var e = new Error('stream.unshift() after end event');
11771 stream.emit('error', e);
11772 } else {
11773 if (state.decoder && !addToFront && !encoding)
11774 chunk = state.decoder.write(chunk);
11775
11776 if (!addToFront)
11777 state.reading = false;
11778
11779 // if we want the data now, just emit it.
11780 if (state.flowing && state.length === 0 && !state.sync) {
11781 stream.emit('data', chunk);
11782 stream.read(0);
11783 } else {
11784 // update the buffer info.
11785 state.length += state.objectMode ? 1 : chunk.length;
11786 if (addToFront)
11787 state.buffer.unshift(chunk);
11788 else
11789 state.buffer.push(chunk);
11790
11791 if (state.needReadable)
11792 emitReadable(stream);
11793 }
11794
11795 maybeReadMore(stream, state);
11796 }
11797 } else if (!addToFront) {
11798 state.reading = false;
11799 }
11800
11801 return needMoreData(state);
11802}
11803
11804
11805
11806// if it's past the high water mark, we can push in some more.
11807// Also, if we have no data yet, we can stand some
11808// more bytes. This is to work around cases where hwm=0,
11809// such as the repl. Also, if the push() triggered a
11810// readable event, and the user called read(largeNumber) such that
11811// needReadable was set, then we ought to push more, so that another
11812// 'readable' event will be triggered.
11813function needMoreData(state) {
11814 return !state.ended &&
11815 (state.needReadable ||
11816 state.length < state.highWaterMark ||
11817 state.length === 0);
11818}
11819
11820// backwards compatibility.
11821Readable.prototype.setEncoding = function(enc) {
11822 if (!StringDecoder)
11823 StringDecoder = require('string_decoder/').StringDecoder;
11824 this._readableState.decoder = new StringDecoder(enc);
11825 this._readableState.encoding = enc;
11826 return this;
11827};
11828
11829// Don't raise the hwm > 128MB
11830var MAX_HWM = 0x800000;
11831function roundUpToNextPowerOf2(n) {
11832 if (n >= MAX_HWM) {
11833 n = MAX_HWM;
11834 } else {
11835 // Get the next highest power of 2
11836 n--;
11837 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
11838 n++;
11839 }
11840 return n;
11841}
11842
11843function howMuchToRead(n, state) {
11844 if (state.length === 0 && state.ended)
11845 return 0;
11846
11847 if (state.objectMode)
11848 return n === 0 ? 0 : 1;
11849
11850 if (isNaN(n) || util.isNull(n)) {
11851 // only flow one buffer at a time
11852 if (state.flowing && state.buffer.length)
11853 return state.buffer[0].length;
11854 else
11855 return state.length;
11856 }
11857
11858 if (n <= 0)
11859 return 0;
11860
11861 // If we're asking for more than the target buffer level,
11862 // then raise the water mark. Bump up to the next highest
11863 // power of 2, to prevent increasing it excessively in tiny
11864 // amounts.
11865 if (n > state.highWaterMark)
11866 state.highWaterMark = roundUpToNextPowerOf2(n);
11867
11868 // don't have that much. return null, unless we've ended.
11869 if (n > state.length) {
11870 if (!state.ended) {
11871 state.needReadable = true;
11872 return 0;
11873 } else
11874 return state.length;
11875 }
11876
11877 return n;
11878}
11879
11880// you can override either this method, or the async _read(n) below.
11881Readable.prototype.read = function(n) {
11882 debug('read', n);
11883 var state = this._readableState;
11884 var nOrig = n;
11885
11886 if (!util.isNumber(n) || n > 0)
11887 state.emittedReadable = false;
11888
11889 // if we're doing read(0) to trigger a readable event, but we
11890 // already have a bunch of data in the buffer, then just trigger
11891 // the 'readable' event and move on.
11892 if (n === 0 &&
11893 state.needReadable &&
11894 (state.length >= state.highWaterMark || state.ended)) {
11895 debug('read: emitReadable', state.length, state.ended);
11896 if (state.length === 0 && state.ended)
11897 endReadable(this);
11898 else
11899 emitReadable(this);
11900 return null;
11901 }
11902
11903 n = howMuchToRead(n, state);
11904
11905 // if we've ended, and we're now clear, then finish it up.
11906 if (n === 0 && state.ended) {
11907 if (state.length === 0)
11908 endReadable(this);
11909 return null;
11910 }
11911
11912 // All the actual chunk generation logic needs to be
11913 // *below* the call to _read. The reason is that in certain
11914 // synthetic stream cases, such as passthrough streams, _read
11915 // may be a completely synchronous operation which may change
11916 // the state of the read buffer, providing enough data when
11917 // before there was *not* enough.
11918 //
11919 // So, the steps are:
11920 // 1. Figure out what the state of things will be after we do
11921 // a read from the buffer.
11922 //
11923 // 2. If that resulting state will trigger a _read, then call _read.
11924 // Note that this may be asynchronous, or synchronous. Yes, it is
11925 // deeply ugly to write APIs this way, but that still doesn't mean
11926 // that the Readable class should behave improperly, as streams are
11927 // designed to be sync/async agnostic.
11928 // Take note if the _read call is sync or async (ie, if the read call
11929 // has returned yet), so that we know whether or not it's safe to emit
11930 // 'readable' etc.
11931 //
11932 // 3. Actually pull the requested chunks out of the buffer and return.
11933
11934 // if we need a readable event, then we need to do some reading.
11935 var doRead = state.needReadable;
11936 debug('need readable', doRead);
11937
11938 // if we currently have less than the highWaterMark, then also read some
11939 if (state.length === 0 || state.length - n < state.highWaterMark) {
11940 doRead = true;
11941 debug('length less than watermark', doRead);
11942 }
11943
11944 // however, if we've ended, then there's no point, and if we're already
11945 // reading, then it's unnecessary.
11946 if (state.ended || state.reading) {
11947 doRead = false;
11948 debug('reading or ended', doRead);
11949 }
11950
11951 if (doRead) {
11952 debug('do read');
11953 state.reading = true;
11954 state.sync = true;
11955 // if the length is currently zero, then we *need* a readable event.
11956 if (state.length === 0)
11957 state.needReadable = true;
11958 // call internal read method
11959 this._read(state.highWaterMark);
11960 state.sync = false;
11961 }
11962
11963 // If _read pushed data synchronously, then `reading` will be false,
11964 // and we need to re-evaluate how much data we can return to the user.
11965 if (doRead && !state.reading)
11966 n = howMuchToRead(nOrig, state);
11967
11968 var ret;
11969 if (n > 0)
11970 ret = fromList(n, state);
11971 else
11972 ret = null;
11973
11974 if (util.isNull(ret)) {
11975 state.needReadable = true;
11976 n = 0;
11977 }
11978
11979 state.length -= n;
11980
11981 // If we have nothing in the buffer, then we want to know
11982 // as soon as we *do* get something into the buffer.
11983 if (state.length === 0 && !state.ended)
11984 state.needReadable = true;
11985
11986 // If we tried to read() past the EOF, then emit end on the next tick.
11987 if (nOrig !== n && state.ended && state.length === 0)
11988 endReadable(this);
11989
11990 if (!util.isNull(ret))
11991 this.emit('data', ret);
11992
11993 return ret;
11994};
11995
11996function chunkInvalid(state, chunk) {
11997 var er = null;
11998 if (!util.isBuffer(chunk) &&
11999 !util.isString(chunk) &&
12000 !util.isNullOrUndefined(chunk) &&
12001 !state.objectMode) {
12002 er = new TypeError('Invalid non-string/buffer chunk');
12003 }
12004 return er;
12005}
12006
12007
12008function onEofChunk(stream, state) {
12009 if (state.decoder && !state.ended) {
12010 var chunk = state.decoder.end();
12011 if (chunk && chunk.length) {
12012 state.buffer.push(chunk);
12013 state.length += state.objectMode ? 1 : chunk.length;
12014 }
12015 }
12016 state.ended = true;
12017
12018 // emit 'readable' now to make sure it gets picked up.
12019 emitReadable(stream);
12020}
12021
12022// Don't emit readable right away in sync mode, because this can trigger
12023// another read() call => stack overflow. This way, it might trigger
12024// a nextTick recursion warning, but that's not so bad.
12025function emitReadable(stream) {
12026 var state = stream._readableState;
12027 state.needReadable = false;
12028 if (!state.emittedReadable) {
12029 debug('emitReadable', state.flowing);
12030 state.emittedReadable = true;
12031 if (state.sync)
12032 process.nextTick(function() {
12033 emitReadable_(stream);
12034 });
12035 else
12036 emitReadable_(stream);
12037 }
12038}
12039
12040function emitReadable_(stream) {
12041 debug('emit readable');
12042 stream.emit('readable');
12043 flow(stream);
12044}
12045
12046
12047// at this point, the user has presumably seen the 'readable' event,
12048// and called read() to consume some data. that may have triggered
12049// in turn another _read(n) call, in which case reading = true if
12050// it's in progress.
12051// However, if we're not ended, or reading, and the length < hwm,
12052// then go ahead and try to read some more preemptively.
12053function maybeReadMore(stream, state) {
12054 if (!state.readingMore) {
12055 state.readingMore = true;
12056 process.nextTick(function() {
12057 maybeReadMore_(stream, state);
12058 });
12059 }
12060}
12061
12062function maybeReadMore_(stream, state) {
12063 var len = state.length;
12064 while (!state.reading && !state.flowing && !state.ended &&
12065 state.length < state.highWaterMark) {
12066 debug('maybeReadMore read 0');
12067 stream.read(0);
12068 if (len === state.length)
12069 // didn't get any data, stop spinning.
12070 break;
12071 else
12072 len = state.length;
12073 }
12074 state.readingMore = false;
12075}
12076
12077// abstract method. to be overridden in specific implementation classes.
12078// call cb(er, data) where data is <= n in length.
12079// for virtual (non-string, non-buffer) streams, "length" is somewhat
12080// arbitrary, and perhaps not very meaningful.
12081Readable.prototype._read = function(n) {
12082 this.emit('error', new Error('not implemented'));
12083};
12084
12085Readable.prototype.pipe = function(dest, pipeOpts) {
12086 var src = this;
12087 var state = this._readableState;
12088
12089 switch (state.pipesCount) {
12090 case 0:
12091 state.pipes = dest;
12092 break;
12093 case 1:
12094 state.pipes = [state.pipes, dest];
12095 break;
12096 default:
12097 state.pipes.push(dest);
12098 break;
12099 }
12100 state.pipesCount += 1;
12101 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
12102
12103 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
12104 dest !== process.stdout &&
12105 dest !== process.stderr;
12106
12107 var endFn = doEnd ? onend : cleanup;
12108 if (state.endEmitted)
12109 process.nextTick(endFn);
12110 else
12111 src.once('end', endFn);
12112
12113 dest.on('unpipe', onunpipe);
12114 function onunpipe(readable) {
12115 debug('onunpipe');
12116 if (readable === src) {
12117 cleanup();
12118 }
12119 }
12120
12121 function onend() {
12122 debug('onend');
12123 dest.end();
12124 }
12125
12126 // when the dest drains, it reduces the awaitDrain counter
12127 // on the source. This would be more elegant with a .once()
12128 // handler in flow(), but adding and removing repeatedly is
12129 // too slow.
12130 var ondrain = pipeOnDrain(src);
12131 dest.on('drain', ondrain);
12132
12133 function cleanup() {
12134 debug('cleanup');
12135 // cleanup event handlers once the pipe is broken
12136 dest.removeListener('close', onclose);
12137 dest.removeListener('finish', onfinish);
12138 dest.removeListener('drain', ondrain);
12139 dest.removeListener('error', onerror);
12140 dest.removeListener('unpipe', onunpipe);
12141 src.removeListener('end', onend);
12142 src.removeListener('end', cleanup);
12143 src.removeListener('data', ondata);
12144
12145 // if the reader is waiting for a drain event from this
12146 // specific writer, then it would cause it to never start
12147 // flowing again.
12148 // So, if this is awaiting a drain, then we just call it now.
12149 // If we don't know, then assume that we are waiting for one.
12150 if (state.awaitDrain &&
12151 (!dest._writableState || dest._writableState.needDrain))
12152 ondrain();
12153 }
12154
12155 src.on('data', ondata);
12156 function ondata(chunk) {
12157 debug('ondata');
12158 var ret = dest.write(chunk);
12159 if (false === ret) {
12160 debug('false write response, pause',
12161 src._readableState.awaitDrain);
12162 src._readableState.awaitDrain++;
12163 src.pause();
12164 }
12165 }
12166
12167 // if the dest has an error, then stop piping into it.
12168 // however, don't suppress the throwing behavior for this.
12169 function onerror(er) {
12170 debug('onerror', er);
12171 unpipe();
12172 dest.removeListener('error', onerror);
12173 if (EE.listenerCount(dest, 'error') === 0)
12174 dest.emit('error', er);
12175 }
12176 // This is a brutally ugly hack to make sure that our error handler
12177 // is attached before any userland ones. NEVER DO THIS.
12178 if (!dest._events || !dest._events.error)
12179 dest.on('error', onerror);
12180 else if (isArray(dest._events.error))
12181 dest._events.error.unshift(onerror);
12182 else
12183 dest._events.error = [onerror, dest._events.error];
12184
12185
12186
12187 // Both close and finish should trigger unpipe, but only once.
12188 function onclose() {
12189 dest.removeListener('finish', onfinish);
12190 unpipe();
12191 }
12192 dest.once('close', onclose);
12193 function onfinish() {
12194 debug('onfinish');
12195 dest.removeListener('close', onclose);
12196 unpipe();
12197 }
12198 dest.once('finish', onfinish);
12199
12200 function unpipe() {
12201 debug('unpipe');
12202 src.unpipe(dest);
12203 }
12204
12205 // tell the dest that it's being piped to
12206 dest.emit('pipe', src);
12207
12208 // start the flow if it hasn't been started already.
12209 if (!state.flowing) {
12210 debug('pipe resume');
12211 src.resume();
12212 }
12213
12214 return dest;
12215};
12216
12217function pipeOnDrain(src) {
12218 return function() {
12219 var state = src._readableState;
12220 debug('pipeOnDrain', state.awaitDrain);
12221 if (state.awaitDrain)
12222 state.awaitDrain--;
12223 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
12224 state.flowing = true;
12225 flow(src);
12226 }
12227 };
12228}
12229
12230
12231Readable.prototype.unpipe = function(dest) {
12232 var state = this._readableState;
12233
12234 // if we're not piping anywhere, then do nothing.
12235 if (state.pipesCount === 0)
12236 return this;
12237
12238 // just one destination. most common case.
12239 if (state.pipesCount === 1) {
12240 // passed in one, but it's not the right one.
12241 if (dest && dest !== state.pipes)
12242 return this;
12243
12244 if (!dest)
12245 dest = state.pipes;
12246
12247 // got a match.
12248 state.pipes = null;
12249 state.pipesCount = 0;
12250 state.flowing = false;
12251 if (dest)
12252 dest.emit('unpipe', this);
12253 return this;
12254 }
12255
12256 // slow case. multiple pipe destinations.
12257
12258 if (!dest) {
12259 // remove all.
12260 var dests = state.pipes;
12261 var len = state.pipesCount;
12262 state.pipes = null;
12263 state.pipesCount = 0;
12264 state.flowing = false;
12265
12266 for (var i = 0; i < len; i++)
12267 dests[i].emit('unpipe', this);
12268 return this;
12269 }
12270
12271 // try to find the right one.
12272 var i = indexOf(state.pipes, dest);
12273 if (i === -1)
12274 return this;
12275
12276 state.pipes.splice(i, 1);
12277 state.pipesCount -= 1;
12278 if (state.pipesCount === 1)
12279 state.pipes = state.pipes[0];
12280
12281 dest.emit('unpipe', this);
12282
12283 return this;
12284};
12285
12286// set up data events if they are asked for
12287// Ensure readable listeners eventually get something
12288Readable.prototype.on = function(ev, fn) {
12289 var res = Stream.prototype.on.call(this, ev, fn);
12290
12291 // If listening to data, and it has not explicitly been paused,
12292 // then call resume to start the flow of data on the next tick.
12293 if (ev === 'data' && false !== this._readableState.flowing) {
12294 this.resume();
12295 }
12296
12297 if (ev === 'readable' && this.readable) {
12298 var state = this._readableState;
12299 if (!state.readableListening) {
12300 state.readableListening = true;
12301 state.emittedReadable = false;
12302 state.needReadable = true;
12303 if (!state.reading) {
12304 var self = this;
12305 process.nextTick(function() {
12306 debug('readable nexttick read 0');
12307 self.read(0);
12308 });
12309 } else if (state.length) {
12310 emitReadable(this, state);
12311 }
12312 }
12313 }
12314
12315 return res;
12316};
12317Readable.prototype.addListener = Readable.prototype.on;
12318
12319// pause() and resume() are remnants of the legacy readable stream API
12320// If the user uses them, then switch into old mode.
12321Readable.prototype.resume = function() {
12322 var state = this._readableState;
12323 if (!state.flowing) {
12324 debug('resume');
12325 state.flowing = true;
12326 if (!state.reading) {
12327 debug('resume read 0');
12328 this.read(0);
12329 }
12330 resume(this, state);
12331 }
12332 return this;
12333};
12334
12335function resume(stream, state) {
12336 if (!state.resumeScheduled) {
12337 state.resumeScheduled = true;
12338 process.nextTick(function() {
12339 resume_(stream, state);
12340 });
12341 }
12342}
12343
12344function resume_(stream, state) {
12345 state.resumeScheduled = false;
12346 stream.emit('resume');
12347 flow(stream);
12348 if (state.flowing && !state.reading)
12349 stream.read(0);
12350}
12351
12352Readable.prototype.pause = function() {
12353 debug('call pause flowing=%j', this._readableState.flowing);
12354 if (false !== this._readableState.flowing) {
12355 debug('pause');
12356 this._readableState.flowing = false;
12357 this.emit('pause');
12358 }
12359 return this;
12360};
12361
12362function flow(stream) {
12363 var state = stream._readableState;
12364 debug('flow', state.flowing);
12365 if (state.flowing) {
12366 do {
12367 var chunk = stream.read();
12368 } while (null !== chunk && state.flowing);
12369 }
12370}
12371
12372// wrap an old-style stream as the async data source.
12373// This is *not* part of the readable stream interface.
12374// It is an ugly unfortunate mess of history.
12375Readable.prototype.wrap = function(stream) {
12376 var state = this._readableState;
12377 var paused = false;
12378
12379 var self = this;
12380 stream.on('end', function() {
12381 debug('wrapped end');
12382 if (state.decoder && !state.ended) {
12383 var chunk = state.decoder.end();
12384 if (chunk && chunk.length)
12385 self.push(chunk);
12386 }
12387
12388 self.push(null);
12389 });
12390
12391 stream.on('data', function(chunk) {
12392 debug('wrapped data');
12393 if (state.decoder)
12394 chunk = state.decoder.write(chunk);
12395 if (!chunk || !state.objectMode && !chunk.length)
12396 return;
12397
12398 var ret = self.push(chunk);
12399 if (!ret) {
12400 paused = true;
12401 stream.pause();
12402 }
12403 });
12404
12405 // proxy all the other methods.
12406 // important when wrapping filters and duplexes.
12407 for (var i in stream) {
12408 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
12409 this[i] = function(method) { return function() {
12410 return stream[method].apply(stream, arguments);
12411 }}(i);
12412 }
12413 }
12414
12415 // proxy certain important events.
12416 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
12417 forEach(events, function(ev) {
12418 stream.on(ev, self.emit.bind(self, ev));
12419 });
12420
12421 // when we try to consume some more bytes, simply unpause the
12422 // underlying stream.
12423 self._read = function(n) {
12424 debug('wrapped _read', n);
12425 if (paused) {
12426 paused = false;
12427 stream.resume();
12428 }
12429 };
12430
12431 return self;
12432};
12433
12434
12435
12436// exposed for testing purposes only.
12437Readable._fromList = fromList;
12438
12439// Pluck off n bytes from an array of buffers.
12440// Length is the combined lengths of all the buffers in the list.
12441function fromList(n, state) {
12442 var list = state.buffer;
12443 var length = state.length;
12444 var stringMode = !!state.decoder;
12445 var objectMode = !!state.objectMode;
12446 var ret;
12447
12448 // nothing in the list, definitely empty.
12449 if (list.length === 0)
12450 return null;
12451
12452 if (length === 0)
12453 ret = null;
12454 else if (objectMode)
12455 ret = list.shift();
12456 else if (!n || n >= length) {
12457 // read it all, truncate the array.
12458 if (stringMode)
12459 ret = list.join('');
12460 else
12461 ret = Buffer.concat(list, length);
12462 list.length = 0;
12463 } else {
12464 // read just some of it.
12465 if (n < list[0].length) {
12466 // just take a part of the first list item.
12467 // slice is the same for buffers and strings.
12468 var buf = list[0];
12469 ret = buf.slice(0, n);
12470 list[0] = buf.slice(n);
12471 } else if (n === list[0].length) {
12472 // first list is a perfect match
12473 ret = list.shift();
12474 } else {
12475 // complex case.
12476 // we have enough to cover it, but it spans past the first buffer.
12477 if (stringMode)
12478 ret = '';
12479 else
12480 ret = new Buffer(n);
12481
12482 var c = 0;
12483 for (var i = 0, l = list.length; i < l && c < n; i++) {
12484 var buf = list[0];
12485 var cpy = Math.min(n - c, buf.length);
12486
12487 if (stringMode)
12488 ret += buf.slice(0, cpy);
12489 else
12490 buf.copy(ret, c, 0, cpy);
12491
12492 if (cpy < buf.length)
12493 list[0] = buf.slice(cpy);
12494 else
12495 list.shift();
12496
12497 c += cpy;
12498 }
12499 }
12500 }
12501
12502 return ret;
12503}
12504
12505function endReadable(stream) {
12506 var state = stream._readableState;
12507
12508 // If we get here before consuming all the bytes, then that is a
12509 // bug in node. Should never happen.
12510 if (state.length > 0)
12511 throw new Error('endReadable called on non-empty stream');
12512
12513 if (!state.endEmitted) {
12514 state.ended = true;
12515 process.nextTick(function() {
12516 // Check that we didn't get one last unshift.
12517 if (!state.endEmitted && state.length === 0) {
12518 state.endEmitted = true;
12519 stream.readable = false;
12520 stream.emit('end');
12521 }
12522 });
12523 }
12524}
12525
12526function forEach (xs, f) {
12527 for (var i = 0, l = xs.length; i < l; i++) {
12528 f(xs[i], i);
12529 }
12530}
12531
12532function indexOf (xs, x) {
12533 for (var i = 0, l = xs.length; i < l; i++) {
12534 if (xs[i] === x) return i;
12535 }
12536 return -1;
12537}
12538
12539}).call(this,require('_process'))
12540},{"./_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){
12541// Copyright Joyent, Inc. and other Node contributors.
12542//
12543// Permission is hereby granted, free of charge, to any person obtaining a
12544// copy of this software and associated documentation files (the
12545// "Software"), to deal in the Software without restriction, including
12546// without limitation the rights to use, copy, modify, merge, publish,
12547// distribute, sublicense, and/or sell copies of the Software, and to permit
12548// persons to whom the Software is furnished to do so, subject to the
12549// following conditions:
12550//
12551// The above copyright notice and this permission notice shall be included
12552// in all copies or substantial portions of the Software.
12553//
12554// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12555// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12556// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12557// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12558// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12559// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12560// USE OR OTHER DEALINGS IN THE SOFTWARE.
12561
12562
12563// a transform stream is a readable/writable stream where you do
12564// something with the data. Sometimes it's called a "filter",
12565// but that's not a great name for it, since that implies a thing where
12566// some bits pass through, and others are simply ignored. (That would
12567// be a valid example of a transform, of course.)
12568//
12569// While the output is causally related to the input, it's not a
12570// necessarily symmetric or synchronous transformation. For example,
12571// a zlib stream might take multiple plain-text writes(), and then
12572// emit a single compressed chunk some time in the future.
12573//
12574// Here's how this works:
12575//
12576// The Transform stream has all the aspects of the readable and writable
12577// stream classes. When you write(chunk), that calls _write(chunk,cb)
12578// internally, and returns false if there's a lot of pending writes
12579// buffered up. When you call read(), that calls _read(n) until
12580// there's enough pending readable data buffered up.
12581//
12582// In a transform stream, the written data is placed in a buffer. When
12583// _read(n) is called, it transforms the queued up data, calling the
12584// buffered _write cb's as it consumes chunks. If consuming a single
12585// written chunk would result in multiple output chunks, then the first
12586// outputted bit calls the readcb, and subsequent chunks just go into
12587// the read buffer, and will cause it to emit 'readable' if necessary.
12588//
12589// This way, back-pressure is actually determined by the reading side,
12590// since _read has to be called to start processing a new chunk. However,
12591// a pathological inflate type of transform can cause excessive buffering
12592// here. For example, imagine a stream where every byte of input is
12593// interpreted as an integer from 0-255, and then results in that many
12594// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
12595// 1kb of data being output. In this case, you could write a very small
12596// amount of input, and end up with a very large amount of output. In
12597// such a pathological inflating mechanism, there'd be no way to tell
12598// the system to stop doing the transform. A single 4MB write could
12599// cause the system to run out of memory.
12600//
12601// However, even in such a pathological case, only a single written chunk
12602// would be consumed, and then the rest would wait (un-transformed) until
12603// the results of the previous transformed chunk were consumed.
12604
12605module.exports = Transform;
12606
12607var Duplex = require('./_stream_duplex');
12608
12609/*<replacement>*/
12610var util = require('core-util-is');
12611util.inherits = require('inherits');
12612/*</replacement>*/
12613
12614util.inherits(Transform, Duplex);
12615
12616
12617function TransformState(options, stream) {
12618 this.afterTransform = function(er, data) {
12619 return afterTransform(stream, er, data);
12620 };
12621
12622 this.needTransform = false;
12623 this.transforming = false;
12624 this.writecb = null;
12625 this.writechunk = null;
12626}
12627
12628function afterTransform(stream, er, data) {
12629 var ts = stream._transformState;
12630 ts.transforming = false;
12631
12632 var cb = ts.writecb;
12633
12634 if (!cb)
12635 return stream.emit('error', new Error('no writecb in Transform class'));
12636
12637 ts.writechunk = null;
12638 ts.writecb = null;
12639
12640 if (!util.isNullOrUndefined(data))
12641 stream.push(data);
12642
12643 if (cb)
12644 cb(er);
12645
12646 var rs = stream._readableState;
12647 rs.reading = false;
12648 if (rs.needReadable || rs.length < rs.highWaterMark) {
12649 stream._read(rs.highWaterMark);
12650 }
12651}
12652
12653
12654function Transform(options) {
12655 if (!(this instanceof Transform))
12656 return new Transform(options);
12657
12658 Duplex.call(this, options);
12659
12660 this._transformState = new TransformState(options, this);
12661
12662 // when the writable side finishes, then flush out anything remaining.
12663 var stream = this;
12664
12665 // start out asking for a readable event once data is transformed.
12666 this._readableState.needReadable = true;
12667
12668 // we have implemented the _read method, and done the other things
12669 // that Readable wants before the first _read call, so unset the
12670 // sync guard flag.
12671 this._readableState.sync = false;
12672
12673 this.once('prefinish', function() {
12674 if (util.isFunction(this._flush))
12675 this._flush(function(er) {
12676 done(stream, er);
12677 });
12678 else
12679 done(stream);
12680 });
12681}
12682
12683Transform.prototype.push = function(chunk, encoding) {
12684 this._transformState.needTransform = false;
12685 return Duplex.prototype.push.call(this, chunk, encoding);
12686};
12687
12688// This is the part where you do stuff!
12689// override this function in implementation classes.
12690// 'chunk' is an input chunk.
12691//
12692// Call `push(newChunk)` to pass along transformed output
12693// to the readable side. You may call 'push' zero or more times.
12694//
12695// Call `cb(err)` when you are done with this chunk. If you pass
12696// an error, then that'll put the hurt on the whole operation. If you
12697// never call cb(), then you'll never get another chunk.
12698Transform.prototype._transform = function(chunk, encoding, cb) {
12699 throw new Error('not implemented');
12700};
12701
12702Transform.prototype._write = function(chunk, encoding, cb) {
12703 var ts = this._transformState;
12704 ts.writecb = cb;
12705 ts.writechunk = chunk;
12706 ts.writeencoding = encoding;
12707 if (!ts.transforming) {
12708 var rs = this._readableState;
12709 if (ts.needTransform ||
12710 rs.needReadable ||
12711 rs.length < rs.highWaterMark)
12712 this._read(rs.highWaterMark);
12713 }
12714};
12715
12716// Doesn't matter what the args are here.
12717// _transform does all the work.
12718// That we got here means that the readable side wants more data.
12719Transform.prototype._read = function(n) {
12720 var ts = this._transformState;
12721
12722 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
12723 ts.transforming = true;
12724 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
12725 } else {
12726 // mark that we need a transform, so that any data that comes in
12727 // will get processed, now that we've asked for it.
12728 ts.needTransform = true;
12729 }
12730};
12731
12732
12733function done(stream, er) {
12734 if (er)
12735 return stream.emit('error', er);
12736
12737 // if there's nothing in the write buffer, then that means
12738 // that nothing more will ever be provided
12739 var ws = stream._writableState;
12740 var ts = stream._transformState;
12741
12742 if (ws.length)
12743 throw new Error('calling transform done when ws.length != 0');
12744
12745 if (ts.transforming)
12746 throw new Error('calling transform done when still transforming');
12747
12748 return stream.push(null);
12749}
12750
12751},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
12752(function (process){
12753// Copyright Joyent, Inc. and other Node contributors.
12754//
12755// Permission is hereby granted, free of charge, to any person obtaining a
12756// copy of this software and associated documentation files (the
12757// "Software"), to deal in the Software without restriction, including
12758// without limitation the rights to use, copy, modify, merge, publish,
12759// distribute, sublicense, and/or sell copies of the Software, and to permit
12760// persons to whom the Software is furnished to do so, subject to the
12761// following conditions:
12762//
12763// The above copyright notice and this permission notice shall be included
12764// in all copies or substantial portions of the Software.
12765//
12766// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12767// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12768// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12769// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12770// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12771// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12772// USE OR OTHER DEALINGS IN THE SOFTWARE.
12773
12774// A bit simpler than readable streams.
12775// Implement an async ._write(chunk, cb), and it'll handle all
12776// the drain event emission and buffering.
12777
12778module.exports = Writable;
12779
12780/*<replacement>*/
12781var Buffer = require('buffer').Buffer;
12782/*</replacement>*/
12783
12784Writable.WritableState = WritableState;
12785
12786
12787/*<replacement>*/
12788var util = require('core-util-is');
12789util.inherits = require('inherits');
12790/*</replacement>*/
12791
12792var Stream = require('stream');
12793
12794util.inherits(Writable, Stream);
12795
12796function WriteReq(chunk, encoding, cb) {
12797 this.chunk = chunk;
12798 this.encoding = encoding;
12799 this.callback = cb;
12800}
12801
12802function WritableState(options, stream) {
12803 var Duplex = require('./_stream_duplex');
12804
12805 options = options || {};
12806
12807 // the point at which write() starts returning false
12808 // Note: 0 is a valid value, means that we always return false if
12809 // the entire buffer is not flushed immediately on write()
12810 var hwm = options.highWaterMark;
12811 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
12812 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
12813
12814 // object stream flag to indicate whether or not this stream
12815 // contains buffers or objects.
12816 this.objectMode = !!options.objectMode;
12817
12818 if (stream instanceof Duplex)
12819 this.objectMode = this.objectMode || !!options.writableObjectMode;
12820
12821 // cast to ints.
12822 this.highWaterMark = ~~this.highWaterMark;
12823
12824 this.needDrain = false;
12825 // at the start of calling end()
12826 this.ending = false;
12827 // when end() has been called, and returned
12828 this.ended = false;
12829 // when 'finish' is emitted
12830 this.finished = false;
12831
12832 // should we decode strings into buffers before passing to _write?
12833 // this is here so that some node-core streams can optimize string
12834 // handling at a lower level.
12835 var noDecode = options.decodeStrings === false;
12836 this.decodeStrings = !noDecode;
12837
12838 // Crypto is kind of old and crusty. Historically, its default string
12839 // encoding is 'binary' so we have to make this configurable.
12840 // Everything else in the universe uses 'utf8', though.
12841 this.defaultEncoding = options.defaultEncoding || 'utf8';
12842
12843 // not an actual buffer we keep track of, but a measurement
12844 // of how much we're waiting to get pushed to some underlying
12845 // socket or file.
12846 this.length = 0;
12847
12848 // a flag to see when we're in the middle of a write.
12849 this.writing = false;
12850
12851 // when true all writes will be buffered until .uncork() call
12852 this.corked = 0;
12853
12854 // a flag to be able to tell if the onwrite cb is called immediately,
12855 // or on a later tick. We set this to true at first, because any
12856 // actions that shouldn't happen until "later" should generally also
12857 // not happen before the first write call.
12858 this.sync = true;
12859
12860 // a flag to know if we're processing previously buffered items, which
12861 // may call the _write() callback in the same tick, so that we don't
12862 // end up in an overlapped onwrite situation.
12863 this.bufferProcessing = false;
12864
12865 // the callback that's passed to _write(chunk,cb)
12866 this.onwrite = function(er) {
12867 onwrite(stream, er);
12868 };
12869
12870 // the callback that the user supplies to write(chunk,encoding,cb)
12871 this.writecb = null;
12872
12873 // the amount that is being written when _write is called.
12874 this.writelen = 0;
12875
12876 this.buffer = [];
12877
12878 // number of pending user-supplied write callbacks
12879 // this must be 0 before 'finish' can be emitted
12880 this.pendingcb = 0;
12881
12882 // emit prefinish if the only thing we're waiting for is _write cbs
12883 // This is relevant for synchronous Transform streams
12884 this.prefinished = false;
12885
12886 // True if the error was already emitted and should not be thrown again
12887 this.errorEmitted = false;
12888}
12889
12890function Writable(options) {
12891 var Duplex = require('./_stream_duplex');
12892
12893 // Writable ctor is applied to Duplexes, though they're not
12894 // instanceof Writable, they're instanceof Readable.
12895 if (!(this instanceof Writable) && !(this instanceof Duplex))
12896 return new Writable(options);
12897
12898 this._writableState = new WritableState(options, this);
12899
12900 // legacy.
12901 this.writable = true;
12902
12903 Stream.call(this);
12904}
12905
12906// Otherwise people can pipe Writable streams, which is just wrong.
12907Writable.prototype.pipe = function() {
12908 this.emit('error', new Error('Cannot pipe. Not readable.'));
12909};
12910
12911
12912function writeAfterEnd(stream, state, cb) {
12913 var er = new Error('write after end');
12914 // TODO: defer error events consistently everywhere, not just the cb
12915 stream.emit('error', er);
12916 process.nextTick(function() {
12917 cb(er);
12918 });
12919}
12920
12921// If we get something that is not a buffer, string, null, or undefined,
12922// and we're not in objectMode, then that's an error.
12923// Otherwise stream chunks are all considered to be of length=1, and the
12924// watermarks determine how many objects to keep in the buffer, rather than
12925// how many bytes or characters.
12926function validChunk(stream, state, chunk, cb) {
12927 var valid = true;
12928 if (!util.isBuffer(chunk) &&
12929 !util.isString(chunk) &&
12930 !util.isNullOrUndefined(chunk) &&
12931 !state.objectMode) {
12932 var er = new TypeError('Invalid non-string/buffer chunk');
12933 stream.emit('error', er);
12934 process.nextTick(function() {
12935 cb(er);
12936 });
12937 valid = false;
12938 }
12939 return valid;
12940}
12941
12942Writable.prototype.write = function(chunk, encoding, cb) {
12943 var state = this._writableState;
12944 var ret = false;
12945
12946 if (util.isFunction(encoding)) {
12947 cb = encoding;
12948 encoding = null;
12949 }
12950
12951 if (util.isBuffer(chunk))
12952 encoding = 'buffer';
12953 else if (!encoding)
12954 encoding = state.defaultEncoding;
12955
12956 if (!util.isFunction(cb))
12957 cb = function() {};
12958
12959 if (state.ended)
12960 writeAfterEnd(this, state, cb);
12961 else if (validChunk(this, state, chunk, cb)) {
12962 state.pendingcb++;
12963 ret = writeOrBuffer(this, state, chunk, encoding, cb);
12964 }
12965
12966 return ret;
12967};
12968
12969Writable.prototype.cork = function() {
12970 var state = this._writableState;
12971
12972 state.corked++;
12973};
12974
12975Writable.prototype.uncork = function() {
12976 var state = this._writableState;
12977
12978 if (state.corked) {
12979 state.corked--;
12980
12981 if (!state.writing &&
12982 !state.corked &&
12983 !state.finished &&
12984 !state.bufferProcessing &&
12985 state.buffer.length)
12986 clearBuffer(this, state);
12987 }
12988};
12989
12990function decodeChunk(state, chunk, encoding) {
12991 if (!state.objectMode &&
12992 state.decodeStrings !== false &&
12993 util.isString(chunk)) {
12994 chunk = new Buffer(chunk, encoding);
12995 }
12996 return chunk;
12997}
12998
12999// if we're already writing something, then just put this
13000// in the queue, and wait our turn. Otherwise, call _write
13001// If we return false, then we need a drain event, so set that flag.
13002function writeOrBuffer(stream, state, chunk, encoding, cb) {
13003 chunk = decodeChunk(state, chunk, encoding);
13004 if (util.isBuffer(chunk))
13005 encoding = 'buffer';
13006 var len = state.objectMode ? 1 : chunk.length;
13007
13008 state.length += len;
13009
13010 var ret = state.length < state.highWaterMark;
13011 // we must ensure that previous needDrain will not be reset to false.
13012 if (!ret)
13013 state.needDrain = true;
13014
13015 if (state.writing || state.corked)
13016 state.buffer.push(new WriteReq(chunk, encoding, cb));
13017 else
13018 doWrite(stream, state, false, len, chunk, encoding, cb);
13019
13020 return ret;
13021}
13022
13023function doWrite(stream, state, writev, len, chunk, encoding, cb) {
13024 state.writelen = len;
13025 state.writecb = cb;
13026 state.writing = true;
13027 state.sync = true;
13028 if (writev)
13029 stream._writev(chunk, state.onwrite);
13030 else
13031 stream._write(chunk, encoding, state.onwrite);
13032 state.sync = false;
13033}
13034
13035function onwriteError(stream, state, sync, er, cb) {
13036 if (sync)
13037 process.nextTick(function() {
13038 state.pendingcb--;
13039 cb(er);
13040 });
13041 else {
13042 state.pendingcb--;
13043 cb(er);
13044 }
13045
13046 stream._writableState.errorEmitted = true;
13047 stream.emit('error', er);
13048}
13049
13050function onwriteStateUpdate(state) {
13051 state.writing = false;
13052 state.writecb = null;
13053 state.length -= state.writelen;
13054 state.writelen = 0;
13055}
13056
13057function onwrite(stream, er) {
13058 var state = stream._writableState;
13059 var sync = state.sync;
13060 var cb = state.writecb;
13061
13062 onwriteStateUpdate(state);
13063
13064 if (er)
13065 onwriteError(stream, state, sync, er, cb);
13066 else {
13067 // Check if we're actually ready to finish, but don't emit yet
13068 var finished = needFinish(stream, state);
13069
13070 if (!finished &&
13071 !state.corked &&
13072 !state.bufferProcessing &&
13073 state.buffer.length) {
13074 clearBuffer(stream, state);
13075 }
13076
13077 if (sync) {
13078 process.nextTick(function() {
13079 afterWrite(stream, state, finished, cb);
13080 });
13081 } else {
13082 afterWrite(stream, state, finished, cb);
13083 }
13084 }
13085}
13086
13087function afterWrite(stream, state, finished, cb) {
13088 if (!finished)
13089 onwriteDrain(stream, state);
13090 state.pendingcb--;
13091 cb();
13092 finishMaybe(stream, state);
13093}
13094
13095// Must force callback to be called on nextTick, so that we don't
13096// emit 'drain' before the write() consumer gets the 'false' return
13097// value, and has a chance to attach a 'drain' listener.
13098function onwriteDrain(stream, state) {
13099 if (state.length === 0 && state.needDrain) {
13100 state.needDrain = false;
13101 stream.emit('drain');
13102 }
13103}
13104
13105
13106// if there's something in the buffer waiting, then process it
13107function clearBuffer(stream, state) {
13108 state.bufferProcessing = true;
13109
13110 if (stream._writev && state.buffer.length > 1) {
13111 // Fast case, write everything using _writev()
13112 var cbs = [];
13113 for (var c = 0; c < state.buffer.length; c++)
13114 cbs.push(state.buffer[c].callback);
13115
13116 // count the one we are adding, as well.
13117 // TODO(isaacs) clean this up
13118 state.pendingcb++;
13119 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
13120 for (var i = 0; i < cbs.length; i++) {
13121 state.pendingcb--;
13122 cbs[i](err);
13123 }
13124 });
13125
13126 // Clear buffer
13127 state.buffer = [];
13128 } else {
13129 // Slow case, write chunks one-by-one
13130 for (var c = 0; c < state.buffer.length; c++) {
13131 var entry = state.buffer[c];
13132 var chunk = entry.chunk;
13133 var encoding = entry.encoding;
13134 var cb = entry.callback;
13135 var len = state.objectMode ? 1 : chunk.length;
13136
13137 doWrite(stream, state, false, len, chunk, encoding, cb);
13138
13139 // if we didn't call the onwrite immediately, then
13140 // it means that we need to wait until it does.
13141 // also, that means that the chunk and cb are currently
13142 // being processed, so move the buffer counter past them.
13143 if (state.writing) {
13144 c++;
13145 break;
13146 }
13147 }
13148
13149 if (c < state.buffer.length)
13150 state.buffer = state.buffer.slice(c);
13151 else
13152 state.buffer.length = 0;
13153 }
13154
13155 state.bufferProcessing = false;
13156}
13157
13158Writable.prototype._write = function(chunk, encoding, cb) {
13159 cb(new Error('not implemented'));
13160
13161};
13162
13163Writable.prototype._writev = null;
13164
13165Writable.prototype.end = function(chunk, encoding, cb) {
13166 var state = this._writableState;
13167
13168 if (util.isFunction(chunk)) {
13169 cb = chunk;
13170 chunk = null;
13171 encoding = null;
13172 } else if (util.isFunction(encoding)) {
13173 cb = encoding;
13174 encoding = null;
13175 }
13176
13177 if (!util.isNullOrUndefined(chunk))
13178 this.write(chunk, encoding);
13179
13180 // .end() fully uncorks
13181 if (state.corked) {
13182 state.corked = 1;
13183 this.uncork();
13184 }
13185
13186 // ignore unnecessary end() calls.
13187 if (!state.ending && !state.finished)
13188 endWritable(this, state, cb);
13189};
13190
13191
13192function needFinish(stream, state) {
13193 return (state.ending &&
13194 state.length === 0 &&
13195 !state.finished &&
13196 !state.writing);
13197}
13198
13199function prefinish(stream, state) {
13200 if (!state.prefinished) {
13201 state.prefinished = true;
13202 stream.emit('prefinish');
13203 }
13204}
13205
13206function finishMaybe(stream, state) {
13207 var need = needFinish(stream, state);
13208 if (need) {
13209 if (state.pendingcb === 0) {
13210 prefinish(stream, state);
13211 state.finished = true;
13212 stream.emit('finish');
13213 } else
13214 prefinish(stream, state);
13215 }
13216 return need;
13217}
13218
13219function endWritable(stream, state, cb) {
13220 state.ending = true;
13221 finishMaybe(stream, state);
13222 if (cb) {
13223 if (state.finished)
13224 process.nextTick(cb);
13225 else
13226 stream.once('finish', cb);
13227 }
13228 state.ended = true;
13229}
13230
13231}).call(this,require('_process'))
13232},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
13233(function (Buffer){
13234// Copyright Joyent, Inc. and other Node contributors.
13235//
13236// Permission is hereby granted, free of charge, to any person obtaining a
13237// copy of this software and associated documentation files (the
13238// "Software"), to deal in the Software without restriction, including
13239// without limitation the rights to use, copy, modify, merge, publish,
13240// distribute, sublicense, and/or sell copies of the Software, and to permit
13241// persons to whom the Software is furnished to do so, subject to the
13242// following conditions:
13243//
13244// The above copyright notice and this permission notice shall be included
13245// in all copies or substantial portions of the Software.
13246//
13247// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13248// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13249// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13250// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13251// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13252// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13253// USE OR OTHER DEALINGS IN THE SOFTWARE.
13254
13255// NOTE: These type checking functions intentionally don't use `instanceof`
13256// because it is fragile and can be easily faked with `Object.create()`.
13257function isArray(ar) {
13258 return Array.isArray(ar);
13259}
13260exports.isArray = isArray;
13261
13262function isBoolean(arg) {
13263 return typeof arg === 'boolean';
13264}
13265exports.isBoolean = isBoolean;
13266
13267function isNull(arg) {
13268 return arg === null;
13269}
13270exports.isNull = isNull;
13271
13272function isNullOrUndefined(arg) {
13273 return arg == null;
13274}
13275exports.isNullOrUndefined = isNullOrUndefined;
13276
13277function isNumber(arg) {
13278 return typeof arg === 'number';
13279}
13280exports.isNumber = isNumber;
13281
13282function isString(arg) {
13283 return typeof arg === 'string';
13284}
13285exports.isString = isString;
13286
13287function isSymbol(arg) {
13288 return typeof arg === 'symbol';
13289}
13290exports.isSymbol = isSymbol;
13291
13292function isUndefined(arg) {
13293 return arg === void 0;
13294}
13295exports.isUndefined = isUndefined;
13296
13297function isRegExp(re) {
13298 return isObject(re) && objectToString(re) === '[object RegExp]';
13299}
13300exports.isRegExp = isRegExp;
13301
13302function isObject(arg) {
13303 return typeof arg === 'object' && arg !== null;
13304}
13305exports.isObject = isObject;
13306
13307function isDate(d) {
13308 return isObject(d) && objectToString(d) === '[object Date]';
13309}
13310exports.isDate = isDate;
13311
13312function isError(e) {
13313 return isObject(e) &&
13314 (objectToString(e) === '[object Error]' || e instanceof Error);
13315}
13316exports.isError = isError;
13317
13318function isFunction(arg) {
13319 return typeof arg === 'function';
13320}
13321exports.isFunction = isFunction;
13322
13323function isPrimitive(arg) {
13324 return arg === null ||
13325 typeof arg === 'boolean' ||
13326 typeof arg === 'number' ||
13327 typeof arg === 'string' ||
13328 typeof arg === 'symbol' || // ES6 symbol
13329 typeof arg === 'undefined';
13330}
13331exports.isPrimitive = isPrimitive;
13332
13333function isBuffer(arg) {
13334 return Buffer.isBuffer(arg);
13335}
13336exports.isBuffer = isBuffer;
13337
13338function objectToString(o) {
13339 return Object.prototype.toString.call(o);
13340}
13341}).call(this,require("buffer").Buffer)
13342},{"buffer":7}],22:[function(require,module,exports){
13343module.exports = require("./lib/_stream_passthrough.js")
13344
13345},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
13346exports = module.exports = require('./lib/_stream_readable.js');
13347exports.Stream = require('stream');
13348exports.Readable = exports;
13349exports.Writable = require('./lib/_stream_writable.js');
13350exports.Duplex = require('./lib/_stream_duplex.js');
13351exports.Transform = require('./lib/_stream_transform.js');
13352exports.PassThrough = require('./lib/_stream_passthrough.js');
13353
13354},{"./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){
13355module.exports = require("./lib/_stream_transform.js")
13356
13357},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
13358module.exports = require("./lib/_stream_writable.js")
13359
13360},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
13361// Copyright Joyent, Inc. and other Node contributors.
13362//
13363// Permission is hereby granted, free of charge, to any person obtaining a
13364// copy of this software and associated documentation files (the
13365// "Software"), to deal in the Software without restriction, including
13366// without limitation the rights to use, copy, modify, merge, publish,
13367// distribute, sublicense, and/or sell copies of the Software, and to permit
13368// persons to whom the Software is furnished to do so, subject to the
13369// following conditions:
13370//
13371// The above copyright notice and this permission notice shall be included
13372// in all copies or substantial portions of the Software.
13373//
13374// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13375// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13376// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13377// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13378// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13379// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13380// USE OR OTHER DEALINGS IN THE SOFTWARE.
13381
13382module.exports = Stream;
13383
13384var EE = require('events').EventEmitter;
13385var inherits = require('inherits');
13386
13387inherits(Stream, EE);
13388Stream.Readable = require('readable-stream/readable.js');
13389Stream.Writable = require('readable-stream/writable.js');
13390Stream.Duplex = require('readable-stream/duplex.js');
13391Stream.Transform = require('readable-stream/transform.js');
13392Stream.PassThrough = require('readable-stream/passthrough.js');
13393
13394// Backwards-compat with node 0.4.x
13395Stream.Stream = Stream;
13396
13397
13398
13399// old-style streams. Note that the pipe method (the only relevant
13400// part of this class) is overridden in the Readable class.
13401
13402function Stream() {
13403 EE.call(this);
13404}
13405
13406Stream.prototype.pipe = function(dest, options) {
13407 var source = this;
13408
13409 function ondata(chunk) {
13410 if (dest.writable) {
13411 if (false === dest.write(chunk) && source.pause) {
13412 source.pause();
13413 }
13414 }
13415 }
13416
13417 source.on('data', ondata);
13418
13419 function ondrain() {
13420 if (source.readable && source.resume) {
13421 source.resume();
13422 }
13423 }
13424
13425 dest.on('drain', ondrain);
13426
13427 // If the 'end' option is not supplied, dest.end() will be called when
13428 // source gets the 'end' or 'close' events. Only dest.end() once.
13429 if (!dest._isStdio && (!options || options.end !== false)) {
13430 source.on('end', onend);
13431 source.on('close', onclose);
13432 }
13433
13434 var didOnEnd = false;
13435 function onend() {
13436 if (didOnEnd) return;
13437 didOnEnd = true;
13438
13439 dest.end();
13440 }
13441
13442
13443 function onclose() {
13444 if (didOnEnd) return;
13445 didOnEnd = true;
13446
13447 if (typeof dest.destroy === 'function') dest.destroy();
13448 }
13449
13450 // don't leave dangling pipes when there are errors.
13451 function onerror(er) {
13452 cleanup();
13453 if (EE.listenerCount(this, 'error') === 0) {
13454 throw er; // Unhandled stream error in pipe.
13455 }
13456 }
13457
13458 source.on('error', onerror);
13459 dest.on('error', onerror);
13460
13461 // remove all the event listeners that were added.
13462 function cleanup() {
13463 source.removeListener('data', ondata);
13464 dest.removeListener('drain', ondrain);
13465
13466 source.removeListener('end', onend);
13467 source.removeListener('close', onclose);
13468
13469 source.removeListener('error', onerror);
13470 dest.removeListener('error', onerror);
13471
13472 source.removeListener('end', cleanup);
13473 source.removeListener('close', cleanup);
13474
13475 dest.removeListener('close', cleanup);
13476 }
13477
13478 source.on('end', cleanup);
13479 source.on('close', cleanup);
13480
13481 dest.on('close', cleanup);
13482
13483 dest.emit('pipe', source);
13484
13485 // Allow for unix-like usage: A.pipe(B).pipe(C)
13486 return dest;
13487};
13488
13489},{"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){
13490// Copyright Joyent, Inc. and other Node contributors.
13491//
13492// Permission is hereby granted, free of charge, to any person obtaining a
13493// copy of this software and associated documentation files (the
13494// "Software"), to deal in the Software without restriction, including
13495// without limitation the rights to use, copy, modify, merge, publish,
13496// distribute, sublicense, and/or sell copies of the Software, and to permit
13497// persons to whom the Software is furnished to do so, subject to the
13498// following conditions:
13499//
13500// The above copyright notice and this permission notice shall be included
13501// in all copies or substantial portions of the Software.
13502//
13503// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13504// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13505// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13506// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13507// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13508// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13509// USE OR OTHER DEALINGS IN THE SOFTWARE.
13510
13511var Buffer = require('buffer').Buffer;
13512
13513var isBufferEncoding = Buffer.isEncoding
13514 || function(encoding) {
13515 switch (encoding && encoding.toLowerCase()) {
13516 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;
13517 default: return false;
13518 }
13519 }
13520
13521
13522function assertEncoding(encoding) {
13523 if (encoding && !isBufferEncoding(encoding)) {
13524 throw new Error('Unknown encoding: ' + encoding);
13525 }
13526}
13527
13528// StringDecoder provides an interface for efficiently splitting a series of
13529// buffers into a series of JS strings without breaking apart multi-byte
13530// characters. CESU-8 is handled as part of the UTF-8 encoding.
13531//
13532// @TODO Handling all encodings inside a single object makes it very difficult
13533// to reason about this code, so it should be split up in the future.
13534// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
13535// points as used by CESU-8.
13536var StringDecoder = exports.StringDecoder = function(encoding) {
13537 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
13538 assertEncoding(encoding);
13539 switch (this.encoding) {
13540 case 'utf8':
13541 // CESU-8 represents each of Surrogate Pair by 3-bytes
13542 this.surrogateSize = 3;
13543 break;
13544 case 'ucs2':
13545 case 'utf16le':
13546 // UTF-16 represents each of Surrogate Pair by 2-bytes
13547 this.surrogateSize = 2;
13548 this.detectIncompleteChar = utf16DetectIncompleteChar;
13549 break;
13550 case 'base64':
13551 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
13552 this.surrogateSize = 3;
13553 this.detectIncompleteChar = base64DetectIncompleteChar;
13554 break;
13555 default:
13556 this.write = passThroughWrite;
13557 return;
13558 }
13559
13560 // Enough space to store all bytes of a single character. UTF-8 needs 4
13561 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
13562 this.charBuffer = new Buffer(6);
13563 // Number of bytes received for the current incomplete multi-byte character.
13564 this.charReceived = 0;
13565 // Number of bytes expected for the current incomplete multi-byte character.
13566 this.charLength = 0;
13567};
13568
13569
13570// write decodes the given buffer and returns it as JS string that is
13571// guaranteed to not contain any partial multi-byte characters. Any partial
13572// character found at the end of the buffer is buffered up, and will be
13573// returned when calling write again with the remaining bytes.
13574//
13575// Note: Converting a Buffer containing an orphan surrogate to a String
13576// currently works, but converting a String to a Buffer (via `new Buffer`, or
13577// Buffer#write) will replace incomplete surrogates with the unicode
13578// replacement character. See https://codereview.chromium.org/121173009/ .
13579StringDecoder.prototype.write = function(buffer) {
13580 var charStr = '';
13581 // if our last write ended with an incomplete multibyte character
13582 while (this.charLength) {
13583 // determine how many remaining bytes this buffer has to offer for this char
13584 var available = (buffer.length >= this.charLength - this.charReceived) ?
13585 this.charLength - this.charReceived :
13586 buffer.length;
13587
13588 // add the new bytes to the char buffer
13589 buffer.copy(this.charBuffer, this.charReceived, 0, available);
13590 this.charReceived += available;
13591
13592 if (this.charReceived < this.charLength) {
13593 // still not enough chars in this buffer? wait for more ...
13594 return '';
13595 }
13596
13597 // remove bytes belonging to the current character from the buffer
13598 buffer = buffer.slice(available, buffer.length);
13599
13600 // get the character that was split
13601 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
13602
13603 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
13604 var charCode = charStr.charCodeAt(charStr.length - 1);
13605 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
13606 this.charLength += this.surrogateSize;
13607 charStr = '';
13608 continue;
13609 }
13610 this.charReceived = this.charLength = 0;
13611
13612 // if there are no more bytes in this buffer, just emit our char
13613 if (buffer.length === 0) {
13614 return charStr;
13615 }
13616 break;
13617 }
13618
13619 // determine and set charLength / charReceived
13620 this.detectIncompleteChar(buffer);
13621
13622 var end = buffer.length;
13623 if (this.charLength) {
13624 // buffer the incomplete character bytes we got
13625 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
13626 end -= this.charReceived;
13627 }
13628
13629 charStr += buffer.toString(this.encoding, 0, end);
13630
13631 var end = charStr.length - 1;
13632 var charCode = charStr.charCodeAt(end);
13633 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
13634 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
13635 var size = this.surrogateSize;
13636 this.charLength += size;
13637 this.charReceived += size;
13638 this.charBuffer.copy(this.charBuffer, size, 0, size);
13639 buffer.copy(this.charBuffer, 0, 0, size);
13640 return charStr.substring(0, end);
13641 }
13642
13643 // or just emit the charStr
13644 return charStr;
13645};
13646
13647// detectIncompleteChar determines if there is an incomplete UTF-8 character at
13648// the end of the given buffer. If so, it sets this.charLength to the byte
13649// length that character, and sets this.charReceived to the number of bytes
13650// that are available for this character.
13651StringDecoder.prototype.detectIncompleteChar = function(buffer) {
13652 // determine how many bytes we have to check at the end of this buffer
13653 var i = (buffer.length >= 3) ? 3 : buffer.length;
13654
13655 // Figure out if one of the last i bytes of our buffer announces an
13656 // incomplete char.
13657 for (; i > 0; i--) {
13658 var c = buffer[buffer.length - i];
13659
13660 // See http://en.wikipedia.org/wiki/UTF-8#Description
13661
13662 // 110XXXXX
13663 if (i == 1 && c >> 5 == 0x06) {
13664 this.charLength = 2;
13665 break;
13666 }
13667
13668 // 1110XXXX
13669 if (i <= 2 && c >> 4 == 0x0E) {
13670 this.charLength = 3;
13671 break;
13672 }
13673
13674 // 11110XXX
13675 if (i <= 3 && c >> 3 == 0x1E) {
13676 this.charLength = 4;
13677 break;
13678 }
13679 }
13680 this.charReceived = i;
13681};
13682
13683StringDecoder.prototype.end = function(buffer) {
13684 var res = '';
13685 if (buffer && buffer.length)
13686 res = this.write(buffer);
13687
13688 if (this.charReceived) {
13689 var cr = this.charReceived;
13690 var buf = this.charBuffer;
13691 var enc = this.encoding;
13692 res += buf.slice(0, cr).toString(enc);
13693 }
13694
13695 return res;
13696};
13697
13698function passThroughWrite(buffer) {
13699 return buffer.toString(this.encoding);
13700}
13701
13702function utf16DetectIncompleteChar(buffer) {
13703 this.charReceived = buffer.length % 2;
13704 this.charLength = this.charReceived ? 2 : 0;
13705}
13706
13707function base64DetectIncompleteChar(buffer) {
13708 this.charReceived = buffer.length % 3;
13709 this.charLength = this.charReceived ? 3 : 0;
13710}
13711
13712},{"buffer":7}],28:[function(require,module,exports){
13713module.exports = function isBuffer(arg) {
13714 return arg && typeof arg === 'object'
13715 && typeof arg.copy === 'function'
13716 && typeof arg.fill === 'function'
13717 && typeof arg.readUInt8 === 'function';
13718}
13719},{}],29:[function(require,module,exports){
13720(function (process,global){
13721// Copyright Joyent, Inc. and other Node contributors.
13722//
13723// Permission is hereby granted, free of charge, to any person obtaining a
13724// copy of this software and associated documentation files (the
13725// "Software"), to deal in the Software without restriction, including
13726// without limitation the rights to use, copy, modify, merge, publish,
13727// distribute, sublicense, and/or sell copies of the Software, and to permit
13728// persons to whom the Software is furnished to do so, subject to the
13729// following conditions:
13730//
13731// The above copyright notice and this permission notice shall be included
13732// in all copies or substantial portions of the Software.
13733//
13734// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13735// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13736// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13737// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13738// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13739// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13740// USE OR OTHER DEALINGS IN THE SOFTWARE.
13741
13742var formatRegExp = /%[sdj%]/g;
13743exports.format = function(f) {
13744 if (!isString(f)) {
13745 var objects = [];
13746 for (var i = 0; i < arguments.length; i++) {
13747 objects.push(inspect(arguments[i]));
13748 }
13749 return objects.join(' ');
13750 }
13751
13752 var i = 1;
13753 var args = arguments;
13754 var len = args.length;
13755 var str = String(f).replace(formatRegExp, function(x) {
13756 if (x === '%%') return '%';
13757 if (i >= len) return x;
13758 switch (x) {
13759 case '%s': return String(args[i++]);
13760 case '%d': return Number(args[i++]);
13761 case '%j':
13762 try {
13763 return JSON.stringify(args[i++]);
13764 } catch (_) {
13765 return '[Circular]';
13766 }
13767 default:
13768 return x;
13769 }
13770 });
13771 for (var x = args[i]; i < len; x = args[++i]) {
13772 if (isNull(x) || !isObject(x)) {
13773 str += ' ' + x;
13774 } else {
13775 str += ' ' + inspect(x);
13776 }
13777 }
13778 return str;
13779};
13780
13781
13782// Mark that a method should not be used.
13783// Returns a modified function which warns once by default.
13784// If --no-deprecation is set, then it is a no-op.
13785exports.deprecate = function(fn, msg) {
13786 // Allow for deprecating things in the process of starting up.
13787 if (isUndefined(global.process)) {
13788 return function() {
13789 return exports.deprecate(fn, msg).apply(this, arguments);
13790 };
13791 }
13792
13793 if (process.noDeprecation === true) {
13794 return fn;
13795 }
13796
13797 var warned = false;
13798 function deprecated() {
13799 if (!warned) {
13800 if (process.throwDeprecation) {
13801 throw new Error(msg);
13802 } else if (process.traceDeprecation) {
13803 console.trace(msg);
13804 } else {
13805 console.error(msg);
13806 }
13807 warned = true;
13808 }
13809 return fn.apply(this, arguments);
13810 }
13811
13812 return deprecated;
13813};
13814
13815
13816var debugs = {};
13817var debugEnviron;
13818exports.debuglog = function(set) {
13819 if (isUndefined(debugEnviron))
13820 debugEnviron = process.env.NODE_DEBUG || '';
13821 set = set.toUpperCase();
13822 if (!debugs[set]) {
13823 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13824 var pid = process.pid;
13825 debugs[set] = function() {
13826 var msg = exports.format.apply(exports, arguments);
13827 console.error('%s %d: %s', set, pid, msg);
13828 };
13829 } else {
13830 debugs[set] = function() {};
13831 }
13832 }
13833 return debugs[set];
13834};
13835
13836
13837/**
13838 * Echos the value of a value. Trys to print the value out
13839 * in the best way possible given the different types.
13840 *
13841 * @param {Object} obj The object to print out.
13842 * @param {Object} opts Optional options object that alters the output.
13843 */
13844/* legacy: obj, showHidden, depth, colors*/
13845function inspect(obj, opts) {
13846 // default options
13847 var ctx = {
13848 seen: [],
13849 stylize: stylizeNoColor
13850 };
13851 // legacy...
13852 if (arguments.length >= 3) ctx.depth = arguments[2];
13853 if (arguments.length >= 4) ctx.colors = arguments[3];
13854 if (isBoolean(opts)) {
13855 // legacy...
13856 ctx.showHidden = opts;
13857 } else if (opts) {
13858 // got an "options" object
13859 exports._extend(ctx, opts);
13860 }
13861 // set default options
13862 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13863 if (isUndefined(ctx.depth)) ctx.depth = 2;
13864 if (isUndefined(ctx.colors)) ctx.colors = false;
13865 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13866 if (ctx.colors) ctx.stylize = stylizeWithColor;
13867 return formatValue(ctx, obj, ctx.depth);
13868}
13869exports.inspect = inspect;
13870
13871
13872// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13873inspect.colors = {
13874 'bold' : [1, 22],
13875 'italic' : [3, 23],
13876 'underline' : [4, 24],
13877 'inverse' : [7, 27],
13878 'white' : [37, 39],
13879 'grey' : [90, 39],
13880 'black' : [30, 39],
13881 'blue' : [34, 39],
13882 'cyan' : [36, 39],
13883 'green' : [32, 39],
13884 'magenta' : [35, 39],
13885 'red' : [31, 39],
13886 'yellow' : [33, 39]
13887};
13888
13889// Don't use 'blue' not visible on cmd.exe
13890inspect.styles = {
13891 'special': 'cyan',
13892 'number': 'yellow',
13893 'boolean': 'yellow',
13894 'undefined': 'grey',
13895 'null': 'bold',
13896 'string': 'green',
13897 'date': 'magenta',
13898 // "name": intentionally not styling
13899 'regexp': 'red'
13900};
13901
13902
13903function stylizeWithColor(str, styleType) {
13904 var style = inspect.styles[styleType];
13905
13906 if (style) {
13907 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13908 '\u001b[' + inspect.colors[style][1] + 'm';
13909 } else {
13910 return str;
13911 }
13912}
13913
13914
13915function stylizeNoColor(str, styleType) {
13916 return str;
13917}
13918
13919
13920function arrayToHash(array) {
13921 var hash = {};
13922
13923 array.forEach(function(val, idx) {
13924 hash[val] = true;
13925 });
13926
13927 return hash;
13928}
13929
13930
13931function formatValue(ctx, value, recurseTimes) {
13932 // Provide a hook for user-specified inspect functions.
13933 // Check that value is an object with an inspect function on it
13934 if (ctx.customInspect &&
13935 value &&
13936 isFunction(value.inspect) &&
13937 // Filter out the util module, it's inspect function is special
13938 value.inspect !== exports.inspect &&
13939 // Also filter out any prototype objects using the circular check.
13940 !(value.constructor && value.constructor.prototype === value)) {
13941 var ret = value.inspect(recurseTimes, ctx);
13942 if (!isString(ret)) {
13943 ret = formatValue(ctx, ret, recurseTimes);
13944 }
13945 return ret;
13946 }
13947
13948 // Primitive types cannot have properties
13949 var primitive = formatPrimitive(ctx, value);
13950 if (primitive) {
13951 return primitive;
13952 }
13953
13954 // Look up the keys of the object.
13955 var keys = Object.keys(value);
13956 var visibleKeys = arrayToHash(keys);
13957
13958 if (ctx.showHidden) {
13959 keys = Object.getOwnPropertyNames(value);
13960 }
13961
13962 // IE doesn't make error fields non-enumerable
13963 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13964 if (isError(value)
13965 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13966 return formatError(value);
13967 }
13968
13969 // Some type of object without properties can be shortcutted.
13970 if (keys.length === 0) {
13971 if (isFunction(value)) {
13972 var name = value.name ? ': ' + value.name : '';
13973 return ctx.stylize('[Function' + name + ']', 'special');
13974 }
13975 if (isRegExp(value)) {
13976 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
13977 }
13978 if (isDate(value)) {
13979 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13980 }
13981 if (isError(value)) {
13982 return formatError(value);
13983 }
13984 }
13985
13986 var base = '', array = false, braces = ['{', '}'];
13987
13988 // Make Array say that they are Array
13989 if (isArray(value)) {
13990 array = true;
13991 braces = ['[', ']'];
13992 }
13993
13994 // Make functions say that they are functions
13995 if (isFunction(value)) {
13996 var n = value.name ? ': ' + value.name : '';
13997 base = ' [Function' + n + ']';
13998 }
13999
14000 // Make RegExps say that they are RegExps
14001 if (isRegExp(value)) {
14002 base = ' ' + RegExp.prototype.toString.call(value);
14003 }
14004
14005 // Make dates with properties first say the date
14006 if (isDate(value)) {
14007 base = ' ' + Date.prototype.toUTCString.call(value);
14008 }
14009
14010 // Make error with message first say the error
14011 if (isError(value)) {
14012 base = ' ' + formatError(value);
14013 }
14014
14015 if (keys.length === 0 && (!array || value.length == 0)) {
14016 return braces[0] + base + braces[1];
14017 }
14018
14019 if (recurseTimes < 0) {
14020 if (isRegExp(value)) {
14021 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
14022 } else {
14023 return ctx.stylize('[Object]', 'special');
14024 }
14025 }
14026
14027 ctx.seen.push(value);
14028
14029 var output;
14030 if (array) {
14031 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
14032 } else {
14033 output = keys.map(function(key) {
14034 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
14035 });
14036 }
14037
14038 ctx.seen.pop();
14039
14040 return reduceToSingleString(output, base, braces);
14041}
14042
14043
14044function formatPrimitive(ctx, value) {
14045 if (isUndefined(value))
14046 return ctx.stylize('undefined', 'undefined');
14047 if (isString(value)) {
14048 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
14049 .replace(/'/g, "\\'")
14050 .replace(/\\"/g, '"') + '\'';
14051 return ctx.stylize(simple, 'string');
14052 }
14053 if (isNumber(value))
14054 return ctx.stylize('' + value, 'number');
14055 if (isBoolean(value))
14056 return ctx.stylize('' + value, 'boolean');
14057 // For some reason typeof null is "object", so special case here.
14058 if (isNull(value))
14059 return ctx.stylize('null', 'null');
14060}
14061
14062
14063function formatError(value) {
14064 return '[' + Error.prototype.toString.call(value) + ']';
14065}
14066
14067
14068function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
14069 var output = [];
14070 for (var i = 0, l = value.length; i < l; ++i) {
14071 if (hasOwnProperty(value, String(i))) {
14072 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
14073 String(i), true));
14074 } else {
14075 output.push('');
14076 }
14077 }
14078 keys.forEach(function(key) {
14079 if (!key.match(/^\d+$/)) {
14080 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
14081 key, true));
14082 }
14083 });
14084 return output;
14085}
14086
14087
14088function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
14089 var name, str, desc;
14090 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
14091 if (desc.get) {
14092 if (desc.set) {
14093 str = ctx.stylize('[Getter/Setter]', 'special');
14094 } else {
14095 str = ctx.stylize('[Getter]', 'special');
14096 }
14097 } else {
14098 if (desc.set) {
14099 str = ctx.stylize('[Setter]', 'special');
14100 }
14101 }
14102 if (!hasOwnProperty(visibleKeys, key)) {
14103 name = '[' + key + ']';
14104 }
14105 if (!str) {
14106 if (ctx.seen.indexOf(desc.value) < 0) {
14107 if (isNull(recurseTimes)) {
14108 str = formatValue(ctx, desc.value, null);
14109 } else {
14110 str = formatValue(ctx, desc.value, recurseTimes - 1);
14111 }
14112 if (str.indexOf('\n') > -1) {
14113 if (array) {
14114 str = str.split('\n').map(function(line) {
14115 return ' ' + line;
14116 }).join('\n').substr(2);
14117 } else {
14118 str = '\n' + str.split('\n').map(function(line) {
14119 return ' ' + line;
14120 }).join('\n');
14121 }
14122 }
14123 } else {
14124 str = ctx.stylize('[Circular]', 'special');
14125 }
14126 }
14127 if (isUndefined(name)) {
14128 if (array && key.match(/^\d+$/)) {
14129 return str;
14130 }
14131 name = JSON.stringify('' + key);
14132 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
14133 name = name.substr(1, name.length - 2);
14134 name = ctx.stylize(name, 'name');
14135 } else {
14136 name = name.replace(/'/g, "\\'")
14137 .replace(/\\"/g, '"')
14138 .replace(/(^"|"$)/g, "'");
14139 name = ctx.stylize(name, 'string');
14140 }
14141 }
14142
14143 return name + ': ' + str;
14144}
14145
14146
14147function reduceToSingleString(output, base, braces) {
14148 var numLinesEst = 0;
14149 var length = output.reduce(function(prev, cur) {
14150 numLinesEst++;
14151 if (cur.indexOf('\n') >= 0) numLinesEst++;
14152 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
14153 }, 0);
14154
14155 if (length > 60) {
14156 return braces[0] +
14157 (base === '' ? '' : base + '\n ') +
14158 ' ' +
14159 output.join(',\n ') +
14160 ' ' +
14161 braces[1];
14162 }
14163
14164 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
14165}
14166
14167
14168// NOTE: These type checking functions intentionally don't use `instanceof`
14169// because it is fragile and can be easily faked with `Object.create()`.
14170function isArray(ar) {
14171 return Array.isArray(ar);
14172}
14173exports.isArray = isArray;
14174
14175function isBoolean(arg) {
14176 return typeof arg === 'boolean';
14177}
14178exports.isBoolean = isBoolean;
14179
14180function isNull(arg) {
14181 return arg === null;
14182}
14183exports.isNull = isNull;
14184
14185function isNullOrUndefined(arg) {
14186 return arg == null;
14187}
14188exports.isNullOrUndefined = isNullOrUndefined;
14189
14190function isNumber(arg) {
14191 return typeof arg === 'number';
14192}
14193exports.isNumber = isNumber;
14194
14195function isString(arg) {
14196 return typeof arg === 'string';
14197}
14198exports.isString = isString;
14199
14200function isSymbol(arg) {
14201 return typeof arg === 'symbol';
14202}
14203exports.isSymbol = isSymbol;
14204
14205function isUndefined(arg) {
14206 return arg === void 0;
14207}
14208exports.isUndefined = isUndefined;
14209
14210function isRegExp(re) {
14211 return isObject(re) && objectToString(re) === '[object RegExp]';
14212}
14213exports.isRegExp = isRegExp;
14214
14215function isObject(arg) {
14216 return typeof arg === 'object' && arg !== null;
14217}
14218exports.isObject = isObject;
14219
14220function isDate(d) {
14221 return isObject(d) && objectToString(d) === '[object Date]';
14222}
14223exports.isDate = isDate;
14224
14225function isError(e) {
14226 return isObject(e) &&
14227 (objectToString(e) === '[object Error]' || e instanceof Error);
14228}
14229exports.isError = isError;
14230
14231function isFunction(arg) {
14232 return typeof arg === 'function';
14233}
14234exports.isFunction = isFunction;
14235
14236function isPrimitive(arg) {
14237 return arg === null ||
14238 typeof arg === 'boolean' ||
14239 typeof arg === 'number' ||
14240 typeof arg === 'string' ||
14241 typeof arg === 'symbol' || // ES6 symbol
14242 typeof arg === 'undefined';
14243}
14244exports.isPrimitive = isPrimitive;
14245
14246exports.isBuffer = require('./support/isBuffer');
14247
14248function objectToString(o) {
14249 return Object.prototype.toString.call(o);
14250}
14251
14252
14253function pad(n) {
14254 return n < 10 ? '0' + n.toString(10) : n.toString(10);
14255}
14256
14257
14258var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
14259 'Oct', 'Nov', 'Dec'];
14260
14261// 26 Feb 16:19:34
14262function timestamp() {
14263 var d = new Date();
14264 var time = [pad(d.getHours()),
14265 pad(d.getMinutes()),
14266 pad(d.getSeconds())].join(':');
14267 return [d.getDate(), months[d.getMonth()], time].join(' ');
14268}
14269
14270
14271// log is just a thin wrapper to console.log that prepends a timestamp
14272exports.log = function() {
14273 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
14274};
14275
14276
14277/**
14278 * Inherit the prototype methods from one constructor into another.
14279 *
14280 * The Function.prototype.inherits from lang.js rewritten as a standalone
14281 * function (not on Function.prototype). NOTE: If this file is to be loaded
14282 * during bootstrapping this function needs to be rewritten using some native
14283 * functions as prototype setup using normal JavaScript does not work as
14284 * expected during bootstrapping (see mirror.js in r114903).
14285 *
14286 * @param {function} ctor Constructor function which needs to inherit the
14287 * prototype.
14288 * @param {function} superCtor Constructor function to inherit prototype from.
14289 */
14290exports.inherits = require('inherits');
14291
14292exports._extend = function(origin, add) {
14293 // Don't do anything if add isn't an object
14294 if (!add || !isObject(add)) return origin;
14295
14296 var keys = Object.keys(add);
14297 var i = keys.length;
14298 while (i--) {
14299 origin[keys[i]] = add[keys[i]];
14300 }
14301 return origin;
14302};
14303
14304function hasOwnProperty(obj, prop) {
14305 return Object.prototype.hasOwnProperty.call(obj, prop);
14306}
14307
14308}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
14309},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
14310// Base58 encoding/decoding
14311// Originally written by Mike Hearn for BitcoinJ
14312// Copyright (c) 2011 Google Inc
14313// Ported to JavaScript by Stefan Thomas
14314// Merged Buffer refactorings from base58-native by Stephen Pair
14315// Copyright (c) 2013 BitPay Inc
14316
14317var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
14318var ALPHABET_MAP = {}
14319for(var i = 0; i < ALPHABET.length; i++) {
14320 ALPHABET_MAP[ALPHABET.charAt(i)] = i
14321}
14322var BASE = 58
14323
14324function encode(buffer) {
14325 if (buffer.length === 0) return ''
14326
14327 var i, j, digits = [0]
14328 for (i = 0; i < buffer.length; i++) {
14329 for (j = 0; j < digits.length; j++) digits[j] <<= 8
14330
14331 digits[0] += buffer[i]
14332
14333 var carry = 0
14334 for (j = 0; j < digits.length; ++j) {
14335 digits[j] += carry
14336
14337 carry = (digits[j] / BASE) | 0
14338 digits[j] %= BASE
14339 }
14340
14341 while (carry) {
14342 digits.push(carry % BASE)
14343
14344 carry = (carry / BASE) | 0
14345 }
14346 }
14347
14348 // deal with leading zeros
14349 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
14350
14351 // convert digits to a string
14352 var stringOutput = ""
14353 for (var i = digits.length - 1; i >= 0; i--) {
14354 stringOutput = stringOutput + ALPHABET[digits[i]]
14355 }
14356 return stringOutput
14357}
14358
14359function decode(string) {
14360 if (string.length === 0) return []
14361
14362 var i, j, bytes = [0]
14363 for (i = 0; i < string.length; i++) {
14364 var c = string[i]
14365 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
14366
14367 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
14368 bytes[0] += ALPHABET_MAP[c]
14369
14370 var carry = 0
14371 for (j = 0; j < bytes.length; ++j) {
14372 bytes[j] += carry
14373
14374 carry = bytes[j] >> 8
14375 bytes[j] &= 0xff
14376 }
14377
14378 while (carry) {
14379 bytes.push(carry & 0xff)
14380
14381 carry >>= 8
14382 }
14383 }
14384
14385 // deal with leading zeros
14386 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
14387
14388 return bytes.reverse()
14389}
14390
14391module.exports = {
14392 encode: encode,
14393 decode: decode
14394}
14395
14396},{}],31:[function(require,module,exports){
14397(function (Buffer){
14398'use strict'
14399
14400var base58 = require('bs58')
14401var createHash = require('create-hash')
14402
14403// SHA256(SHA256(buffer))
14404function sha256x2 (buffer) {
14405 buffer = createHash('sha256').update(buffer).digest()
14406 return createHash('sha256').update(buffer).digest()
14407}
14408
14409// Encode a buffer as a base58-check encoded string
14410function encode (payload) {
14411 var checksum = sha256x2(payload).slice(0, 4)
14412
14413 return base58.encode(Buffer.concat([
14414 payload,
14415 checksum
14416 ]))
14417}
14418
14419// Decode a base58-check encoded string to a buffer
14420function decode (string) {
14421 var buffer = new Buffer(base58.decode(string))
14422
14423 var payload = buffer.slice(0, -4)
14424 var checksum = buffer.slice(-4)
14425 var newChecksum = sha256x2(payload).slice(0, 4)
14426
14427 for (var i = 0; i < newChecksum.length; ++i) {
14428 if (newChecksum[i] === checksum[i]) continue
14429
14430 throw new Error('Invalid checksum')
14431 }
14432
14433 return payload
14434}
14435
14436module.exports = {
14437 encode: encode,
14438 decode: decode
14439}
14440
14441}).call(this,require("buffer").Buffer)
14442},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
14443(function (Buffer){
14444'use strict';
14445var inherits = require('inherits')
14446var md5 = require('./md5')
14447var rmd160 = require('ripemd160')
14448var sha = require('sha.js')
14449
14450var Transform = require('stream').Transform
14451
14452function HashNoConstructor(hash) {
14453 Transform.call(this)
14454
14455 this._hash = hash
14456 this.buffers = []
14457}
14458
14459inherits(HashNoConstructor, Transform)
14460
14461HashNoConstructor.prototype._transform = function (data, _, next) {
14462 this.buffers.push(data)
14463
14464 next()
14465}
14466
14467HashNoConstructor.prototype._flush = function (next) {
14468 this.push(this.digest())
14469 next()
14470}
14471
14472HashNoConstructor.prototype.update = function (data, enc) {
14473 if (typeof data === 'string') {
14474 data = new Buffer(data, enc)
14475 }
14476
14477 this.buffers.push(data)
14478 return this
14479}
14480
14481HashNoConstructor.prototype.digest = function (enc) {
14482 var buf = Buffer.concat(this.buffers)
14483 var r = this._hash(buf)
14484 this.buffers = null
14485
14486 return enc ? r.toString(enc) : r
14487}
14488
14489function Hash(hash) {
14490 Transform.call(this)
14491
14492 this._hash = hash
14493}
14494
14495inherits(Hash, Transform)
14496
14497Hash.prototype._transform = function (data, enc, next) {
14498 if (enc) data = new Buffer(data, enc)
14499
14500 this._hash.update(data)
14501
14502 next()
14503}
14504
14505Hash.prototype._flush = function (next) {
14506 this.push(this._hash.digest())
14507 this._hash = null
14508
14509 next()
14510}
14511
14512Hash.prototype.update = function (data, enc) {
14513 if (typeof data === 'string') {
14514 data = new Buffer(data, enc)
14515 }
14516
14517 this._hash.update(data)
14518 return this
14519}
14520
14521Hash.prototype.digest = function (enc) {
14522 var outData = this._hash.digest()
14523
14524 return enc ? outData.toString(enc) : outData
14525}
14526
14527module.exports = function createHash (alg) {
14528 if ('md5' === alg) return new HashNoConstructor(md5)
14529 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
14530
14531 return new Hash(sha(alg))
14532}
14533
14534}).call(this,require("buffer").Buffer)
14535},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
14536(function (Buffer){
14537'use strict';
14538var intSize = 4;
14539var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
14540var chrsz = 8;
14541
14542function toArray(buf, bigEndian) {
14543 if ((buf.length % intSize) !== 0) {
14544 var len = buf.length + (intSize - (buf.length % intSize));
14545 buf = Buffer.concat([buf, zeroBuffer], len);
14546 }
14547
14548 var arr = [];
14549 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
14550 for (var i = 0; i < buf.length; i += intSize) {
14551 arr.push(fn.call(buf, i));
14552 }
14553 return arr;
14554}
14555
14556function toBuffer(arr, size, bigEndian) {
14557 var buf = new Buffer(size);
14558 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
14559 for (var i = 0; i < arr.length; i++) {
14560 fn.call(buf, arr[i], i * 4, true);
14561 }
14562 return buf;
14563}
14564
14565function hash(buf, fn, hashSize, bigEndian) {
14566 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
14567 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
14568 return toBuffer(arr, hashSize, bigEndian);
14569}
14570exports.hash = hash;
14571}).call(this,require("buffer").Buffer)
14572},{"buffer":7}],34:[function(require,module,exports){
14573'use strict';
14574/*
14575 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
14576 * Digest Algorithm, as defined in RFC 1321.
14577 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
14578 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
14579 * Distributed under the BSD License
14580 * See http://pajhome.org.uk/crypt/md5 for more info.
14581 */
14582
14583var helpers = require('./helpers');
14584
14585/*
14586 * Calculate the MD5 of an array of little-endian words, and a bit length
14587 */
14588function core_md5(x, len)
14589{
14590 /* append padding */
14591 x[len >> 5] |= 0x80 << ((len) % 32);
14592 x[(((len + 64) >>> 9) << 4) + 14] = len;
14593
14594 var a = 1732584193;
14595 var b = -271733879;
14596 var c = -1732584194;
14597 var d = 271733878;
14598
14599 for(var i = 0; i < x.length; i += 16)
14600 {
14601 var olda = a;
14602 var oldb = b;
14603 var oldc = c;
14604 var oldd = d;
14605
14606 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
14607 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
14608 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
14609 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
14610 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
14611 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
14612 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
14613 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
14614 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
14615 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
14616 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
14617 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
14618 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
14619 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
14620 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
14621 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
14622
14623 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
14624 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
14625 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
14626 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
14627 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
14628 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
14629 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
14630 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
14631 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
14632 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
14633 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
14634 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
14635 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
14636 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
14637 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
14638 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
14639
14640 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
14641 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
14642 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
14643 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
14644 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
14645 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
14646 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
14647 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
14648 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
14649 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
14650 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
14651 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
14652 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
14653 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
14654 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
14655 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
14656
14657 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
14658 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
14659 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
14660 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
14661 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
14662 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
14663 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
14664 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
14665 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
14666 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
14667 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
14668 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
14669 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
14670 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
14671 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
14672 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
14673
14674 a = safe_add(a, olda);
14675 b = safe_add(b, oldb);
14676 c = safe_add(c, oldc);
14677 d = safe_add(d, oldd);
14678 }
14679 return Array(a, b, c, d);
14680
14681}
14682
14683/*
14684 * These functions implement the four basic operations the algorithm uses.
14685 */
14686function md5_cmn(q, a, b, x, s, t)
14687{
14688 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
14689}
14690function md5_ff(a, b, c, d, x, s, t)
14691{
14692 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
14693}
14694function md5_gg(a, b, c, d, x, s, t)
14695{
14696 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
14697}
14698function md5_hh(a, b, c, d, x, s, t)
14699{
14700 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
14701}
14702function md5_ii(a, b, c, d, x, s, t)
14703{
14704 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
14705}
14706
14707/*
14708 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
14709 * to work around bugs in some JS interpreters.
14710 */
14711function safe_add(x, y)
14712{
14713 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
14714 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
14715 return (msw << 16) | (lsw & 0xFFFF);
14716}
14717
14718/*
14719 * Bitwise rotate a 32-bit number to the left.
14720 */
14721function bit_rol(num, cnt)
14722{
14723 return (num << cnt) | (num >>> (32 - cnt));
14724}
14725
14726module.exports = function md5(buf) {
14727 return helpers.hash(buf, core_md5, 16);
14728};
14729},{"./helpers":33}],35:[function(require,module,exports){
14730arguments[4][12][0].apply(exports,arguments)
14731},{"dup":12}],36:[function(require,module,exports){
14732(function (Buffer){
14733/*
14734CryptoJS v3.1.2
14735code.google.com/p/crypto-js
14736(c) 2009-2013 by Jeff Mott. All rights reserved.
14737code.google.com/p/crypto-js/wiki/License
14738*/
14739/** @preserve
14740(c) 2012 by Cédric Mesnil. All rights reserved.
14741
14742Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
14743
14744 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
14745 - 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.
14746
14747THIS 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.
14748*/
14749
14750// constants table
14751var zl = [
14752 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
14753 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
14754 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
14755 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
14756 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
14757]
14758
14759var zr = [
14760 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
14761 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
14762 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
14763 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
14764 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
14765]
14766
14767var sl = [
14768 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
14769 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
14770 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
14771 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
14772 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
14773]
14774
14775var sr = [
14776 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
14777 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
14778 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
14779 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
14780 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
14781]
14782
14783var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
14784var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
14785
14786function bytesToWords (bytes) {
14787 var words = []
14788 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
14789 words[b >>> 5] |= bytes[i] << (24 - b % 32)
14790 }
14791 return words
14792}
14793
14794function wordsToBytes (words) {
14795 var bytes = []
14796 for (var b = 0; b < words.length * 32; b += 8) {
14797 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
14798 }
14799 return bytes
14800}
14801
14802function processBlock (H, M, offset) {
14803 // swap endian
14804 for (var i = 0; i < 16; i++) {
14805 var offset_i = offset + i
14806 var M_offset_i = M[offset_i]
14807
14808 // Swap
14809 M[offset_i] = (
14810 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
14811 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
14812 )
14813 }
14814
14815 // Working variables
14816 var al, bl, cl, dl, el
14817 var ar, br, cr, dr, er
14818
14819 ar = al = H[0]
14820 br = bl = H[1]
14821 cr = cl = H[2]
14822 dr = dl = H[3]
14823 er = el = H[4]
14824
14825 // computation
14826 var t
14827 for (i = 0; i < 80; i += 1) {
14828 t = (al + M[offset + zl[i]]) | 0
14829 if (i < 16) {
14830 t += f1(bl, cl, dl) + hl[0]
14831 } else if (i < 32) {
14832 t += f2(bl, cl, dl) + hl[1]
14833 } else if (i < 48) {
14834 t += f3(bl, cl, dl) + hl[2]
14835 } else if (i < 64) {
14836 t += f4(bl, cl, dl) + hl[3]
14837 } else {// if (i<80) {
14838 t += f5(bl, cl, dl) + hl[4]
14839 }
14840 t = t | 0
14841 t = rotl(t, sl[i])
14842 t = (t + el) | 0
14843 al = el
14844 el = dl
14845 dl = rotl(cl, 10)
14846 cl = bl
14847 bl = t
14848
14849 t = (ar + M[offset + zr[i]]) | 0
14850 if (i < 16) {
14851 t += f5(br, cr, dr) + hr[0]
14852 } else if (i < 32) {
14853 t += f4(br, cr, dr) + hr[1]
14854 } else if (i < 48) {
14855 t += f3(br, cr, dr) + hr[2]
14856 } else if (i < 64) {
14857 t += f2(br, cr, dr) + hr[3]
14858 } else {// if (i<80) {
14859 t += f1(br, cr, dr) + hr[4]
14860 }
14861
14862 t = t | 0
14863 t = rotl(t, sr[i])
14864 t = (t + er) | 0
14865 ar = er
14866 er = dr
14867 dr = rotl(cr, 10)
14868 cr = br
14869 br = t
14870 }
14871
14872 // intermediate hash value
14873 t = (H[1] + cl + dr) | 0
14874 H[1] = (H[2] + dl + er) | 0
14875 H[2] = (H[3] + el + ar) | 0
14876 H[3] = (H[4] + al + br) | 0
14877 H[4] = (H[0] + bl + cr) | 0
14878 H[0] = t
14879}
14880
14881function f1 (x, y, z) {
14882 return ((x) ^ (y) ^ (z))
14883}
14884
14885function f2 (x, y, z) {
14886 return (((x) & (y)) | ((~x) & (z)))
14887}
14888
14889function f3 (x, y, z) {
14890 return (((x) | (~(y))) ^ (z))
14891}
14892
14893function f4 (x, y, z) {
14894 return (((x) & (z)) | ((y) & (~(z))))
14895}
14896
14897function f5 (x, y, z) {
14898 return ((x) ^ ((y) | (~(z))))
14899}
14900
14901function rotl (x, n) {
14902 return (x << n) | (x >>> (32 - n))
14903}
14904
14905function ripemd160 (message) {
14906 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
14907
14908 if (typeof message === 'string') {
14909 message = new Buffer(message, 'utf8')
14910 }
14911
14912 var m = bytesToWords(message)
14913
14914 var nBitsLeft = message.length * 8
14915 var nBitsTotal = message.length * 8
14916
14917 // Add padding
14918 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
14919 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
14920 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
14921 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
14922 )
14923
14924 for (var i = 0; i < m.length; i += 16) {
14925 processBlock(H, m, i)
14926 }
14927
14928 // swap endian
14929 for (i = 0; i < 5; i++) {
14930 // shortcut
14931 var H_i = H[i]
14932
14933 // Swap
14934 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
14935 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
14936 }
14937
14938 var digestbytes = wordsToBytes(H)
14939 return new Buffer(digestbytes)
14940}
14941
14942module.exports = ripemd160
14943
14944}).call(this,require("buffer").Buffer)
14945},{"buffer":7}],37:[function(require,module,exports){
14946(function (Buffer){
14947// prototype class for hash functions
14948function Hash (blockSize, finalSize) {
14949 this._block = new Buffer(blockSize)
14950 this._finalSize = finalSize
14951 this._blockSize = blockSize
14952 this._len = 0
14953 this._s = 0
14954}
14955
14956Hash.prototype.update = function (data, enc) {
14957 if (typeof data === 'string') {
14958 enc = enc || 'utf8'
14959 data = new Buffer(data, enc)
14960 }
14961
14962 var l = this._len += data.length
14963 var s = this._s || 0
14964 var f = 0
14965 var buffer = this._block
14966
14967 while (s < l) {
14968 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
14969 var ch = (t - f)
14970
14971 for (var i = 0; i < ch; i++) {
14972 buffer[(s % this._blockSize) + i] = data[i + f]
14973 }
14974
14975 s += ch
14976 f += ch
14977
14978 if ((s % this._blockSize) === 0) {
14979 this._update(buffer)
14980 }
14981 }
14982 this._s = s
14983
14984 return this
14985}
14986
14987Hash.prototype.digest = function (enc) {
14988 // Suppose the length of the message M, in bits, is l
14989 var l = this._len * 8
14990
14991 // Append the bit 1 to the end of the message
14992 this._block[this._len % this._blockSize] = 0x80
14993
14994 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
14995 this._block.fill(0, this._len % this._blockSize + 1)
14996
14997 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
14998 this._update(this._block)
14999 this._block.fill(0)
15000 }
15001
15002 // to this append the block which is equal to the number l written in binary
15003 // TODO: handle case where l is > Math.pow(2, 29)
15004 this._block.writeInt32BE(l, this._blockSize - 4)
15005
15006 var hash = this._update(this._block) || this._hash()
15007
15008 return enc ? hash.toString(enc) : hash
15009}
15010
15011Hash.prototype._update = function () {
15012 throw new Error('_update must be implemented by subclass')
15013}
15014
15015module.exports = Hash
15016
15017}).call(this,require("buffer").Buffer)
15018},{"buffer":7}],38:[function(require,module,exports){
15019var exports = module.exports = function SHA (algorithm) {
15020 algorithm = algorithm.toLowerCase()
15021
15022 var Algorithm = exports[algorithm]
15023 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
15024
15025 return new Algorithm()
15026}
15027
15028exports.sha = require('./sha')
15029exports.sha1 = require('./sha1')
15030exports.sha224 = require('./sha224')
15031exports.sha256 = require('./sha256')
15032exports.sha384 = require('./sha384')
15033exports.sha512 = require('./sha512')
15034
15035},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
15036(function (Buffer){
15037/*
15038 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
15039 * in FIPS PUB 180-1
15040 * This source code is derived from sha1.js of the same repository.
15041 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
15042 * operation was added.
15043 */
15044
15045var inherits = require('inherits')
15046var Hash = require('./hash')
15047
15048var W = new Array(80)
15049
15050function Sha () {
15051 this.init()
15052 this._w = W
15053
15054 Hash.call(this, 64, 56)
15055}
15056
15057inherits(Sha, Hash)
15058
15059Sha.prototype.init = function () {
15060 this._a = 0x67452301 | 0
15061 this._b = 0xefcdab89 | 0
15062 this._c = 0x98badcfe | 0
15063 this._d = 0x10325476 | 0
15064 this._e = 0xc3d2e1f0 | 0
15065
15066 return this
15067}
15068
15069/*
15070 * Bitwise rotate a 32-bit number to the left.
15071 */
15072function rol (num, cnt) {
15073 return (num << cnt) | (num >>> (32 - cnt))
15074}
15075
15076Sha.prototype._update = function (M) {
15077 var W = this._w
15078
15079 var a = this._a
15080 var b = this._b
15081 var c = this._c
15082 var d = this._d
15083 var e = this._e
15084
15085 var j = 0, k
15086
15087 /*
15088 * SHA-1 has a bitwise rotate left operation. But, SHA is not
15089 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
15090 */
15091 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
15092 function loop (w, f) {
15093 W[j] = w
15094
15095 var t = rol(a, 5) + f + e + w + k
15096
15097 e = d
15098 d = c
15099 c = rol(b, 30)
15100 b = a
15101 a = t
15102 j++
15103 }
15104
15105 k = 1518500249
15106 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
15107 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
15108 k = 1859775393
15109 while (j < 40) loop(calcW(), b ^ c ^ d)
15110 k = -1894007588
15111 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
15112 k = -899497514
15113 while (j < 80) loop(calcW(), b ^ c ^ d)
15114
15115 this._a = (a + this._a) | 0
15116 this._b = (b + this._b) | 0
15117 this._c = (c + this._c) | 0
15118 this._d = (d + this._d) | 0
15119 this._e = (e + this._e) | 0
15120}
15121
15122Sha.prototype._hash = function () {
15123 var H = new Buffer(20)
15124
15125 H.writeInt32BE(this._a | 0, 0)
15126 H.writeInt32BE(this._b | 0, 4)
15127 H.writeInt32BE(this._c | 0, 8)
15128 H.writeInt32BE(this._d | 0, 12)
15129 H.writeInt32BE(this._e | 0, 16)
15130
15131 return H
15132}
15133
15134module.exports = Sha
15135
15136
15137}).call(this,require("buffer").Buffer)
15138},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
15139(function (Buffer){
15140/*
15141 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
15142 * in FIPS PUB 180-1
15143 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
15144 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15145 * Distributed under the BSD License
15146 * See http://pajhome.org.uk/crypt/md5 for details.
15147 */
15148
15149var inherits = require('inherits')
15150var Hash = require('./hash')
15151
15152var W = new Array(80)
15153
15154function Sha1 () {
15155 this.init()
15156 this._w = W
15157
15158 Hash.call(this, 64, 56)
15159}
15160
15161inherits(Sha1, Hash)
15162
15163Sha1.prototype.init = function () {
15164 this._a = 0x67452301 | 0
15165 this._b = 0xefcdab89 | 0
15166 this._c = 0x98badcfe | 0
15167 this._d = 0x10325476 | 0
15168 this._e = 0xc3d2e1f0 | 0
15169
15170 return this
15171}
15172
15173/*
15174 * Bitwise rotate a 32-bit number to the left.
15175 */
15176function rol (num, cnt) {
15177 return (num << cnt) | (num >>> (32 - cnt))
15178}
15179
15180Sha1.prototype._update = function (M) {
15181 var W = this._w
15182
15183 var a = this._a
15184 var b = this._b
15185 var c = this._c
15186 var d = this._d
15187 var e = this._e
15188
15189 var j = 0, k
15190
15191 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
15192 function loop (w, f) {
15193 W[j] = w
15194
15195 var t = rol(a, 5) + f + e + w + k
15196
15197 e = d
15198 d = c
15199 c = rol(b, 30)
15200 b = a
15201 a = t
15202 j++
15203 }
15204
15205 k = 1518500249
15206 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
15207 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
15208 k = 1859775393
15209 while (j < 40) loop(calcW(), b ^ c ^ d)
15210 k = -1894007588
15211 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
15212 k = -899497514
15213 while (j < 80) loop(calcW(), b ^ c ^ d)
15214
15215 this._a = (a + this._a) | 0
15216 this._b = (b + this._b) | 0
15217 this._c = (c + this._c) | 0
15218 this._d = (d + this._d) | 0
15219 this._e = (e + this._e) | 0
15220}
15221
15222Sha1.prototype._hash = function () {
15223 var H = new Buffer(20)
15224
15225 H.writeInt32BE(this._a | 0, 0)
15226 H.writeInt32BE(this._b | 0, 4)
15227 H.writeInt32BE(this._c | 0, 8)
15228 H.writeInt32BE(this._d | 0, 12)
15229 H.writeInt32BE(this._e | 0, 16)
15230
15231 return H
15232}
15233
15234module.exports = Sha1
15235
15236}).call(this,require("buffer").Buffer)
15237},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
15238(function (Buffer){
15239/**
15240 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
15241 * in FIPS 180-2
15242 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
15243 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15244 *
15245 */
15246
15247var inherits = require('inherits')
15248var Sha256 = require('./sha256')
15249var Hash = require('./hash')
15250
15251var W = new Array(64)
15252
15253function Sha224 () {
15254 this.init()
15255
15256 this._w = W // new Array(64)
15257
15258 Hash.call(this, 64, 56)
15259}
15260
15261inherits(Sha224, Sha256)
15262
15263Sha224.prototype.init = function () {
15264 this._a = 0xc1059ed8 | 0
15265 this._b = 0x367cd507 | 0
15266 this._c = 0x3070dd17 | 0
15267 this._d = 0xf70e5939 | 0
15268 this._e = 0xffc00b31 | 0
15269 this._f = 0x68581511 | 0
15270 this._g = 0x64f98fa7 | 0
15271 this._h = 0xbefa4fa4 | 0
15272
15273 return this
15274}
15275
15276Sha224.prototype._hash = function () {
15277 var H = new Buffer(28)
15278
15279 H.writeInt32BE(this._a, 0)
15280 H.writeInt32BE(this._b, 4)
15281 H.writeInt32BE(this._c, 8)
15282 H.writeInt32BE(this._d, 12)
15283 H.writeInt32BE(this._e, 16)
15284 H.writeInt32BE(this._f, 20)
15285 H.writeInt32BE(this._g, 24)
15286
15287 return H
15288}
15289
15290module.exports = Sha224
15291
15292}).call(this,require("buffer").Buffer)
15293},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
15294(function (Buffer){
15295/**
15296 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
15297 * in FIPS 180-2
15298 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
15299 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15300 *
15301 */
15302
15303var inherits = require('inherits')
15304var Hash = require('./hash')
15305
15306var K = [
15307 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
15308 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
15309 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
15310 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
15311 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
15312 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
15313 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
15314 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
15315 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
15316 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
15317 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
15318 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
15319 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
15320 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
15321 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
15322 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
15323]
15324
15325var W = new Array(64)
15326
15327function Sha256 () {
15328 this.init()
15329
15330 this._w = W // new Array(64)
15331
15332 Hash.call(this, 64, 56)
15333}
15334
15335inherits(Sha256, Hash)
15336
15337Sha256.prototype.init = function () {
15338 this._a = 0x6a09e667 | 0
15339 this._b = 0xbb67ae85 | 0
15340 this._c = 0x3c6ef372 | 0
15341 this._d = 0xa54ff53a | 0
15342 this._e = 0x510e527f | 0
15343 this._f = 0x9b05688c | 0
15344 this._g = 0x1f83d9ab | 0
15345 this._h = 0x5be0cd19 | 0
15346
15347 return this
15348}
15349
15350function S (X, n) {
15351 return (X >>> n) | (X << (32 - n))
15352}
15353
15354function R (X, n) {
15355 return (X >>> n)
15356}
15357
15358function Ch (x, y, z) {
15359 return ((x & y) ^ ((~x) & z))
15360}
15361
15362function Maj (x, y, z) {
15363 return ((x & y) ^ (x & z) ^ (y & z))
15364}
15365
15366function Sigma0256 (x) {
15367 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
15368}
15369
15370function Sigma1256 (x) {
15371 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
15372}
15373
15374function Gamma0256 (x) {
15375 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
15376}
15377
15378function Gamma1256 (x) {
15379 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
15380}
15381
15382Sha256.prototype._update = function (M) {
15383 var W = this._w
15384
15385 var a = this._a | 0
15386 var b = this._b | 0
15387 var c = this._c | 0
15388 var d = this._d | 0
15389 var e = this._e | 0
15390 var f = this._f | 0
15391 var g = this._g | 0
15392 var h = this._h | 0
15393
15394 var j = 0
15395
15396 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
15397 function loop (w) {
15398 W[j] = w
15399
15400 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
15401 var T2 = Sigma0256(a) + Maj(a, b, c)
15402
15403 h = g
15404 g = f
15405 f = e
15406 e = d + T1
15407 d = c
15408 c = b
15409 b = a
15410 a = T1 + T2
15411
15412 j++
15413 }
15414
15415 while (j < 16) loop(M.readInt32BE(j * 4))
15416 while (j < 64) loop(calcW())
15417
15418 this._a = (a + this._a) | 0
15419 this._b = (b + this._b) | 0
15420 this._c = (c + this._c) | 0
15421 this._d = (d + this._d) | 0
15422 this._e = (e + this._e) | 0
15423 this._f = (f + this._f) | 0
15424 this._g = (g + this._g) | 0
15425 this._h = (h + this._h) | 0
15426}
15427
15428Sha256.prototype._hash = function () {
15429 var H = new Buffer(32)
15430
15431 H.writeInt32BE(this._a, 0)
15432 H.writeInt32BE(this._b, 4)
15433 H.writeInt32BE(this._c, 8)
15434 H.writeInt32BE(this._d, 12)
15435 H.writeInt32BE(this._e, 16)
15436 H.writeInt32BE(this._f, 20)
15437 H.writeInt32BE(this._g, 24)
15438 H.writeInt32BE(this._h, 28)
15439
15440 return H
15441}
15442
15443module.exports = Sha256
15444
15445}).call(this,require("buffer").Buffer)
15446},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
15447(function (Buffer){
15448var inherits = require('inherits')
15449var SHA512 = require('./sha512')
15450var Hash = require('./hash')
15451
15452var W = new Array(160)
15453
15454function Sha384 () {
15455 this.init()
15456 this._w = W
15457
15458 Hash.call(this, 128, 112)
15459}
15460
15461inherits(Sha384, SHA512)
15462
15463Sha384.prototype.init = function () {
15464 this._a = 0xcbbb9d5d | 0
15465 this._b = 0x629a292a | 0
15466 this._c = 0x9159015a | 0
15467 this._d = 0x152fecd8 | 0
15468 this._e = 0x67332667 | 0
15469 this._f = 0x8eb44a87 | 0
15470 this._g = 0xdb0c2e0d | 0
15471 this._h = 0x47b5481d | 0
15472
15473 this._al = 0xc1059ed8 | 0
15474 this._bl = 0x367cd507 | 0
15475 this._cl = 0x3070dd17 | 0
15476 this._dl = 0xf70e5939 | 0
15477 this._el = 0xffc00b31 | 0
15478 this._fl = 0x68581511 | 0
15479 this._gl = 0x64f98fa7 | 0
15480 this._hl = 0xbefa4fa4 | 0
15481
15482 return this
15483}
15484
15485Sha384.prototype._hash = function () {
15486 var H = new Buffer(48)
15487
15488 function writeInt64BE (h, l, offset) {
15489 H.writeInt32BE(h, offset)
15490 H.writeInt32BE(l, offset + 4)
15491 }
15492
15493 writeInt64BE(this._a, this._al, 0)
15494 writeInt64BE(this._b, this._bl, 8)
15495 writeInt64BE(this._c, this._cl, 16)
15496 writeInt64BE(this._d, this._dl, 24)
15497 writeInt64BE(this._e, this._el, 32)
15498 writeInt64BE(this._f, this._fl, 40)
15499
15500 return H
15501}
15502
15503module.exports = Sha384
15504
15505}).call(this,require("buffer").Buffer)
15506},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
15507(function (Buffer){
15508var inherits = require('inherits')
15509var Hash = require('./hash')
15510
15511var K = [
15512 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
15513 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
15514 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
15515 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
15516 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
15517 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
15518 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
15519 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
15520 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
15521 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
15522 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
15523 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
15524 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
15525 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
15526 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
15527 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
15528 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
15529 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
15530 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
15531 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
15532 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
15533 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
15534 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
15535 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
15536 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
15537 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
15538 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
15539 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
15540 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
15541 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
15542 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
15543 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
15544 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
15545 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
15546 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
15547 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
15548 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
15549 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
15550 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
15551 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
15552]
15553
15554var W = new Array(160)
15555
15556function Sha512 () {
15557 this.init()
15558 this._w = W
15559
15560 Hash.call(this, 128, 112)
15561}
15562
15563inherits(Sha512, Hash)
15564
15565Sha512.prototype.init = function () {
15566 this._a = 0x6a09e667 | 0
15567 this._b = 0xbb67ae85 | 0
15568 this._c = 0x3c6ef372 | 0
15569 this._d = 0xa54ff53a | 0
15570 this._e = 0x510e527f | 0
15571 this._f = 0x9b05688c | 0
15572 this._g = 0x1f83d9ab | 0
15573 this._h = 0x5be0cd19 | 0
15574
15575 this._al = 0xf3bcc908 | 0
15576 this._bl = 0x84caa73b | 0
15577 this._cl = 0xfe94f82b | 0
15578 this._dl = 0x5f1d36f1 | 0
15579 this._el = 0xade682d1 | 0
15580 this._fl = 0x2b3e6c1f | 0
15581 this._gl = 0xfb41bd6b | 0
15582 this._hl = 0x137e2179 | 0
15583
15584 return this
15585}
15586
15587function S (X, Xl, n) {
15588 return (X >>> n) | (Xl << (32 - n))
15589}
15590
15591function Ch (x, y, z) {
15592 return ((x & y) ^ ((~x) & z))
15593}
15594
15595function Maj (x, y, z) {
15596 return ((x & y) ^ (x & z) ^ (y & z))
15597}
15598
15599Sha512.prototype._update = function (M) {
15600 var W = this._w
15601
15602 var a = this._a | 0
15603 var b = this._b | 0
15604 var c = this._c | 0
15605 var d = this._d | 0
15606 var e = this._e | 0
15607 var f = this._f | 0
15608 var g = this._g | 0
15609 var h = this._h | 0
15610
15611 var al = this._al | 0
15612 var bl = this._bl | 0
15613 var cl = this._cl | 0
15614 var dl = this._dl | 0
15615 var el = this._el | 0
15616 var fl = this._fl | 0
15617 var gl = this._gl | 0
15618 var hl = this._hl | 0
15619
15620 var i = 0, j = 0
15621 var Wi, Wil
15622 function calcW () {
15623 var x = W[j - 15 * 2]
15624 var xl = W[j - 15 * 2 + 1]
15625 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
15626 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
15627
15628 x = W[j - 2 * 2]
15629 xl = W[j - 2 * 2 + 1]
15630 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
15631 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
15632
15633 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
15634 var Wi7 = W[j - 7 * 2]
15635 var Wi7l = W[j - 7 * 2 + 1]
15636
15637 var Wi16 = W[j - 16 * 2]
15638 var Wi16l = W[j - 16 * 2 + 1]
15639
15640 Wil = gamma0l + Wi7l
15641 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
15642 Wil = Wil + gamma1l
15643 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
15644 Wil = Wil + Wi16l
15645 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
15646 }
15647
15648 function loop () {
15649 W[j] = Wi
15650 W[j + 1] = Wil
15651
15652 var maj = Maj(a, b, c)
15653 var majl = Maj(al, bl, cl)
15654
15655 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
15656 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
15657 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
15658 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
15659
15660 // t1 = h + sigma1 + ch + K[i] + W[i]
15661 var Ki = K[j]
15662 var Kil = K[j + 1]
15663
15664 var ch = Ch(e, f, g)
15665 var chl = Ch(el, fl, gl)
15666
15667 var t1l = hl + sigma1l
15668 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
15669 t1l = t1l + chl
15670 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
15671 t1l = t1l + Kil
15672 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
15673 t1l = t1l + Wil
15674 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
15675
15676 // t2 = sigma0 + maj
15677 var t2l = sigma0l + majl
15678 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
15679
15680 h = g
15681 hl = gl
15682 g = f
15683 gl = fl
15684 f = e
15685 fl = el
15686 el = (dl + t1l) | 0
15687 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
15688 d = c
15689 dl = cl
15690 c = b
15691 cl = bl
15692 b = a
15693 bl = al
15694 al = (t1l + t2l) | 0
15695 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
15696
15697 i++
15698 j += 2
15699 }
15700
15701 while (i < 16) {
15702 Wi = M.readInt32BE(j * 4)
15703 Wil = M.readInt32BE(j * 4 + 4)
15704
15705 loop()
15706 }
15707
15708 while (i < 80) {
15709 calcW()
15710 loop()
15711 }
15712
15713 this._al = (this._al + al) | 0
15714 this._bl = (this._bl + bl) | 0
15715 this._cl = (this._cl + cl) | 0
15716 this._dl = (this._dl + dl) | 0
15717 this._el = (this._el + el) | 0
15718 this._fl = (this._fl + fl) | 0
15719 this._gl = (this._gl + gl) | 0
15720 this._hl = (this._hl + hl) | 0
15721
15722 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
15723 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
15724 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
15725 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
15726 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
15727 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
15728 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
15729 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
15730}
15731
15732Sha512.prototype._hash = function () {
15733 var H = new Buffer(64)
15734
15735 function writeInt64BE (h, l, offset) {
15736 H.writeInt32BE(h, offset)
15737 H.writeInt32BE(l, offset + 4)
15738 }
15739
15740 writeInt64BE(this._a, this._al, 0)
15741 writeInt64BE(this._b, this._bl, 8)
15742 writeInt64BE(this._c, this._cl, 16)
15743 writeInt64BE(this._d, this._dl, 24)
15744 writeInt64BE(this._e, this._el, 32)
15745 writeInt64BE(this._f, this._fl, 40)
15746 writeInt64BE(this._g, this._gl, 48)
15747 writeInt64BE(this._h, this._hl, 56)
15748
15749 return H
15750}
15751
15752module.exports = Sha512
15753
15754}).call(this,require("buffer").Buffer)
15755},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
15756(function (Buffer){
15757'use strict';
15758var createHash = require('create-hash/browser');
15759var inherits = require('inherits')
15760
15761var Transform = require('stream').Transform
15762
15763var ZEROS = new Buffer(128)
15764ZEROS.fill(0)
15765
15766function Hmac(alg, key) {
15767 Transform.call(this)
15768
15769 if (typeof key === 'string') {
15770 key = new Buffer(key)
15771 }
15772
15773 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
15774
15775 this._alg = alg
15776 this._key = key
15777
15778 if (key.length > blocksize) {
15779 key = createHash(alg).update(key).digest()
15780
15781 } else if (key.length < blocksize) {
15782 key = Buffer.concat([key, ZEROS], blocksize)
15783 }
15784
15785 var ipad = this._ipad = new Buffer(blocksize)
15786 var opad = this._opad = new Buffer(blocksize)
15787
15788 for (var i = 0; i < blocksize; i++) {
15789 ipad[i] = key[i] ^ 0x36
15790 opad[i] = key[i] ^ 0x5C
15791 }
15792
15793 this._hash = createHash(alg).update(ipad)
15794}
15795
15796inherits(Hmac, Transform)
15797
15798Hmac.prototype.update = function (data, enc) {
15799 this._hash.update(data, enc)
15800
15801 return this
15802}
15803
15804Hmac.prototype._transform = function (data, _, next) {
15805 this._hash.update(data)
15806
15807 next()
15808}
15809
15810Hmac.prototype._flush = function (next) {
15811 this.push(this.digest())
15812
15813 next()
15814}
15815
15816Hmac.prototype.digest = function (enc) {
15817 var h = this._hash.digest()
15818
15819 return createHash(this._alg).update(this._opad).update(h).digest(enc)
15820}
15821
15822module.exports = function createHmac(alg, key) {
15823 return new Hmac(alg, key)
15824}
15825
15826}).call(this,require("buffer").Buffer)
15827},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
15828arguments[4][12][0].apply(exports,arguments)
15829},{"dup":12}],47:[function(require,module,exports){
15830var assert = require('assert')
15831var BigInteger = require('bigi')
15832
15833var Point = require('./point')
15834
15835function Curve(p, a, b, Gx, Gy, n, h) {
15836 this.p = p
15837 this.a = a
15838 this.b = b
15839 this.G = Point.fromAffine(this, Gx, Gy)
15840 this.n = n
15841 this.h = h
15842
15843 this.infinity = new Point(this, null, null, BigInteger.ZERO)
15844
15845 // result caching
15846 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
15847}
15848
15849Curve.prototype.pointFromX = function(isOdd, x) {
15850 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
15851 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
15852
15853 var y = beta
15854 if (beta.isEven() ^ !isOdd) {
15855 y = this.p.subtract(y) // -y % p
15856 }
15857
15858 return Point.fromAffine(this, x, y)
15859}
15860
15861Curve.prototype.isInfinity = function(Q) {
15862 if (Q === this.infinity) return true
15863
15864 return Q.z.signum() === 0 && Q.y.signum() !== 0
15865}
15866
15867Curve.prototype.isOnCurve = function(Q) {
15868 if (this.isInfinity(Q)) return true
15869
15870 var x = Q.affineX
15871 var y = Q.affineY
15872 var a = this.a
15873 var b = this.b
15874 var p = this.p
15875
15876 // Check that xQ and yQ are integers in the interval [0, p - 1]
15877 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
15878 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
15879
15880 // and check that y^2 = x^3 + ax + b (mod p)
15881 var lhs = y.square().mod(p)
15882 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
15883 return lhs.equals(rhs)
15884}
15885
15886/**
15887 * Validate an elliptic curve point.
15888 *
15889 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
15890 */
15891Curve.prototype.validate = function(Q) {
15892 // Check Q != O
15893 assert(!this.isInfinity(Q), 'Point is at infinity')
15894 assert(this.isOnCurve(Q), 'Point is not on the curve')
15895
15896 // Check nQ = O (where Q is a scalar multiple of G)
15897 var nQ = Q.multiply(this.n)
15898 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
15899
15900 return true
15901}
15902
15903module.exports = Curve
15904
15905},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
15906module.exports={
15907 "secp128r1": {
15908 "p": "fffffffdffffffffffffffffffffffff",
15909 "a": "fffffffdfffffffffffffffffffffffc",
15910 "b": "e87579c11079f43dd824993c2cee5ed3",
15911 "n": "fffffffe0000000075a30d1b9038a115",
15912 "h": "01",
15913 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
15914 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
15915 },
15916 "secp160k1": {
15917 "p": "fffffffffffffffffffffffffffffffeffffac73",
15918 "a": "00",
15919 "b": "07",
15920 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
15921 "h": "01",
15922 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
15923 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
15924 },
15925 "secp160r1": {
15926 "p": "ffffffffffffffffffffffffffffffff7fffffff",
15927 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
15928 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
15929 "n": "0100000000000000000001f4c8f927aed3ca752257",
15930 "h": "01",
15931 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
15932 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
15933 },
15934 "secp192k1": {
15935 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
15936 "a": "00",
15937 "b": "03",
15938 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
15939 "h": "01",
15940 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
15941 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
15942 },
15943 "secp192r1": {
15944 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
15945 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
15946 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
15947 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
15948 "h": "01",
15949 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
15950 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
15951 },
15952 "secp256k1": {
15953 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
15954 "a": "00",
15955 "b": "07",
15956 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
15957 "h": "01",
15958 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
15959 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
15960 },
15961 "secp256r1": {
15962 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
15963 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
15964 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
15965 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
15966 "h": "01",
15967 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
15968 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
15969 }
15970}
15971
15972},{}],49:[function(require,module,exports){
15973var Point = require('./point')
15974var Curve = require('./curve')
15975
15976var getCurveByName = require('./names')
15977
15978module.exports = {
15979 Curve: Curve,
15980 Point: Point,
15981 getCurveByName: getCurveByName
15982}
15983
15984},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
15985var BigInteger = require('bigi')
15986
15987var curves = require('./curves')
15988var Curve = require('./curve')
15989
15990function getCurveByName(name) {
15991 var curve = curves[name]
15992 if (!curve) return null
15993
15994 var p = new BigInteger(curve.p, 16)
15995 var a = new BigInteger(curve.a, 16)
15996 var b = new BigInteger(curve.b, 16)
15997 var n = new BigInteger(curve.n, 16)
15998 var h = new BigInteger(curve.h, 16)
15999 var Gx = new BigInteger(curve.Gx, 16)
16000 var Gy = new BigInteger(curve.Gy, 16)
16001
16002 return new Curve(p, a, b, Gx, Gy, n, h)
16003}
16004
16005module.exports = getCurveByName
16006
16007},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
16008(function (Buffer){
16009var assert = require('assert')
16010var BigInteger = require('bigi')
16011
16012var THREE = BigInteger.valueOf(3)
16013
16014function Point(curve, x, y, z) {
16015 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
16016
16017 this.curve = curve
16018 this.x = x
16019 this.y = y
16020 this.z = z
16021 this._zInv = null
16022
16023 this.compressed = true
16024}
16025
16026Object.defineProperty(Point.prototype, 'zInv', {
16027 get: function() {
16028 if (this._zInv === null) {
16029 this._zInv = this.z.modInverse(this.curve.p)
16030 }
16031
16032 return this._zInv
16033 }
16034})
16035
16036Object.defineProperty(Point.prototype, 'affineX', {
16037 get: function() {
16038 return this.x.multiply(this.zInv).mod(this.curve.p)
16039 }
16040})
16041
16042Object.defineProperty(Point.prototype, 'affineY', {
16043 get: function() {
16044 return this.y.multiply(this.zInv).mod(this.curve.p)
16045 }
16046})
16047
16048Point.fromAffine = function(curve, x, y) {
16049 return new Point(curve, x, y, BigInteger.ONE)
16050}
16051
16052Point.prototype.equals = function(other) {
16053 if (other === this) return true
16054 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
16055 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
16056
16057 // u = Y2 * Z1 - Y1 * Z2
16058 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
16059
16060 if (u.signum() !== 0) return false
16061
16062 // v = X2 * Z1 - X1 * Z2
16063 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
16064
16065 return v.signum() === 0
16066}
16067
16068Point.prototype.negate = function() {
16069 var y = this.curve.p.subtract(this.y)
16070
16071 return new Point(this.curve, this.x, y, this.z)
16072}
16073
16074Point.prototype.add = function(b) {
16075 if (this.curve.isInfinity(this)) return b
16076 if (this.curve.isInfinity(b)) return this
16077
16078 var x1 = this.x
16079 var y1 = this.y
16080 var x2 = b.x
16081 var y2 = b.y
16082
16083 // u = Y2 * Z1 - Y1 * Z2
16084 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
16085 // v = X2 * Z1 - X1 * Z2
16086 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
16087
16088 if (v.signum() === 0) {
16089 if (u.signum() === 0) {
16090 return this.twice() // this == b, so double
16091 }
16092
16093 return this.curve.infinity // this = -b, so infinity
16094 }
16095
16096 var v2 = v.square()
16097 var v3 = v2.multiply(v)
16098 var x1v2 = x1.multiply(v2)
16099 var zu2 = u.square().multiply(this.z)
16100
16101 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
16102 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
16103 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
16104 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)
16105 // z3 = v^3 * z1 * z2
16106 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
16107
16108 return new Point(this.curve, x3, y3, z3)
16109}
16110
16111Point.prototype.twice = function() {
16112 if (this.curve.isInfinity(this)) return this
16113 if (this.y.signum() === 0) return this.curve.infinity
16114
16115 var x1 = this.x
16116 var y1 = this.y
16117
16118 var y1z1 = y1.multiply(this.z)
16119 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
16120 var a = this.curve.a
16121
16122 // w = 3 * x1^2 + a * z1^2
16123 var w = x1.square().multiply(THREE)
16124
16125 if (a.signum() !== 0) {
16126 w = w.add(this.z.square().multiply(a))
16127 }
16128
16129 w = w.mod(this.curve.p)
16130 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
16131 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
16132 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
16133 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
16134 // z3 = 8 * (y1 * z1)^3
16135 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
16136
16137 return new Point(this.curve, x3, y3, z3)
16138}
16139
16140// Simple NAF (Non-Adjacent Form) multiplication algorithm
16141// TODO: modularize the multiplication algorithm
16142Point.prototype.multiply = function(k) {
16143 if (this.curve.isInfinity(this)) return this
16144 if (k.signum() === 0) return this.curve.infinity
16145
16146 var e = k
16147 var h = e.multiply(THREE)
16148
16149 var neg = this.negate()
16150 var R = this
16151
16152 for (var i = h.bitLength() - 2; i > 0; --i) {
16153 R = R.twice()
16154
16155 var hBit = h.testBit(i)
16156 var eBit = e.testBit(i)
16157
16158 if (hBit != eBit) {
16159 R = R.add(hBit ? this : neg)
16160 }
16161 }
16162
16163 return R
16164}
16165
16166// Compute this*j + x*k (simultaneous multiplication)
16167Point.prototype.multiplyTwo = function(j, x, k) {
16168 var i
16169
16170 if (j.bitLength() > k.bitLength())
16171 i = j.bitLength() - 1
16172 else
16173 i = k.bitLength() - 1
16174
16175 var R = this.curve.infinity
16176 var both = this.add(x)
16177
16178 while (i >= 0) {
16179 R = R.twice()
16180
16181 var jBit = j.testBit(i)
16182 var kBit = k.testBit(i)
16183
16184 if (jBit) {
16185 if (kBit) {
16186 R = R.add(both)
16187
16188 } else {
16189 R = R.add(this)
16190 }
16191
16192 } else {
16193 if (kBit) {
16194 R = R.add(x)
16195 }
16196 }
16197 --i
16198 }
16199
16200 return R
16201}
16202
16203Point.prototype.getEncoded = function(compressed) {
16204 if (compressed == undefined) compressed = this.compressed
16205 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
16206
16207 var x = this.affineX
16208 var y = this.affineY
16209
16210 var buffer
16211
16212 // Determine size of q in bytes
16213 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
16214
16215 // 0x02/0x03 | X
16216 if (compressed) {
16217 buffer = new Buffer(1 + byteLength)
16218 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
16219
16220 // 0x04 | X | Y
16221 } else {
16222 buffer = new Buffer(1 + byteLength + byteLength)
16223 buffer.writeUInt8(0x04, 0)
16224
16225 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
16226 }
16227
16228 x.toBuffer(byteLength).copy(buffer, 1)
16229
16230 return buffer
16231}
16232
16233Point.decodeFrom = function(curve, buffer) {
16234 var type = buffer.readUInt8(0)
16235 var compressed = (type !== 4)
16236
16237 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
16238 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
16239
16240 var Q
16241 if (compressed) {
16242 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
16243 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
16244
16245 var isOdd = (type === 0x03)
16246 Q = curve.pointFromX(isOdd, x)
16247
16248 } else {
16249 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
16250
16251 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
16252 Q = Point.fromAffine(curve, x, y)
16253 }
16254
16255 Q.compressed = compressed
16256 return Q
16257}
16258
16259Point.prototype.toString = function () {
16260 if (this.curve.isInfinity(this)) return '(INFINITY)'
16261
16262 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
16263}
16264
16265module.exports = Point
16266
16267}).call(this,require("buffer").Buffer)
16268},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
16269(function (process,global,Buffer){
16270'use strict';
16271
16272var crypto = global.crypto || global.msCrypto
16273if(crypto && crypto.getRandomValues) {
16274 module.exports = randomBytes;
16275} else {
16276 module.exports = oldBrowser;
16277}
16278function randomBytes(size, cb) {
16279 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
16280 /* This will not work in older browsers.
16281 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
16282 */
16283
16284 crypto.getRandomValues(bytes);
16285 if (typeof cb === 'function') {
16286 return process.nextTick(function () {
16287 cb(null, bytes);
16288 });
16289 }
16290 return bytes;
16291}
16292function oldBrowser() {
16293 throw new Error(
16294 'secure random number generation not supported by this browser\n'+
16295 'use chrome, FireFox or Internet Explorer 11'
16296 )
16297}
16298
16299}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
16300},{"_process":14,"buffer":7}],53:[function(require,module,exports){
16301(function (Buffer){
16302'use strict';
16303
16304function getFunctionName(fn) {
16305 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
16306}
16307
16308function getTypeTypeName(type) {
16309 if (nativeTypes.Function(type)) {
16310 type = type.toJSON ? type.toJSON() : getFunctionName(type);
16311 }
16312 if (nativeTypes.Object(type)) return JSON.stringify(type);
16313
16314 return type;
16315}
16316
16317function getValueTypeName(value) {
16318 if (nativeTypes.Null(value)) return '';
16319
16320 return getFunctionName(value.constructor);
16321}
16322
16323function tfErrorString(type, value) {
16324 var typeTypeName = getTypeTypeName(type);
16325 var valueTypeName = getValueTypeName(value);
16326
16327 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
16328}
16329
16330function tfPropertyErrorString(type, name, value) {
16331 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
16332}
16333
16334var nativeTypes = {
16335 Array: (function (_Array) {
16336 function Array(_x) {
16337 return _Array.apply(this, arguments);
16338 }
16339
16340 Array.toString = function () {
16341 return _Array.toString();
16342 };
16343
16344 return Array;
16345 })(function (value) {
16346 return value !== null && value !== undefined && value.constructor === Array;
16347 }),
16348 Boolean: function Boolean(value) {
16349 return typeof value === 'boolean';
16350 },
16351 Buffer: (function (_Buffer) {
16352 function Buffer(_x2) {
16353 return _Buffer.apply(this, arguments);
16354 }
16355
16356 Buffer.toString = function () {
16357 return _Buffer.toString();
16358 };
16359
16360 return Buffer;
16361 })(function (value) {
16362 return Buffer.isBuffer(value);
16363 }),
16364 Function: function Function(value) {
16365 return typeof value === 'function';
16366 },
16367 Null: function Null(value) {
16368 return value === undefined || value === null;
16369 },
16370 Number: function Number(value) {
16371 return typeof value === 'number';
16372 },
16373 Object: function Object(value) {
16374 return typeof value === 'object';
16375 },
16376 String: function String(value) {
16377 return typeof value === 'string';
16378 },
16379 '': function _() {
16380 return true;
16381 }
16382};
16383
16384function tJSON(type) {
16385 return type && type.toJSON ? type.toJSON() : type;
16386}
16387
16388function sJSON(type) {
16389 var json = tJSON(type);
16390 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
16391}
16392
16393var otherTypes = {
16394 arrayOf: function arrayOf(type) {
16395 function arrayOf(value, strict) {
16396 try {
16397 return nativeTypes.Array(value) && value.every(function (x) {
16398 return typeforce(type, x, strict);
16399 });
16400 } catch (e) {
16401 return false;
16402 }
16403 }
16404 arrayOf.toJSON = function () {
16405 return [tJSON(type)];
16406 };
16407
16408 return arrayOf;
16409 },
16410
16411 maybe: function maybe(type) {
16412 function maybe(value, strict) {
16413 return nativeTypes.Null(value) || typeforce(type, value, strict);
16414 }
16415 maybe.toJSON = function () {
16416 return '?' + sJSON(type);
16417 };
16418
16419 return maybe;
16420 },
16421
16422 object: function object(type) {
16423 function object(value, strict) {
16424 typeforce(nativeTypes.Object, value, strict);
16425
16426 var propertyName, propertyType, propertyValue;
16427
16428 try {
16429 for (propertyName in type) {
16430 propertyType = type[propertyName];
16431 propertyValue = value[propertyName];
16432
16433 typeforce(propertyType, propertyValue, strict);
16434 }
16435 } catch (e) {
16436 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
16437 }
16438
16439 if (strict) {
16440 for (propertyName in value) {
16441 if (type[propertyName]) continue;
16442
16443 throw new TypeError('Unexpected property "' + propertyName + '"');
16444 }
16445 }
16446
16447 return true;
16448 }
16449 object.toJSON = function () {
16450 return type;
16451 };
16452
16453 return object;
16454 },
16455
16456 oneOf: function oneOf() {
16457 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
16458 types[_key] = arguments[_key];
16459 }
16460
16461 function oneOf(value, strict) {
16462 return types.some(function (type) {
16463 try {
16464 return typeforce(type, value, strict);
16465 } catch (e) {
16466 return false;
16467 }
16468 });
16469 }
16470 oneOf.toJSON = function () {
16471 return types.map(sJSON).join('|');
16472 };
16473
16474 return oneOf;
16475 },
16476
16477 quacksLike: function quacksLike(type) {
16478 function quacksLike(value, strict) {
16479 return type === getValueTypeName(value);
16480 }
16481 quacksLike.toJSON = function () {
16482 return type;
16483 };
16484
16485 return quacksLike;
16486 },
16487
16488 tuple: function tuple() {
16489 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
16490 types[_key2] = arguments[_key2];
16491 }
16492
16493 function tuple(value, strict) {
16494 return types.every(function (type, i) {
16495 return typeforce(type, value[i], strict);
16496 });
16497 }
16498 tuple.toJSON = function () {
16499 return '(' + types.map(sJSON).join(', ') + ')';
16500 };
16501
16502 return tuple;
16503 },
16504
16505 value: function value(expected) {
16506 function value(actual) {
16507 return actual === expected;
16508 }
16509 value.toJSON = function () {
16510 return expected;
16511 };
16512
16513 return value;
16514 }
16515};
16516
16517function compile(type) {
16518 if (nativeTypes.String(type)) {
16519 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
16520
16521 return nativeTypes[type] || otherTypes.quacksLike(type);
16522 } else if (type && nativeTypes.Object(type)) {
16523 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
16524
16525 var compiled = {};
16526
16527 for (var propertyName in type) {
16528 compiled[propertyName] = compile(type[propertyName]);
16529 }
16530
16531 return otherTypes.object(compiled);
16532 } else if (nativeTypes.Function(type)) {
16533 return type;
16534 }
16535
16536 return otherTypes.value(type);
16537}
16538
16539function typeforce(_x3, _x4, _x5) {
16540 var _again = true;
16541
16542 _function: while (_again) {
16543 var type = _x3,
16544 value = _x4,
16545 strict = _x5;
16546 _again = false;
16547
16548 if (nativeTypes.Function(type)) {
16549 if (type(value, strict)) return true;
16550
16551 throw new TypeError(tfErrorString(type, value));
16552 }
16553
16554 // JIT
16555 _x3 = compile(type);
16556 _x4 = value;
16557 _x5 = strict;
16558 _again = true;
16559 continue _function;
16560 }
16561}
16562
16563// assign all types to typeforce function
16564var typeName;
16565Object.keys(nativeTypes).forEach(function (typeName) {
16566 var nativeType = nativeTypes[typeName];
16567 nativeType.toJSON = function () {
16568 return typeName;
16569 };
16570
16571 typeforce[typeName] = nativeType;
16572});
16573
16574for (typeName in otherTypes) {
16575 typeforce[typeName] = otherTypes[typeName];
16576}
16577
16578module.exports = typeforce;
16579module.exports.compile = compile;
16580}).call(this,require("buffer").Buffer)
16581},{"buffer":7}],54:[function(require,module,exports){
16582(function (Buffer){
16583var assert = require('assert')
16584var base58check = require('bs58check')
16585var typeForce = require('typeforce')
16586var networks = require('./networks')
16587var scripts = require('./scripts')
16588
16589function findScriptTypeByVersion (version) {
16590 for (var networkName in networks) {
16591 var network = networks[networkName]
16592
16593 if (version === network.pubKeyHash) return 'pubkeyhash'
16594 if (version === network.scriptHash) return 'scripthash'
16595 }
16596}
16597
16598function Address (hash, version) {
16599 typeForce('Buffer', hash)
16600
16601 assert.strictEqual(hash.length, 20, 'Invalid hash length')
16602 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
16603
16604 this.hash = hash
16605 this.version = version
16606}
16607
16608Address.fromBase58Check = function (string) {
16609 var payload = base58check.decode(string)
16610 var version = payload.readUInt8(0)
16611 var hash = payload.slice(1)
16612
16613 return new Address(hash, version)
16614}
16615
16616Address.fromOutputScript = function (script, network) {
16617 network = network || networks.bitcoin
16618
16619 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
16620 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
16621
16622 assert(false, script.toASM() + ' has no matching Address')
16623}
16624
16625Address.prototype.toBase58Check = function () {
16626 var payload = new Buffer(21)
16627 payload.writeUInt8(this.version, 0)
16628 this.hash.copy(payload, 1)
16629
16630 return base58check.encode(payload)
16631}
16632
16633Address.prototype.toOutputScript = function () {
16634 var scriptType = findScriptTypeByVersion(this.version)
16635
16636 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
16637 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
16638
16639 assert(false, this.toString() + ' has no matching Script')
16640}
16641
16642Address.prototype.toString = Address.prototype.toBase58Check
16643
16644module.exports = Address
16645
16646}).call(this,require("buffer").Buffer)
16647},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
16648var bs58check = require('bs58check')
16649
16650function decode () {
16651 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
16652
16653 return bs58check.decode.apply(undefined, arguments)
16654}
16655
16656function encode () {
16657 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
16658
16659 return bs58check.encode.apply(undefined, arguments)
16660}
16661
16662module.exports = {
16663 decode: decode,
16664 encode: encode
16665}
16666
16667},{"bs58check":31}],56:[function(require,module,exports){
16668(function (Buffer){
16669var assert = require('assert')
16670var bufferutils = require('./bufferutils')
16671var crypto = require('./crypto')
16672
16673var Transaction = require('./transaction')
16674
16675function Block () {
16676 this.version = 1
16677 this.prevHash = null
16678 this.merkleRoot = null
16679 this.timestamp = 0
16680 this.bits = 0
16681 this.nonce = 0
16682}
16683
16684Block.fromBuffer = function (buffer) {
16685 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
16686
16687 var offset = 0
16688 function readSlice (n) {
16689 offset += n
16690 return buffer.slice(offset - n, offset)
16691 }
16692
16693 function readUInt32 () {
16694 var i = buffer.readUInt32LE(offset)
16695 offset += 4
16696 return i
16697 }
16698
16699 var block = new Block()
16700 block.version = readUInt32()
16701 block.prevHash = readSlice(32)
16702 block.merkleRoot = readSlice(32)
16703 block.timestamp = readUInt32()
16704 block.bits = readUInt32()
16705 block.nonce = readUInt32()
16706
16707 if (buffer.length === 80) return block
16708
16709 function readVarInt () {
16710 var vi = bufferutils.readVarInt(buffer, offset)
16711 offset += vi.size
16712 return vi.number
16713 }
16714
16715 // FIXME: poor performance
16716 function readTransaction () {
16717 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16718
16719 offset += tx.toBuffer().length
16720 return tx
16721 }
16722
16723 var nTransactions = readVarInt()
16724 block.transactions = []
16725
16726 for (var i = 0; i < nTransactions; ++i) {
16727 var tx = readTransaction()
16728 block.transactions.push(tx)
16729 }
16730
16731 return block
16732}
16733
16734Block.fromHex = function (hex) {
16735 return Block.fromBuffer(new Buffer(hex, 'hex'))
16736}
16737
16738Block.prototype.getHash = function () {
16739 return crypto.hash256(this.toBuffer(true))
16740}
16741
16742Block.prototype.getId = function () {
16743 return bufferutils.reverse(this.getHash()).toString('hex')
16744}
16745
16746Block.prototype.getUTCDate = function () {
16747 var date = new Date(0) // epoch
16748 date.setUTCSeconds(this.timestamp)
16749
16750 return date
16751}
16752
16753Block.prototype.toBuffer = function (headersOnly) {
16754 var buffer = new Buffer(80)
16755
16756 var offset = 0
16757 function writeSlice (slice) {
16758 slice.copy(buffer, offset)
16759 offset += slice.length
16760 }
16761
16762 function writeUInt32 (i) {
16763 buffer.writeUInt32LE(i, offset)
16764 offset += 4
16765 }
16766
16767 writeUInt32(this.version)
16768 writeSlice(this.prevHash)
16769 writeSlice(this.merkleRoot)
16770 writeUInt32(this.timestamp)
16771 writeUInt32(this.bits)
16772 writeUInt32(this.nonce)
16773
16774 if (headersOnly || !this.transactions) return buffer
16775
16776 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
16777 var txBuffers = this.transactions.map(function (tx) {
16778 return tx.toBuffer()
16779 })
16780
16781 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
16782}
16783
16784Block.prototype.toHex = function (headersOnly) {
16785 return this.toBuffer(headersOnly).toString('hex')
16786}
16787
16788module.exports = Block
16789
16790}).call(this,require("buffer").Buffer)
16791},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
16792(function (Buffer){
16793var assert = require('assert')
16794var opcodes = require('./opcodes')
16795
16796// https://github.com/feross/buffer/blob/master/index.js#L1127
16797function verifuint (value, max) {
16798 assert(typeof value === 'number', 'cannot write a non-number as a number')
16799 assert(value >= 0, 'specified a negative value for writing an unsigned value')
16800 assert(value <= max, 'value is larger than maximum value for type')
16801 assert(Math.floor(value) === value, 'value has a fractional component')
16802}
16803
16804function pushDataSize (i) {
16805 return i < opcodes.OP_PUSHDATA1 ? 1
16806 : i < 0xff ? 2
16807 : i < 0xffff ? 3
16808 : 5
16809}
16810
16811function readPushDataInt (buffer, offset) {
16812 var opcode = buffer.readUInt8(offset)
16813 var number, size
16814
16815 // ~6 bit
16816 if (opcode < opcodes.OP_PUSHDATA1) {
16817 number = opcode
16818 size = 1
16819
16820 // 8 bit
16821 } else if (opcode === opcodes.OP_PUSHDATA1) {
16822 if (offset + 2 > buffer.length) return null
16823 number = buffer.readUInt8(offset + 1)
16824 size = 2
16825
16826 // 16 bit
16827 } else if (opcode === opcodes.OP_PUSHDATA2) {
16828 if (offset + 3 > buffer.length) return null
16829 number = buffer.readUInt16LE(offset + 1)
16830 size = 3
16831
16832 // 32 bit
16833 } else {
16834 if (offset + 5 > buffer.length) return null
16835 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
16836
16837 number = buffer.readUInt32LE(offset + 1)
16838 size = 5
16839 }
16840
16841 return {
16842 opcode: opcode,
16843 number: number,
16844 size: size
16845 }
16846}
16847
16848function readUInt64LE (buffer, offset) {
16849 var a = buffer.readUInt32LE(offset)
16850 var b = buffer.readUInt32LE(offset + 4)
16851 b *= 0x100000000
16852
16853 verifuint(b + a, 0x001fffffffffffff)
16854
16855 return b + a
16856}
16857
16858function readVarInt (buffer, offset) {
16859 var t = buffer.readUInt8(offset)
16860 var number, size
16861
16862 // 8 bit
16863 if (t < 253) {
16864 number = t
16865 size = 1
16866
16867 // 16 bit
16868 } else if (t < 254) {
16869 number = buffer.readUInt16LE(offset + 1)
16870 size = 3
16871
16872 // 32 bit
16873 } else if (t < 255) {
16874 number = buffer.readUInt32LE(offset + 1)
16875 size = 5
16876
16877 // 64 bit
16878 } else {
16879 number = readUInt64LE(buffer, offset + 1)
16880 size = 9
16881 }
16882
16883 return {
16884 number: number,
16885 size: size
16886 }
16887}
16888
16889function writePushDataInt (buffer, number, offset) {
16890 var size = pushDataSize(number)
16891
16892 // ~6 bit
16893 if (size === 1) {
16894 buffer.writeUInt8(number, offset)
16895
16896 // 8 bit
16897 } else if (size === 2) {
16898 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
16899 buffer.writeUInt8(number, offset + 1)
16900
16901 // 16 bit
16902 } else if (size === 3) {
16903 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
16904 buffer.writeUInt16LE(number, offset + 1)
16905
16906 // 32 bit
16907 } else {
16908 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
16909 buffer.writeUInt32LE(number, offset + 1)
16910 }
16911
16912 return size
16913}
16914
16915function writeUInt64LE (buffer, value, offset) {
16916 verifuint(value, 0x001fffffffffffff)
16917
16918 buffer.writeInt32LE(value & -1, offset)
16919 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16920}
16921
16922function varIntSize (i) {
16923 return i < 253 ? 1
16924 : i < 0x10000 ? 3
16925 : i < 0x100000000 ? 5
16926 : 9
16927}
16928
16929function writeVarInt (buffer, number, offset) {
16930 var size = varIntSize(number)
16931
16932 // 8 bit
16933 if (size === 1) {
16934 buffer.writeUInt8(number, offset)
16935
16936 // 16 bit
16937 } else if (size === 3) {
16938 buffer.writeUInt8(253, offset)
16939 buffer.writeUInt16LE(number, offset + 1)
16940
16941 // 32 bit
16942 } else if (size === 5) {
16943 buffer.writeUInt8(254, offset)
16944 buffer.writeUInt32LE(number, offset + 1)
16945
16946 // 64 bit
16947 } else {
16948 buffer.writeUInt8(255, offset)
16949 writeUInt64LE(buffer, number, offset + 1)
16950 }
16951
16952 return size
16953}
16954
16955function varIntBuffer (i) {
16956 var size = varIntSize(i)
16957 var buffer = new Buffer(size)
16958 writeVarInt(buffer, i, 0)
16959
16960 return buffer
16961}
16962
16963function reverse (buffer) {
16964 var buffer2 = new Buffer(buffer)
16965 Array.prototype.reverse.call(buffer2)
16966 return buffer2
16967}
16968
16969module.exports = {
16970 pushDataSize: pushDataSize,
16971 readPushDataInt: readPushDataInt,
16972 readUInt64LE: readUInt64LE,
16973 readVarInt: readVarInt,
16974 reverse: reverse,
16975 varIntBuffer: varIntBuffer,
16976 varIntSize: varIntSize,
16977 writePushDataInt: writePushDataInt,
16978 writeUInt64LE: writeUInt64LE,
16979 writeVarInt: writeVarInt
16980}
16981
16982}).call(this,require("buffer").Buffer)
16983},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
16984var createHash = require('create-hash')
16985
16986function hash160 (buffer) {
16987 return ripemd160(sha256(buffer))
16988}
16989
16990function hash256 (buffer) {
16991 return sha256(sha256(buffer))
16992}
16993
16994function ripemd160 (buffer) {
16995 return createHash('rmd160').update(buffer).digest()
16996}
16997
16998function sha1 (buffer) {
16999 return createHash('sha1').update(buffer).digest()
17000}
17001
17002function sha256 (buffer) {
17003 return createHash('sha256').update(buffer).digest()
17004}
17005
17006// FIXME: Name not consistent with others
17007var createHmac = require('create-hmac')
17008
17009function HmacSHA256 (buffer, secret) {
17010 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
17011 return createHmac('sha256', secret).update(buffer).digest()
17012}
17013
17014function HmacSHA512 (buffer, secret) {
17015 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
17016 return createHmac('sha512', secret).update(buffer).digest()
17017}
17018
17019module.exports = {
17020 ripemd160: ripemd160,
17021 sha1: sha1,
17022 sha256: sha256,
17023 hash160: hash160,
17024 hash256: hash256,
17025 HmacSHA256: HmacSHA256,
17026 HmacSHA512: HmacSHA512
17027}
17028
17029},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
17030(function (Buffer){
17031var assert = require('assert')
17032var createHmac = require('create-hmac')
17033var typeForce = require('typeforce')
17034
17035var BigInteger = require('bigi')
17036var ECSignature = require('./ecsignature')
17037
17038var ZERO = new Buffer([0])
17039var ONE = new Buffer([1])
17040
17041// https://tools.ietf.org/html/rfc6979#section-3.2
17042function deterministicGenerateK (curve, hash, d, checkSig) {
17043 typeForce('Buffer', hash)
17044 typeForce('BigInteger', d)
17045
17046 // FIXME: remove/uncomment for 2.0.0
17047 // typeForce('Function', checkSig)
17048
17049 if (typeof checkSig !== 'function') {
17050 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
17051
17052 checkSig = function (k) {
17053 var G = curve.G
17054 var n = curve.n
17055 var e = BigInteger.fromBuffer(hash)
17056
17057 var Q = G.multiply(k)
17058
17059 if (curve.isInfinity(Q))
17060 return false
17061
17062 var r = Q.affineX.mod(n)
17063 if (r.signum() === 0)
17064 return false
17065
17066 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
17067 if (s.signum() === 0)
17068 return false
17069
17070 return true
17071 }
17072 }
17073
17074 // sanity check
17075 assert.equal(hash.length, 32, 'Hash must be 256 bit')
17076
17077 var x = d.toBuffer(32)
17078 var k = new Buffer(32)
17079 var v = new Buffer(32)
17080
17081 // Step A, ignored as hash already provided
17082 // Step B
17083 v.fill(1)
17084
17085 // Step C
17086 k.fill(0)
17087
17088 // Step D
17089 k = createHmac('sha256', k)
17090 .update(v)
17091 .update(ZERO)
17092 .update(x)
17093 .update(hash)
17094 .digest()
17095
17096 // Step E
17097 v = createHmac('sha256', k).update(v).digest()
17098
17099 // Step F
17100 k = createHmac('sha256', k)
17101 .update(v)
17102 .update(ONE)
17103 .update(x)
17104 .update(hash)
17105 .digest()
17106
17107 // Step G
17108 v = createHmac('sha256', k).update(v).digest()
17109
17110 // Step H1/H2a, ignored as tlen === qlen (256 bit)
17111 // Step H2b
17112 v = createHmac('sha256', k).update(v).digest()
17113
17114 var T = BigInteger.fromBuffer(v)
17115
17116 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
17117 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
17118 k = createHmac('sha256', k)
17119 .update(v)
17120 .update(ZERO)
17121 .digest()
17122
17123 v = createHmac('sha256', k).update(v).digest()
17124
17125 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
17126 // Step H2b again
17127 v = createHmac('sha256', k).update(v).digest()
17128 T = BigInteger.fromBuffer(v)
17129 }
17130
17131 return T
17132}
17133
17134function sign (curve, hash, d) {
17135 var r, s
17136
17137 var e = BigInteger.fromBuffer(hash)
17138 var n = curve.n
17139 var G = curve.G
17140
17141 deterministicGenerateK(curve, hash, d, function (k) {
17142 var Q = G.multiply(k)
17143
17144 if (curve.isInfinity(Q))
17145 return false
17146
17147 r = Q.affineX.mod(n)
17148 if (r.signum() === 0)
17149 return false
17150
17151 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
17152 if (s.signum() === 0)
17153 return false
17154
17155 return true
17156 })
17157
17158 var N_OVER_TWO = n.shiftRight(1)
17159
17160 // enforce low S values, see bip62: 'low s values in signatures'
17161 if (s.compareTo(N_OVER_TWO) > 0) {
17162 s = n.subtract(s)
17163 }
17164
17165 return new ECSignature(r, s)
17166}
17167
17168function verifyRaw (curve, e, signature, Q) {
17169 var n = curve.n
17170 var G = curve.G
17171
17172 var r = signature.r
17173 var s = signature.s
17174
17175 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
17176 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
17177 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
17178
17179 // c = s^-1 mod n
17180 var c = s.modInverse(n)
17181
17182 // 1.4.4 Compute u1 = es^−1 mod n
17183 // u2 = rs^−1 mod n
17184 var u1 = e.multiply(c).mod(n)
17185 var u2 = r.multiply(c).mod(n)
17186
17187 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
17188 var R = G.multiplyTwo(u1, Q, u2)
17189 var v = R.affineX.mod(n)
17190
17191 // 1.4.5 (cont.) Enforce R is not at infinity
17192 if (curve.isInfinity(R)) return false
17193
17194 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
17195 return v.equals(r)
17196}
17197
17198function verify (curve, hash, signature, Q) {
17199 // 1.4.2 H = Hash(M), already done by the user
17200 // 1.4.3 e = H
17201 var e = BigInteger.fromBuffer(hash)
17202
17203 return verifyRaw(curve, e, signature, Q)
17204}
17205
17206/**
17207 * Recover a public key from a signature.
17208 *
17209 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
17210 * Key Recovery Operation".
17211 *
17212 * http://www.secg.org/download/aid-780/sec1-v2.pdf
17213 */
17214function recoverPubKey (curve, e, signature, i) {
17215 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
17216
17217 var n = curve.n
17218 var G = curve.G
17219
17220 var r = signature.r
17221 var s = signature.s
17222
17223 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
17224 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
17225
17226 // A set LSB signifies that the y-coordinate is odd
17227 var isYOdd = i & 1
17228
17229 // The more significant bit specifies whether we should use the
17230 // first or second candidate key.
17231 var isSecondKey = i >> 1
17232
17233 // 1.1 Let x = r + jn
17234 var x = isSecondKey ? r.add(n) : r
17235 var R = curve.pointFromX(isYOdd, x)
17236
17237 // 1.4 Check that nR is at infinity
17238 var nR = R.multiply(n)
17239 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
17240
17241 // Compute -e from e
17242 var eNeg = e.negate().mod(n)
17243
17244 // 1.6.1 Compute Q = r^-1 (sR - eG)
17245 // Q = r^-1 (sR + -eG)
17246 var rInv = r.modInverse(n)
17247
17248 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
17249 curve.validate(Q)
17250
17251 return Q
17252}
17253
17254/**
17255 * Calculate pubkey extraction parameter.
17256 *
17257 * When extracting a pubkey from a signature, we have to
17258 * distinguish four different cases. Rather than putting this
17259 * burden on the verifier, Bitcoin includes a 2-bit value with the
17260 * signature.
17261 *
17262 * This function simply tries all four cases and returns the value
17263 * that resulted in a successful pubkey recovery.
17264 */
17265function calcPubKeyRecoveryParam (curve, e, signature, Q) {
17266 for (var i = 0; i < 4; i++) {
17267 var Qprime = recoverPubKey(curve, e, signature, i)
17268
17269 // 1.6.2 Verify Q
17270 if (Qprime.equals(Q)) {
17271 return i
17272 }
17273 }
17274
17275 throw new Error('Unable to find valid recovery factor')
17276}
17277
17278module.exports = {
17279 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
17280 deterministicGenerateK: deterministicGenerateK,
17281 recoverPubKey: recoverPubKey,
17282 sign: sign,
17283 verify: verify,
17284 verifyRaw: verifyRaw
17285}
17286
17287}).call(this,require("buffer").Buffer)
17288},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
17289(function (Buffer){
17290var assert = require('assert')
17291var base58check = require('bs58check')
17292var ecdsa = require('./ecdsa')
17293var networks = require('./networks')
17294var randomBytes = require('randombytes')
17295var typeForce = require('typeforce')
17296
17297var BigInteger = require('bigi')
17298var ECPubKey = require('./ecpubkey')
17299
17300var ecurve = require('ecurve')
17301var secp256k1 = ecurve.getCurveByName('secp256k1')
17302
17303function ECKey (d, compressed) {
17304 assert(d.signum() > 0, 'Private key must be greater than 0')
17305 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
17306
17307 var Q = ECKey.curve.G.multiply(d)
17308
17309 this.d = d
17310 this.pub = new ECPubKey(Q, compressed)
17311}
17312
17313// Constants
17314ECKey.curve = secp256k1
17315
17316// Static constructors
17317ECKey.fromWIF = function (string) {
17318 var payload = base58check.decode(string)
17319 var compressed = false
17320
17321 // Ignore the version byte
17322 payload = payload.slice(1)
17323
17324 if (payload.length === 33) {
17325 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
17326
17327 // Truncate the compression flag
17328 payload = payload.slice(0, -1)
17329 compressed = true
17330 }
17331
17332 assert.equal(payload.length, 32, 'Invalid WIF payload length')
17333
17334 var d = BigInteger.fromBuffer(payload)
17335 return new ECKey(d, compressed)
17336}
17337
17338ECKey.makeRandom = function (compressed, rng) {
17339 rng = rng || randomBytes
17340
17341 var buffer = rng(32)
17342 typeForce('Buffer', buffer)
17343 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
17344
17345 var d = BigInteger.fromBuffer(buffer)
17346 d = d.mod(ECKey.curve.n)
17347
17348 return new ECKey(d, compressed)
17349}
17350
17351// Export functions
17352ECKey.prototype.toWIF = function (network) {
17353 network = network || networks.bitcoin
17354
17355 var bufferLen = this.pub.compressed ? 34 : 33
17356 var buffer = new Buffer(bufferLen)
17357
17358 buffer.writeUInt8(network.wif, 0)
17359 this.d.toBuffer(32).copy(buffer, 1)
17360
17361 if (this.pub.compressed) {
17362 buffer.writeUInt8(0x01, 33)
17363 }
17364
17365 return base58check.encode(buffer)
17366}
17367
17368// Operations
17369ECKey.prototype.sign = function (hash) {
17370 return ecdsa.sign(ECKey.curve, hash, this.d)
17371}
17372
17373module.exports = ECKey
17374
17375}).call(this,require("buffer").Buffer)
17376},{"./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){
17377(function (Buffer){
17378var crypto = require('./crypto')
17379var ecdsa = require('./ecdsa')
17380var typeForce = require('typeforce')
17381var networks = require('./networks')
17382
17383var Address = require('./address')
17384
17385var ecurve = require('ecurve')
17386var secp256k1 = ecurve.getCurveByName('secp256k1')
17387
17388function ECPubKey (Q, compressed) {
17389 if (compressed === undefined) {
17390 compressed = true
17391 }
17392
17393 typeForce('Point', Q)
17394 typeForce('Boolean', compressed)
17395
17396 this.compressed = compressed
17397 this.Q = Q
17398}
17399
17400// Constants
17401ECPubKey.curve = secp256k1
17402
17403// Static constructors
17404ECPubKey.fromBuffer = function (buffer) {
17405 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
17406 return new ECPubKey(Q, Q.compressed)
17407}
17408
17409ECPubKey.fromHex = function (hex) {
17410 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
17411}
17412
17413// Operations
17414ECPubKey.prototype.getAddress = function (network) {
17415 network = network || networks.bitcoin
17416
17417 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
17418}
17419
17420ECPubKey.prototype.verify = function (hash, signature) {
17421 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
17422}
17423
17424// Export functions
17425ECPubKey.prototype.toBuffer = function () {
17426 return this.Q.getEncoded(this.compressed)
17427}
17428
17429ECPubKey.prototype.toHex = function () {
17430 return this.toBuffer().toString('hex')
17431}
17432
17433module.exports = ECPubKey
17434
17435}).call(this,require("buffer").Buffer)
17436},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
17437(function (Buffer){
17438var assert = require('assert')
17439var typeForce = require('typeforce')
17440
17441var BigInteger = require('bigi')
17442
17443function ECSignature (r, s) {
17444 typeForce('BigInteger', r)
17445 typeForce('BigInteger', s)
17446
17447 this.r = r
17448 this.s = s
17449}
17450
17451ECSignature.parseCompact = function (buffer) {
17452 assert.equal(buffer.length, 65, 'Invalid signature length')
17453 var i = buffer.readUInt8(0) - 27
17454
17455 // At most 3 bits
17456 assert.equal(i, i & 7, 'Invalid signature parameter')
17457 var compressed = !!(i & 4)
17458
17459 // Recovery param only
17460 i = i & 3
17461
17462 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
17463 var s = BigInteger.fromBuffer(buffer.slice(33))
17464
17465 return {
17466 compressed: compressed,
17467 i: i,
17468 signature: new ECSignature(r, s)
17469 }
17470}
17471
17472ECSignature.fromDER = function (buffer) {
17473 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
17474 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
17475 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
17476
17477 var rLen = buffer.readUInt8(3)
17478 assert(rLen > 0, 'R length is zero')
17479
17480 var offset = 4 + rLen
17481 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
17482
17483 var sLen = buffer.readUInt8(offset + 1)
17484 assert(sLen > 0, 'S length is zero')
17485
17486 var rB = buffer.slice(4, offset)
17487 var sB = buffer.slice(offset + 2)
17488 offset += 2 + sLen
17489
17490 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
17491 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
17492 }
17493
17494 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
17495 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
17496 }
17497
17498 assert.equal(offset, buffer.length, 'Invalid DER encoding')
17499 var r = BigInteger.fromDERInteger(rB)
17500 var s = BigInteger.fromDERInteger(sB)
17501
17502 assert(r.signum() >= 0, 'R value is negative')
17503 assert(s.signum() >= 0, 'S value is negative')
17504
17505 return new ECSignature(r, s)
17506}
17507
17508// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
17509ECSignature.parseScriptSignature = function (buffer) {
17510 var hashType = buffer.readUInt8(buffer.length - 1)
17511 var hashTypeMod = hashType & ~0x80
17512
17513 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
17514
17515 return {
17516 signature: ECSignature.fromDER(buffer.slice(0, -1)),
17517 hashType: hashType
17518 }
17519}
17520
17521ECSignature.prototype.toCompact = function (i, compressed) {
17522 if (compressed) {
17523 i += 4
17524 }
17525
17526 i += 27
17527
17528 var buffer = new Buffer(65)
17529 buffer.writeUInt8(i, 0)
17530
17531 this.r.toBuffer(32).copy(buffer, 1)
17532 this.s.toBuffer(32).copy(buffer, 33)
17533
17534 return buffer
17535}
17536
17537ECSignature.prototype.toDER = function () {
17538 var rBa = this.r.toDERInteger()
17539 var sBa = this.s.toDERInteger()
17540
17541 var sequence = []
17542
17543 // INTEGER
17544 sequence.push(0x02, rBa.length)
17545 sequence = sequence.concat(rBa)
17546
17547 // INTEGER
17548 sequence.push(0x02, sBa.length)
17549 sequence = sequence.concat(sBa)
17550
17551 // SEQUENCE
17552 sequence.unshift(0x30, sequence.length)
17553
17554 return new Buffer(sequence)
17555}
17556
17557ECSignature.prototype.toScriptSignature = function (hashType) {
17558 var hashTypeMod = hashType & ~0x80
17559 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
17560
17561 var hashTypeBuffer = new Buffer(1)
17562 hashTypeBuffer.writeUInt8(hashType, 0)
17563
17564 return Buffer.concat([this.toDER(), hashTypeBuffer])
17565}
17566
17567module.exports = ECSignature
17568
17569}).call(this,require("buffer").Buffer)
17570},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
17571(function (Buffer){
17572var assert = require('assert')
17573var base58check = require('bs58check')
17574var bcrypto = require('./crypto')
17575var createHmac = require('create-hmac')
17576var typeForce = require('typeforce')
17577var networks = require('./networks')
17578
17579var BigInteger = require('bigi')
17580var ECKey = require('./eckey')
17581var ECPubKey = require('./ecpubkey')
17582
17583var ecurve = require('ecurve')
17584var curve = ecurve.getCurveByName('secp256k1')
17585
17586function findBIP32NetworkByVersion (version) {
17587 for (var name in networks) {
17588 var network = networks[name]
17589
17590 if (version === network.bip32.private || version === network.bip32.public) {
17591 return network
17592 }
17593 }
17594
17595 assert(false, 'Could not find network for ' + version.toString(16))
17596}
17597
17598function HDNode (K, chainCode, network) {
17599 network = network || networks.bitcoin
17600
17601 typeForce('Buffer', chainCode)
17602
17603 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
17604 assert(network.bip32, 'Unknown BIP32 constants for network')
17605
17606 this.chainCode = chainCode
17607 this.depth = 0
17608 this.index = 0
17609 this.parentFingerprint = 0x00000000
17610 this.network = network
17611
17612 if (K instanceof BigInteger) {
17613 this.privKey = new ECKey(K, true)
17614 this.pubKey = this.privKey.pub
17615 } else if (K instanceof ECKey) {
17616 assert(K.pub.compressed, 'ECKey must be compressed')
17617 this.privKey = K
17618 this.pubKey = K.pub
17619 } else if (K instanceof ECPubKey) {
17620 assert(K.compressed, 'ECPubKey must be compressed')
17621 this.pubKey = K
17622 } else {
17623 this.pubKey = new ECPubKey(K, true)
17624 }
17625}
17626
17627HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
17628HDNode.HIGHEST_BIT = 0x80000000
17629HDNode.LENGTH = 78
17630
17631HDNode.fromSeedBuffer = function (seed, network) {
17632 typeForce('Buffer', seed)
17633
17634 assert(seed.length >= 16, 'Seed should be at least 128 bits')
17635 assert(seed.length <= 64, 'Seed should be at most 512 bits')
17636
17637 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
17638 var IL = I.slice(0, 32)
17639 var IR = I.slice(32)
17640
17641 // In case IL is 0 or >= n, the master key is invalid
17642 // This is handled by `new ECKey` in the HDNode constructor
17643 var pIL = BigInteger.fromBuffer(IL)
17644
17645 return new HDNode(pIL, IR, network)
17646}
17647
17648HDNode.fromSeedHex = function (hex, network) {
17649 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
17650}
17651
17652HDNode.fromBase58 = function (string, network) {
17653 return HDNode.fromBuffer(base58check.decode(string), network, true)
17654}
17655
17656// FIXME: remove in 2.x.y
17657HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
17658 if (!__ignoreDeprecation) {
17659 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
17660 }
17661
17662 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
17663
17664 // 4 byte: version bytes
17665 var version = buffer.readUInt32BE(0)
17666
17667 if (network) {
17668 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
17669
17670 // auto-detect
17671 } else {
17672 network = findBIP32NetworkByVersion(version)
17673 }
17674
17675 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
17676 var depth = buffer.readUInt8(4)
17677
17678 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
17679 var parentFingerprint = buffer.readUInt32BE(5)
17680 if (depth === 0) {
17681 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
17682 }
17683
17684 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
17685 // This is encoded in MSB order. (0x00000000 if master key)
17686 var index = buffer.readUInt32BE(9)
17687 assert(depth > 0 || index === 0, 'Invalid index')
17688
17689 // 32 bytes: the chain code
17690 var chainCode = buffer.slice(13, 45)
17691 var data, hd
17692
17693 // 33 bytes: private key data (0x00 + k)
17694 if (version === network.bip32.private) {
17695 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
17696 data = buffer.slice(46, 78)
17697 var d = BigInteger.fromBuffer(data)
17698 hd = new HDNode(d, chainCode, network)
17699
17700 // 33 bytes: public key data (0x02 + X or 0x03 + X)
17701 } else {
17702 data = buffer.slice(45, 78)
17703 var Q = ecurve.Point.decodeFrom(curve, data)
17704 assert.equal(Q.compressed, true, 'Invalid public key')
17705
17706 // Verify that the X coordinate in the public point corresponds to a point on the curve.
17707 // If not, the extended public key is invalid.
17708 curve.validate(Q)
17709
17710 hd = new HDNode(Q, chainCode, network)
17711 }
17712
17713 hd.depth = depth
17714 hd.index = index
17715 hd.parentFingerprint = parentFingerprint
17716
17717 return hd
17718}
17719
17720// FIXME: remove in 2.x.y
17721HDNode.fromHex = function (hex, network) {
17722 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
17723}
17724
17725HDNode.prototype.getIdentifier = function () {
17726 return bcrypto.hash160(this.pubKey.toBuffer())
17727}
17728
17729HDNode.prototype.getFingerprint = function () {
17730 return this.getIdentifier().slice(0, 4)
17731}
17732
17733HDNode.prototype.getAddress = function () {
17734 return this.pubKey.getAddress(this.network)
17735}
17736
17737HDNode.prototype.neutered = function () {
17738 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
17739 neutered.depth = this.depth
17740 neutered.index = this.index
17741 neutered.parentFingerprint = this.parentFingerprint
17742
17743 return neutered
17744}
17745
17746HDNode.prototype.toBase58 = function (isPrivate) {
17747 return base58check.encode(this.toBuffer(isPrivate, true))
17748}
17749
17750// FIXME: remove in 2.x.y
17751HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
17752 if (isPrivate === undefined) {
17753 isPrivate = !!this.privKey
17754
17755 // FIXME: remove in 2.x.y
17756 } else {
17757 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
17758 }
17759
17760 if (!__ignoreDeprecation) {
17761 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
17762 }
17763
17764 // Version
17765 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
17766 var buffer = new Buffer(HDNode.LENGTH)
17767
17768 // 4 bytes: version bytes
17769 buffer.writeUInt32BE(version, 0)
17770
17771 // Depth
17772 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
17773 buffer.writeUInt8(this.depth, 4)
17774
17775 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
17776 buffer.writeUInt32BE(this.parentFingerprint, 5)
17777
17778 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
17779 // This is encoded in Big endian. (0x00000000 if master key)
17780 buffer.writeUInt32BE(this.index, 9)
17781
17782 // 32 bytes: the chain code
17783 this.chainCode.copy(buffer, 13)
17784
17785 // 33 bytes: the public key or private key data
17786 if (isPrivate) {
17787 // FIXME: remove in 2.x.y
17788 assert(this.privKey, 'Missing private key')
17789
17790 // 0x00 + k for private keys
17791 buffer.writeUInt8(0, 45)
17792 this.privKey.d.toBuffer(32).copy(buffer, 46)
17793 } else {
17794 // X9.62 encoding for public keys
17795 this.pubKey.toBuffer().copy(buffer, 45)
17796 }
17797
17798 return buffer
17799}
17800
17801// FIXME: remove in 2.x.y
17802HDNode.prototype.toHex = function (isPrivate) {
17803 return this.toBuffer(isPrivate).toString('hex')
17804}
17805
17806// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
17807HDNode.prototype.derive = function (index) {
17808 var isHardened = index >= HDNode.HIGHEST_BIT
17809 var indexBuffer = new Buffer(4)
17810 indexBuffer.writeUInt32BE(index, 0)
17811
17812 var data
17813
17814 // Hardened child
17815 if (isHardened) {
17816 assert(this.privKey, 'Could not derive hardened child key')
17817
17818 // data = 0x00 || ser256(kpar) || ser32(index)
17819 data = Buffer.concat([
17820 this.privKey.d.toBuffer(33),
17821 indexBuffer
17822 ])
17823
17824 // Normal child
17825 } else {
17826 // data = serP(point(kpar)) || ser32(index)
17827 // = serP(Kpar) || ser32(index)
17828 data = Buffer.concat([
17829 this.pubKey.toBuffer(),
17830 indexBuffer
17831 ])
17832 }
17833
17834 var I = createHmac('sha512', this.chainCode).update(data).digest()
17835 var IL = I.slice(0, 32)
17836 var IR = I.slice(32)
17837
17838 var pIL = BigInteger.fromBuffer(IL)
17839
17840 // In case parse256(IL) >= n, proceed with the next value for i
17841 if (pIL.compareTo(curve.n) >= 0) {
17842 return this.derive(index + 1)
17843 }
17844
17845 // Private parent key -> private child key
17846 var hd
17847 if (this.privKey) {
17848 // ki = parse256(IL) + kpar (mod n)
17849 var ki = pIL.add(this.privKey.d).mod(curve.n)
17850
17851 // In case ki == 0, proceed with the next value for i
17852 if (ki.signum() === 0) {
17853 return this.derive(index + 1)
17854 }
17855
17856 hd = new HDNode(ki, IR, this.network)
17857
17858 // Public parent key -> public child key
17859 } else {
17860 // Ki = point(parse256(IL)) + Kpar
17861 // = G*IL + Kpar
17862 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
17863
17864 // In case Ki is the point at infinity, proceed with the next value for i
17865 if (curve.isInfinity(Ki)) {
17866 return this.derive(index + 1)
17867 }
17868
17869 hd = new HDNode(Ki, IR, this.network)
17870 }
17871
17872 hd.depth = this.depth + 1
17873 hd.index = index
17874 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
17875
17876 return hd
17877}
17878
17879HDNode.prototype.deriveHardened = function (index) {
17880 // Only derives hardened private keys by default
17881 return this.derive(index + HDNode.HIGHEST_BIT)
17882}
17883
17884HDNode.prototype.toString = HDNode.prototype.toBase58
17885
17886module.exports = HDNode
17887
17888}).call(this,require("buffer").Buffer)
17889},{"./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){
17890module.exports = {
17891 Address: require('./address'),
17892 base58check: require('./base58check'),
17893 Block: require('./block'),
17894 bufferutils: require('./bufferutils'),
17895 crypto: require('./crypto'),
17896 ecdsa: require('./ecdsa'),
17897 ECKey: require('./eckey'),
17898 ECPubKey: require('./ecpubkey'),
17899 ECSignature: require('./ecsignature'),
17900 Message: require('./message'),
17901 opcodes: require('./opcodes'),
17902 HDNode: require('./hdnode'),
17903 Script: require('./script'),
17904 scripts: require('./scripts'),
17905 Transaction: require('./transaction'),
17906 TransactionBuilder: require('./transaction_builder'),
17907 networks: require('./networks'),
17908 Wallet: require('./wallet')
17909}
17910
17911},{"./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){
17912(function (Buffer){
17913var bufferutils = require('./bufferutils')
17914var crypto = require('./crypto')
17915var ecdsa = require('./ecdsa')
17916var networks = require('./networks')
17917
17918var BigInteger = require('bigi')
17919var ECPubKey = require('./ecpubkey')
17920var ECSignature = require('./ecsignature')
17921
17922var ecurve = require('ecurve')
17923var ecparams = ecurve.getCurveByName('secp256k1')
17924
17925function magicHash (message, network) {
17926 var magicPrefix = new Buffer(network.magicPrefix)
17927 var messageBuffer = new Buffer(message)
17928 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
17929
17930 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
17931 return crypto.hash256(buffer)
17932}
17933
17934function sign (privKey, message, network) {
17935 network = network || networks.bitcoin
17936
17937 var hash = magicHash(message, network)
17938 var signature = privKey.sign(hash)
17939 var e = BigInteger.fromBuffer(hash)
17940 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
17941
17942 return signature.toCompact(i, privKey.pub.compressed)
17943}
17944
17945// TODO: network could be implied from address
17946function verify (address, signature, message, network) {
17947 if (!Buffer.isBuffer(signature)) {
17948 signature = new Buffer(signature, 'base64')
17949 }
17950
17951 network = network || networks.bitcoin
17952
17953 var hash = magicHash(message, network)
17954 var parsed = ECSignature.parseCompact(signature)
17955 var e = BigInteger.fromBuffer(hash)
17956 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
17957
17958 var pubKey = new ECPubKey(Q, parsed.compressed)
17959 return pubKey.getAddress(network).toString() === address.toString()
17960}
17961
17962module.exports = {
17963 magicHash: magicHash,
17964 sign: sign,
17965 verify: verify
17966}
17967
17968}).call(this,require("buffer").Buffer)
17969},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
17970// https://en.bitcoin.it/wiki/List_of_address_prefixes
17971// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
17972
17973var networks = {
17974 bitcoin: {
17975 magicPrefix: '\x18Bitcoin Signed Message:\n',
17976 bip32: {
17977 public: 0x0488b21e,
17978 private: 0x0488ade4
17979 },
17980 pubKeyHash: 0x00,
17981 scriptHash: 0x05,
17982 wif: 0x80,
17983 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
17984 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
17985 estimateFee: estimateFee('bitcoin')
17986 },
17987 testnet: {
17988 magicPrefix: '\x18Bitcoin Signed Message:\n',
17989 bip32: {
17990 public: 0x043587cf,
17991 private: 0x04358394
17992 },
17993 pubKeyHash: 0x6f,
17994 scriptHash: 0xc4,
17995 wif: 0xef,
17996 dustThreshold: 546,
17997 feePerKb: 10000,
17998 estimateFee: estimateFee('testnet')
17999 },
18000 litecoin: {
18001 magicPrefix: '\x19Litecoin Signed Message:\n',
18002 bip32: {
18003 public: 0x019da462,
18004 private: 0x019d9cfe
18005 },
18006 pubKeyHash: 0x30,
18007 scriptHash: 0x05,
18008 wif: 0xb0,
18009 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
18010 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
18011 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
18012 estimateFee: estimateFee('litecoin')
18013 },
18014 dogecoin: {
18015 magicPrefix: '\x19Dogecoin Signed Message:\n',
18016 bip32: {
18017 public: 0x02facafd,
18018 private: 0x02fac398
18019 },
18020 pubKeyHash: 0x1e,
18021 scriptHash: 0x16,
18022 wif: 0x9e,
18023 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
18024 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
18025 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
18026 estimateFee: estimateFee('dogecoin')
18027 },
18028 viacoin: {
18029 magicPrefix: '\x18Viacoin Signed Message:\n',
18030 bip32: {
18031 public: 0x0488b21e,
18032 private: 0x0488ade4
18033 },
18034 pubKeyHash: 0x47,
18035 scriptHash: 0x21,
18036 wif: 0xc7,
18037 dustThreshold: 560,
18038 dustSoftThreshold: 100000,
18039 feePerKb: 100000, //
18040 estimateFee: estimateFee('viacoin')
18041 },
18042 viacointestnet: {
18043 magicPrefix: '\x18Viacoin Signed Message:\n',
18044 bip32: {
18045 public: 0x043587cf,
18046 private: 0x04358394
18047 },
18048 pubKeyHash: 0x7f,
18049 scriptHash: 0xc4,
18050 wif: 0xff,
18051 dustThreshold: 560,
18052 dustSoftThreshold: 100000,
18053 feePerKb: 100000,
18054 estimateFee: estimateFee('viacointestnet')
18055 },
18056 gamerscoin: {
18057 magicPrefix: '\x19Gamerscoin Signed Message:\n',
18058 bip32: {
18059 public: 0x019da462,
18060 private: 0x019d9cfe
18061 },
18062 pubKeyHash: 0x26,
18063 scriptHash: 0x05,
18064 wif: 0xA6,
18065 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
18066 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
18067 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
18068 estimateFee: estimateFee('gamerscoin')
18069 },
18070 jumbucks: {
18071 magicPrefix: '\x19Jumbucks Signed Message:\n',
18072 bip32: {
18073 public: 0x037a689a,
18074 private: 0x037a6460
18075 },
18076 pubKeyHash: 0x2b,
18077 scriptHash: 0x05,
18078 wif: 0xab,
18079 dustThreshold: 0,
18080 dustSoftThreshold: 10000,
18081 feePerKb: 10000,
18082 estimateFee: estimateFee('jumbucks')
18083 },
18084 zetacoin: {
18085 magicPrefix: '\x18Zetacoin Signed Message:\n',
18086 bip32: {
18087 public: 0x0488b21e,
18088 private: 0x0488ade4
18089 },
18090 pubKeyHash: 0x50,
18091 scriptHash: 0x09,
18092 wif: 0xe0,
18093 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
18094 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
18095 estimateFee: estimateFee('zetacoin')
18096 }
18097}
18098
18099function estimateFee (type) {
18100 return function (tx) {
18101 var network = networks[type]
18102 var baseFee = network.feePerKb
18103 var byteSize = tx.toBuffer().length
18104
18105 var fee = baseFee * Math.ceil(byteSize / 1000)
18106 if (network.dustSoftThreshold === undefined) return fee
18107
18108 tx.outs.forEach(function (e) {
18109 if (e.value < network.dustSoftThreshold) {
18110 fee += baseFee
18111 }
18112 })
18113
18114 return fee
18115 }
18116}
18117
18118module.exports = networks
18119
18120},{}],67:[function(require,module,exports){
18121module.exports = {
18122 // push value
18123 OP_FALSE: 0,
18124 OP_0: 0,
18125 OP_PUSHDATA1: 76,
18126 OP_PUSHDATA2: 77,
18127 OP_PUSHDATA4: 78,
18128 OP_1NEGATE: 79,
18129 OP_RESERVED: 80,
18130 OP_1: 81,
18131 OP_TRUE: 81,
18132 OP_2: 82,
18133 OP_3: 83,
18134 OP_4: 84,
18135 OP_5: 85,
18136 OP_6: 86,
18137 OP_7: 87,
18138 OP_8: 88,
18139 OP_9: 89,
18140 OP_10: 90,
18141 OP_11: 91,
18142 OP_12: 92,
18143 OP_13: 93,
18144 OP_14: 94,
18145 OP_15: 95,
18146 OP_16: 96,
18147
18148 // control
18149 OP_NOP: 97,
18150 OP_VER: 98,
18151 OP_IF: 99,
18152 OP_NOTIF: 100,
18153 OP_VERIF: 101,
18154 OP_VERNOTIF: 102,
18155 OP_ELSE: 103,
18156 OP_ENDIF: 104,
18157 OP_VERIFY: 105,
18158 OP_RETURN: 106,
18159
18160 // stack ops
18161 OP_TOALTSTACK: 107,
18162 OP_FROMALTSTACK: 108,
18163 OP_2DROP: 109,
18164 OP_2DUP: 110,
18165 OP_3DUP: 111,
18166 OP_2OVER: 112,
18167 OP_2ROT: 113,
18168 OP_2SWAP: 114,
18169 OP_IFDUP: 115,
18170 OP_DEPTH: 116,
18171 OP_DROP: 117,
18172 OP_DUP: 118,
18173 OP_NIP: 119,
18174 OP_OVER: 120,
18175 OP_PICK: 121,
18176 OP_ROLL: 122,
18177 OP_ROT: 123,
18178 OP_SWAP: 124,
18179 OP_TUCK: 125,
18180
18181 // splice ops
18182 OP_CAT: 126,
18183 OP_SUBSTR: 127,
18184 OP_LEFT: 128,
18185 OP_RIGHT: 129,
18186 OP_SIZE: 130,
18187
18188 // bit logic
18189 OP_INVERT: 131,
18190 OP_AND: 132,
18191 OP_OR: 133,
18192 OP_XOR: 134,
18193 OP_EQUAL: 135,
18194 OP_EQUALVERIFY: 136,
18195 OP_RESERVED1: 137,
18196 OP_RESERVED2: 138,
18197
18198 // numeric
18199 OP_1ADD: 139,
18200 OP_1SUB: 140,
18201 OP_2MUL: 141,
18202 OP_2DIV: 142,
18203 OP_NEGATE: 143,
18204 OP_ABS: 144,
18205 OP_NOT: 145,
18206 OP_0NOTEQUAL: 146,
18207
18208 OP_ADD: 147,
18209 OP_SUB: 148,
18210 OP_MUL: 149,
18211 OP_DIV: 150,
18212 OP_MOD: 151,
18213 OP_LSHIFT: 152,
18214 OP_RSHIFT: 153,
18215
18216 OP_BOOLAND: 154,
18217 OP_BOOLOR: 155,
18218 OP_NUMEQUAL: 156,
18219 OP_NUMEQUALVERIFY: 157,
18220 OP_NUMNOTEQUAL: 158,
18221 OP_LESSTHAN: 159,
18222 OP_GREATERTHAN: 160,
18223 OP_LESSTHANOREQUAL: 161,
18224 OP_GREATERTHANOREQUAL: 162,
18225 OP_MIN: 163,
18226 OP_MAX: 164,
18227
18228 OP_WITHIN: 165,
18229
18230 // crypto
18231 OP_RIPEMD160: 166,
18232 OP_SHA1: 167,
18233 OP_SHA256: 168,
18234 OP_HASH160: 169,
18235 OP_HASH256: 170,
18236 OP_CODESEPARATOR: 171,
18237 OP_CHECKSIG: 172,
18238 OP_CHECKSIGVERIFY: 173,
18239 OP_CHECKMULTISIG: 174,
18240 OP_CHECKMULTISIGVERIFY: 175,
18241
18242 // expansion
18243 OP_NOP1: 176,
18244 OP_NOP2: 177,
18245 OP_NOP3: 178,
18246 OP_NOP4: 179,
18247 OP_NOP5: 180,
18248 OP_NOP6: 181,
18249 OP_NOP7: 182,
18250 OP_NOP8: 183,
18251 OP_NOP9: 184,
18252 OP_NOP10: 185,
18253
18254 // template matching params
18255 OP_PUBKEYHASH: 253,
18256 OP_PUBKEY: 254,
18257 OP_INVALIDOPCODE: 255
18258}
18259
18260},{}],68:[function(require,module,exports){
18261(function (Buffer){
18262var assert = require('assert')
18263var bufferutils = require('./bufferutils')
18264var crypto = require('./crypto')
18265var typeForce = require('typeforce')
18266var opcodes = require('./opcodes')
18267
18268function Script (buffer, chunks) {
18269 typeForce('Buffer', buffer)
18270 typeForce('Array', chunks)
18271
18272 this.buffer = buffer
18273 this.chunks = chunks
18274}
18275
18276Script.fromASM = function (asm) {
18277 var strChunks = asm.split(' ')
18278 var chunks = strChunks.map(function (strChunk) {
18279 // opcode
18280 if (strChunk in opcodes) {
18281 return opcodes[strChunk]
18282
18283 // data chunk
18284 } else {
18285 return new Buffer(strChunk, 'hex')
18286 }
18287 })
18288
18289 return Script.fromChunks(chunks)
18290}
18291
18292Script.fromBuffer = function (buffer) {
18293 var chunks = []
18294 var i = 0
18295
18296 while (i < buffer.length) {
18297 var opcode = buffer.readUInt8(i)
18298
18299 // data chunk
18300 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
18301 var d = bufferutils.readPushDataInt(buffer, i)
18302
18303 // did reading a pushDataInt fail? return non-chunked script
18304 if (d === null) return new Script(buffer, [])
18305 i += d.size
18306
18307 // attempt to read too much data?
18308 if (i + d.number > buffer.length) return new Script(buffer, [])
18309
18310 var data = buffer.slice(i, i + d.number)
18311 i += d.number
18312
18313 chunks.push(data)
18314
18315 // opcode
18316 } else {
18317 chunks.push(opcode)
18318
18319 i += 1
18320 }
18321 }
18322
18323 return new Script(buffer, chunks)
18324}
18325
18326Script.fromChunks = function (chunks) {
18327 typeForce('Array', chunks)
18328
18329 var bufferSize = chunks.reduce(function (accum, chunk) {
18330 // data chunk
18331 if (Buffer.isBuffer(chunk)) {
18332 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
18333 }
18334
18335 // opcode
18336 return accum + 1
18337 }, 0.0)
18338
18339 var buffer = new Buffer(bufferSize)
18340 var offset = 0
18341
18342 chunks.forEach(function (chunk) {
18343 // data chunk
18344 if (Buffer.isBuffer(chunk)) {
18345 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
18346
18347 chunk.copy(buffer, offset)
18348 offset += chunk.length
18349
18350 // opcode
18351 } else {
18352 buffer.writeUInt8(chunk, offset)
18353 offset += 1
18354 }
18355 })
18356
18357 assert.equal(offset, buffer.length, 'Could not decode chunks')
18358 return new Script(buffer, chunks)
18359}
18360
18361Script.fromHex = function (hex) {
18362 return Script.fromBuffer(new Buffer(hex, 'hex'))
18363}
18364
18365Script.EMPTY = Script.fromChunks([])
18366
18367Script.prototype.getHash = function () {
18368 return crypto.hash160(this.buffer)
18369}
18370
18371// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
18372Script.prototype.without = function (needle) {
18373 return Script.fromChunks(this.chunks.filter(function (op) {
18374 return op !== needle
18375 }))
18376}
18377
18378var reverseOps = []
18379for (var op in opcodes) {
18380 var code = opcodes[op]
18381 reverseOps[code] = op
18382}
18383
18384Script.prototype.toASM = function () {
18385 return this.chunks.map(function (chunk) {
18386 // data chunk
18387 if (Buffer.isBuffer(chunk)) {
18388 return chunk.toString('hex')
18389
18390 // opcode
18391 } else {
18392 return reverseOps[chunk]
18393 }
18394 }).join(' ')
18395}
18396
18397Script.prototype.toBuffer = function () {
18398 return this.buffer
18399}
18400
18401Script.prototype.toHex = function () {
18402 return this.toBuffer().toString('hex')
18403}
18404
18405module.exports = Script
18406
18407}).call(this,require("buffer").Buffer)
18408},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
18409(function (Buffer){
18410var assert = require('assert')
18411var ops = require('./opcodes')
18412var typeForce = require('typeforce')
18413
18414var ecurve = require('ecurve')
18415var curve = ecurve.getCurveByName('secp256k1')
18416
18417var ECSignature = require('./ecsignature')
18418var Script = require('./script')
18419
18420function isCanonicalPubKey (buffer) {
18421 if (!Buffer.isBuffer(buffer)) return false
18422
18423 try {
18424 ecurve.Point.decodeFrom(curve, buffer)
18425 } catch (e) {
18426 if (!(e.message.match(/Invalid sequence (length|tag)/)))
18427 throw e
18428
18429 return false
18430 }
18431
18432 return true
18433}
18434
18435function isCanonicalSignature (buffer) {
18436 if (!Buffer.isBuffer(buffer)) return false
18437
18438 try {
18439 ECSignature.parseScriptSignature(buffer)
18440 } catch (e) {
18441 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/))) {
18442 throw e
18443 }
18444
18445 return false
18446 }
18447
18448 return true
18449}
18450
18451function isPubKeyHashInput (script) {
18452 return script.chunks.length === 2 &&
18453 isCanonicalSignature(script.chunks[0]) &&
18454 isCanonicalPubKey(script.chunks[1])
18455}
18456
18457function isPubKeyHashOutput (script) {
18458 return script.chunks.length === 5 &&
18459 script.chunks[0] === ops.OP_DUP &&
18460 script.chunks[1] === ops.OP_HASH160 &&
18461 Buffer.isBuffer(script.chunks[2]) &&
18462 script.chunks[2].length === 20 &&
18463 script.chunks[3] === ops.OP_EQUALVERIFY &&
18464 script.chunks[4] === ops.OP_CHECKSIG
18465}
18466
18467function isPubKeyInput (script) {
18468 return script.chunks.length === 1 &&
18469 isCanonicalSignature(script.chunks[0])
18470}
18471
18472function isPubKeyOutput (script) {
18473 return script.chunks.length === 2 &&
18474 isCanonicalPubKey(script.chunks[0]) &&
18475 script.chunks[1] === ops.OP_CHECKSIG
18476}
18477
18478function isScriptHashInput (script, allowIncomplete) {
18479 if (script.chunks.length < 2) return false
18480
18481 var lastChunk = script.chunks[script.chunks.length - 1]
18482 if (!Buffer.isBuffer(lastChunk)) return false
18483
18484 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
18485 var redeemScript = Script.fromBuffer(lastChunk)
18486
18487 // is redeemScript a valid script?
18488 if (redeemScript.chunks.length === 0) return false
18489
18490 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
18491}
18492
18493function isScriptHashOutput (script) {
18494 return script.chunks.length === 3 &&
18495 script.chunks[0] === ops.OP_HASH160 &&
18496 Buffer.isBuffer(script.chunks[1]) &&
18497 script.chunks[1].length === 20 &&
18498 script.chunks[2] === ops.OP_EQUAL
18499}
18500
18501// allowIncomplete is to account for combining signatures
18502// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
18503function isMultisigInput (script, allowIncomplete) {
18504 if (script.chunks.length < 2) return false
18505 if (script.chunks[0] !== ops.OP_0) return false
18506
18507 if (allowIncomplete) {
18508 return script.chunks.slice(1).every(function (chunk) {
18509 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
18510 })
18511 }
18512
18513 return script.chunks.slice(1).every(isCanonicalSignature)
18514}
18515
18516function isMultisigOutput (script) {
18517 if (script.chunks.length < 4) return false
18518 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
18519
18520 var mOp = script.chunks[0]
18521 if (mOp === ops.OP_0) return false
18522 if (mOp < ops.OP_1) return false
18523 if (mOp > ops.OP_16) return false
18524
18525 var nOp = script.chunks[script.chunks.length - 2]
18526 if (nOp === ops.OP_0) return false
18527 if (nOp < ops.OP_1) return false
18528 if (nOp > ops.OP_16) return false
18529
18530 var m = mOp - (ops.OP_1 - 1)
18531 var n = nOp - (ops.OP_1 - 1)
18532 if (n < m) return false
18533
18534 var pubKeys = script.chunks.slice(1, -2)
18535 if (n < pubKeys.length) return false
18536
18537 return pubKeys.every(isCanonicalPubKey)
18538}
18539
18540function isNullDataOutput (script) {
18541 return script.chunks[0] === ops.OP_RETURN
18542}
18543
18544function classifyOutput (script) {
18545 typeForce('Script', script)
18546
18547 if (isPubKeyHashOutput(script)) {
18548 return 'pubkeyhash'
18549 } else if (isScriptHashOutput(script)) {
18550 return 'scripthash'
18551 } else if (isMultisigOutput(script)) {
18552 return 'multisig'
18553 } else if (isPubKeyOutput(script)) {
18554 return 'pubkey'
18555 } else if (isNullDataOutput(script)) {
18556 return 'nulldata'
18557 }
18558
18559 return 'nonstandard'
18560}
18561
18562function classifyInput (script, allowIncomplete) {
18563 typeForce('Script', script)
18564
18565 if (isPubKeyHashInput(script)) {
18566 return 'pubkeyhash'
18567 } else if (isMultisigInput(script, allowIncomplete)) {
18568 return 'multisig'
18569 } else if (isScriptHashInput(script, allowIncomplete)) {
18570 return 'scripthash'
18571 } else if (isPubKeyInput(script)) {
18572 return 'pubkey'
18573 }
18574
18575 return 'nonstandard'
18576}
18577
18578// Standard Script Templates
18579// {pubKey} OP_CHECKSIG
18580function pubKeyOutput (pubKey) {
18581 return Script.fromChunks([
18582 pubKey.toBuffer(),
18583 ops.OP_CHECKSIG
18584 ])
18585}
18586
18587// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
18588function pubKeyHashOutput (hash) {
18589 typeForce('Buffer', hash)
18590
18591 return Script.fromChunks([
18592 ops.OP_DUP,
18593 ops.OP_HASH160,
18594 hash,
18595 ops.OP_EQUALVERIFY,
18596 ops.OP_CHECKSIG
18597 ])
18598}
18599
18600// OP_HASH160 {scriptHash} OP_EQUAL
18601function scriptHashOutput (hash) {
18602 typeForce('Buffer', hash)
18603
18604 return Script.fromChunks([
18605 ops.OP_HASH160,
18606 hash,
18607 ops.OP_EQUAL
18608 ])
18609}
18610
18611// m [pubKeys ...] n OP_CHECKMULTISIG
18612function multisigOutput (m, pubKeys) {
18613 typeForce(['ECPubKey'], pubKeys)
18614
18615 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
18616
18617 var pubKeyBuffers = pubKeys.map(function (pubKey) {
18618 return pubKey.toBuffer()
18619 })
18620 var n = pubKeys.length
18621
18622 return Script.fromChunks([].concat(
18623 (ops.OP_1 - 1) + m,
18624 pubKeyBuffers,
18625 (ops.OP_1 - 1) + n,
18626 ops.OP_CHECKMULTISIG
18627 ))
18628}
18629
18630// {signature}
18631function pubKeyInput (signature) {
18632 typeForce('Buffer', signature)
18633
18634 return Script.fromChunks([signature])
18635}
18636
18637// {signature} {pubKey}
18638function pubKeyHashInput (signature, pubKey) {
18639 typeForce('Buffer', signature)
18640
18641 return Script.fromChunks([signature, pubKey.toBuffer()])
18642}
18643
18644// <scriptSig> {serialized scriptPubKey script}
18645function scriptHashInput (scriptSig, scriptPubKey) {
18646 return Script.fromChunks([].concat(
18647 scriptSig.chunks,
18648 scriptPubKey.toBuffer()
18649 ))
18650}
18651
18652// OP_0 [signatures ...]
18653function multisigInput (signatures, scriptPubKey) {
18654 if (scriptPubKey) {
18655 assert(isMultisigOutput(scriptPubKey))
18656
18657 var mOp = scriptPubKey.chunks[0]
18658 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
18659 var m = mOp - (ops.OP_1 - 1)
18660 var n = nOp - (ops.OP_1 - 1)
18661
18662 assert(signatures.length >= m, 'Not enough signatures provided')
18663 assert(signatures.length <= n, 'Too many signatures provided')
18664 }
18665
18666 return Script.fromChunks([].concat(ops.OP_0, signatures))
18667}
18668
18669function nullDataOutput (data) {
18670 return Script.fromChunks([ops.OP_RETURN, data])
18671}
18672
18673module.exports = {
18674 isCanonicalPubKey: isCanonicalPubKey,
18675 isCanonicalSignature: isCanonicalSignature,
18676 isPubKeyHashInput: isPubKeyHashInput,
18677 isPubKeyHashOutput: isPubKeyHashOutput,
18678 isPubKeyInput: isPubKeyInput,
18679 isPubKeyOutput: isPubKeyOutput,
18680 isScriptHashInput: isScriptHashInput,
18681 isScriptHashOutput: isScriptHashOutput,
18682 isMultisigInput: isMultisigInput,
18683 isMultisigOutput: isMultisigOutput,
18684 isNullDataOutput: isNullDataOutput,
18685 classifyOutput: classifyOutput,
18686 classifyInput: classifyInput,
18687 pubKeyOutput: pubKeyOutput,
18688 pubKeyHashOutput: pubKeyHashOutput,
18689 scriptHashOutput: scriptHashOutput,
18690 multisigOutput: multisigOutput,
18691 pubKeyInput: pubKeyInput,
18692 pubKeyHashInput: pubKeyHashInput,
18693 scriptHashInput: scriptHashInput,
18694 multisigInput: multisigInput,
18695 dataOutput: function (data) {
18696 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
18697 return nullDataOutput(data)
18698 },
18699 nullDataOutput: nullDataOutput
18700}
18701
18702}).call(this,require("buffer").Buffer)
18703},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
18704(function (Buffer){
18705var assert = require('assert')
18706var bufferutils = require('./bufferutils')
18707var crypto = require('./crypto')
18708var typeForce = require('typeforce')
18709var opcodes = require('./opcodes')
18710var scripts = require('./scripts')
18711
18712var Address = require('./address')
18713var ECSignature = require('./ecsignature')
18714var Script = require('./script')
18715
18716function Transaction () {
18717 this.version = 1
18718 this.locktime = 0
18719 this.ins = []
18720 this.outs = []
18721}
18722
18723Transaction.DEFAULT_SEQUENCE = 0xffffffff
18724Transaction.SIGHASH_ALL = 0x01
18725Transaction.SIGHASH_NONE = 0x02
18726Transaction.SIGHASH_SINGLE = 0x03
18727Transaction.SIGHASH_ANYONECANPAY = 0x80
18728
18729Transaction.fromBuffer = function (buffer, __disableAssert) {
18730 var offset = 0
18731 function readSlice (n) {
18732 offset += n
18733 return buffer.slice(offset - n, offset)
18734 }
18735
18736 function readUInt32 () {
18737 var i = buffer.readUInt32LE(offset)
18738 offset += 4
18739 return i
18740 }
18741
18742 function readUInt64 () {
18743 var i = bufferutils.readUInt64LE(buffer, offset)
18744 offset += 8
18745 return i
18746 }
18747
18748 function readVarInt () {
18749 var vi = bufferutils.readVarInt(buffer, offset)
18750 offset += vi.size
18751 return vi.number
18752 }
18753
18754 function readScript () {
18755 return Script.fromBuffer(readSlice(readVarInt()))
18756 }
18757
18758 function readGenerationScript () {
18759 return new Script(readSlice(readVarInt()), [])
18760 }
18761
18762 var tx = new Transaction()
18763 tx.version = readUInt32()
18764
18765 var vinLen = readVarInt()
18766 for (var i = 0; i < vinLen; ++i) {
18767 var hash = readSlice(32)
18768
18769 if (Transaction.isCoinbaseHash(hash)) {
18770 tx.ins.push({
18771 hash: hash,
18772 index: readUInt32(),
18773 script: readGenerationScript(),
18774 sequence: readUInt32()
18775 })
18776 } else {
18777 tx.ins.push({
18778 hash: hash,
18779 index: readUInt32(),
18780 script: readScript(),
18781 sequence: readUInt32()
18782 })
18783 }
18784 }
18785
18786 var voutLen = readVarInt()
18787 for (i = 0; i < voutLen; ++i) {
18788 tx.outs.push({
18789 value: readUInt64(),
18790 script: readScript()
18791 })
18792 }
18793
18794 tx.locktime = readUInt32()
18795
18796 if (!__disableAssert) {
18797 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
18798 }
18799
18800 return tx
18801}
18802
18803Transaction.fromHex = function (hex) {
18804 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
18805}
18806
18807Transaction.isCoinbaseHash = function (buffer) {
18808 return Array.prototype.every.call(buffer, function (x) {
18809 return x === 0
18810 })
18811}
18812
18813/**
18814 * Create a new txIn.
18815 *
18816 * Can be called with any of:
18817 *
18818 * - A transaction and an index
18819 * - A transaction hash and an index
18820 *
18821 * Note that this method does not sign the created input.
18822 */
18823Transaction.prototype.addInput = function (hash, index, sequence, script) {
18824 if (sequence === undefined || sequence === null) {
18825 sequence = Transaction.DEFAULT_SEQUENCE
18826 }
18827
18828 script = script || Script.EMPTY
18829
18830 if (typeof hash === 'string') {
18831 // TxId hex is big-endian, we need little-endian
18832 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
18833 } else if (hash instanceof Transaction) {
18834 hash = hash.getHash()
18835 }
18836
18837 typeForce('Buffer', hash)
18838 typeForce('Number', index)
18839 typeForce('Number', sequence)
18840 typeForce('Script', script)
18841
18842 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
18843
18844 // Add the input and return the input's index
18845 return (this.ins.push({
18846 hash: hash,
18847 index: index,
18848 script: script,
18849 sequence: sequence
18850 }) - 1)
18851}
18852
18853/**
18854 * Create a new txOut.
18855 *
18856 * Can be called with:
18857 *
18858 * - A base58 address string and a value
18859 * - An Address object and a value
18860 * - A scriptPubKey Script and a value
18861 */
18862Transaction.prototype.addOutput = function (scriptPubKey, value) {
18863 // Attempt to get a valid address if it's a base58 address string
18864 if (typeof scriptPubKey === 'string') {
18865 scriptPubKey = Address.fromBase58Check(scriptPubKey)
18866 }
18867
18868 // Attempt to get a valid script if it's an Address object
18869 if (scriptPubKey instanceof Address) {
18870 scriptPubKey = scriptPubKey.toOutputScript()
18871 }
18872
18873 typeForce('Script', scriptPubKey)
18874 typeForce('Number', value)
18875
18876 // Add the output and return the output's index
18877 return (this.outs.push({
18878 script: scriptPubKey,
18879 value: value
18880 }) - 1)
18881}
18882
18883Transaction.prototype.clone = function () {
18884 var newTx = new Transaction()
18885 newTx.version = this.version
18886 newTx.locktime = this.locktime
18887
18888 newTx.ins = this.ins.map(function (txIn) {
18889 return {
18890 hash: txIn.hash,
18891 index: txIn.index,
18892 script: txIn.script,
18893 sequence: txIn.sequence
18894 }
18895 })
18896
18897 newTx.outs = this.outs.map(function (txOut) {
18898 return {
18899 script: txOut.script,
18900 value: txOut.value
18901 }
18902 })
18903
18904 return newTx
18905}
18906
18907/**
18908 * Hash transaction for signing a specific input.
18909 *
18910 * Bitcoin uses a different hash for each signed transaction input. This
18911 * method copies the transaction, makes the necessary changes based on the
18912 * hashType, serializes and finally hashes the result. This hash can then be
18913 * used to sign the transaction input in question.
18914 */
18915Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18916 // FIXME: remove in 2.x.y
18917 if (arguments[0] instanceof Script) {
18918 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
18919
18920 // swap the arguments (must be stored in tmp, arguments is special)
18921 var tmp = arguments[0]
18922 inIndex = arguments[1]
18923 prevOutScript = tmp
18924 }
18925
18926 typeForce('Number', inIndex)
18927 typeForce('Script', prevOutScript)
18928 typeForce('Number', hashType)
18929
18930 assert(inIndex >= 0, 'Invalid vin index')
18931 assert(inIndex < this.ins.length, 'Invalid vin index')
18932
18933 var txTmp = this.clone()
18934 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
18935
18936 // Blank out other inputs' signatures
18937 txTmp.ins.forEach(function (txIn) {
18938 txIn.script = Script.EMPTY
18939 })
18940 txTmp.ins[inIndex].script = hashScript
18941
18942 var hashTypeModifier = hashType & 0x1f
18943
18944 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
18945 assert(false, 'SIGHASH_NONE not yet supported')
18946 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
18947 assert(false, 'SIGHASH_SINGLE not yet supported')
18948 }
18949
18950 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18951 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
18952 }
18953
18954 var hashTypeBuffer = new Buffer(4)
18955 hashTypeBuffer.writeInt32LE(hashType, 0)
18956
18957 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
18958 return crypto.hash256(buffer)
18959}
18960
18961Transaction.prototype.getHash = function () {
18962 return crypto.hash256(this.toBuffer())
18963}
18964
18965Transaction.prototype.getId = function () {
18966 // TxHash is little-endian, we need big-endian
18967 return bufferutils.reverse(this.getHash()).toString('hex')
18968}
18969
18970Transaction.prototype.toBuffer = function () {
18971 function scriptSize (script) {
18972 var length = script.buffer.length
18973
18974 return bufferutils.varIntSize(length) + length
18975 }
18976
18977 var buffer = new Buffer(
18978 8 +
18979 bufferutils.varIntSize(this.ins.length) +
18980 bufferutils.varIntSize(this.outs.length) +
18981 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
18982 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
18983 )
18984
18985 var offset = 0
18986 function writeSlice (slice) {
18987 slice.copy(buffer, offset)
18988 offset += slice.length
18989 }
18990
18991 function writeUInt32 (i) {
18992 buffer.writeUInt32LE(i, offset)
18993 offset += 4
18994 }
18995
18996 function writeUInt64 (i) {
18997 bufferutils.writeUInt64LE(buffer, i, offset)
18998 offset += 8
18999 }
19000
19001 function writeVarInt (i) {
19002 var n = bufferutils.writeVarInt(buffer, i, offset)
19003 offset += n
19004 }
19005
19006 writeUInt32(this.version)
19007 writeVarInt(this.ins.length)
19008
19009 this.ins.forEach(function (txIn) {
19010 writeSlice(txIn.hash)
19011 writeUInt32(txIn.index)
19012 writeVarInt(txIn.script.buffer.length)
19013 writeSlice(txIn.script.buffer)
19014 writeUInt32(txIn.sequence)
19015 })
19016
19017 writeVarInt(this.outs.length)
19018 this.outs.forEach(function (txOut) {
19019 writeUInt64(txOut.value)
19020 writeVarInt(txOut.script.buffer.length)
19021 writeSlice(txOut.script.buffer)
19022 })
19023
19024 writeUInt32(this.locktime)
19025
19026 return buffer
19027}
19028
19029Transaction.prototype.toHex = function () {
19030 return this.toBuffer().toString('hex')
19031}
19032
19033Transaction.prototype.setInputScript = function (index, script) {
19034 typeForce('Number', index)
19035 typeForce('Script', script)
19036
19037 this.ins[index].script = script
19038}
19039
19040// FIXME: remove in 2.x.y
19041Transaction.prototype.sign = function (index, privKey, hashType) {
19042 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
19043
19044 var prevOutScript = privKey.pub.getAddress().toOutputScript()
19045 var signature = this.signInput(index, prevOutScript, privKey, hashType)
19046
19047 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
19048 this.setInputScript(index, scriptSig)
19049}
19050
19051// FIXME: remove in 2.x.y
19052Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
19053 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
19054
19055 hashType = hashType || Transaction.SIGHASH_ALL
19056
19057 var hash = this.hashForSignature(index, prevOutScript, hashType)
19058 var signature = privKey.sign(hash)
19059
19060 return signature.toScriptSignature(hashType)
19061}
19062
19063// FIXME: remove in 2.x.y
19064Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
19065 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
19066
19067 var parsed = ECSignature.parseScriptSignature(buffer)
19068 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
19069
19070 return pubKey.verify(hash, parsed.signature)
19071}
19072
19073module.exports = Transaction
19074
19075}).call(this,require("buffer").Buffer)
19076},{"./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){
19077(function (Buffer){
19078var assert = require('assert')
19079var ops = require('./opcodes')
19080var scripts = require('./scripts')
19081
19082var ECPubKey = require('./ecpubkey')
19083var ECSignature = require('./ecsignature')
19084var Script = require('./script')
19085var Transaction = require('./transaction')
19086
19087function extractInput (txIn) {
19088 var redeemScript
19089 var scriptSig = txIn.script
19090 var prevOutScript
19091 var prevOutType = scripts.classifyInput(scriptSig, true)
19092 var scriptType
19093
19094 // Re-classify if scriptHash
19095 if (prevOutType === 'scripthash') {
19096 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
19097 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
19098
19099 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
19100 scriptType = scripts.classifyInput(scriptSig, true)
19101 } else {
19102 scriptType = prevOutType
19103 }
19104
19105 // Extract hashType, pubKeys and signatures
19106 var hashType, parsed, pubKeys, signatures
19107
19108 switch (scriptType) {
19109 case 'pubkeyhash': {
19110 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
19111 hashType = parsed.hashType
19112 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
19113 signatures = [parsed.signature]
19114 prevOutScript = pubKeys[0].getAddress().toOutputScript()
19115
19116 break
19117 }
19118
19119 case 'pubkey': {
19120 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
19121 hashType = parsed.hashType
19122 signatures = [parsed.signature]
19123
19124 if (redeemScript) {
19125 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
19126 }
19127
19128 break
19129 }
19130
19131 case 'multisig': {
19132 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
19133 if (chunk === ops.OP_0) return chunk
19134
19135 var parsed = ECSignature.parseScriptSignature(chunk)
19136 hashType = parsed.hashType
19137
19138 return parsed.signature
19139 })
19140
19141 if (redeemScript) {
19142 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19143 }
19144
19145 break
19146 }
19147 }
19148
19149 return {
19150 hashType: hashType,
19151 prevOutScript: prevOutScript,
19152 prevOutType: prevOutType,
19153 pubKeys: pubKeys,
19154 redeemScript: redeemScript,
19155 scriptType: scriptType,
19156 signatures: signatures
19157 }
19158}
19159
19160function TransactionBuilder () {
19161 this.prevTxMap = {}
19162 this.prevOutScripts = {}
19163 this.prevOutTypes = {}
19164
19165 this.inputs = []
19166 this.tx = new Transaction()
19167}
19168
19169TransactionBuilder.fromTransaction = function (transaction) {
19170 var txb = new TransactionBuilder()
19171
19172 // Copy other transaction fields
19173 txb.tx.version = transaction.version
19174 txb.tx.locktime = transaction.locktime
19175
19176 // Extract/add inputs
19177 transaction.ins.forEach(function (txIn) {
19178 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
19179 })
19180
19181 // Extract/add outputs
19182 transaction.outs.forEach(function (txOut) {
19183 txb.addOutput(txOut.script, txOut.value)
19184 })
19185
19186 // Extract/add signatures
19187 txb.inputs = transaction.ins.map(function (txIn) {
19188 // TODO: remove me after testcase added
19189 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
19190
19191 // Ignore empty scripts
19192 if (txIn.script.buffer.length === 0) return {}
19193
19194 return extractInput(txIn)
19195 })
19196
19197 return txb
19198}
19199
19200TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
19201 var prevOutHash
19202
19203 // txId
19204 if (typeof prevTx === 'string') {
19205 prevOutHash = new Buffer(prevTx, 'hex')
19206
19207 // TxId hex is big-endian, we want little-endian hash
19208 Array.prototype.reverse.call(prevOutHash)
19209
19210 // Transaction
19211 } else if (prevTx instanceof Transaction) {
19212 prevOutHash = prevTx.getHash()
19213 prevOutScript = prevTx.outs[index].script
19214
19215 // txHash
19216 } else {
19217 prevOutHash = prevTx
19218 }
19219
19220 var input = {}
19221 if (prevOutScript) {
19222 var prevOutType = scripts.classifyOutput(prevOutScript)
19223
19224 // if we can, extract pubKey information
19225 switch (prevOutType) {
19226 case 'multisig': {
19227 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19228 break
19229 }
19230
19231 case 'pubkey': {
19232 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
19233 break
19234 }
19235 }
19236
19237 if (prevOutType !== 'scripthash') {
19238 input.scriptType = prevOutType
19239 }
19240
19241 input.prevOutScript = prevOutScript
19242 input.prevOutType = prevOutType
19243 }
19244
19245 assert(this.inputs.every(function (input2) {
19246 if (input2.hashType === undefined) return true
19247
19248 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
19249 }), 'No, this would invalidate signatures')
19250
19251 var prevOut = prevOutHash.toString('hex') + ':' + index
19252 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
19253
19254 var vin = this.tx.addInput(prevOutHash, index, sequence)
19255 this.inputs[vin] = input
19256 this.prevTxMap[prevOut] = vin
19257
19258 return vin
19259}
19260
19261TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19262 assert(this.inputs.every(function (input) {
19263 if (input.hashType === undefined) return true
19264
19265 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
19266 }), 'No, this would invalidate signatures')
19267
19268 return this.tx.addOutput(scriptPubKey, value)
19269}
19270
19271TransactionBuilder.prototype.build = function () {
19272 return this.__build(false)
19273}
19274TransactionBuilder.prototype.buildIncomplete = function () {
19275 return this.__build(true)
19276}
19277
19278var canSignTypes = {
19279 'pubkeyhash': true,
19280 'multisig': true,
19281 'pubkey': true
19282}
19283
19284TransactionBuilder.prototype.__build = function (allowIncomplete) {
19285 if (!allowIncomplete) {
19286 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
19287 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
19288 }
19289
19290 var tx = this.tx.clone()
19291
19292 // Create script signatures from signature meta-data
19293 this.inputs.forEach(function (input, index) {
19294 var scriptType = input.scriptType
19295 var scriptSig
19296
19297 if (!allowIncomplete) {
19298 assert(!!scriptType, 'Transaction is not complete')
19299 assert(scriptType in canSignTypes, scriptType + ' not supported')
19300 assert(input.signatures, 'Transaction is missing signatures')
19301 }
19302
19303 if (input.signatures) {
19304 switch (scriptType) {
19305 case 'pubkeyhash': {
19306 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
19307 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
19308 break
19309 }
19310
19311 case 'multisig': {
19312 // Array.prototype.map is sparse-compatible
19313 var msSignatures = input.signatures.map(function (signature) {
19314 return signature && signature.toScriptSignature(input.hashType)
19315 })
19316
19317 // fill in blanks with OP_0
19318 if (allowIncomplete) {
19319 for (var i = 0; i < msSignatures.length; ++i) {
19320 if (msSignatures[i]) continue
19321
19322 msSignatures[i] = ops.OP_0
19323 }
19324 } else {
19325 // Array.prototype.filter returns non-sparse array
19326 msSignatures = msSignatures.filter(function (x) { return x })
19327 }
19328
19329 var redeemScript = allowIncomplete ? undefined : input.redeemScript
19330 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
19331 break
19332 }
19333
19334 case 'pubkey': {
19335 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
19336 scriptSig = scripts.pubKeyInput(pkSignature)
19337 break
19338 }
19339 }
19340 }
19341
19342 // did we build a scriptSig?
19343 if (scriptSig) {
19344 // wrap as scriptHash if necessary
19345 if (input.prevOutType === 'scripthash') {
19346 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
19347 }
19348
19349 tx.setInputScript(index, scriptSig)
19350 }
19351 })
19352
19353 return tx
19354}
19355
19356TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
19357 assert(index in this.inputs, 'No input at index: ' + index)
19358 hashType = hashType || Transaction.SIGHASH_ALL
19359
19360 var input = this.inputs[index]
19361 var canSign = input.hashType &&
19362 input.prevOutScript &&
19363 input.prevOutType &&
19364 input.pubKeys &&
19365 input.scriptType &&
19366 input.signatures
19367
19368 // are we almost ready to sign?
19369 if (canSign) {
19370 // if redeemScript was provided, enforce consistency
19371 if (redeemScript) {
19372 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
19373 }
19374
19375 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
19376
19377 // no? prepare
19378 } else {
19379 // must be pay-to-scriptHash?
19380 if (redeemScript) {
19381 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
19382 if (input.prevOutScript) {
19383 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
19384
19385 var scriptHash = input.prevOutScript.chunks[1]
19386 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
19387 }
19388
19389 var scriptType = scripts.classifyOutput(redeemScript)
19390 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
19391
19392 var pubKeys = []
19393 switch (scriptType) {
19394 case 'multisig': {
19395 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19396 break
19397 }
19398
19399 case 'pubkeyhash': {
19400 var pkh1 = redeemScript.chunks[2]
19401 var pkh2 = privKey.pub.getAddress().hash
19402
19403 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
19404 pubKeys = [privKey.pub]
19405 break
19406 }
19407
19408 case 'pubkey': {
19409 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
19410 break
19411 }
19412 }
19413
19414 if (!input.prevOutScript) {
19415 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
19416 input.prevOutType = 'scripthash'
19417 }
19418
19419 input.pubKeys = pubKeys
19420 input.redeemScript = redeemScript
19421 input.scriptType = scriptType
19422
19423 // cannot be pay-to-scriptHash
19424 } else {
19425 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
19426
19427 // can we otherwise sign this?
19428 if (input.scriptType) {
19429 assert(input.pubKeys, input.scriptType + ' not supported')
19430
19431 // we know nothin' Jon Snow, assume pubKeyHash
19432 } else {
19433 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
19434 input.prevOutType = 'pubkeyhash'
19435 input.pubKeys = [privKey.pub]
19436 input.scriptType = input.prevOutType
19437 }
19438 }
19439
19440 input.hashType = hashType
19441 input.signatures = input.signatures || []
19442 }
19443
19444 var signatureScript = input.redeemScript || input.prevOutScript
19445 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
19446
19447 // enforce signature order matches public keys
19448 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
19449 // maintain a local copy of unmatched signatures
19450 var unmatched = input.signatures.slice()
19451
19452 input.signatures = input.pubKeys.map(function (pubKey) {
19453 var match
19454
19455 // check for any matching signatures
19456 unmatched.some(function (signature, i) {
19457 if (!pubKey.verify(signatureHash, signature)) return false
19458 match = signature
19459
19460 // remove matched signature from unmatched
19461 unmatched.splice(i, 1)
19462
19463 return true
19464 })
19465
19466 return match || undefined
19467 })
19468 }
19469
19470 // enforce in order signing of public keys
19471 assert(input.pubKeys.some(function (pubKey, i) {
19472 if (!privKey.pub.Q.equals(pubKey.Q)) return false
19473
19474 assert(!input.signatures[i], 'Signature already exists')
19475 var signature = privKey.sign(signatureHash)
19476 input.signatures[i] = signature
19477
19478 return true
19479 }, this), 'privateKey cannot sign for this input')
19480}
19481
19482module.exports = TransactionBuilder
19483
19484}).call(this,require("buffer").Buffer)
19485},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
19486(function (Buffer){
19487var assert = require('assert')
19488var bufferutils = require('./bufferutils')
19489var typeForce = require('typeforce')
19490var networks = require('./networks')
19491var randomBytes = require('randombytes')
19492
19493var Address = require('./address')
19494var HDNode = require('./hdnode')
19495var TransactionBuilder = require('./transaction_builder')
19496var Script = require('./script')
19497
19498function Wallet (seed, network) {
19499 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
19500
19501 seed = seed || randomBytes(32)
19502 network = network || networks.bitcoin
19503
19504 // Stored in a closure to make accidental serialization less likely
19505 var masterKey = HDNode.fromSeedBuffer(seed, network)
19506
19507 // HD first-level child derivation method should be hardened
19508 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
19509 var accountZero = masterKey.deriveHardened(0)
19510 var externalAccount = accountZero.derive(0)
19511 var internalAccount = accountZero.derive(1)
19512
19513 this.addresses = []
19514 this.changeAddresses = []
19515 this.network = network
19516 this.unspents = []
19517
19518 // FIXME: remove in 2.0.0
19519 this.unspentMap = {}
19520
19521 // FIXME: remove in 2.0.0
19522 var me = this
19523 this.newMasterKey = function (seed) {
19524 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
19525
19526 seed = seed || randomBytes(32)
19527 masterKey = HDNode.fromSeedBuffer(seed, network)
19528
19529 accountZero = masterKey.deriveHardened(0)
19530 externalAccount = accountZero.derive(0)
19531 internalAccount = accountZero.derive(1)
19532
19533 me.addresses = []
19534 me.changeAddresses = []
19535
19536 me.unspents = []
19537 me.unspentMap = {}
19538 }
19539
19540 this.getMasterKey = function () {
19541 return masterKey
19542 }
19543 this.getAccountZero = function () {
19544 return accountZero
19545 }
19546 this.getExternalAccount = function () {
19547 return externalAccount
19548 }
19549 this.getInternalAccount = function () {
19550 return internalAccount
19551 }
19552}
19553
19554Wallet.prototype.createTransaction = function (to, value, options) {
19555 // FIXME: remove in 2.0.0
19556 if (typeof options !== 'object') {
19557 if (options !== undefined) {
19558 console.warn('Non options object parameters are deprecated, use options object instead')
19559
19560 options = {
19561 fixedFee: arguments[2],
19562 changeAddress: arguments[3]
19563 }
19564 }
ab78acc6 19565 }
8b095871
IC
19566
19567 options = options || {}
19568
19569 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
19570
19571 var changeAddress = options.changeAddress
19572 var fixedFee = options.fixedFee
19573 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
19574
19575 // filter by minConf, then pending and sort by descending value
19576 var unspents = this.unspents.filter(function (unspent) {
19577 return unspent.confirmations >= minConf
19578 }).filter(function (unspent) {
19579 return !unspent.pending
19580 }).sort(function (o1, o2) {
19581 return o2.value - o1.value
19582 })
19583
19584 var accum = 0
19585 var addresses = []
19586 var subTotal = value
19587
19588 var txb = new TransactionBuilder()
19589 txb.addOutput(to, value)
19590
19591 for (var i = 0; i < unspents.length; ++i) {
19592 var unspent = unspents[i]
19593 addresses.push(unspent.address)
19594
19595 txb.addInput(unspent.txHash, unspent.index)
19596
19597 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
19598
19599 accum += unspent.value
19600 subTotal = value + fee
19601
19602 if (accum >= subTotal) {
19603 var change = accum - subTotal
19604
19605 if (change > this.network.dustThreshold) {
19606 txb.addOutput(changeAddress || this.getChangeAddress(), change)
19607 }
19608
19609 break
19610 }
ab78acc6 19611 }
8b095871
IC
19612
19613 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
19614
19615 return this.signWith(txb, addresses).build()
19616}
19617
19618// FIXME: remove in 2.0.0
19619Wallet.prototype.processPendingTx = function (tx) {
19620 this.__processTx(tx, true)
19621}
19622
19623// FIXME: remove in 2.0.0
19624Wallet.prototype.processConfirmedTx = function (tx) {
19625 this.__processTx(tx, false)
19626}
19627
19628// FIXME: remove in 2.0.0
19629Wallet.prototype.__processTx = function (tx, isPending) {
19630 console.warn('processTransaction is considered harmful, see issue #260 for more information')
19631
19632 var txId = tx.getId()
19633 var txHash = tx.getHash()
19634
19635 tx.outs.forEach(function (txOut, i) {
19636 var address
19637
19638 try {
19639 address = Address.fromOutputScript(txOut.script, this.network).toString()
19640 } catch (e) {
19641 if (!(e.message.match(/has no matching Address/)))
19642 throw e
19643 }
19644
19645 var myAddresses = this.addresses.concat(this.changeAddresses)
19646 if (myAddresses.indexOf(address) > -1) {
19647 var lookup = txId + ':' + i
19648 if (lookup in this.unspentMap) return
19649
19650 // its unique, add it
19651 var unspent = {
19652 address: address,
19653 confirmations: 0, // no way to determine this without more information
19654 index: i,
19655 txHash: txHash,
19656 txId: txId,
19657 value: txOut.value,
19658 pending: isPending
19659 }
19660
19661 this.unspentMap[lookup] = unspent
19662 this.unspents.push(unspent)
19663 }
19664 }, this)
19665
19666 tx.ins.forEach(function (txIn) {
19667 // copy and convert to big-endian hex
19668 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
19669
19670 var lookup = txInId + ':' + txIn.index
19671 if (!(lookup in this.unspentMap)) return
19672
19673 var unspent = this.unspentMap[lookup]
19674
19675 if (isPending) {
19676 unspent.pending = true
19677 unspent.spent = true
19678 } else {
19679 delete this.unspentMap[lookup]
19680
19681 this.unspents = this.unspents.filter(function (unspent2) {
19682 return unspent !== unspent2
19683 })
19684 }
19685 }, this)
19686}
19687
19688Wallet.prototype.generateAddress = function () {
19689 var k = this.addresses.length
19690 var address = this.getExternalAccount().derive(k).getAddress()
19691
19692 this.addresses.push(address.toString())
19693
19694 return this.getReceiveAddress()
19695}
19696
19697Wallet.prototype.generateChangeAddress = function () {
19698 var k = this.changeAddresses.length
19699 var address = this.getInternalAccount().derive(k).getAddress()
19700
19701 this.changeAddresses.push(address.toString())
19702
19703 return this.getChangeAddress()
19704}
19705
19706Wallet.prototype.getAddress = function () {
19707 if (this.addresses.length === 0) {
19708 this.generateAddress()
ab78acc6 19709 }
8b095871
IC
19710
19711 return this.addresses[this.addresses.length - 1]
19712}
19713
19714Wallet.prototype.getBalance = function (minConf) {
19715 minConf = minConf || 0
19716
19717 return this.unspents.filter(function (unspent) {
19718 return unspent.confirmations >= minConf
19719
19720 // FIXME: remove spent filter in 2.0.0
19721 }).filter(function (unspent) {
19722 return !unspent.spent
19723 }).reduce(function (accum, unspent) {
19724 return accum + unspent.value
19725 }, 0)
19726}
19727
19728Wallet.prototype.getChangeAddress = function () {
19729 if (this.changeAddresses.length === 0) {
19730 this.generateChangeAddress()
3af2954a 19731 }
8b095871
IC
19732
19733 return this.changeAddresses[this.changeAddresses.length - 1]
19734}
19735
19736Wallet.prototype.getInternalPrivateKey = function (index) {
19737 return this.getInternalAccount().derive(index).privKey
19738}
19739
19740Wallet.prototype.getPrivateKey = function (index) {
19741 return this.getExternalAccount().derive(index).privKey
19742}
19743
19744Wallet.prototype.getPrivateKeyForAddress = function (address) {
19745 var index
19746
19747 if ((index = this.addresses.indexOf(address)) > -1) {
19748 return this.getPrivateKey(index)
ab78acc6 19749 }
8b095871
IC
19750
19751 if ((index = this.changeAddresses.indexOf(address)) > -1) {
19752 return this.getInternalPrivateKey(index)
19753 }
19754
19755 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
ab78acc6
IC
19756}
19757
8b095871
IC
19758Wallet.prototype.getUnspentOutputs = function (minConf) {
19759 minConf = minConf || 0
19760
19761 return this.unspents.filter(function (unspent) {
19762 return unspent.confirmations >= minConf
19763
19764 // FIXME: remove spent filter in 2.0.0
19765 }).filter(function (unspent) {
19766 return !unspent.spent
19767 }).map(function (unspent) {
19768 return {
19769 address: unspent.address,
19770 confirmations: unspent.confirmations,
19771 index: unspent.index,
19772 txId: unspent.txId,
19773 value: unspent.value,
19774
19775 // FIXME: remove in 2.0.0
19776 hash: unspent.txId,
19777 pending: unspent.pending
19778 }
19779 })
ab78acc6 19780}
3af2954a 19781
8b095871
IC
19782Wallet.prototype.setUnspentOutputs = function (unspents) {
19783 this.unspentMap = {}
19784 this.unspents = unspents.map(function (unspent) {
19785 // FIXME: remove unspent.hash in 2.0.0
19786 var txId = unspent.txId || unspent.hash
19787 var index = unspent.index
3af2954a 19788
8b095871
IC
19789 // FIXME: remove in 2.0.0
19790 if (unspent.hash !== undefined) {
19791 console.warn('unspent.hash is deprecated, use unspent.txId instead')
19792 }
3af2954a 19793
8b095871
IC
19794 // FIXME: remove in 2.0.0
19795 if (index === undefined) {
19796 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
19797 index = unspent.outputIndex
19798 }
3af2954a 19799
8b095871
IC
19800 typeForce('String', txId)
19801 typeForce('Number', index)
19802 typeForce('Number', unspent.value)
3af2954a 19803
8b095871
IC
19804 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
19805 assert.doesNotThrow(function () {
19806 Address.fromBase58Check(unspent.address)
19807 }, 'Expected Base58 Address, got ' + unspent.address)
19808 assert(isFinite(index), 'Expected finite index, got ' + index)
3af2954a 19809
8b095871
IC
19810 // FIXME: remove branch in 2.0.0
19811 if (unspent.confirmations !== undefined) {
19812 typeForce('Number', unspent.confirmations)
ab78acc6 19813 }
8b095871
IC
19814
19815 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
19816
19817 unspent = {
19818 address: unspent.address,
19819 confirmations: unspent.confirmations || 0,
19820 index: index,
19821 txHash: txHash,
19822 txId: txId,
19823 value: unspent.value,
19824
19825 // FIXME: remove in 2.0.0
19826 pending: unspent.pending || false
ab78acc6 19827 }
3af2954a 19828
8b095871
IC
19829 // FIXME: remove in 2.0.0
19830 this.unspentMap[txId + ':' + index] = unspent
19831
19832 return unspent
19833 }, this)
ab78acc6 19834}
3af2954a 19835
8b095871
IC
19836Wallet.prototype.signWith = function (tx, addresses) {
19837 addresses.forEach(function (address, i) {
19838 var privKey = this.getPrivateKeyForAddress(address)
19839
19840 tx.sign(i, privKey)
19841 }, this)
19842
19843 return tx
ab78acc6 19844}
3af2954a 19845
8b095871
IC
19846function estimatePaddedFee (tx, network) {
19847 var tmpTx = tx.clone()
19848 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
19849
19850 return network.estimateFee(tmpTx)
ab78acc6 19851}
3af2954a 19852
8b095871
IC
19853// FIXME: 1.0.0 shims, remove in 2.0.0
19854Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
19855Wallet.prototype.createTx = Wallet.prototype.createTransaction
19856
19857module.exports = Wallet
19858
19859}).call(this,require("buffer").Buffer)
19860},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
19861});</script>
19862 <script>bitcoin.networks.shadow = {
19863 magicPrefix: '\x19ShadowCash Signed Message:\n',
19864 bip32: {
19865 public: 0xEE80286A,
19866 private: 0xEE8031E8
19867 },
19868 pubKeyHash: 0x3f,
19869 scriptHash: 0x7d,
19870 wif: 0xbf,
19871 dustThreshold: 0,
19872 feePerKb: 1000,
19873 estimateFee: function() { return "unused in this app" },
19874};
19875
19876bitcoin.networks.shadowtn = {
19877 magicPrefix: '\x19ShadowCash Signed Message:\n',
19878 bip32: {
19879 public: 0x76C0FDFB,
19880 private: 0x76C1077A
19881 },
19882 pubKeyHash: 0x7f,
19883 scriptHash: 0xc4,
19884 wif: 0xff,
19885 dustThreshold: 0,
19886 feePerKb: 1000,
19887 estimateFee: function() { return "unused in this app" },
19888};
3af2954a 19889
8b095871
IC
19890bitcoin.networks.clam = {
19891 bip32: {
19892 public: 0xa8c26d64,
19893 private: 0xa8c17826
19894 },
19895 pubKeyHash: 0x89,
19896 wif: 0x85,
19897};
3af2954a 19898
8b095871
IC
19899bitcoin.networks.dash = {
19900 bip32: {
19901 public: 0x0488b21e,
19902 private: 0x0488ade4
19903 },
19904 pubKeyHash: 0x4c,
19905 scriptHash: 0x10,
19906 wif: 0xcc,
19907};
ab78acc6 19908
f88fab20 19909bitcoin.networks.game = {
19910 bip32: {
19911 public: 0x0488b21e,
19912 private: 0x0488ade4
19913 },
19914 pubKeyHash: 0x26,
19915 scriptHash: 0x05,
19916 wif: 0xa6,
19917};
19918
8b095871
IC
19919bitcoin.networks.namecoin = {
19920 bip32: {
19921 public: 0x0488b21e,
19922 private: 0x0488ade4
19923 },
19924 pubKeyHash: 0x34,
19925 //scriptHash: 0x10,
19926 wif: 0x80,
19927};
3af2954a 19928
8b095871
IC
19929bitcoin.networks.peercoin = {
19930 bip32: {
19931 public: 0x0488b21e,
19932 private: 0x0488ade4
19933 },
19934 pubKeyHash: 0x37,
19935 //scriptHash: 0x10,
19936 wif: 0xb7,
19937};
3af2954a 19938
01e81e53
GH
19939bitcoin.networks.slimcoin = {
19940 bip32: {
19941 public: 0xef6adf10,
19942 private: 0xef69ea80
19943 },
19944 pubKeyHash: 0x3f,
19945 scriptHash: 0x7d,
19946 wif: 0x46,
19947};
19948
19949bitcoin.networks.slimcointn = {
19950 bip32: {
19951 public: 0x043587CF,
19952 private: 0x04358394
19953 },
19954 pubKeyHash: 0x6f,
19955 scriptHash: 0xc4,
19956 wif: 0x57,
19957};
19958
8b095871
IC
19959</script>
19960 <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){
19961(function (global){
19962'use strict';
3af2954a 19963
8b095871
IC
19964// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
19965// original notice:
3af2954a 19966
8b095871
IC
19967/*!
19968 * The buffer module from node.js, for the browser.
19969 *
19970 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
19971 * @license MIT
19972 */
19973function compare(a, b) {
19974 if (a === b) {
19975 return 0;
19976 }
3af2954a 19977
8b095871
IC
19978 var x = a.length;
19979 var y = b.length;
3af2954a 19980
8b095871
IC
19981 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
19982 if (a[i] !== b[i]) {
19983 x = a[i];
19984 y = b[i];
19985 break;
19986 }
19987 }
3af2954a 19988
8b095871
IC
19989 if (x < y) {
19990 return -1;
19991 }
19992 if (y < x) {
19993 return 1;
19994 }
19995 return 0;
ab78acc6 19996}
8b095871
IC
19997function isBuffer(b) {
19998 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
19999 return global.Buffer.isBuffer(b);
20000 }
20001 return !!(b != null && b._isBuffer);
ab78acc6 20002}
3af2954a 20003
8b095871
IC
20004// based on node assert, original notice:
20005
20006// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
20007//
20008// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
20009//
20010// Originally from narwhal.js (http://narwhaljs.org)
20011// Copyright (c) 2009 Thomas Robinson <280north.com>
20012//
20013// Permission is hereby granted, free of charge, to any person obtaining a copy
20014// of this software and associated documentation files (the 'Software'), to
20015// deal in the Software without restriction, including without limitation the
20016// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
20017// sell copies of the Software, and to permit persons to whom the Software is
20018// furnished to do so, subject to the following conditions:
20019//
20020// The above copyright notice and this permission notice shall be included in
20021// all copies or substantial portions of the Software.
20022//
20023// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20024// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20025// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20026// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20027// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20028// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20029
20030var util = require('util/');
20031var hasOwn = Object.prototype.hasOwnProperty;
20032var pSlice = Array.prototype.slice;
20033var functionsHaveNames = (function () {
20034 return function foo() {}.name === 'foo';
20035}());
20036function pToString (obj) {
20037 return Object.prototype.toString.call(obj);
20038}
20039function isView(arrbuf) {
20040 if (isBuffer(arrbuf)) {
20041 return false;
ab78acc6 20042 }
8b095871
IC
20043 if (typeof global.ArrayBuffer !== 'function') {
20044 return false;
20045 }
20046 if (typeof ArrayBuffer.isView === 'function') {
20047 return ArrayBuffer.isView(arrbuf);
20048 }
20049 if (!arrbuf) {
20050 return false;
20051 }
20052 if (arrbuf instanceof DataView) {
20053 return true;
20054 }
20055 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
20056 return true;
20057 }
20058 return false;
ab78acc6 20059}
8b095871
IC
20060// 1. The assert module provides functions that throw
20061// AssertionError's when particular conditions are not met. The
20062// assert module must conform to the following interface.
3af2954a 20063
8b095871 20064var assert = module.exports = ok;
3af2954a 20065
8b095871
IC
20066// 2. The AssertionError is defined in assert.
20067// new assert.AssertionError({ message: message,
20068// actual: actual,
20069// expected: expected })
20070
20071var regex = /\s*function\s+([^\(\s]*)\s*/;
20072// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
20073function getName(func) {
20074 if (!util.isFunction(func)) {
20075 return;
20076 }
20077 if (functionsHaveNames) {
20078 return func.name;
20079 }
20080 var str = func.toString();
20081 var match = str.match(regex);
20082 return match && match[1];
ab78acc6 20083}
8b095871
IC
20084assert.AssertionError = function AssertionError(options) {
20085 this.name = 'AssertionError';
20086 this.actual = options.actual;
20087 this.expected = options.expected;
20088 this.operator = options.operator;
20089 if (options.message) {
20090 this.message = options.message;
20091 this.generatedMessage = false;
20092 } else {
20093 this.message = getMessage(this);
20094 this.generatedMessage = true;
20095 }
20096 var stackStartFunction = options.stackStartFunction || fail;
20097 if (Error.captureStackTrace) {
20098 Error.captureStackTrace(this, stackStartFunction);
20099 } else {
20100 // non v8 browsers so we can have a stacktrace
20101 var err = new Error();
20102 if (err.stack) {
20103 var out = err.stack;
20104
20105 // try to strip useless frames
20106 var fn_name = getName(stackStartFunction);
20107 var idx = out.indexOf('\n' + fn_name);
20108 if (idx >= 0) {
20109 // once we have located the function frame
20110 // we need to strip out everything before it (and its line)
20111 var next_line = out.indexOf('\n', idx + 1);
20112 out = out.substring(next_line + 1);
20113 }
3af2954a 20114
8b095871
IC
20115 this.stack = out;
20116 }
20117 }
20118};
3af2954a 20119
8b095871
IC
20120// assert.AssertionError instanceof Error
20121util.inherits(assert.AssertionError, Error);
3af2954a 20122
8b095871
IC
20123function truncate(s, n) {
20124 if (typeof s === 'string') {
20125 return s.length < n ? s : s.slice(0, n);
20126 } else {
20127 return s;
3af2954a 20128 }
ab78acc6 20129}
8b095871
IC
20130function inspect(something) {
20131 if (functionsHaveNames || !util.isFunction(something)) {
20132 return util.inspect(something);
20133 }
20134 var rawname = getName(something);
20135 var name = rawname ? ': ' + rawname : '';
20136 return '[Function' + name + ']';
20137}
20138function getMessage(self) {
20139 return truncate(inspect(self.actual), 128) + ' ' +
20140 self.operator + ' ' +
20141 truncate(inspect(self.expected), 128);
ab78acc6 20142}
3af2954a 20143
8b095871
IC
20144// At present only the three keys mentioned above are used and
20145// understood by the spec. Implementations or sub modules can pass
20146// other keys to the AssertionError's constructor - they will be
20147// ignored.
3af2954a 20148
8b095871
IC
20149// 3. All of the following functions must throw an AssertionError
20150// when a corresponding condition is not met, with a message that
20151// may be undefined if not provided. All assertion methods provide
20152// both the actual and expected values to the assertion error for
20153// display purposes.
3af2954a 20154
8b095871
IC
20155function fail(actual, expected, message, operator, stackStartFunction) {
20156 throw new assert.AssertionError({
20157 message: message,
20158 actual: actual,
20159 expected: expected,
20160 operator: operator,
20161 stackStartFunction: stackStartFunction
20162 });
ab78acc6 20163}
3af2954a 20164
8b095871
IC
20165// EXTENSION! allows for well behaved errors defined elsewhere.
20166assert.fail = fail;
3af2954a 20167
8b095871
IC
20168// 4. Pure assertion tests whether a value is truthy, as determined
20169// by !!guard.
20170// assert.ok(guard, message_opt);
20171// This statement is equivalent to assert.equal(true, !!guard,
20172// message_opt);. To test strictly for the value true, use
20173// assert.strictEqual(true, guard, message_opt);.
3af2954a 20174
8b095871
IC
20175function ok(value, message) {
20176 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 20177}
8b095871 20178assert.ok = ok;
3af2954a 20179
8b095871
IC
20180// 5. The equality assertion tests shallow, coercive equality with
20181// ==.
20182// assert.equal(actual, expected, message_opt);
3af2954a 20183
8b095871
IC
20184assert.equal = function equal(actual, expected, message) {
20185 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
20186};
3af2954a 20187
8b095871
IC
20188// 6. The non-equality assertion tests for whether two objects are not equal
20189// with != assert.notEqual(actual, expected, message_opt);
3af2954a 20190
8b095871
IC
20191assert.notEqual = function notEqual(actual, expected, message) {
20192 if (actual == expected) {
20193 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 20194 }
8b095871
IC
20195};
20196
20197// 7. The equivalence assertion tests a deep equality relation.
20198// assert.deepEqual(actual, expected, message_opt);
20199
20200assert.deepEqual = function deepEqual(actual, expected, message) {
20201 if (!_deepEqual(actual, expected, false)) {
20202 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 20203 }
8b095871 20204};
3af2954a 20205
8b095871
IC
20206assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
20207 if (!_deepEqual(actual, expected, true)) {
20208 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 20209 }
8b095871
IC
20210};
20211
20212function _deepEqual(actual, expected, strict, memos) {
20213 // 7.1. All identical values are equivalent, as determined by ===.
20214 if (actual === expected) {
20215 return true;
20216 } else if (isBuffer(actual) && isBuffer(expected)) {
20217 return compare(actual, expected) === 0;
20218
20219 // 7.2. If the expected value is a Date object, the actual value is
20220 // equivalent if it is also a Date object that refers to the same time.
20221 } else if (util.isDate(actual) && util.isDate(expected)) {
20222 return actual.getTime() === expected.getTime();
20223
20224 // 7.3 If the expected value is a RegExp object, the actual value is
20225 // equivalent if it is also a RegExp object with the same source and
20226 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
20227 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
20228 return actual.source === expected.source &&
20229 actual.global === expected.global &&
20230 actual.multiline === expected.multiline &&
20231 actual.lastIndex === expected.lastIndex &&
20232 actual.ignoreCase === expected.ignoreCase;
20233
20234 // 7.4. Other pairs that do not both pass typeof value == 'object',
20235 // equivalence is determined by ==.
20236 } else if ((actual === null || typeof actual !== 'object') &&
20237 (expected === null || typeof expected !== 'object')) {
20238 return strict ? actual === expected : actual == expected;
20239
20240 // If both values are instances of typed arrays, wrap their underlying
20241 // ArrayBuffers in a Buffer each to increase performance
20242 // This optimization requires the arrays to have the same type as checked by
20243 // Object.prototype.toString (aka pToString). Never perform binary
20244 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
20245 // bit patterns are not identical.
20246 } else if (isView(actual) && isView(expected) &&
20247 pToString(actual) === pToString(expected) &&
20248 !(actual instanceof Float32Array ||
20249 actual instanceof Float64Array)) {
20250 return compare(new Uint8Array(actual.buffer),
20251 new Uint8Array(expected.buffer)) === 0;
20252
20253 // 7.5 For all other Object pairs, including Array objects, equivalence is
20254 // determined by having the same number of owned properties (as verified
20255 // with Object.prototype.hasOwnProperty.call), the same set of keys
20256 // (although not necessarily the same order), equivalent values for every
20257 // corresponding key, and an identical 'prototype' property. Note: this
20258 // accounts for both named and indexed properties on Arrays.
20259 } else if (isBuffer(actual) !== isBuffer(expected)) {
20260 return false;
20261 } else {
20262 memos = memos || {actual: [], expected: []};
3af2954a 20263
8b095871
IC
20264 var actualIndex = memos.actual.indexOf(actual);
20265 if (actualIndex !== -1) {
20266 if (actualIndex === memos.expected.indexOf(expected)) {
20267 return true;
ab78acc6 20268 }
3af2954a 20269 }
8b095871
IC
20270
20271 memos.actual.push(actual);
20272 memos.expected.push(expected);
20273
20274 return objEquiv(actual, expected, strict, memos);
3af2954a 20275 }
ab78acc6 20276}
3af2954a 20277
8b095871
IC
20278function isArguments(object) {
20279 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 20280}
3af2954a 20281
8b095871
IC
20282function objEquiv(a, b, strict, actualVisitedObjects) {
20283 if (a === null || a === undefined || b === null || b === undefined)
20284 return false;
20285 // if one is a primitive, the other must be same
20286 if (util.isPrimitive(a) || util.isPrimitive(b))
20287 return a === b;
20288 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
20289 return false;
20290 var aIsArgs = isArguments(a);
20291 var bIsArgs = isArguments(b);
20292 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
20293 return false;
20294 if (aIsArgs) {
20295 a = pSlice.call(a);
20296 b = pSlice.call(b);
20297 return _deepEqual(a, b, strict);
20298 }
20299 var ka = objectKeys(a);
20300 var kb = objectKeys(b);
20301 var key, i;
20302 // having the same number of owned properties (keys incorporates
20303 // hasOwnProperty)
20304 if (ka.length !== kb.length)
20305 return false;
20306 //the same set of keys (although not necessarily the same order),
20307 ka.sort();
20308 kb.sort();
20309 //~~~cheap key test
20310 for (i = ka.length - 1; i >= 0; i--) {
20311 if (ka[i] !== kb[i])
20312 return false;
20313 }
20314 //equivalent values for every corresponding key, and
20315 //~~~possibly expensive deep test
20316 for (i = ka.length - 1; i >= 0; i--) {
20317 key = ka[i];
20318 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
20319 return false;
20320 }
20321 return true;
ab78acc6 20322}
3af2954a 20323
8b095871
IC
20324// 8. The non-equivalence assertion tests for any deep inequality.
20325// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 20326
8b095871
IC
20327assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
20328 if (_deepEqual(actual, expected, false)) {
20329 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 20330 }
8b095871 20331};
3af2954a 20332
8b095871
IC
20333assert.notDeepStrictEqual = notDeepStrictEqual;
20334function notDeepStrictEqual(actual, expected, message) {
20335 if (_deepEqual(actual, expected, true)) {
20336 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
20337 }
ab78acc6 20338}
3af2954a 20339
3af2954a 20340
8b095871
IC
20341// 9. The strict equality assertion tests strict equality, as determined by ===.
20342// assert.strictEqual(actual, expected, message_opt);
3af2954a 20343
8b095871
IC
20344assert.strictEqual = function strictEqual(actual, expected, message) {
20345 if (actual !== expected) {
20346 fail(actual, expected, message, '===', assert.strictEqual);
20347 }
20348};
3af2954a 20349
8b095871
IC
20350// 10. The strict non-equality assertion tests for strict inequality, as
20351// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 20352
8b095871
IC
20353assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
20354 if (actual === expected) {
20355 fail(actual, expected, message, '!==', assert.notStrictEqual);
20356 }
20357};
3af2954a 20358
8b095871
IC
20359function expectedException(actual, expected) {
20360 if (!actual || !expected) {
20361 return false;
20362 }
3af2954a 20363
8b095871
IC
20364 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
20365 return expected.test(actual);
20366 }
3af2954a 20367
8b095871
IC
20368 try {
20369 if (actual instanceof expected) {
20370 return true;
20371 }
20372 } catch (e) {
20373 // Ignore. The instanceof check doesn't work for arrow functions.
20374 }
3af2954a 20375
8b095871
IC
20376 if (Error.isPrototypeOf(expected)) {
20377 return false;
20378 }
20379
20380 return expected.call({}, actual) === true;
ab78acc6 20381}
3af2954a 20382
8b095871
IC
20383function _tryBlock(block) {
20384 var error;
20385 try {
20386 block();
20387 } catch (e) {
20388 error = e;
20389 }
20390 return error;
ab78acc6 20391}
3af2954a 20392
8b095871
IC
20393function _throws(shouldThrow, block, expected, message) {
20394 var actual;
20395
20396 if (typeof block !== 'function') {
20397 throw new TypeError('"block" argument must be a function');
3af2954a 20398 }
8b095871
IC
20399
20400 if (typeof expected === 'string') {
20401 message = expected;
20402 expected = null;
ab78acc6 20403 }
8b095871
IC
20404
20405 actual = _tryBlock(block);
20406
20407 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
20408 (message ? ' ' + message : '.');
20409
20410 if (shouldThrow && !actual) {
20411 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 20412 }
8b095871
IC
20413
20414 var userProvidedMessage = typeof message === 'string';
20415 var isUnwantedException = !shouldThrow && util.isError(actual);
20416 var isUnexpectedException = !shouldThrow && actual && !expected;
20417
20418 if ((isUnwantedException &&
20419 userProvidedMessage &&
20420 expectedException(actual, expected)) ||
20421 isUnexpectedException) {
20422 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 20423 }
3af2954a 20424
8b095871
IC
20425 if ((shouldThrow && actual && expected &&
20426 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
20427 throw actual;
20428 }
ab78acc6 20429}
3af2954a 20430
8b095871
IC
20431// 11. Expected to throw an error:
20432// assert.throws(block, Error_opt, message_opt);
20433
20434assert.throws = function(block, /*optional*/error, /*optional*/message) {
20435 _throws(true, block, error, message);
20436};
20437
20438// EXTENSION! This is annoying to write outside this module.
20439assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
20440 _throws(false, block, error, message);
20441};
20442
20443assert.ifError = function(err) { if (err) throw err; };
20444
20445var objectKeys = Object.keys || function (obj) {
20446 var keys = [];
20447 for (var key in obj) {
20448 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 20449 }
8b095871
IC
20450 return keys;
20451};
3af2954a 20452
8b095871
IC
20453}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20454},{"util/":30}],2:[function(require,module,exports){
20455'use strict'
20456
20457exports.byteLength = byteLength
20458exports.toByteArray = toByteArray
20459exports.fromByteArray = fromByteArray
20460
20461var lookup = []
20462var revLookup = []
20463var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
20464
20465var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
20466for (var i = 0, len = code.length; i < len; ++i) {
20467 lookup[i] = code[i]
20468 revLookup[code.charCodeAt(i)] = i
20469}
20470
20471revLookup['-'.charCodeAt(0)] = 62
20472revLookup['_'.charCodeAt(0)] = 63
20473
20474function placeHoldersCount (b64) {
20475 var len = b64.length
20476 if (len % 4 > 0) {
20477 throw new Error('Invalid string. Length must be a multiple of 4')
20478 }
20479
20480 // the number of equal signs (place holders)
20481 // if there are two placeholders, than the two characters before it
20482 // represent one byte
20483 // if there is only one, then the three characters before it represent 2 bytes
20484 // this is just a cheap hack to not do indexOf twice
20485 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
20486}
20487
8b095871
IC
20488function byteLength (b64) {
20489 // base64 is 4/3 + up to two characters of the original data
20490 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 20491}
3af2954a 20492
8b095871
IC
20493function toByteArray (b64) {
20494 var i, j, l, tmp, placeHolders, arr
20495 var len = b64.length
20496 placeHolders = placeHoldersCount(b64)
20497
20498 arr = new Arr(len * 3 / 4 - placeHolders)
20499
20500 // if there are placeholders, only get up to the last complete 4 chars
20501 l = placeHolders > 0 ? len - 4 : len
20502
20503 var L = 0
20504
20505 for (i = 0, j = 0; i < l; i += 4, j += 3) {
20506 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
20507 arr[L++] = (tmp >> 16) & 0xFF
20508 arr[L++] = (tmp >> 8) & 0xFF
20509 arr[L++] = tmp & 0xFF
20510 }
20511
20512 if (placeHolders === 2) {
20513 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
20514 arr[L++] = tmp & 0xFF
20515 } else if (placeHolders === 1) {
20516 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
20517 arr[L++] = (tmp >> 8) & 0xFF
20518 arr[L++] = tmp & 0xFF
20519 }
20520
20521 return arr
ab78acc6 20522}
3af2954a 20523
8b095871
IC
20524function tripletToBase64 (num) {
20525 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 20526}
3af2954a 20527
8b095871
IC
20528function encodeChunk (uint8, start, end) {
20529 var tmp
20530 var output = []
20531 for (var i = start; i < end; i += 3) {
20532 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
20533 output.push(tripletToBase64(tmp))
20534 }
20535 return output.join('')
ab78acc6 20536}
3af2954a 20537
8b095871
IC
20538function fromByteArray (uint8) {
20539 var tmp
20540 var len = uint8.length
20541 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
20542 var output = ''
20543 var parts = []
20544 var maxChunkLength = 16383 // must be multiple of 3
20545
20546 // go through the array every three bytes, we'll deal with trailing stuff later
20547 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
20548 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
20549 }
20550
20551 // pad the end with zeros, but make sure to not forget the extra bytes
20552 if (extraBytes === 1) {
20553 tmp = uint8[len - 1]
20554 output += lookup[tmp >> 2]
20555 output += lookup[(tmp << 4) & 0x3F]
20556 output += '=='
20557 } else if (extraBytes === 2) {
20558 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
20559 output += lookup[tmp >> 10]
20560 output += lookup[(tmp >> 4) & 0x3F]
20561 output += lookup[(tmp << 2) & 0x3F]
20562 output += '='
20563 }
20564
20565 parts.push(output)
20566
20567 return parts.join('')
ab78acc6 20568}
3af2954a 20569
8b095871 20570},{}],3:[function(require,module,exports){
3af2954a 20571
8b095871
IC
20572},{}],4:[function(require,module,exports){
20573(function (global){
20574'use strict';
20575
20576var buffer = require('buffer');
20577var Buffer = buffer.Buffer;
20578var SlowBuffer = buffer.SlowBuffer;
20579var MAX_LEN = buffer.kMaxLength || 2147483647;
20580exports.alloc = function alloc(size, fill, encoding) {
20581 if (typeof Buffer.alloc === 'function') {
20582 return Buffer.alloc(size, fill, encoding);
ab78acc6 20583 }
8b095871
IC
20584 if (typeof encoding === 'number') {
20585 throw new TypeError('encoding must not be number');
20586 }
20587 if (typeof size !== 'number') {
20588 throw new TypeError('size must be a number');
20589 }
20590 if (size > MAX_LEN) {
20591 throw new RangeError('size is too large');
20592 }
20593 var enc = encoding;
20594 var _fill = fill;
20595 if (_fill === undefined) {
20596 enc = undefined;
20597 _fill = 0;
20598 }
20599 var buf = new Buffer(size);
20600 if (typeof _fill === 'string') {
20601 var fillBuf = new Buffer(_fill, enc);
20602 var flen = fillBuf.length;
20603 var i = -1;
20604 while (++i < size) {
20605 buf[i] = fillBuf[i % flen];
ab78acc6 20606 }
ab78acc6 20607 } else {
8b095871 20608 buf.fill(_fill);
ab78acc6 20609 }
8b095871 20610 return buf;
ab78acc6 20611}
8b095871
IC
20612exports.allocUnsafe = function allocUnsafe(size) {
20613 if (typeof Buffer.allocUnsafe === 'function') {
20614 return Buffer.allocUnsafe(size);
20615 }
20616 if (typeof size !== 'number') {
20617 throw new TypeError('size must be a number');
20618 }
20619 if (size > MAX_LEN) {
20620 throw new RangeError('size is too large');
20621 }
20622 return new Buffer(size);
ab78acc6 20623}
8b095871
IC
20624exports.from = function from(value, encodingOrOffset, length) {
20625 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
20626 return Buffer.from(value, encodingOrOffset, length);
20627 }
20628 if (typeof value === 'number') {
20629 throw new TypeError('"value" argument must not be a number');
20630 }
20631 if (typeof value === 'string') {
20632 return new Buffer(value, encodingOrOffset);
20633 }
20634 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
20635 var offset = encodingOrOffset;
20636 if (arguments.length === 1) {
20637 return new Buffer(value);
20638 }
20639 if (typeof offset === 'undefined') {
20640 offset = 0;
20641 }
20642 var len = length;
20643 if (typeof len === 'undefined') {
20644 len = value.byteLength - offset;
20645 }
20646 if (offset >= value.byteLength) {
20647 throw new RangeError('\'offset\' is out of bounds');
20648 }
20649 if (len > value.byteLength - offset) {
20650 throw new RangeError('\'length\' is out of bounds');
20651 }
20652 return new Buffer(value.slice(offset, offset + len));
20653 }
20654 if (Buffer.isBuffer(value)) {
20655 var out = new Buffer(value.length);
20656 value.copy(out, 0, 0, value.length);
20657 return out;
20658 }
20659 if (value) {
20660 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
20661 return new Buffer(value);
20662 }
20663 if (value.type === 'Buffer' && Array.isArray(value.data)) {
20664 return new Buffer(value.data);
20665 }
20666 }
3af2954a 20667
8b095871 20668 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 20669}
8b095871
IC
20670exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
20671 if (typeof Buffer.allocUnsafeSlow === 'function') {
20672 return Buffer.allocUnsafeSlow(size);
20673 }
20674 if (typeof size !== 'number') {
20675 throw new TypeError('size must be a number');
20676 }
20677 if (size >= MAX_LEN) {
20678 throw new RangeError('size is too large');
20679 }
20680 return new SlowBuffer(size);
ab78acc6 20681}
3af2954a 20682
8b095871
IC
20683}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20684},{"buffer":5}],5:[function(require,module,exports){
20685/*!
20686 * The buffer module from node.js, for the browser.
20687 *
20688 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20689 * @license MIT
20690 */
20691/* eslint-disable no-proto */
3af2954a 20692
8b095871 20693'use strict'
3af2954a 20694
8b095871
IC
20695var base64 = require('base64-js')
20696var ieee754 = require('ieee754')
3af2954a 20697
8b095871
IC
20698exports.Buffer = Buffer
20699exports.SlowBuffer = SlowBuffer
20700exports.INSPECT_MAX_BYTES = 50
20701
20702var K_MAX_LENGTH = 0x7fffffff
20703exports.kMaxLength = K_MAX_LENGTH
20704
20705/**
20706 * If `Buffer.TYPED_ARRAY_SUPPORT`:
20707 * === true Use Uint8Array implementation (fastest)
20708 * === false Print warning and recommend using `buffer` v4.x which has an Object
20709 * implementation (most compatible, even IE6)
20710 *
20711 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
20712 * Opera 11.6+, iOS 4.2+.
20713 *
20714 * We report that the browser does not support typed arrays if the are not subclassable
20715 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
20716 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
20717 * for __proto__ and has a buggy typed array implementation.
20718 */
20719Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
20720
20721if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
20722 typeof console.error === 'function') {
20723 console.error(
20724 'This browser lacks typed array (Uint8Array) support which is required by ' +
20725 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
20726 )
ab78acc6 20727}
3af2954a 20728
8b095871
IC
20729function typedArraySupport () {
20730 // Can typed array instances can be augmented?
20731 try {
20732 var arr = new Uint8Array(1)
20733 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
20734 return arr.foo() === 42
20735 } catch (e) {
20736 return false
20737 }
ab78acc6 20738}
3af2954a 20739
8b095871
IC
20740function createBuffer (length) {
20741 if (length > K_MAX_LENGTH) {
20742 throw new RangeError('Invalid typed array length')
3af2954a 20743 }
8b095871
IC
20744 // Return an augmented `Uint8Array` instance
20745 var buf = new Uint8Array(length)
20746 buf.__proto__ = Buffer.prototype
20747 return buf
ab78acc6 20748}
3af2954a 20749
8b095871
IC
20750/**
20751 * The Buffer constructor returns instances of `Uint8Array` that have their
20752 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
20753 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
20754 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
20755 * returns a single octet.
20756 *
20757 * The `Uint8Array` prototype remains unmodified.
20758 */
3af2954a 20759
8b095871
IC
20760function Buffer (arg, encodingOrOffset, length) {
20761 // Common case.
20762 if (typeof arg === 'number') {
20763 if (typeof encodingOrOffset === 'string') {
20764 throw new Error(
20765 'If encoding is specified then the first argument must be a string'
20766 )
20767 }
20768 return allocUnsafe(arg)
20769 }
20770 return from(arg, encodingOrOffset, length)
ab78acc6 20771}
3af2954a 20772
8b095871
IC
20773// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
20774if (typeof Symbol !== 'undefined' && Symbol.species &&
20775 Buffer[Symbol.species] === Buffer) {
20776 Object.defineProperty(Buffer, Symbol.species, {
20777 value: null,
20778 configurable: true,
20779 enumerable: false,
20780 writable: false
20781 })
ab78acc6 20782}
3af2954a 20783
8b095871 20784Buffer.poolSize = 8192 // not used by this implementation
3af2954a 20785
8b095871
IC
20786function from (value, encodingOrOffset, length) {
20787 if (typeof value === 'number') {
20788 throw new TypeError('"value" argument must not be a number')
20789 }
3af2954a 20790
8b095871
IC
20791 if (value instanceof ArrayBuffer) {
20792 return fromArrayBuffer(value, encodingOrOffset, length)
20793 }
3af2954a 20794
8b095871
IC
20795 if (typeof value === 'string') {
20796 return fromString(value, encodingOrOffset)
20797 }
3af2954a 20798
8b095871 20799 return fromObject(value)
ab78acc6 20800}
3af2954a 20801
8b095871
IC
20802/**
20803 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
20804 * if value is a number.
20805 * Buffer.from(str[, encoding])
20806 * Buffer.from(array)
20807 * Buffer.from(buffer)
20808 * Buffer.from(arrayBuffer[, byteOffset[, length]])
20809 **/
20810Buffer.from = function (value, encodingOrOffset, length) {
20811 return from(value, encodingOrOffset, length)
ab78acc6 20812}
3af2954a 20813
8b095871
IC
20814// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
20815// https://github.com/feross/buffer/pull/148
20816Buffer.prototype.__proto__ = Uint8Array.prototype
20817Buffer.__proto__ = Uint8Array
20818
20819function assertSize (size) {
20820 if (typeof size !== 'number') {
20821 throw new TypeError('"size" argument must be a number')
20822 } else if (size < 0) {
20823 throw new RangeError('"size" argument must not be negative')
20824 }
20825}
20826
20827function alloc (size, fill, encoding) {
20828 assertSize(size)
20829 if (size <= 0) {
20830 return createBuffer(size)
3af2954a 20831 }
8b095871
IC
20832 if (fill !== undefined) {
20833 // Only pay attention to encoding if it's a string. This
20834 // prevents accidentally sending in a number that would
20835 // be interpretted as a start offset.
20836 return typeof encoding === 'string'
20837 ? createBuffer(size).fill(fill, encoding)
20838 : createBuffer(size).fill(fill)
20839 }
20840 return createBuffer(size)
ab78acc6 20841}
3af2954a 20842
8b095871
IC
20843/**
20844 * Creates a new filled Buffer instance.
20845 * alloc(size[, fill[, encoding]])
20846 **/
20847Buffer.alloc = function (size, fill, encoding) {
20848 return alloc(size, fill, encoding)
ab78acc6 20849}
3af2954a 20850
8b095871
IC
20851function allocUnsafe (size) {
20852 assertSize(size)
20853 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 20854}
3af2954a 20855
8b095871
IC
20856/**
20857 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
20858 * */
20859Buffer.allocUnsafe = function (size) {
20860 return allocUnsafe(size)
20861}
20862/**
20863 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
20864 */
20865Buffer.allocUnsafeSlow = function (size) {
20866 return allocUnsafe(size)
ab78acc6 20867}
3af2954a 20868
8b095871
IC
20869function fromString (string, encoding) {
20870 if (typeof encoding !== 'string' || encoding === '') {
20871 encoding = 'utf8'
20872 }
20873
20874 if (!Buffer.isEncoding(encoding)) {
20875 throw new TypeError('"encoding" must be a valid string encoding')
20876 }
20877
20878 var length = byteLength(string, encoding) | 0
20879 var buf = createBuffer(length)
20880
20881 var actual = buf.write(string, encoding)
20882
20883 if (actual !== length) {
20884 // Writing a hex string, for example, that contains invalid characters will
20885 // cause everything after the first invalid character to be ignored. (e.g.
20886 // 'abxxcd' will be treated as 'ab')
20887 buf = buf.slice(0, actual)
20888 }
20889
20890 return buf
ab78acc6 20891}
3af2954a 20892
8b095871
IC
20893function fromArrayLike (array) {
20894 var length = array.length < 0 ? 0 : checked(array.length) | 0
20895 var buf = createBuffer(length)
20896 for (var i = 0; i < length; i += 1) {
20897 buf[i] = array[i] & 255
20898 }
20899 return buf
20900}
3af2954a 20901
8b095871
IC
20902function fromArrayBuffer (array, byteOffset, length) {
20903 if (byteOffset < 0 || array.byteLength < byteOffset) {
20904 throw new RangeError('\'offset\' is out of bounds')
20905 }
3af2954a 20906
8b095871
IC
20907 if (array.byteLength < byteOffset + (length || 0)) {
20908 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
20909 }
20910
8b095871
IC
20911 var buf
20912 if (byteOffset === undefined && length === undefined) {
20913 buf = new Uint8Array(array)
20914 } else if (length === undefined) {
20915 buf = new Uint8Array(array, byteOffset)
20916 } else {
20917 buf = new Uint8Array(array, byteOffset, length)
20918 }
3af2954a 20919
8b095871
IC
20920 // Return an augmented `Uint8Array` instance
20921 buf.__proto__ = Buffer.prototype
20922 return buf
20923}
20924
20925function fromObject (obj) {
20926 if (Buffer.isBuffer(obj)) {
20927 var len = checked(obj.length) | 0
20928 var buf = createBuffer(len)
20929
20930 if (buf.length === 0) {
20931 return buf
ab78acc6 20932 }
8b095871
IC
20933
20934 obj.copy(buf, 0, 0, len)
20935 return buf
20936 }
20937
20938 if (obj) {
20939 if (ArrayBuffer.isView(obj) || 'length' in obj) {
20940 if (typeof obj.length !== 'number' || isnan(obj.length)) {
20941 return createBuffer(0)
ab78acc6 20942 }
8b095871 20943 return fromArrayLike(obj)
ab78acc6 20944 }
3af2954a 20945
8b095871
IC
20946 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
20947 return fromArrayLike(obj.data)
3af2954a
IC
20948 }
20949 }
8b095871
IC
20950
20951 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 20952}
3af2954a 20953
8b095871
IC
20954function checked (length) {
20955 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
20956 // length is NaN (which is otherwise coerced to zero.)
20957 if (length >= K_MAX_LENGTH) {
20958 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
20959 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 20960 }
8b095871
IC
20961 return length | 0
20962}
20963
20964function SlowBuffer (length) {
20965 if (+length != length) { // eslint-disable-line eqeqeq
20966 length = 0
3af2954a 20967 }
8b095871 20968 return Buffer.alloc(+length)
ab78acc6 20969}
3af2954a 20970
8b095871
IC
20971Buffer.isBuffer = function isBuffer (b) {
20972 return b != null && b._isBuffer === true
ab78acc6 20973}
3af2954a 20974
8b095871
IC
20975Buffer.compare = function compare (a, b) {
20976 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
20977 throw new TypeError('Arguments must be Buffers')
20978 }
20979
20980 if (a === b) return 0
20981
20982 var x = a.length
20983 var y = b.length
20984
20985 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
20986 if (a[i] !== b[i]) {
20987 x = a[i]
20988 y = b[i]
20989 break
ab78acc6
IC
20990 }
20991 }
8b095871
IC
20992
20993 if (x < y) return -1
20994 if (y < x) return 1
20995 return 0
20996}
20997
20998Buffer.isEncoding = function isEncoding (encoding) {
20999 switch (String(encoding).toLowerCase()) {
21000 case 'hex':
21001 case 'utf8':
21002 case 'utf-8':
21003 case 'ascii':
21004 case 'latin1':
21005 case 'binary':
21006 case 'base64':
21007 case 'ucs2':
21008 case 'ucs-2':
21009 case 'utf16le':
21010 case 'utf-16le':
21011 return true
21012 default:
21013 return false
21014 }
ab78acc6
IC
21015}
21016
8b095871
IC
21017Buffer.concat = function concat (list, length) {
21018 if (!Array.isArray(list)) {
21019 throw new TypeError('"list" argument must be an Array of Buffers')
21020 }
ab78acc6 21021
8b095871
IC
21022 if (list.length === 0) {
21023 return Buffer.alloc(0)
21024 }
ab78acc6 21025
8b095871
IC
21026 var i
21027 if (length === undefined) {
21028 length = 0
21029 for (i = 0; i < list.length; ++i) {
21030 length += list[i].length
21031 }
3af2954a 21032 }
8b095871
IC
21033
21034 var buffer = Buffer.allocUnsafe(length)
21035 var pos = 0
21036 for (i = 0; i < list.length; ++i) {
21037 var buf = list[i]
21038 if (!Buffer.isBuffer(buf)) {
21039 throw new TypeError('"list" argument must be an Array of Buffers')
21040 }
21041 buf.copy(buffer, pos)
21042 pos += buf.length
ab78acc6 21043 }
8b095871 21044 return buffer
ab78acc6
IC
21045}
21046
8b095871
IC
21047function byteLength (string, encoding) {
21048 if (Buffer.isBuffer(string)) {
21049 return string.length
21050 }
21051 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
21052 return string.byteLength
21053 }
21054 if (typeof string !== 'string') {
21055 string = '' + string
21056 }
21057
21058 var len = string.length
21059 if (len === 0) return 0
21060
21061 // Use a for loop to avoid recursion
21062 var loweredCase = false
21063 for (;;) {
21064 switch (encoding) {
21065 case 'ascii':
21066 case 'latin1':
21067 case 'binary':
21068 return len
21069 case 'utf8':
21070 case 'utf-8':
21071 case undefined:
21072 return utf8ToBytes(string).length
21073 case 'ucs2':
21074 case 'ucs-2':
21075 case 'utf16le':
21076 case 'utf-16le':
21077 return len * 2
21078 case 'hex':
21079 return len >>> 1
21080 case 'base64':
21081 return base64ToBytes(string).length
21082 default:
21083 if (loweredCase) return utf8ToBytes(string).length // assume utf8
21084 encoding = ('' + encoding).toLowerCase()
21085 loweredCase = true
ab78acc6 21086 }
3af2954a 21087 }
ab78acc6 21088}
8b095871 21089Buffer.byteLength = byteLength
3af2954a 21090
8b095871
IC
21091function slowToString (encoding, start, end) {
21092 var loweredCase = false
3af2954a 21093
8b095871
IC
21094 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
21095 // property of a typed array.
3af2954a 21096
8b095871
IC
21097 // This behaves neither like String nor Uint8Array in that we set start/end
21098 // to their upper/lower bounds if the value passed is out of range.
21099 // undefined is handled specially as per ECMA-262 6th Edition,
21100 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
21101 if (start === undefined || start < 0) {
21102 start = 0
21103 }
21104 // Return early if start > this.length. Done here to prevent potential uint32
21105 // coercion fail below.
21106 if (start > this.length) {
21107 return ''
21108 }
3af2954a 21109
8b095871
IC
21110 if (end === undefined || end > this.length) {
21111 end = this.length
21112 }
3af2954a 21113
8b095871
IC
21114 if (end <= 0) {
21115 return ''
21116 }
3af2954a 21117
8b095871
IC
21118 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
21119 end >>>= 0
21120 start >>>= 0
3af2954a 21121
8b095871
IC
21122 if (end <= start) {
21123 return ''
3af2954a
IC
21124 }
21125
8b095871 21126 if (!encoding) encoding = 'utf8'
3af2954a 21127
8b095871
IC
21128 while (true) {
21129 switch (encoding) {
21130 case 'hex':
21131 return hexSlice(this, start, end)
21132
21133 case 'utf8':
21134 case 'utf-8':
21135 return utf8Slice(this, start, end)
21136
21137 case 'ascii':
21138 return asciiSlice(this, start, end)
21139
21140 case 'latin1':
21141 case 'binary':
21142 return latin1Slice(this, start, end)
21143
21144 case 'base64':
21145 return base64Slice(this, start, end)
21146
21147 case 'ucs2':
21148 case 'ucs-2':
21149 case 'utf16le':
21150 case 'utf-16le':
21151 return utf16leSlice(this, start, end)
21152
21153 default:
21154 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21155 encoding = (encoding + '').toLowerCase()
21156 loweredCase = true
21157 }
21158 }
ab78acc6 21159}
3af2954a 21160
8b095871
IC
21161// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
21162// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
21163// reliably in a browserify context because there could be multiple different
21164// copies of the 'buffer' package in use. This method works even for Buffer
21165// instances that were created from another copy of the `buffer` package.
21166// See: https://github.com/feross/buffer/issues/154
21167Buffer.prototype._isBuffer = true
21168
21169function swap (b, n, m) {
21170 var i = b[n]
21171 b[n] = b[m]
21172 b[m] = i
ab78acc6 21173}
3af2954a 21174
8b095871
IC
21175Buffer.prototype.swap16 = function swap16 () {
21176 var len = this.length
21177 if (len % 2 !== 0) {
21178 throw new RangeError('Buffer size must be a multiple of 16-bits')
21179 }
21180 for (var i = 0; i < len; i += 2) {
21181 swap(this, i, i + 1)
21182 }
21183 return this
21184}
3af2954a 21185
8b095871
IC
21186Buffer.prototype.swap32 = function swap32 () {
21187 var len = this.length
21188 if (len % 4 !== 0) {
21189 throw new RangeError('Buffer size must be a multiple of 32-bits')
21190 }
21191 for (var i = 0; i < len; i += 4) {
21192 swap(this, i, i + 3)
21193 swap(this, i + 1, i + 2)
21194 }
21195 return this
21196}
3af2954a 21197
8b095871
IC
21198Buffer.prototype.swap64 = function swap64 () {
21199 var len = this.length
21200 if (len % 8 !== 0) {
21201 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 21202 }
8b095871
IC
21203 for (var i = 0; i < len; i += 8) {
21204 swap(this, i, i + 7)
21205 swap(this, i + 1, i + 6)
21206 swap(this, i + 2, i + 5)
21207 swap(this, i + 3, i + 4)
21208 }
21209 return this
21210}
3af2954a 21211
8b095871
IC
21212Buffer.prototype.toString = function toString () {
21213 var length = this.length
21214 if (length === 0) return ''
21215 if (arguments.length === 0) return utf8Slice(this, 0, length)
21216 return slowToString.apply(this, arguments)
ab78acc6 21217}
3af2954a 21218
8b095871
IC
21219Buffer.prototype.equals = function equals (b) {
21220 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
21221 if (this === b) return true
21222 return Buffer.compare(this, b) === 0
21223}
3af2954a 21224
8b095871
IC
21225Buffer.prototype.inspect = function inspect () {
21226 var str = ''
21227 var max = exports.INSPECT_MAX_BYTES
21228 if (this.length > 0) {
21229 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
21230 if (this.length > max) str += ' ... '
21231 }
21232 return '<Buffer ' + str + '>'
ab78acc6 21233}
3af2954a 21234
8b095871
IC
21235Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
21236 if (!Buffer.isBuffer(target)) {
21237 throw new TypeError('Argument must be a Buffer')
21238 }
3af2954a 21239
8b095871
IC
21240 if (start === undefined) {
21241 start = 0
21242 }
21243 if (end === undefined) {
21244 end = target ? target.length : 0
21245 }
21246 if (thisStart === undefined) {
21247 thisStart = 0
21248 }
21249 if (thisEnd === undefined) {
21250 thisEnd = this.length
21251 }
3af2954a 21252
8b095871
IC
21253 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
21254 throw new RangeError('out of range index')
21255 }
3af2954a 21256
8b095871
IC
21257 if (thisStart >= thisEnd && start >= end) {
21258 return 0
21259 }
21260 if (thisStart >= thisEnd) {
21261 return -1
21262 }
21263 if (start >= end) {
21264 return 1
21265 }
3af2954a 21266
8b095871
IC
21267 start >>>= 0
21268 end >>>= 0
21269 thisStart >>>= 0
21270 thisEnd >>>= 0
3af2954a 21271
8b095871 21272 if (this === target) return 0
3af2954a 21273
8b095871
IC
21274 var x = thisEnd - thisStart
21275 var y = end - start
21276 var len = Math.min(x, y)
21277
21278 var thisCopy = this.slice(thisStart, thisEnd)
21279 var targetCopy = target.slice(start, end)
21280
21281 for (var i = 0; i < len; ++i) {
21282 if (thisCopy[i] !== targetCopy[i]) {
21283 x = thisCopy[i]
21284 y = targetCopy[i]
21285 break
3af2954a 21286 }
8b095871
IC
21287 }
21288
21289 if (x < y) return -1
21290 if (y < x) return 1
21291 return 0
ab78acc6 21292}
3af2954a 21293
8b095871
IC
21294// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
21295// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 21296//
8b095871
IC
21297// Arguments:
21298// - buffer - a Buffer to search
21299// - val - a string, Buffer, or number
21300// - byteOffset - an index into `buffer`; will be clamped to an int32
21301// - encoding - an optional encoding, relevant is val is a string
21302// - dir - true for indexOf, false for lastIndexOf
21303function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
21304 // Empty buffer means no match
21305 if (buffer.length === 0) return -1
21306
21307 // Normalize byteOffset
21308 if (typeof byteOffset === 'string') {
21309 encoding = byteOffset
21310 byteOffset = 0
21311 } else if (byteOffset > 0x7fffffff) {
21312 byteOffset = 0x7fffffff
21313 } else if (byteOffset < -0x80000000) {
21314 byteOffset = -0x80000000
21315 }
21316 byteOffset = +byteOffset // Coerce to Number.
21317 if (isNaN(byteOffset)) {
21318 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
21319 byteOffset = dir ? 0 : (buffer.length - 1)
21320 }
21321
21322 // Normalize byteOffset: negative offsets start from the end of the buffer
21323 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
21324 if (byteOffset >= buffer.length) {
21325 if (dir) return -1
21326 else byteOffset = buffer.length - 1
21327 } else if (byteOffset < 0) {
21328 if (dir) byteOffset = 0
21329 else return -1
21330 }
21331
21332 // Normalize val
21333 if (typeof val === 'string') {
21334 val = Buffer.from(val, encoding)
21335 }
3af2954a 21336
8b095871
IC
21337 // Finally, search either indexOf (if dir is true) or lastIndexOf
21338 if (Buffer.isBuffer(val)) {
21339 // Special case: looking for empty string/buffer always fails
21340 if (val.length === 0) {
21341 return -1
21342 }
21343 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
21344 } else if (typeof val === 'number') {
21345 val = val & 0xFF // Search for a byte value [0-255]
21346 if (typeof Uint8Array.prototype.indexOf === 'function') {
21347 if (dir) {
21348 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
21349 } else {
21350 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
21351 }
21352 }
21353 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
21354 }
3af2954a 21355
8b095871
IC
21356 throw new TypeError('val must be string, number or Buffer')
21357}
3af2954a 21358
8b095871
IC
21359function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
21360 var indexSize = 1
21361 var arrLength = arr.length
21362 var valLength = val.length
3af2954a 21363
8b095871
IC
21364 if (encoding !== undefined) {
21365 encoding = String(encoding).toLowerCase()
21366 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
21367 encoding === 'utf16le' || encoding === 'utf-16le') {
21368 if (arr.length < 2 || val.length < 2) {
21369 return -1
21370 }
21371 indexSize = 2
21372 arrLength /= 2
21373 valLength /= 2
21374 byteOffset /= 2
21375 }
21376 }
3af2954a 21377
8b095871
IC
21378 function read (buf, i) {
21379 if (indexSize === 1) {
21380 return buf[i]
21381 } else {
21382 return buf.readUInt16BE(i * indexSize)
21383 }
21384 }
3af2954a 21385
8b095871
IC
21386 var i
21387 if (dir) {
21388 var foundIndex = -1
21389 for (i = byteOffset; i < arrLength; i++) {
21390 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
21391 if (foundIndex === -1) foundIndex = i
21392 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
21393 } else {
21394 if (foundIndex !== -1) i -= i - foundIndex
21395 foundIndex = -1
21396 }
21397 }
ab78acc6 21398 } else {
8b095871
IC
21399 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
21400 for (i = byteOffset; i >= 0; i--) {
21401 var found = true
21402 for (var j = 0; j < valLength; j++) {
21403 if (read(arr, i + j) !== read(val, j)) {
21404 found = false
21405 break
21406 }
21407 }
21408 if (found) return i
21409 }
ab78acc6 21410 }
3af2954a 21411
8b095871
IC
21412 return -1
21413}
3af2954a 21414
8b095871
IC
21415Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
21416 return this.indexOf(val, byteOffset, encoding) !== -1
21417}
21418
21419Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
21420 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
21421}
3af2954a 21422
8b095871
IC
21423Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
21424 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
21425}
21426
21427function hexWrite (buf, string, offset, length) {
21428 offset = Number(offset) || 0
21429 var remaining = buf.length - offset
21430 if (!length) {
21431 length = remaining
21432 } else {
21433 length = Number(length)
21434 if (length > remaining) {
21435 length = remaining
3af2954a 21436 }
3af2954a
IC
21437 }
21438
8b095871
IC
21439 // must be an even number of digits
21440 var strLen = string.length
21441 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 21442
8b095871
IC
21443 if (length > strLen / 2) {
21444 length = strLen / 2
ab78acc6 21445 }
8b095871
IC
21446 for (var i = 0; i < length; ++i) {
21447 var parsed = parseInt(string.substr(i * 2, 2), 16)
21448 if (isNaN(parsed)) return i
21449 buf[offset + i] = parsed
ab78acc6 21450 }
8b095871 21451 return i
ab78acc6 21452}
3af2954a 21453
8b095871
IC
21454function utf8Write (buf, string, offset, length) {
21455 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 21456}
3af2954a 21457
8b095871
IC
21458function asciiWrite (buf, string, offset, length) {
21459 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 21460}
3af2954a 21461
8b095871
IC
21462function latin1Write (buf, string, offset, length) {
21463 return asciiWrite(buf, string, offset, length)
ab78acc6 21464}
3af2954a 21465
8b095871
IC
21466function base64Write (buf, string, offset, length) {
21467 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 21468}
3af2954a 21469
8b095871
IC
21470function ucs2Write (buf, string, offset, length) {
21471 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
21472}
3af2954a 21473
8b095871
IC
21474Buffer.prototype.write = function write (string, offset, length, encoding) {
21475 // Buffer#write(string)
21476 if (offset === undefined) {
21477 encoding = 'utf8'
21478 length = this.length
21479 offset = 0
21480 // Buffer#write(string, encoding)
21481 } else if (length === undefined && typeof offset === 'string') {
21482 encoding = offset
21483 length = this.length
21484 offset = 0
21485 // Buffer#write(string, offset[, length][, encoding])
21486 } else if (isFinite(offset)) {
21487 offset = offset >>> 0
21488 if (isFinite(length)) {
21489 length = length >>> 0
21490 if (encoding === undefined) encoding = 'utf8'
21491 } else {
21492 encoding = length
21493 length = undefined
21494 }
21495 } else {
21496 throw new Error(
21497 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
21498 )
3af2954a
IC
21499 }
21500
8b095871
IC
21501 var remaining = this.length - offset
21502 if (length === undefined || length > remaining) length = remaining
3af2954a 21503
8b095871
IC
21504 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
21505 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 21506 }
3af2954a 21507
8b095871 21508 if (!encoding) encoding = 'utf8'
3af2954a 21509
8b095871
IC
21510 var loweredCase = false
21511 for (;;) {
21512 switch (encoding) {
21513 case 'hex':
21514 return hexWrite(this, string, offset, length)
3af2954a 21515
8b095871
IC
21516 case 'utf8':
21517 case 'utf-8':
21518 return utf8Write(this, string, offset, length)
3af2954a 21519
8b095871
IC
21520 case 'ascii':
21521 return asciiWrite(this, string, offset, length)
3af2954a 21522
8b095871
IC
21523 case 'latin1':
21524 case 'binary':
21525 return latin1Write(this, string, offset, length)
3af2954a 21526
8b095871
IC
21527 case 'base64':
21528 // Warning: maxLength not taken into account in base64Write
21529 return base64Write(this, string, offset, length)
3af2954a 21530
8b095871
IC
21531 case 'ucs2':
21532 case 'ucs-2':
21533 case 'utf16le':
21534 case 'utf-16le':
21535 return ucs2Write(this, string, offset, length)
3af2954a 21536
8b095871
IC
21537 default:
21538 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21539 encoding = ('' + encoding).toLowerCase()
21540 loweredCase = true
21541 }
3af2954a 21542 }
ab78acc6 21543}
3af2954a 21544
8b095871
IC
21545Buffer.prototype.toJSON = function toJSON () {
21546 return {
21547 type: 'Buffer',
21548 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 21549 }
ab78acc6
IC
21550}
21551
8b095871
IC
21552function base64Slice (buf, start, end) {
21553 if (start === 0 && end === buf.length) {
21554 return base64.fromByteArray(buf)
21555 } else {
21556 return base64.fromByteArray(buf.slice(start, end))
3af2954a 21557 }
8b095871 21558}
3af2954a 21559
8b095871
IC
21560function utf8Slice (buf, start, end) {
21561 end = Math.min(buf.length, end)
21562 var res = []
3af2954a 21563
8b095871
IC
21564 var i = start
21565 while (i < end) {
21566 var firstByte = buf[i]
21567 var codePoint = null
21568 var bytesPerSequence = (firstByte > 0xEF) ? 4
21569 : (firstByte > 0xDF) ? 3
21570 : (firstByte > 0xBF) ? 2
21571 : 1
3af2954a 21572
8b095871
IC
21573 if (i + bytesPerSequence <= end) {
21574 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 21575
8b095871
IC
21576 switch (bytesPerSequence) {
21577 case 1:
21578 if (firstByte < 0x80) {
21579 codePoint = firstByte
21580 }
21581 break
21582 case 2:
21583 secondByte = buf[i + 1]
21584 if ((secondByte & 0xC0) === 0x80) {
21585 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
21586 if (tempCodePoint > 0x7F) {
21587 codePoint = tempCodePoint
21588 }
21589 }
21590 break
21591 case 3:
21592 secondByte = buf[i + 1]
21593 thirdByte = buf[i + 2]
21594 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
21595 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
21596 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
21597 codePoint = tempCodePoint
21598 }
21599 }
21600 break
21601 case 4:
21602 secondByte = buf[i + 1]
21603 thirdByte = buf[i + 2]
21604 fourthByte = buf[i + 3]
21605 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
21606 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
21607 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
21608 codePoint = tempCodePoint
21609 }
21610 }
21611 }
21612 }
3af2954a 21613
8b095871
IC
21614 if (codePoint === null) {
21615 // we did not generate a valid codePoint so insert a
21616 // replacement char (U+FFFD) and advance only 1 byte
21617 codePoint = 0xFFFD
21618 bytesPerSequence = 1
21619 } else if (codePoint > 0xFFFF) {
21620 // encode to utf16 (surrogate pair dance)
21621 codePoint -= 0x10000
21622 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
21623 codePoint = 0xDC00 | codePoint & 0x3FF
21624 }
21625
21626 res.push(codePoint)
21627 i += bytesPerSequence
3af2954a
IC
21628 }
21629
8b095871 21630 return decodeCodePointsArray(res)
ab78acc6 21631}
3af2954a 21632
8b095871
IC
21633// Based on http://stackoverflow.com/a/22747272/680742, the browser with
21634// the lowest limit is Chrome, with 0x10000 args.
21635// We go 1 magnitude less, for safety
21636var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 21637
8b095871
IC
21638function decodeCodePointsArray (codePoints) {
21639 var len = codePoints.length
21640 if (len <= MAX_ARGUMENTS_LENGTH) {
21641 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
21642 }
21643
8b095871
IC
21644 // Decode in chunks to avoid "call stack size exceeded".
21645 var res = ''
21646 var i = 0
21647 while (i < len) {
21648 res += String.fromCharCode.apply(
21649 String,
21650 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
21651 )
3af2954a 21652 }
8b095871
IC
21653 return res
21654}
3af2954a 21655
8b095871
IC
21656function asciiSlice (buf, start, end) {
21657 var ret = ''
21658 end = Math.min(buf.length, end)
3af2954a 21659
8b095871
IC
21660 for (var i = start; i < end; ++i) {
21661 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 21662 }
8b095871
IC
21663 return ret
21664}
3af2954a 21665
8b095871
IC
21666function latin1Slice (buf, start, end) {
21667 var ret = ''
21668 end = Math.min(buf.length, end)
3af2954a 21669
8b095871
IC
21670 for (var i = start; i < end; ++i) {
21671 ret += String.fromCharCode(buf[i])
3af2954a 21672 }
8b095871 21673 return ret
ab78acc6 21674}
3af2954a 21675
8b095871
IC
21676function hexSlice (buf, start, end) {
21677 var len = buf.length
3af2954a 21678
8b095871
IC
21679 if (!start || start < 0) start = 0
21680 if (!end || end < 0 || end > len) end = len
3af2954a 21681
8b095871
IC
21682 var out = ''
21683 for (var i = start; i < end; ++i) {
21684 out += toHex(buf[i])
3af2954a 21685 }
8b095871
IC
21686 return out
21687}
3af2954a 21688
8b095871
IC
21689function utf16leSlice (buf, start, end) {
21690 var bytes = buf.slice(start, end)
21691 var res = ''
21692 for (var i = 0; i < bytes.length; i += 2) {
21693 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
21694 }
21695 return res
21696}
3af2954a 21697
8b095871
IC
21698Buffer.prototype.slice = function slice (start, end) {
21699 var len = this.length
21700 start = ~~start
21701 end = end === undefined ? len : ~~end
3af2954a 21702
8b095871
IC
21703 if (start < 0) {
21704 start += len
21705 if (start < 0) start = 0
21706 } else if (start > len) {
21707 start = len
21708 }
3af2954a 21709
8b095871
IC
21710 if (end < 0) {
21711 end += len
21712 if (end < 0) end = 0
21713 } else if (end > len) {
21714 end = len
21715 }
3af2954a 21716
8b095871 21717 if (end < start) end = start
3af2954a 21718
8b095871
IC
21719 var newBuf = this.subarray(start, end)
21720 // Return an augmented `Uint8Array` instance
21721 newBuf.__proto__ = Buffer.prototype
21722 return newBuf
21723}
3af2954a 21724
8b095871
IC
21725/*
21726 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 21727 */
8b095871
IC
21728function checkOffset (offset, ext, length) {
21729 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
21730 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 21731}
3af2954a 21732
8b095871
IC
21733Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
21734 offset = offset >>> 0
21735 byteLength = byteLength >>> 0
21736 if (!noAssert) checkOffset(offset, byteLength, this.length)
21737
21738 var val = this[offset]
21739 var mul = 1
21740 var i = 0
21741 while (++i < byteLength && (mul *= 0x100)) {
21742 val += this[offset + i] * mul
3af2954a
IC
21743 }
21744
8b095871
IC
21745 return val
21746}
3af2954a 21747
8b095871
IC
21748Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
21749 offset = offset >>> 0
21750 byteLength = byteLength >>> 0
21751 if (!noAssert) {
21752 checkOffset(offset, byteLength, this.length)
ab78acc6 21753 }
3af2954a 21754
8b095871
IC
21755 var val = this[offset + --byteLength]
21756 var mul = 1
21757 while (byteLength > 0 && (mul *= 0x100)) {
21758 val += this[offset + --byteLength] * mul
ab78acc6 21759 }
3af2954a 21760
8b095871 21761 return val
ab78acc6 21762}
3af2954a 21763
8b095871
IC
21764Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
21765 offset = offset >>> 0
21766 if (!noAssert) checkOffset(offset, 1, this.length)
21767 return this[offset]
ab78acc6 21768}
3af2954a 21769
8b095871
IC
21770Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
21771 offset = offset >>> 0
21772 if (!noAssert) checkOffset(offset, 2, this.length)
21773 return this[offset] | (this[offset + 1] << 8)
21774}
3af2954a 21775
8b095871
IC
21776Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
21777 offset = offset >>> 0
21778 if (!noAssert) checkOffset(offset, 2, this.length)
21779 return (this[offset] << 8) | this[offset + 1]
21780}
3af2954a 21781
8b095871
IC
21782Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
21783 offset = offset >>> 0
21784 if (!noAssert) checkOffset(offset, 4, this.length)
21785
21786 return ((this[offset]) |
21787 (this[offset + 1] << 8) |
21788 (this[offset + 2] << 16)) +
21789 (this[offset + 3] * 0x1000000)
ab78acc6 21790}
3af2954a 21791
8b095871
IC
21792Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
21793 offset = offset >>> 0
21794 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21795
8b095871
IC
21796 return (this[offset] * 0x1000000) +
21797 ((this[offset + 1] << 16) |
21798 (this[offset + 2] << 8) |
21799 this[offset + 3])
21800}
3af2954a 21801
8b095871
IC
21802Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
21803 offset = offset >>> 0
21804 byteLength = byteLength >>> 0
21805 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 21806
8b095871
IC
21807 var val = this[offset]
21808 var mul = 1
21809 var i = 0
21810 while (++i < byteLength && (mul *= 0x100)) {
21811 val += this[offset + i] * mul
3af2954a 21812 }
8b095871 21813 mul *= 0x80
3af2954a 21814
8b095871 21815 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 21816
8b095871 21817 return val
ab78acc6 21818}
3af2954a 21819
8b095871
IC
21820Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
21821 offset = offset >>> 0
21822 byteLength = byteLength >>> 0
21823 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 21824
8b095871
IC
21825 var i = byteLength
21826 var mul = 1
21827 var val = this[offset + --i]
21828 while (i > 0 && (mul *= 0x100)) {
21829 val += this[offset + --i] * mul
3af2954a 21830 }
8b095871 21831 mul *= 0x80
3af2954a 21832
8b095871
IC
21833 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
21834
21835 return val
ab78acc6 21836}
3af2954a 21837
8b095871
IC
21838Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
21839 offset = offset >>> 0
21840 if (!noAssert) checkOffset(offset, 1, this.length)
21841 if (!(this[offset] & 0x80)) return (this[offset])
21842 return ((0xff - this[offset] + 1) * -1)
ab78acc6 21843}
3af2954a 21844
8b095871
IC
21845Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
21846 offset = offset >>> 0
21847 if (!noAssert) checkOffset(offset, 2, this.length)
21848 var val = this[offset] | (this[offset + 1] << 8)
21849 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 21850}
3af2954a 21851
8b095871
IC
21852Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
21853 offset = offset >>> 0
21854 if (!noAssert) checkOffset(offset, 2, this.length)
21855 var val = this[offset + 1] | (this[offset] << 8)
21856 return (val & 0x8000) ? val | 0xFFFF0000 : val
21857}
ab78acc6 21858
8b095871
IC
21859Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
21860 offset = offset >>> 0
21861 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21862
8b095871
IC
21863 return (this[offset]) |
21864 (this[offset + 1] << 8) |
21865 (this[offset + 2] << 16) |
21866 (this[offset + 3] << 24)
ab78acc6 21867}
3af2954a 21868
8b095871
IC
21869Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
21870 offset = offset >>> 0
21871 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21872
8b095871
IC
21873 return (this[offset] << 24) |
21874 (this[offset + 1] << 16) |
21875 (this[offset + 2] << 8) |
21876 (this[offset + 3])
21877}
3af2954a 21878
8b095871
IC
21879Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
21880 offset = offset >>> 0
21881 if (!noAssert) checkOffset(offset, 4, this.length)
21882 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 21883}
3af2954a 21884
8b095871
IC
21885Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
21886 offset = offset >>> 0
21887 if (!noAssert) checkOffset(offset, 4, this.length)
21888 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 21889}
3af2954a 21890
8b095871
IC
21891Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
21892 offset = offset >>> 0
21893 if (!noAssert) checkOffset(offset, 8, this.length)
21894 return ieee754.read(this, offset, true, 52, 8)
21895}
3af2954a 21896
8b095871
IC
21897Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
21898 offset = offset >>> 0
21899 if (!noAssert) checkOffset(offset, 8, this.length)
21900 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 21901}
3af2954a 21902
8b095871
IC
21903function checkInt (buf, value, offset, ext, max, min) {
21904 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
21905 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
21906 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 21907}
3af2954a 21908
8b095871
IC
21909Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
21910 value = +value
21911 offset = offset >>> 0
21912 byteLength = byteLength >>> 0
21913 if (!noAssert) {
21914 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21915 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
21916 }
21917
8b095871 21918 var mul = 1
ab78acc6 21919 var i = 0
8b095871
IC
21920 this[offset] = value & 0xFF
21921 while (++i < byteLength && (mul *= 0x100)) {
21922 this[offset + i] = (value / mul) & 0xFF
21923 }
3af2954a 21924
8b095871
IC
21925 return offset + byteLength
21926}
21927
21928Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
21929 value = +value
21930 offset = offset >>> 0
21931 byteLength = byteLength >>> 0
21932 if (!noAssert) {
21933 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21934 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 21935 }
3af2954a 21936
8b095871
IC
21937 var i = byteLength - 1
21938 var mul = 1
21939 this[offset + i] = value & 0xFF
21940 while (--i >= 0 && (mul *= 0x100)) {
21941 this[offset + i] = (value / mul) & 0xFF
ab78acc6 21942 }
3af2954a 21943
8b095871
IC
21944 return offset + byteLength
21945}
21946
21947Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
21948 value = +value
21949 offset = offset >>> 0
21950 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
21951 this[offset] = (value & 0xff)
21952 return offset + 1
21953}
21954
21955Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
21956 value = +value
21957 offset = offset >>> 0
21958 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21959 this[offset] = (value & 0xff)
21960 this[offset + 1] = (value >>> 8)
21961 return offset + 2
21962}
21963
21964Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
21965 value = +value
21966 offset = offset >>> 0
21967 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21968 this[offset] = (value >>> 8)
21969 this[offset + 1] = (value & 0xff)
21970 return offset + 2
ab78acc6 21971}
3af2954a 21972
8b095871
IC
21973Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
21974 value = +value
21975 offset = offset >>> 0
21976 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
21977 this[offset + 3] = (value >>> 24)
21978 this[offset + 2] = (value >>> 16)
21979 this[offset + 1] = (value >>> 8)
21980 this[offset] = (value & 0xff)
21981 return offset + 4
ab78acc6 21982}
3af2954a 21983
8b095871
IC
21984Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
21985 value = +value
21986 offset = offset >>> 0
21987 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
21988 this[offset] = (value >>> 24)
21989 this[offset + 1] = (value >>> 16)
21990 this[offset + 2] = (value >>> 8)
21991 this[offset + 3] = (value & 0xff)
21992 return offset + 4
21993}
3af2954a 21994
8b095871
IC
21995Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
21996 value = +value
21997 offset = offset >>> 0
21998 if (!noAssert) {
21999 var limit = Math.pow(2, (8 * byteLength) - 1)
22000
22001 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
22002 }
22003
8b095871
IC
22004 var i = 0
22005 var mul = 1
22006 var sub = 0
22007 this[offset] = value & 0xFF
22008 while (++i < byteLength && (mul *= 0x100)) {
22009 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
22010 sub = 1
ab78acc6 22011 }
8b095871 22012 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
22013 }
22014
8b095871 22015 return offset + byteLength
ab78acc6 22016}
3af2954a 22017
8b095871
IC
22018Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
22019 value = +value
22020 offset = offset >>> 0
22021 if (!noAssert) {
22022 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 22023
8b095871
IC
22024 checkInt(this, value, offset, byteLength, limit - 1, -limit)
22025 }
ab78acc6 22026
8b095871
IC
22027 var i = byteLength - 1
22028 var mul = 1
22029 var sub = 0
22030 this[offset + i] = value & 0xFF
22031 while (--i >= 0 && (mul *= 0x100)) {
22032 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
22033 sub = 1
3af2954a 22034 }
8b095871 22035 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 22036 }
3af2954a 22037
8b095871
IC
22038 return offset + byteLength
22039}
3af2954a 22040
8b095871
IC
22041Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
22042 value = +value
22043 offset = offset >>> 0
22044 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
22045 if (value < 0) value = 0xff + value + 1
22046 this[offset] = (value & 0xff)
22047 return offset + 1
22048}
3af2954a 22049
8b095871
IC
22050Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
22051 value = +value
22052 offset = offset >>> 0
22053 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22054 this[offset] = (value & 0xff)
22055 this[offset + 1] = (value >>> 8)
22056 return offset + 2
22057}
3af2954a 22058
8b095871
IC
22059Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
22060 value = +value
22061 offset = offset >>> 0
22062 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22063 this[offset] = (value >>> 8)
22064 this[offset + 1] = (value & 0xff)
22065 return offset + 2
22066}
3af2954a 22067
8b095871
IC
22068Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
22069 value = +value
22070 offset = offset >>> 0
22071 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22072 this[offset] = (value & 0xff)
22073 this[offset + 1] = (value >>> 8)
22074 this[offset + 2] = (value >>> 16)
22075 this[offset + 3] = (value >>> 24)
22076 return offset + 4
22077}
3af2954a 22078
8b095871
IC
22079Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
22080 value = +value
22081 offset = offset >>> 0
22082 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22083 if (value < 0) value = 0xffffffff + value + 1
22084 this[offset] = (value >>> 24)
22085 this[offset + 1] = (value >>> 16)
22086 this[offset + 2] = (value >>> 8)
22087 this[offset + 3] = (value & 0xff)
22088 return offset + 4
22089}
3af2954a 22090
8b095871
IC
22091function checkIEEE754 (buf, value, offset, ext, max, min) {
22092 if (offset + ext > buf.length) throw new RangeError('Index out of range')
22093 if (offset < 0) throw new RangeError('Index out of range')
22094}
3af2954a 22095
8b095871
IC
22096function writeFloat (buf, value, offset, littleEndian, noAssert) {
22097 value = +value
22098 offset = offset >>> 0
22099 if (!noAssert) {
22100 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 22101 }
8b095871
IC
22102 ieee754.write(buf, value, offset, littleEndian, 23, 4)
22103 return offset + 4
ab78acc6 22104}
3af2954a 22105
8b095871
IC
22106Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
22107 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 22108}
3af2954a 22109
8b095871
IC
22110Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
22111 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 22112}
3af2954a 22113
8b095871
IC
22114function writeDouble (buf, value, offset, littleEndian, noAssert) {
22115 value = +value
22116 offset = offset >>> 0
22117 if (!noAssert) {
22118 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 22119 }
8b095871
IC
22120 ieee754.write(buf, value, offset, littleEndian, 52, 8)
22121 return offset + 8
ab78acc6 22122}
3af2954a 22123
8b095871
IC
22124Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
22125 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 22126}
3af2954a 22127
8b095871
IC
22128Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
22129 return writeDouble(this, value, offset, false, noAssert)
22130}
3af2954a 22131
8b095871
IC
22132// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
22133Buffer.prototype.copy = function copy (target, targetStart, start, end) {
22134 if (!start) start = 0
22135 if (!end && end !== 0) end = this.length
22136 if (targetStart >= target.length) targetStart = target.length
22137 if (!targetStart) targetStart = 0
22138 if (end > 0 && end < start) end = start
3af2954a 22139
8b095871
IC
22140 // Copy 0 bytes; we're done
22141 if (end === start) return 0
22142 if (target.length === 0 || this.length === 0) return 0
3af2954a 22143
8b095871
IC
22144 // Fatal error conditions
22145 if (targetStart < 0) {
22146 throw new RangeError('targetStart out of bounds')
3af2954a 22147 }
8b095871
IC
22148 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
22149 if (end < 0) throw new RangeError('sourceEnd out of bounds')
22150
22151 // Are we oob?
22152 if (end > this.length) end = this.length
22153 if (target.length - targetStart < end - start) {
22154 end = target.length - targetStart + start
3af2954a 22155 }
8b095871
IC
22156
22157 var len = end - start
22158 var i
22159
22160 if (this === target && start < targetStart && targetStart < end) {
22161 // descending copy from end
22162 for (i = len - 1; i >= 0; --i) {
22163 target[i + targetStart] = this[i + start]
3af2954a 22164 }
8b095871
IC
22165 } else if (len < 1000) {
22166 // ascending copy from start
22167 for (i = 0; i < len; ++i) {
22168 target[i + targetStart] = this[i + start]
22169 }
22170 } else {
22171 Uint8Array.prototype.set.call(
22172 target,
22173 this.subarray(start, start + len),
22174 targetStart
22175 )
3af2954a
IC
22176 }
22177
8b095871
IC
22178 return len
22179}
22180
22181// Usage:
22182// buffer.fill(number[, offset[, end]])
22183// buffer.fill(buffer[, offset[, end]])
22184// buffer.fill(string[, offset[, end]][, encoding])
22185Buffer.prototype.fill = function fill (val, start, end, encoding) {
22186 // Handle string cases:
22187 if (typeof val === 'string') {
22188 if (typeof start === 'string') {
22189 encoding = start
22190 start = 0
22191 end = this.length
22192 } else if (typeof end === 'string') {
22193 encoding = end
22194 end = this.length
22195 }
22196 if (val.length === 1) {
22197 var code = val.charCodeAt(0)
22198 if (code < 256) {
22199 val = code
3af2954a 22200 }
3af2954a 22201 }
8b095871
IC
22202 if (encoding !== undefined && typeof encoding !== 'string') {
22203 throw new TypeError('encoding must be a string')
22204 }
22205 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
22206 throw new TypeError('Unknown encoding: ' + encoding)
22207 }
22208 } else if (typeof val === 'number') {
22209 val = val & 255
ab78acc6 22210 }
3af2954a 22211
8b095871
IC
22212 // Invalid ranges are not set to a default, so can range check early.
22213 if (start < 0 || this.length < start || this.length < end) {
22214 throw new RangeError('Out of range index')
22215 }
3af2954a 22216
8b095871
IC
22217 if (end <= start) {
22218 return this
22219 }
3af2954a 22220
8b095871
IC
22221 start = start >>> 0
22222 end = end === undefined ? this.length : end >>> 0
3af2954a 22223
8b095871
IC
22224 if (!val) val = 0
22225
22226 var i
22227 if (typeof val === 'number') {
22228 for (i = start; i < end; ++i) {
22229 this[i] = val
22230 }
ab78acc6 22231 } else {
8b095871
IC
22232 var bytes = Buffer.isBuffer(val)
22233 ? val
22234 : new Buffer(val, encoding)
22235 var len = bytes.length
22236 for (i = 0; i < end - start; ++i) {
22237 this[i + start] = bytes[i % len]
ab78acc6
IC
22238 }
22239 }
3af2954a 22240
8b095871
IC
22241 return this
22242}
3af2954a 22243
8b095871
IC
22244// HELPER FUNCTIONS
22245// ================
22246
22247var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
22248
22249function base64clean (str) {
22250 // Node strips out invalid characters like \n and \t from the string, base64-js does not
22251 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
22252 // Node converts strings with length < 2 to ''
22253 if (str.length < 2) return ''
22254 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
22255 while (str.length % 4 !== 0) {
22256 str = str + '='
3af2954a 22257 }
8b095871 22258 return str
ab78acc6
IC
22259}
22260
8b095871
IC
22261function stringtrim (str) {
22262 if (str.trim) return str.trim()
22263 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 22264}
3af2954a 22265
8b095871
IC
22266function toHex (n) {
22267 if (n < 16) return '0' + n.toString(16)
22268 return n.toString(16)
ab78acc6 22269}
3af2954a 22270
8b095871
IC
22271function utf8ToBytes (string, units) {
22272 units = units || Infinity
22273 var codePoint
22274 var length = string.length
22275 var leadSurrogate = null
22276 var bytes = []
3af2954a 22277
8b095871
IC
22278 for (var i = 0; i < length; ++i) {
22279 codePoint = string.charCodeAt(i)
3af2954a 22280
8b095871
IC
22281 // is surrogate component
22282 if (codePoint > 0xD7FF && codePoint < 0xE000) {
22283 // last char was a lead
22284 if (!leadSurrogate) {
22285 // no lead yet
22286 if (codePoint > 0xDBFF) {
22287 // unexpected trail
22288 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22289 continue
22290 } else if (i + 1 === length) {
22291 // unpaired lead
22292 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22293 continue
22294 }
3af2954a 22295
8b095871
IC
22296 // valid lead
22297 leadSurrogate = codePoint
22298
22299 continue
22300 }
22301
22302 // 2 leads in a row
22303 if (codePoint < 0xDC00) {
22304 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22305 leadSurrogate = codePoint
22306 continue
22307 }
22308
22309 // valid surrogate pair
22310 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
22311 } else if (leadSurrogate) {
22312 // valid bmp char, but last char was a lead
22313 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22314 }
22315
22316 leadSurrogate = null
22317
22318 // encode utf8
22319 if (codePoint < 0x80) {
22320 if ((units -= 1) < 0) break
22321 bytes.push(codePoint)
22322 } else if (codePoint < 0x800) {
22323 if ((units -= 2) < 0) break
22324 bytes.push(
22325 codePoint >> 0x6 | 0xC0,
22326 codePoint & 0x3F | 0x80
22327 )
22328 } else if (codePoint < 0x10000) {
22329 if ((units -= 3) < 0) break
22330 bytes.push(
22331 codePoint >> 0xC | 0xE0,
22332 codePoint >> 0x6 & 0x3F | 0x80,
22333 codePoint & 0x3F | 0x80
22334 )
22335 } else if (codePoint < 0x110000) {
22336 if ((units -= 4) < 0) break
22337 bytes.push(
22338 codePoint >> 0x12 | 0xF0,
22339 codePoint >> 0xC & 0x3F | 0x80,
22340 codePoint >> 0x6 & 0x3F | 0x80,
22341 codePoint & 0x3F | 0x80
22342 )
ab78acc6 22343 } else {
8b095871 22344 throw new Error('Invalid code point')
ab78acc6 22345 }
3af2954a
IC
22346 }
22347
8b095871
IC
22348 return bytes
22349}
3af2954a 22350
8b095871
IC
22351function asciiToBytes (str) {
22352 var byteArray = []
22353 for (var i = 0; i < str.length; ++i) {
22354 // Node's code seems to be doing this and not & 0x7F..
22355 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 22356 }
8b095871
IC
22357 return byteArray
22358}
3af2954a 22359
8b095871
IC
22360function utf16leToBytes (str, units) {
22361 var c, hi, lo
22362 var byteArray = []
22363 for (var i = 0; i < str.length; ++i) {
22364 if ((units -= 2) < 0) break
3af2954a 22365
8b095871
IC
22366 c = str.charCodeAt(i)
22367 hi = c >> 8
22368 lo = c % 256
22369 byteArray.push(lo)
22370 byteArray.push(hi)
22371 }
ebd8d4e8 22372
8b095871
IC
22373 return byteArray
22374}
22375
22376function base64ToBytes (str) {
22377 return base64.toByteArray(base64clean(str))
22378}
22379
22380function blitBuffer (src, dst, offset, length) {
22381 for (var i = 0; i < length; ++i) {
22382 if ((i + offset >= dst.length) || (i >= src.length)) break
22383 dst[i + offset] = src[i]
22384 }
22385 return i
22386}
22387
22388function isnan (val) {
22389 return val !== val // eslint-disable-line no-self-compare
22390}
22391
22392},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
22393(function (Buffer){
22394// Copyright Joyent, Inc. and other Node contributors.
22395//
22396// Permission is hereby granted, free of charge, to any person obtaining a
22397// copy of this software and associated documentation files (the
22398// "Software"), to deal in the Software without restriction, including
22399// without limitation the rights to use, copy, modify, merge, publish,
22400// distribute, sublicense, and/or sell copies of the Software, and to permit
22401// persons to whom the Software is furnished to do so, subject to the
22402// following conditions:
22403//
22404// The above copyright notice and this permission notice shall be included
22405// in all copies or substantial portions of the Software.
22406//
22407// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22408// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22409// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22410// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22411// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22412// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22413// USE OR OTHER DEALINGS IN THE SOFTWARE.
22414
22415// NOTE: These type checking functions intentionally don't use `instanceof`
22416// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 22417
8b095871
IC
22418function isArray(arg) {
22419 if (Array.isArray) {
22420 return Array.isArray(arg);
22421 }
22422 return objectToString(arg) === '[object Array]';
22423}
22424exports.isArray = isArray;
ebd8d4e8 22425
8b095871
IC
22426function isBoolean(arg) {
22427 return typeof arg === 'boolean';
22428}
22429exports.isBoolean = isBoolean;
ebd8d4e8 22430
8b095871
IC
22431function isNull(arg) {
22432 return arg === null;
22433}
22434exports.isNull = isNull;
ebd8d4e8 22435
8b095871
IC
22436function isNullOrUndefined(arg) {
22437 return arg == null;
22438}
22439exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 22440
8b095871
IC
22441function isNumber(arg) {
22442 return typeof arg === 'number';
ab78acc6 22443}
8b095871 22444exports.isNumber = isNumber;
212b1b46 22445
8b095871
IC
22446function isString(arg) {
22447 return typeof arg === 'string';
ab78acc6 22448}
8b095871 22449exports.isString = isString;
212b1b46 22450
8b095871
IC
22451function isSymbol(arg) {
22452 return typeof arg === 'symbol';
ab78acc6 22453}
8b095871 22454exports.isSymbol = isSymbol;
ab78acc6 22455
8b095871
IC
22456function isUndefined(arg) {
22457 return arg === void 0;
22458}
22459exports.isUndefined = isUndefined;
ab78acc6 22460
8b095871
IC
22461function isRegExp(re) {
22462 return objectToString(re) === '[object RegExp]';
22463}
22464exports.isRegExp = isRegExp;
ab78acc6 22465
8b095871
IC
22466function isObject(arg) {
22467 return typeof arg === 'object' && arg !== null;
22468}
22469exports.isObject = isObject;
212b1b46 22470
8b095871
IC
22471function isDate(d) {
22472 return objectToString(d) === '[object Date]';
22473}
22474exports.isDate = isDate;
212b1b46 22475
8b095871
IC
22476function isError(e) {
22477 return (objectToString(e) === '[object Error]' || e instanceof Error);
22478}
22479exports.isError = isError;
212b1b46 22480
8b095871
IC
22481function isFunction(arg) {
22482 return typeof arg === 'function';
22483}
22484exports.isFunction = isFunction;
212b1b46 22485
8b095871
IC
22486function isPrimitive(arg) {
22487 return arg === null ||
22488 typeof arg === 'boolean' ||
22489 typeof arg === 'number' ||
22490 typeof arg === 'string' ||
22491 typeof arg === 'symbol' || // ES6 symbol
22492 typeof arg === 'undefined';
ab78acc6 22493}
8b095871 22494exports.isPrimitive = isPrimitive;
212b1b46 22495
8b095871 22496exports.isBuffer = Buffer.isBuffer;
ab78acc6 22497
8b095871
IC
22498function objectToString(o) {
22499 return Object.prototype.toString.call(o);
ab78acc6 22500}
212b1b46 22501
8b095871
IC
22502}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
22503},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
22504// Copyright Joyent, Inc. and other Node contributors.
22505//
22506// Permission is hereby granted, free of charge, to any person obtaining a
22507// copy of this software and associated documentation files (the
22508// "Software"), to deal in the Software without restriction, including
22509// without limitation the rights to use, copy, modify, merge, publish,
22510// distribute, sublicense, and/or sell copies of the Software, and to permit
22511// persons to whom the Software is furnished to do so, subject to the
22512// following conditions:
22513//
22514// The above copyright notice and this permission notice shall be included
22515// in all copies or substantial portions of the Software.
22516//
22517// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22518// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22519// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22520// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22521// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22522// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22523// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 22524
8b095871
IC
22525function EventEmitter() {
22526 this._events = this._events || {};
22527 this._maxListeners = this._maxListeners || undefined;
ab78acc6 22528}
8b095871 22529module.exports = EventEmitter;
212b1b46 22530
8b095871
IC
22531// Backwards-compat with node 0.10.x
22532EventEmitter.EventEmitter = EventEmitter;
212b1b46 22533
8b095871
IC
22534EventEmitter.prototype._events = undefined;
22535EventEmitter.prototype._maxListeners = undefined;
212b1b46 22536
8b095871
IC
22537// By default EventEmitters will print a warning if more than 10 listeners are
22538// added to it. This is a useful default which helps finding memory leaks.
22539EventEmitter.defaultMaxListeners = 10;
212b1b46 22540
8b095871
IC
22541// Obviously not all Emitters should be limited to 10. This function allows
22542// that to be increased. Set to zero for unlimited.
22543EventEmitter.prototype.setMaxListeners = function(n) {
22544 if (!isNumber(n) || n < 0 || isNaN(n))
22545 throw TypeError('n must be a positive number');
22546 this._maxListeners = n;
22547 return this;
22548};
212b1b46 22549
8b095871
IC
22550EventEmitter.prototype.emit = function(type) {
22551 var er, handler, len, args, i, listeners;
212b1b46 22552
8b095871
IC
22553 if (!this._events)
22554 this._events = {};
212b1b46 22555
8b095871
IC
22556 // If there is no 'error' event listener then throw.
22557 if (type === 'error') {
22558 if (!this._events.error ||
22559 (isObject(this._events.error) && !this._events.error.length)) {
22560 er = arguments[1];
22561 if (er instanceof Error) {
22562 throw er; // Unhandled 'error' event
22563 } else {
22564 // At least give some kind of context to the user
22565 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
22566 err.context = er;
22567 throw err;
22568 }
22569 }
ab78acc6 22570 }
212b1b46 22571
8b095871 22572 handler = this._events[type];
212b1b46 22573
8b095871
IC
22574 if (isUndefined(handler))
22575 return false;
22576
22577 if (isFunction(handler)) {
22578 switch (arguments.length) {
22579 // fast cases
22580 case 1:
22581 handler.call(this);
22582 break;
22583 case 2:
22584 handler.call(this, arguments[1]);
22585 break;
22586 case 3:
22587 handler.call(this, arguments[1], arguments[2]);
22588 break;
22589 // slower
22590 default:
22591 args = Array.prototype.slice.call(arguments, 1);
22592 handler.apply(this, args);
3af2954a 22593 }
8b095871
IC
22594 } else if (isObject(handler)) {
22595 args = Array.prototype.slice.call(arguments, 1);
22596 listeners = handler.slice();
22597 len = listeners.length;
22598 for (i = 0; i < len; i++)
22599 listeners[i].apply(this, args);
3af2954a 22600 }
212b1b46 22601
8b095871
IC
22602 return true;
22603};
ebd8d4e8 22604
8b095871
IC
22605EventEmitter.prototype.addListener = function(type, listener) {
22606 var m;
ebd8d4e8 22607
8b095871
IC
22608 if (!isFunction(listener))
22609 throw TypeError('listener must be a function');
ebd8d4e8 22610
8b095871
IC
22611 if (!this._events)
22612 this._events = {};
3af2954a 22613
8b095871
IC
22614 // To avoid recursion in the case that type === "newListener"! Before
22615 // adding it to the listeners, first emit "newListener".
22616 if (this._events.newListener)
22617 this.emit('newListener', type,
22618 isFunction(listener.listener) ?
22619 listener.listener : listener);
3af2954a 22620
8b095871
IC
22621 if (!this._events[type])
22622 // Optimize the case of one listener. Don't need the extra array object.
22623 this._events[type] = listener;
22624 else if (isObject(this._events[type]))
22625 // If we've already got an array, just append.
22626 this._events[type].push(listener);
22627 else
22628 // Adding the second element, need to change to array.
22629 this._events[type] = [this._events[type], listener];
3af2954a 22630
8b095871
IC
22631 // Check for listener leak
22632 if (isObject(this._events[type]) && !this._events[type].warned) {
22633 if (!isUndefined(this._maxListeners)) {
22634 m = this._maxListeners;
22635 } else {
22636 m = EventEmitter.defaultMaxListeners;
22637 }
3af2954a 22638
8b095871
IC
22639 if (m && m > 0 && this._events[type].length > m) {
22640 this._events[type].warned = true;
22641 console.error('(node) warning: possible EventEmitter memory ' +
22642 'leak detected. %d listeners added. ' +
22643 'Use emitter.setMaxListeners() to increase limit.',
22644 this._events[type].length);
22645 if (typeof console.trace === 'function') {
22646 // not supported in IE 10
22647 console.trace();
22648 }
22649 }
3af2954a
IC
22650 }
22651
8b095871
IC
22652 return this;
22653};
3af2954a 22654
8b095871 22655EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 22656
8b095871
IC
22657EventEmitter.prototype.once = function(type, listener) {
22658 if (!isFunction(listener))
22659 throw TypeError('listener must be a function');
3af2954a 22660
8b095871 22661 var fired = false;
ebd8d4e8 22662
8b095871
IC
22663 function g() {
22664 this.removeListener(type, g);
3af2954a 22665
8b095871
IC
22666 if (!fired) {
22667 fired = true;
22668 listener.apply(this, arguments);
22669 }
22670 }
3af2954a 22671
8b095871
IC
22672 g.listener = listener;
22673 this.on(type, g);
ebd8d4e8 22674
8b095871
IC
22675 return this;
22676};
ebd8d4e8 22677
8b095871
IC
22678// emits a 'removeListener' event iff the listener was removed
22679EventEmitter.prototype.removeListener = function(type, listener) {
22680 var list, position, length, i;
ebd8d4e8 22681
8b095871
IC
22682 if (!isFunction(listener))
22683 throw TypeError('listener must be a function');
ebd8d4e8 22684
8b095871
IC
22685 if (!this._events || !this._events[type])
22686 return this;
ab78acc6 22687
8b095871
IC
22688 list = this._events[type];
22689 length = list.length;
22690 position = -1;
ebd8d4e8 22691
8b095871
IC
22692 if (list === listener ||
22693 (isFunction(list.listener) && list.listener === listener)) {
22694 delete this._events[type];
22695 if (this._events.removeListener)
22696 this.emit('removeListener', type, listener);
ebd8d4e8 22697
8b095871
IC
22698 } else if (isObject(list)) {
22699 for (i = length; i-- > 0;) {
22700 if (list[i] === listener ||
22701 (list[i].listener && list[i].listener === listener)) {
22702 position = i;
22703 break;
22704 }
22705 }
22706
22707 if (position < 0)
22708 return this;
22709
22710 if (list.length === 1) {
22711 list.length = 0;
22712 delete this._events[type];
22713 } else {
22714 list.splice(position, 1);
22715 }
22716
22717 if (this._events.removeListener)
22718 this.emit('removeListener', type, listener);
ab78acc6 22719 }
ebd8d4e8 22720
8b095871
IC
22721 return this;
22722};
ebd8d4e8 22723
8b095871
IC
22724EventEmitter.prototype.removeAllListeners = function(type) {
22725 var key, listeners;
ebd8d4e8 22726
8b095871
IC
22727 if (!this._events)
22728 return this;
ab78acc6 22729
8b095871
IC
22730 // not listening for removeListener, no need to emit
22731 if (!this._events.removeListener) {
22732 if (arguments.length === 0)
22733 this._events = {};
22734 else if (this._events[type])
22735 delete this._events[type];
22736 return this;
22737 }
ab78acc6 22738
8b095871
IC
22739 // emit removeListener for all listeners on all events
22740 if (arguments.length === 0) {
22741 for (key in this._events) {
22742 if (key === 'removeListener') continue;
22743 this.removeAllListeners(key);
22744 }
22745 this.removeAllListeners('removeListener');
22746 this._events = {};
22747 return this;
22748 }
ebd8d4e8 22749
8b095871 22750 listeners = this._events[type];
ebd8d4e8 22751
8b095871
IC
22752 if (isFunction(listeners)) {
22753 this.removeListener(type, listeners);
22754 } else if (listeners) {
22755 // LIFO order
22756 while (listeners.length)
22757 this.removeListener(type, listeners[listeners.length - 1]);
22758 }
22759 delete this._events[type];
ebd8d4e8 22760
8b095871
IC
22761 return this;
22762};
ebd8d4e8 22763
8b095871
IC
22764EventEmitter.prototype.listeners = function(type) {
22765 var ret;
22766 if (!this._events || !this._events[type])
22767 ret = [];
22768 else if (isFunction(this._events[type]))
22769 ret = [this._events[type]];
22770 else
22771 ret = this._events[type].slice();
22772 return ret;
22773};
ebd8d4e8 22774
8b095871
IC
22775EventEmitter.prototype.listenerCount = function(type) {
22776 if (this._events) {
22777 var evlistener = this._events[type];
ebd8d4e8 22778
8b095871
IC
22779 if (isFunction(evlistener))
22780 return 1;
22781 else if (evlistener)
22782 return evlistener.length;
22783 }
22784 return 0;
22785};
22786
22787EventEmitter.listenerCount = function(emitter, type) {
22788 return emitter.listenerCount(type);
22789};
22790
22791function isFunction(arg) {
22792 return typeof arg === 'function';
ebd8d4e8
IC
22793}
22794
8b095871
IC
22795function isNumber(arg) {
22796 return typeof arg === 'number';
ebd8d4e8
IC
22797}
22798
8b095871
IC
22799function isObject(arg) {
22800 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
22801}
22802
8b095871
IC
22803function isUndefined(arg) {
22804 return arg === void 0;
ebd8d4e8
IC
22805}
22806
8b095871
IC
22807},{}],8:[function(require,module,exports){
22808exports.read = function (buffer, offset, isLE, mLen, nBytes) {
22809 var e, m
22810 var eLen = nBytes * 8 - mLen - 1
22811 var eMax = (1 << eLen) - 1
22812 var eBias = eMax >> 1
22813 var nBits = -7
22814 var i = isLE ? (nBytes - 1) : 0
22815 var d = isLE ? -1 : 1
22816 var s = buffer[offset + i]
ebd8d4e8 22817
8b095871 22818 i += d
ebd8d4e8 22819
8b095871
IC
22820 e = s & ((1 << (-nBits)) - 1)
22821 s >>= (-nBits)
22822 nBits += eLen
22823 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 22824
8b095871
IC
22825 m = e & ((1 << (-nBits)) - 1)
22826 e >>= (-nBits)
22827 nBits += mLen
22828 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 22829
8b095871
IC
22830 if (e === 0) {
22831 e = 1 - eBias
22832 } else if (e === eMax) {
22833 return m ? NaN : ((s ? -1 : 1) * Infinity)
22834 } else {
22835 m = m + Math.pow(2, mLen)
22836 e = e - eBias
ab78acc6 22837 }
8b095871 22838 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
22839}
22840
8b095871
IC
22841exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
22842 var e, m, c
22843 var eLen = nBytes * 8 - mLen - 1
22844 var eMax = (1 << eLen) - 1
22845 var eBias = eMax >> 1
22846 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
22847 var i = isLE ? 0 : (nBytes - 1)
22848 var d = isLE ? 1 : -1
22849 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 22850
8b095871 22851 value = Math.abs(value)
ebd8d4e8 22852
8b095871
IC
22853 if (isNaN(value) || value === Infinity) {
22854 m = isNaN(value) ? 1 : 0
22855 e = eMax
ab78acc6 22856 } else {
8b095871
IC
22857 e = Math.floor(Math.log(value) / Math.LN2)
22858 if (value * (c = Math.pow(2, -e)) < 1) {
22859 e--
22860 c *= 2
22861 }
22862 if (e + eBias >= 1) {
22863 value += rt / c
22864 } else {
22865 value += rt * Math.pow(2, 1 - eBias)
22866 }
22867 if (value * c >= 2) {
22868 e++
22869 c /= 2
22870 }
ebd8d4e8 22871
8b095871
IC
22872 if (e + eBias >= eMax) {
22873 m = 0
22874 e = eMax
22875 } else if (e + eBias >= 1) {
22876 m = (value * c - 1) * Math.pow(2, mLen)
22877 e = e + eBias
22878 } else {
22879 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
22880 e = 0
22881 }
ebd8d4e8 22882 }
ebd8d4e8 22883
8b095871 22884 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 22885
8b095871
IC
22886 e = (e << mLen) | m
22887 eLen += mLen
22888 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 22889
8b095871 22890 buffer[offset + i - d] |= s * 128
ab78acc6
IC
22891}
22892
8b095871
IC
22893},{}],9:[function(require,module,exports){
22894if (typeof Object.create === 'function') {
22895 // implementation from standard node.js 'util' module
22896 module.exports = function inherits(ctor, superCtor) {
22897 ctor.super_ = superCtor
22898 ctor.prototype = Object.create(superCtor.prototype, {
22899 constructor: {
22900 value: ctor,
22901 enumerable: false,
22902 writable: true,
22903 configurable: true
22904 }
22905 });
22906 };
22907} else {
22908 // old school shim for old browsers
22909 module.exports = function inherits(ctor, superCtor) {
22910 ctor.super_ = superCtor
22911 var TempCtor = function () {}
22912 TempCtor.prototype = superCtor.prototype
22913 ctor.prototype = new TempCtor()
22914 ctor.prototype.constructor = ctor
ebd8d4e8 22915 }
8b095871 22916}
ab78acc6 22917
8b095871
IC
22918},{}],10:[function(require,module,exports){
22919/*!
22920 * Determine if an object is a Buffer
22921 *
22922 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22923 * @license MIT
22924 */
ebd8d4e8 22925
8b095871
IC
22926// The _isBuffer check is for Safari 5-7 support, because it's missing
22927// Object.prototype.constructor. Remove this eventually
22928module.exports = function (obj) {
22929 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
22930}
22931
8b095871
IC
22932function isBuffer (obj) {
22933 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
22934}
ebd8d4e8 22935
8b095871
IC
22936// For Node v0.10 support. Remove this eventually.
22937function isSlowBuffer (obj) {
22938 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
22939}
ebd8d4e8 22940
8b095871
IC
22941},{}],11:[function(require,module,exports){
22942var toString = {}.toString;
ab78acc6 22943
8b095871
IC
22944module.exports = Array.isArray || function (arr) {
22945 return toString.call(arr) == '[object Array]';
22946};
ebd8d4e8 22947
8b095871
IC
22948},{}],12:[function(require,module,exports){
22949(function (process){
22950'use strict';
ebd8d4e8 22951
8b095871
IC
22952if (!process.version ||
22953 process.version.indexOf('v0.') === 0 ||
22954 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
22955 module.exports = nextTick;
22956} else {
22957 module.exports = process.nextTick;
22958}
22959
22960function nextTick(fn, arg1, arg2, arg3) {
22961 if (typeof fn !== 'function') {
22962 throw new TypeError('"callback" argument must be a function');
22963 }
22964 var len = arguments.length;
22965 var args, i;
22966 switch (len) {
22967 case 0:
22968 case 1:
22969 return process.nextTick(fn);
22970 case 2:
22971 return process.nextTick(function afterTickOne() {
22972 fn.call(null, arg1);
22973 });
22974 case 3:
22975 return process.nextTick(function afterTickTwo() {
22976 fn.call(null, arg1, arg2);
22977 });
22978 case 4:
22979 return process.nextTick(function afterTickThree() {
22980 fn.call(null, arg1, arg2, arg3);
22981 });
22982 default:
22983 args = new Array(len - 1);
22984 i = 0;
22985 while (i < args.length) {
22986 args[i++] = arguments[i];
22987 }
22988 return process.nextTick(function afterTick() {
22989 fn.apply(null, args);
22990 });
ab78acc6 22991 }
ebd8d4e8
IC
22992}
22993
8b095871
IC
22994}).call(this,require('_process'))
22995},{"_process":13}],13:[function(require,module,exports){
22996// shim for using process in browser
22997var process = module.exports = {};
ebd8d4e8 22998
8b095871
IC
22999// cached from whatever global is present so that test runners that stub it
23000// don't break things. But we need to wrap it in a try catch in case it is
23001// wrapped in strict mode code which doesn't define any globals. It's inside a
23002// function because try/catches deoptimize in certain engines.
ab78acc6 23003
8b095871
IC
23004var cachedSetTimeout;
23005var cachedClearTimeout;
ebd8d4e8 23006
8b095871
IC
23007function defaultSetTimout() {
23008 throw new Error('setTimeout has not been defined');
ab78acc6 23009}
8b095871
IC
23010function defaultClearTimeout () {
23011 throw new Error('clearTimeout has not been defined');
ab78acc6 23012}
8b095871
IC
23013(function () {
23014 try {
23015 if (typeof setTimeout === 'function') {
23016 cachedSetTimeout = setTimeout;
23017 } else {
23018 cachedSetTimeout = defaultSetTimout;
23019 }
23020 } catch (e) {
23021 cachedSetTimeout = defaultSetTimout;
23022 }
23023 try {
23024 if (typeof clearTimeout === 'function') {
23025 cachedClearTimeout = clearTimeout;
23026 } else {
23027 cachedClearTimeout = defaultClearTimeout;
23028 }
23029 } catch (e) {
23030 cachedClearTimeout = defaultClearTimeout;
23031 }
23032} ())
23033function runTimeout(fun) {
23034 if (cachedSetTimeout === setTimeout) {
23035 //normal enviroments in sane situations
23036 return setTimeout(fun, 0);
23037 }
23038 // if setTimeout wasn't available but was latter defined
23039 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
23040 cachedSetTimeout = setTimeout;
23041 return setTimeout(fun, 0);
23042 }
23043 try {
23044 // when when somebody has screwed with setTimeout but no I.E. maddness
23045 return cachedSetTimeout(fun, 0);
23046 } catch(e){
23047 try {
23048 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23049 return cachedSetTimeout.call(null, fun, 0);
23050 } catch(e){
23051 // 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
23052 return cachedSetTimeout.call(this, fun, 0);
23053 }
23054 }
23055
ebd8d4e8 23056
ab78acc6 23057}
8b095871
IC
23058function runClearTimeout(marker) {
23059 if (cachedClearTimeout === clearTimeout) {
23060 //normal enviroments in sane situations
23061 return clearTimeout(marker);
23062 }
23063 // if clearTimeout wasn't available but was latter defined
23064 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
23065 cachedClearTimeout = clearTimeout;
23066 return clearTimeout(marker);
23067 }
23068 try {
23069 // when when somebody has screwed with setTimeout but no I.E. maddness
23070 return cachedClearTimeout(marker);
23071 } catch (e){
23072 try {
23073 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23074 return cachedClearTimeout.call(null, marker);
23075 } catch (e){
23076 // 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.
23077 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
23078 return cachedClearTimeout.call(this, marker);
23079 }
23080 }
23081
23082
ebd8d4e8 23083
ab78acc6 23084}
8b095871
IC
23085var queue = [];
23086var draining = false;
23087var currentQueue;
23088var queueIndex = -1;
ebd8d4e8 23089
8b095871
IC
23090function cleanUpNextTick() {
23091 if (!draining || !currentQueue) {
23092 return;
23093 }
23094 draining = false;
23095 if (currentQueue.length) {
23096 queue = currentQueue.concat(queue);
23097 } else {
23098 queueIndex = -1;
23099 }
23100 if (queue.length) {
23101 drainQueue();
23102 }
ebd8d4e8
IC
23103}
23104
8b095871
IC
23105function drainQueue() {
23106 if (draining) {
23107 return;
23108 }
23109 var timeout = runTimeout(cleanUpNextTick);
23110 draining = true;
23111
23112 var len = queue.length;
23113 while(len) {
23114 currentQueue = queue;
23115 queue = [];
23116 while (++queueIndex < len) {
23117 if (currentQueue) {
23118 currentQueue[queueIndex].run();
23119 }
23120 }
23121 queueIndex = -1;
23122 len = queue.length;
23123 }
23124 currentQueue = null;
23125 draining = false;
23126 runClearTimeout(timeout);
ebd8d4e8
IC
23127}
23128
8b095871
IC
23129process.nextTick = function (fun) {
23130 var args = new Array(arguments.length - 1);
23131 if (arguments.length > 1) {
23132 for (var i = 1; i < arguments.length; i++) {
23133 args[i - 1] = arguments[i];
23134 }
23135 }
23136 queue.push(new Item(fun, args));
23137 if (queue.length === 1 && !draining) {
23138 runTimeout(drainQueue);
23139 }
23140};
23141
23142// v8 likes predictible objects
23143function Item(fun, array) {
23144 this.fun = fun;
23145 this.array = array;
ab78acc6 23146}
8b095871
IC
23147Item.prototype.run = function () {
23148 this.fun.apply(null, this.array);
23149};
23150process.title = 'browser';
23151process.browser = true;
23152process.env = {};
23153process.argv = [];
23154process.version = ''; // empty string to avoid regexp issues
23155process.versions = {};
ebd8d4e8 23156
8b095871
IC
23157function noop() {}
23158
23159process.on = noop;
23160process.addListener = noop;
23161process.once = noop;
23162process.off = noop;
23163process.removeListener = noop;
23164process.removeAllListeners = noop;
23165process.emit = noop;
23166
23167process.binding = function (name) {
23168 throw new Error('process.binding is not supported');
23169};
23170
23171process.cwd = function () { return '/' };
23172process.chdir = function (dir) {
23173 throw new Error('process.chdir is not supported');
23174};
23175process.umask = function() { return 0; };
23176
23177},{}],14:[function(require,module,exports){
23178module.exports = require("./lib/_stream_duplex.js")
23179
23180},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
23181// a duplex stream is just a stream that is both readable and writable.
23182// Since JS doesn't have multiple prototypal inheritance, this class
23183// prototypally inherits from Readable, and then parasitically from
23184// Writable.
23185
23186'use strict';
23187
23188/*<replacement>*/
ab78acc6 23189
8b095871
IC
23190var objectKeys = Object.keys || function (obj) {
23191 var keys = [];
23192 for (var key in obj) {
23193 keys.push(key);
23194 }return keys;
23195};
23196/*</replacement>*/
ebd8d4e8 23197
8b095871 23198module.exports = Duplex;
ebd8d4e8 23199
8b095871
IC
23200/*<replacement>*/
23201var processNextTick = require('process-nextick-args');
23202/*</replacement>*/
ebd8d4e8 23203
8b095871
IC
23204/*<replacement>*/
23205var util = require('core-util-is');
23206util.inherits = require('inherits');
23207/*</replacement>*/
ebd8d4e8 23208
8b095871
IC
23209var Readable = require('./_stream_readable');
23210var Writable = require('./_stream_writable');
ebd8d4e8 23211
8b095871
IC
23212util.inherits(Duplex, Readable);
23213
23214var keys = objectKeys(Writable.prototype);
23215for (var v = 0; v < keys.length; v++) {
23216 var method = keys[v];
23217 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 23218}
ebd8d4e8 23219
8b095871
IC
23220function Duplex(options) {
23221 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 23222
8b095871
IC
23223 Readable.call(this, options);
23224 Writable.call(this, options);
ebd8d4e8 23225
8b095871 23226 if (options && options.readable === false) this.readable = false;
ebd8d4e8 23227
8b095871 23228 if (options && options.writable === false) this.writable = false;
ebd8d4e8 23229
8b095871
IC
23230 this.allowHalfOpen = true;
23231 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 23232
8b095871 23233 this.once('end', onend);
ebd8d4e8
IC
23234}
23235
8b095871
IC
23236// the no-half-open enforcer
23237function onend() {
23238 // if we allow half-open state, or if the writable side ended,
23239 // then we're ok.
23240 if (this.allowHalfOpen || this._writableState.ended) return;
23241
23242 // no more data can be written.
23243 // But allow more writes to happen in this tick.
23244 processNextTick(onEndNT, this);
ebd8d4e8
IC
23245}
23246
8b095871
IC
23247function onEndNT(self) {
23248 self.end();
23249}
ebd8d4e8 23250
8b095871
IC
23251function forEach(xs, f) {
23252 for (var i = 0, l = xs.length; i < l; i++) {
23253 f(xs[i], i);
23254 }
23255}
23256},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
23257// a passthrough stream.
23258// basically just the most minimal sort of Transform stream.
23259// Every written chunk gets output as-is.
ebd8d4e8 23260
8b095871 23261'use strict';
ebd8d4e8 23262
8b095871 23263module.exports = PassThrough;
ebd8d4e8 23264
8b095871 23265var Transform = require('./_stream_transform');
ebd8d4e8 23266
8b095871
IC
23267/*<replacement>*/
23268var util = require('core-util-is');
23269util.inherits = require('inherits');
23270/*</replacement>*/
ebd8d4e8 23271
8b095871 23272util.inherits(PassThrough, Transform);
ebd8d4e8 23273
8b095871
IC
23274function PassThrough(options) {
23275 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 23276
8b095871 23277 Transform.call(this, options);
ebd8d4e8
IC
23278}
23279
8b095871
IC
23280PassThrough.prototype._transform = function (chunk, encoding, cb) {
23281 cb(null, chunk);
23282};
23283},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
23284(function (process){
23285'use strict';
ebd8d4e8 23286
8b095871 23287module.exports = Readable;
ebd8d4e8 23288
8b095871
IC
23289/*<replacement>*/
23290var processNextTick = require('process-nextick-args');
23291/*</replacement>*/
ebd8d4e8 23292
8b095871
IC
23293/*<replacement>*/
23294var isArray = require('isarray');
23295/*</replacement>*/
ebd8d4e8 23296
8b095871
IC
23297/*<replacement>*/
23298var Duplex;
23299/*</replacement>*/
ebd8d4e8 23300
8b095871 23301Readable.ReadableState = ReadableState;
ebd8d4e8 23302
8b095871
IC
23303/*<replacement>*/
23304var EE = require('events').EventEmitter;
ebd8d4e8 23305
8b095871
IC
23306var EElistenerCount = function (emitter, type) {
23307 return emitter.listeners(type).length;
23308};
23309/*</replacement>*/
ebd8d4e8 23310
8b095871
IC
23311/*<replacement>*/
23312var Stream;
23313(function () {
23314 try {
23315 Stream = require('st' + 'ream');
23316 } catch (_) {} finally {
23317 if (!Stream) Stream = require('events').EventEmitter;
23318 }
23319})();
23320/*</replacement>*/
ebd8d4e8 23321
8b095871
IC
23322var Buffer = require('buffer').Buffer;
23323/*<replacement>*/
23324var bufferShim = require('buffer-shims');
23325/*</replacement>*/
ab78acc6 23326
8b095871
IC
23327/*<replacement>*/
23328var util = require('core-util-is');
23329util.inherits = require('inherits');
23330/*</replacement>*/
ab78acc6 23331
8b095871
IC
23332/*<replacement>*/
23333var debugUtil = require('util');
23334var debug = void 0;
23335if (debugUtil && debugUtil.debuglog) {
23336 debug = debugUtil.debuglog('stream');
23337} else {
23338 debug = function () {};
23339}
23340/*</replacement>*/
ab78acc6 23341
8b095871
IC
23342var BufferList = require('./internal/streams/BufferList');
23343var StringDecoder;
ab78acc6 23344
8b095871 23345util.inherits(Readable, Stream);
ab78acc6 23346
8b095871
IC
23347function prependListener(emitter, event, fn) {
23348 // Sadly this is not cacheable as some libraries bundle their own
23349 // event emitter implementation with them.
23350 if (typeof emitter.prependListener === 'function') {
23351 return emitter.prependListener(event, fn);
23352 } else {
23353 // This is a hack to make sure that our error handler is attached before any
23354 // userland ones. NEVER DO THIS. This is here only because this code needs
23355 // to continue to work with older versions of Node.js that do not include
23356 // the prependListener() method. The goal is to eventually remove this hack.
23357 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]];
ebd8d4e8 23358 }
ebd8d4e8
IC
23359}
23360
8b095871
IC
23361function ReadableState(options, stream) {
23362 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 23363
8b095871 23364 options = options || {};
ebd8d4e8 23365
8b095871
IC
23366 // object stream flag. Used to make read(n) ignore n and to
23367 // make all the buffer merging and length checks go away
23368 this.objectMode = !!options.objectMode;
ebd8d4e8 23369
8b095871 23370 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 23371
8b095871
IC
23372 // the point at which it stops calling _read() to fill the buffer
23373 // Note: 0 is a valid value, means "don't call _read preemptively ever"
23374 var hwm = options.highWaterMark;
23375 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
23376 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 23377
8b095871
IC
23378 // cast to ints.
23379 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 23380
8b095871
IC
23381 // A linked list is used to store data chunks instead of an array because the
23382 // linked list can remove elements from the beginning faster than
23383 // array.shift()
23384 this.buffer = new BufferList();
23385 this.length = 0;
23386 this.pipes = null;
23387 this.pipesCount = 0;
23388 this.flowing = null;
23389 this.ended = false;
23390 this.endEmitted = false;
23391 this.reading = false;
ab78acc6 23392
8b095871
IC
23393 // a flag to be able to tell if the onwrite cb is called immediately,
23394 // or on a later tick. We set this to true at first, because any
23395 // actions that shouldn't happen until "later" should generally also
23396 // not happen before the first write call.
23397 this.sync = true;
ebd8d4e8 23398
8b095871
IC
23399 // whenever we return null, then we set a flag to say
23400 // that we're awaiting a 'readable' event emission.
23401 this.needReadable = false;
23402 this.emittedReadable = false;
23403 this.readableListening = false;
23404 this.resumeScheduled = false;
ebd8d4e8 23405
8b095871
IC
23406 // Crypto is kind of old and crusty. Historically, its default string
23407 // encoding is 'binary' so we have to make this configurable.
23408 // Everything else in the universe uses 'utf8', though.
23409 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 23410
8b095871
IC
23411 // when piping, we only care about 'readable' events that happen
23412 // after read()ing all the bytes and not getting any pushback.
23413 this.ranOut = false;
ebd8d4e8 23414
8b095871
IC
23415 // the number of writers that are awaiting a drain event in .pipe()s
23416 this.awaitDrain = 0;
ebd8d4e8 23417
8b095871
IC
23418 // if true, a maybeReadMore has been scheduled
23419 this.readingMore = false;
ebd8d4e8 23420
8b095871
IC
23421 this.decoder = null;
23422 this.encoding = null;
23423 if (options.encoding) {
23424 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23425 this.decoder = new StringDecoder(options.encoding);
23426 this.encoding = options.encoding;
23427 }
23428}
ebd8d4e8 23429
8b095871
IC
23430function Readable(options) {
23431 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 23432
8b095871 23433 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 23434
8b095871 23435 this._readableState = new ReadableState(options, this);
ebd8d4e8 23436
8b095871
IC
23437 // legacy
23438 this.readable = true;
ebd8d4e8 23439
8b095871 23440 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 23441
8b095871
IC
23442 Stream.call(this);
23443}
ebd8d4e8 23444
8b095871
IC
23445// Manually shove something into the read() buffer.
23446// This returns true if the highWaterMark has not been hit yet,
23447// similar to how Writable.write() returns true if you should
23448// write() some more.
23449Readable.prototype.push = function (chunk, encoding) {
23450 var state = this._readableState;
ebd8d4e8 23451
8b095871
IC
23452 if (!state.objectMode && typeof chunk === 'string') {
23453 encoding = encoding || state.defaultEncoding;
23454 if (encoding !== state.encoding) {
23455 chunk = bufferShim.from(chunk, encoding);
23456 encoding = '';
23457 }
23458 }
ebd8d4e8 23459
8b095871
IC
23460 return readableAddChunk(this, state, chunk, encoding, false);
23461};
ebd8d4e8 23462
8b095871
IC
23463// Unshift should *always* be something directly out of read()
23464Readable.prototype.unshift = function (chunk) {
23465 var state = this._readableState;
23466 return readableAddChunk(this, state, chunk, '', true);
23467};
ebd8d4e8 23468
8b095871
IC
23469Readable.prototype.isPaused = function () {
23470 return this._readableState.flowing === false;
23471};
23472
23473function readableAddChunk(stream, state, chunk, encoding, addToFront) {
23474 var er = chunkInvalid(state, chunk);
23475 if (er) {
23476 stream.emit('error', er);
23477 } else if (chunk === null) {
23478 state.reading = false;
23479 onEofChunk(stream, state);
23480 } else if (state.objectMode || chunk && chunk.length > 0) {
23481 if (state.ended && !addToFront) {
23482 var e = new Error('stream.push() after EOF');
23483 stream.emit('error', e);
23484 } else if (state.endEmitted && addToFront) {
23485 var _e = new Error('stream.unshift() after end event');
23486 stream.emit('error', _e);
23487 } else {
23488 var skipAdd;
23489 if (state.decoder && !addToFront && !encoding) {
23490 chunk = state.decoder.write(chunk);
23491 skipAdd = !state.objectMode && chunk.length === 0;
23492 }
ebd8d4e8 23493
8b095871 23494 if (!addToFront) state.reading = false;
ebd8d4e8 23495
8b095871
IC
23496 // Don't add to the buffer if we've decoded to an empty string chunk and
23497 // we're not in object mode
23498 if (!skipAdd) {
23499 // if we want the data now, just emit it.
23500 if (state.flowing && state.length === 0 && !state.sync) {
23501 stream.emit('data', chunk);
23502 stream.read(0);
23503 } else {
23504 // update the buffer info.
23505 state.length += state.objectMode ? 1 : chunk.length;
23506 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 23507
8b095871
IC
23508 if (state.needReadable) emitReadable(stream);
23509 }
23510 }
ab78acc6 23511
8b095871
IC
23512 maybeReadMore(stream, state);
23513 }
23514 } else if (!addToFront) {
23515 state.reading = false;
23516 }
ab78acc6 23517
8b095871
IC
23518 return needMoreData(state);
23519}
ab78acc6 23520
8b095871
IC
23521// if it's past the high water mark, we can push in some more.
23522// Also, if we have no data yet, we can stand some
23523// more bytes. This is to work around cases where hwm=0,
23524// such as the repl. Also, if the push() triggered a
23525// readable event, and the user called read(largeNumber) such that
23526// needReadable was set, then we ought to push more, so that another
23527// 'readable' event will be triggered.
23528function needMoreData(state) {
23529 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
23530}
ebd8d4e8 23531
8b095871
IC
23532// backwards compatibility.
23533Readable.prototype.setEncoding = function (enc) {
23534 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23535 this._readableState.decoder = new StringDecoder(enc);
23536 this._readableState.encoding = enc;
23537 return this;
23538};
23539
23540// Don't raise the hwm > 8MB
23541var MAX_HWM = 0x800000;
23542function computeNewHighWaterMark(n) {
23543 if (n >= MAX_HWM) {
23544 n = MAX_HWM;
ab78acc6 23545 } else {
8b095871
IC
23546 // Get the next highest power of 2 to prevent increasing hwm excessively in
23547 // tiny amounts
23548 n--;
23549 n |= n >>> 1;
23550 n |= n >>> 2;
23551 n |= n >>> 4;
23552 n |= n >>> 8;
23553 n |= n >>> 16;
23554 n++;
ebd8d4e8 23555 }
8b095871 23556 return n;
ebd8d4e8
IC
23557}
23558
8b095871
IC
23559// This function is designed to be inlinable, so please take care when making
23560// changes to the function body.
23561function howMuchToRead(n, state) {
23562 if (n <= 0 || state.length === 0 && state.ended) return 0;
23563 if (state.objectMode) return 1;
23564 if (n !== n) {
23565 // Only flow one buffer at a time
23566 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
23567 }
23568 // If we're asking for more than the current hwm, then raise the hwm.
23569 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
23570 if (n <= state.length) return n;
23571 // Don't have enough
23572 if (!state.ended) {
23573 state.needReadable = true;
23574 return 0;
23575 }
23576 return state.length;
23577}
ebd8d4e8 23578
8b095871
IC
23579// you can override either this method, or the async _read(n) below.
23580Readable.prototype.read = function (n) {
23581 debug('read', n);
23582 n = parseInt(n, 10);
23583 var state = this._readableState;
23584 var nOrig = n;
ebd8d4e8 23585
8b095871 23586 if (n !== 0) state.emittedReadable = false;
ab78acc6 23587
8b095871
IC
23588 // if we're doing read(0) to trigger a readable event, but we
23589 // already have a bunch of data in the buffer, then just trigger
23590 // the 'readable' event and move on.
23591 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
23592 debug('read: emitReadable', state.length, state.ended);
23593 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
23594 return null;
ebd8d4e8 23595 }
ebd8d4e8 23596
8b095871 23597 n = howMuchToRead(n, state);
ebd8d4e8 23598
8b095871
IC
23599 // if we've ended, and we're now clear, then finish it up.
23600 if (n === 0 && state.ended) {
23601 if (state.length === 0) endReadable(this);
23602 return null;
23603 }
ebd8d4e8 23604
8b095871
IC
23605 // All the actual chunk generation logic needs to be
23606 // *below* the call to _read. The reason is that in certain
23607 // synthetic stream cases, such as passthrough streams, _read
23608 // may be a completely synchronous operation which may change
23609 // the state of the read buffer, providing enough data when
23610 // before there was *not* enough.
23611 //
23612 // So, the steps are:
23613 // 1. Figure out what the state of things will be after we do
23614 // a read from the buffer.
23615 //
23616 // 2. If that resulting state will trigger a _read, then call _read.
23617 // Note that this may be asynchronous, or synchronous. Yes, it is
23618 // deeply ugly to write APIs this way, but that still doesn't mean
23619 // that the Readable class should behave improperly, as streams are
23620 // designed to be sync/async agnostic.
23621 // Take note if the _read call is sync or async (ie, if the read call
23622 // has returned yet), so that we know whether or not it's safe to emit
23623 // 'readable' etc.
23624 //
23625 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 23626
8b095871
IC
23627 // if we need a readable event, then we need to do some reading.
23628 var doRead = state.needReadable;
23629 debug('need readable', doRead);
ebd8d4e8 23630
8b095871
IC
23631 // if we currently have less than the highWaterMark, then also read some
23632 if (state.length === 0 || state.length - n < state.highWaterMark) {
23633 doRead = true;
23634 debug('length less than watermark', doRead);
23635 }
ebd8d4e8 23636
8b095871
IC
23637 // however, if we've ended, then there's no point, and if we're already
23638 // reading, then it's unnecessary.
23639 if (state.ended || state.reading) {
23640 doRead = false;
23641 debug('reading or ended', doRead);
23642 } else if (doRead) {
23643 debug('do read');
23644 state.reading = true;
23645 state.sync = true;
23646 // if the length is currently zero, then we *need* a readable event.
23647 if (state.length === 0) state.needReadable = true;
23648 // call internal read method
23649 this._read(state.highWaterMark);
23650 state.sync = false;
23651 // If _read pushed data synchronously, then `reading` will be false,
23652 // and we need to re-evaluate how much data we can return to the user.
23653 if (!state.reading) n = howMuchToRead(nOrig, state);
23654 }
ebd8d4e8 23655
8b095871
IC
23656 var ret;
23657 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 23658
8b095871
IC
23659 if (ret === null) {
23660 state.needReadable = true;
23661 n = 0;
23662 } else {
23663 state.length -= n;
23664 }
ebd8d4e8 23665
8b095871
IC
23666 if (state.length === 0) {
23667 // If we have nothing in the buffer, then we want to know
23668 // as soon as we *do* get something into the buffer.
23669 if (!state.ended) state.needReadable = true;
ebd8d4e8 23670
8b095871
IC
23671 // If we tried to read() past the EOF, then emit end on the next tick.
23672 if (nOrig !== n && state.ended) endReadable(this);
23673 }
23674
23675 if (ret !== null) this.emit('data', ret);
23676
23677 return ret;
ab78acc6
IC
23678};
23679
8b095871
IC
23680function chunkInvalid(state, chunk) {
23681 var er = null;
23682 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
23683 er = new TypeError('Invalid non-string/buffer chunk');
23684 }
23685 return er;
23686}
ab78acc6 23687
8b095871
IC
23688function onEofChunk(stream, state) {
23689 if (state.ended) return;
23690 if (state.decoder) {
23691 var chunk = state.decoder.end();
23692 if (chunk && chunk.length) {
23693 state.buffer.push(chunk);
23694 state.length += state.objectMode ? 1 : chunk.length;
23695 }
23696 }
23697 state.ended = true;
23698
23699 // emit 'readable' now to make sure it gets picked up.
23700 emitReadable(stream);
23701}
23702
23703// Don't emit readable right away in sync mode, because this can trigger
23704// another read() call => stack overflow. This way, it might trigger
23705// a nextTick recursion warning, but that's not so bad.
23706function emitReadable(stream) {
23707 var state = stream._readableState;
23708 state.needReadable = false;
23709 if (!state.emittedReadable) {
23710 debug('emitReadable', state.flowing);
23711 state.emittedReadable = true;
23712 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
23713 }
ebd8d4e8
IC
23714}
23715
8b095871
IC
23716function emitReadable_(stream) {
23717 debug('emit readable');
23718 stream.emit('readable');
23719 flow(stream);
23720}
ebd8d4e8 23721
8b095871
IC
23722// at this point, the user has presumably seen the 'readable' event,
23723// and called read() to consume some data. that may have triggered
23724// in turn another _read(n) call, in which case reading = true if
23725// it's in progress.
23726// However, if we're not ended, or reading, and the length < hwm,
23727// then go ahead and try to read some more preemptively.
23728function maybeReadMore(stream, state) {
23729 if (!state.readingMore) {
23730 state.readingMore = true;
23731 processNextTick(maybeReadMore_, stream, state);
23732 }
23733}
ab78acc6 23734
8b095871
IC
23735function maybeReadMore_(stream, state) {
23736 var len = state.length;
23737 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
23738 debug('maybeReadMore read 0');
23739 stream.read(0);
23740 if (len === state.length)
23741 // didn't get any data, stop spinning.
23742 break;else len = state.length;
23743 }
23744 state.readingMore = false;
23745}
ab78acc6 23746
8b095871
IC
23747// abstract method. to be overridden in specific implementation classes.
23748// call cb(er, data) where data is <= n in length.
23749// for virtual (non-string, non-buffer) streams, "length" is somewhat
23750// arbitrary, and perhaps not very meaningful.
23751Readable.prototype._read = function (n) {
23752 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
23753};
23754
8b095871
IC
23755Readable.prototype.pipe = function (dest, pipeOpts) {
23756 var src = this;
23757 var state = this._readableState;
ab78acc6 23758
8b095871
IC
23759 switch (state.pipesCount) {
23760 case 0:
23761 state.pipes = dest;
23762 break;
23763 case 1:
23764 state.pipes = [state.pipes, dest];
23765 break;
23766 default:
23767 state.pipes.push(dest);
23768 break;
ab78acc6 23769 }
8b095871
IC
23770 state.pipesCount += 1;
23771 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 23772
8b095871 23773 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 23774
8b095871
IC
23775 var endFn = doEnd ? onend : cleanup;
23776 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 23777
8b095871
IC
23778 dest.on('unpipe', onunpipe);
23779 function onunpipe(readable) {
23780 debug('onunpipe');
23781 if (readable === src) {
23782 cleanup();
ab78acc6 23783 }
8b095871 23784 }
ebd8d4e8 23785
8b095871
IC
23786 function onend() {
23787 debug('onend');
23788 dest.end();
ebd8d4e8
IC
23789 }
23790
8b095871
IC
23791 // when the dest drains, it reduces the awaitDrain counter
23792 // on the source. This would be more elegant with a .once()
23793 // handler in flow(), but adding and removing repeatedly is
23794 // too slow.
23795 var ondrain = pipeOnDrain(src);
23796 dest.on('drain', ondrain);
ebd8d4e8 23797
8b095871
IC
23798 var cleanedUp = false;
23799 function cleanup() {
23800 debug('cleanup');
23801 // cleanup event handlers once the pipe is broken
23802 dest.removeListener('close', onclose);
23803 dest.removeListener('finish', onfinish);
23804 dest.removeListener('drain', ondrain);
23805 dest.removeListener('error', onerror);
23806 dest.removeListener('unpipe', onunpipe);
23807 src.removeListener('end', onend);
23808 src.removeListener('end', cleanup);
23809 src.removeListener('data', ondata);
ebd8d4e8 23810
8b095871 23811 cleanedUp = true;
ebd8d4e8 23812
8b095871
IC
23813 // if the reader is waiting for a drain event from this
23814 // specific writer, then it would cause it to never start
23815 // flowing again.
23816 // So, if this is awaiting a drain, then we just call it now.
23817 // If we don't know, then assume that we are waiting for one.
23818 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
23819 }
ebd8d4e8 23820
8b095871
IC
23821 // If the user pushes more data while we're writing to dest then we'll end up
23822 // in ondata again. However, we only want to increase awaitDrain once because
23823 // dest will only emit one 'drain' event for the multiple writes.
23824 // => Introduce a guard on increasing awaitDrain.
23825 var increasedAwaitDrain = false;
23826 src.on('data', ondata);
23827 function ondata(chunk) {
23828 debug('ondata');
23829 increasedAwaitDrain = false;
23830 var ret = dest.write(chunk);
23831 if (false === ret && !increasedAwaitDrain) {
23832 // If the user unpiped during `dest.write()`, it is possible
23833 // to get stuck in a permanently paused state if that write
23834 // also returned false.
23835 // => Check whether `dest` is still a piping destination.
23836 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
23837 debug('false write response, pause', src._readableState.awaitDrain);
23838 src._readableState.awaitDrain++;
23839 increasedAwaitDrain = true;
23840 }
23841 src.pause();
23842 }
23843 }
ebd8d4e8 23844
8b095871
IC
23845 // if the dest has an error, then stop piping into it.
23846 // however, don't suppress the throwing behavior for this.
23847 function onerror(er) {
23848 debug('onerror', er);
23849 unpipe();
23850 dest.removeListener('error', onerror);
23851 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
23852 }
ab78acc6 23853
8b095871
IC
23854 // Make sure our error handler is attached before userland ones.
23855 prependListener(dest, 'error', onerror);
ab78acc6 23856
8b095871
IC
23857 // Both close and finish should trigger unpipe, but only once.
23858 function onclose() {
23859 dest.removeListener('finish', onfinish);
23860 unpipe();
23861 }
23862 dest.once('close', onclose);
23863 function onfinish() {
23864 debug('onfinish');
23865 dest.removeListener('close', onclose);
23866 unpipe();
ab78acc6 23867 }
8b095871 23868 dest.once('finish', onfinish);
ebd8d4e8 23869
8b095871
IC
23870 function unpipe() {
23871 debug('unpipe');
23872 src.unpipe(dest);
23873 }
23874
23875 // tell the dest that it's being piped to
23876 dest.emit('pipe', src);
23877
23878 // start the flow if it hasn't been started already.
23879 if (!state.flowing) {
23880 debug('pipe resume');
23881 src.resume();
23882 }
23883
23884 return dest;
ab78acc6 23885};
ebd8d4e8 23886
8b095871
IC
23887function pipeOnDrain(src) {
23888 return function () {
23889 var state = src._readableState;
23890 debug('pipeOnDrain', state.awaitDrain);
23891 if (state.awaitDrain) state.awaitDrain--;
23892 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
23893 state.flowing = true;
23894 flow(src);
23895 }
23896 };
23897}
ebd8d4e8 23898
8b095871
IC
23899Readable.prototype.unpipe = function (dest) {
23900 var state = this._readableState;
ebd8d4e8 23901
8b095871
IC
23902 // if we're not piping anywhere, then do nothing.
23903 if (state.pipesCount === 0) return this;
ebd8d4e8 23904
8b095871
IC
23905 // just one destination. most common case.
23906 if (state.pipesCount === 1) {
23907 // passed in one, but it's not the right one.
23908 if (dest && dest !== state.pipes) return this;
ebd8d4e8 23909
8b095871
IC
23910 if (!dest) dest = state.pipes;
23911
23912 // got a match.
23913 state.pipes = null;
23914 state.pipesCount = 0;
23915 state.flowing = false;
23916 if (dest) dest.emit('unpipe', this);
23917 return this;
ab78acc6 23918 }
ebd8d4e8 23919
8b095871 23920 // slow case. multiple pipe destinations.
ebd8d4e8 23921
8b095871
IC
23922 if (!dest) {
23923 // remove all.
23924 var dests = state.pipes;
23925 var len = state.pipesCount;
23926 state.pipes = null;
23927 state.pipesCount = 0;
23928 state.flowing = false;
ebd8d4e8 23929
8b095871
IC
23930 for (var i = 0; i < len; i++) {
23931 dests[i].emit('unpipe', this);
23932 }return this;
23933 }
ebd8d4e8 23934
8b095871
IC
23935 // try to find the right one.
23936 var index = indexOf(state.pipes, dest);
23937 if (index === -1) return this;
ebd8d4e8 23938
8b095871
IC
23939 state.pipes.splice(index, 1);
23940 state.pipesCount -= 1;
23941 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 23942
8b095871 23943 dest.emit('unpipe', this);
ab78acc6 23944
8b095871
IC
23945 return this;
23946};
ab78acc6 23947
8b095871
IC
23948// set up data events if they are asked for
23949// Ensure readable listeners eventually get something
23950Readable.prototype.on = function (ev, fn) {
23951 var res = Stream.prototype.on.call(this, ev, fn);
23952
23953 if (ev === 'data') {
23954 // Start flowing on next tick if stream isn't explicitly paused
23955 if (this._readableState.flowing !== false) this.resume();
23956 } else if (ev === 'readable') {
23957 var state = this._readableState;
23958 if (!state.endEmitted && !state.readableListening) {
23959 state.readableListening = state.needReadable = true;
23960 state.emittedReadable = false;
23961 if (!state.reading) {
23962 processNextTick(nReadingNextTick, this);
23963 } else if (state.length) {
23964 emitReadable(this, state);
ebd8d4e8 23965 }
ab78acc6 23966 }
8b095871 23967 }
ebd8d4e8 23968
8b095871
IC
23969 return res;
23970};
23971Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 23972
8b095871
IC
23973function nReadingNextTick(self) {
23974 debug('readable nexttick read 0');
23975 self.read(0);
23976}
ab78acc6 23977
8b095871
IC
23978// pause() and resume() are remnants of the legacy readable stream API
23979// If the user uses them, then switch into old mode.
23980Readable.prototype.resume = function () {
23981 var state = this._readableState;
23982 if (!state.flowing) {
23983 debug('resume');
23984 state.flowing = true;
23985 resume(this, state);
ebd8d4e8 23986 }
ab78acc6 23987 return this;
ebd8d4e8
IC
23988};
23989
8b095871
IC
23990function resume(stream, state) {
23991 if (!state.resumeScheduled) {
23992 state.resumeScheduled = true;
23993 processNextTick(resume_, stream, state);
ebd8d4e8 23994 }
8b095871 23995}
ab78acc6 23996
8b095871
IC
23997function resume_(stream, state) {
23998 if (!state.reading) {
23999 debug('resume read 0');
24000 stream.read(0);
ebd8d4e8 24001 }
ebd8d4e8 24002
8b095871
IC
24003 state.resumeScheduled = false;
24004 state.awaitDrain = 0;
24005 stream.emit('resume');
24006 flow(stream);
24007 if (state.flowing && !state.reading) stream.read(0);
24008}
ab78acc6 24009
8b095871
IC
24010Readable.prototype.pause = function () {
24011 debug('call pause flowing=%j', this._readableState.flowing);
24012 if (false !== this._readableState.flowing) {
24013 debug('pause');
24014 this._readableState.flowing = false;
24015 this.emit('pause');
ebd8d4e8 24016 }
ab78acc6
IC
24017 return this;
24018};
ebd8d4e8 24019
8b095871
IC
24020function flow(stream) {
24021 var state = stream._readableState;
24022 debug('flow', state.flowing);
24023 while (state.flowing && stream.read() !== null) {}
24024}
ebd8d4e8 24025
8b095871
IC
24026// wrap an old-style stream as the async data source.
24027// This is *not* part of the readable stream interface.
24028// It is an ugly unfortunate mess of history.
24029Readable.prototype.wrap = function (stream) {
24030 var state = this._readableState;
24031 var paused = false;
ebd8d4e8 24032
8b095871
IC
24033 var self = this;
24034 stream.on('end', function () {
24035 debug('wrapped end');
24036 if (state.decoder && !state.ended) {
24037 var chunk = state.decoder.end();
24038 if (chunk && chunk.length) self.push(chunk);
24039 }
ebd8d4e8 24040
8b095871
IC
24041 self.push(null);
24042 });
ebd8d4e8 24043
8b095871
IC
24044 stream.on('data', function (chunk) {
24045 debug('wrapped data');
24046 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 24047
8b095871
IC
24048 // don't skip over falsy values in objectMode
24049 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 24050
8b095871
IC
24051 var ret = self.push(chunk);
24052 if (!ret) {
24053 paused = true;
24054 stream.pause();
24055 }
24056 });
24057
24058 // proxy all the other methods.
24059 // important when wrapping filters and duplexes.
24060 for (var i in stream) {
24061 if (this[i] === undefined && typeof stream[i] === 'function') {
24062 this[i] = function (method) {
24063 return function () {
24064 return stream[method].apply(stream, arguments);
24065 };
24066 }(i);
24067 }
ab78acc6 24068 }
ebd8d4e8 24069
8b095871
IC
24070 // proxy certain important events.
24071 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
24072 forEach(events, function (ev) {
24073 stream.on(ev, self.emit.bind(self, ev));
24074 });
24075
24076 // when we try to consume some more bytes, simply unpause the
24077 // underlying stream.
24078 self._read = function (n) {
24079 debug('wrapped _read', n);
24080 if (paused) {
24081 paused = false;
24082 stream.resume();
24083 }
24084 };
24085
24086 return self;
ebd8d4e8
IC
24087};
24088
8b095871
IC
24089// exposed for testing purposes only.
24090Readable._fromList = fromList;
ebd8d4e8 24091
8b095871
IC
24092// Pluck off n bytes from an array of buffers.
24093// Length is the combined lengths of all the buffers in the list.
24094// This function is designed to be inlinable, so please take care when making
24095// changes to the function body.
24096function fromList(n, state) {
24097 // nothing buffered
24098 if (state.length === 0) return null;
ab78acc6 24099
8b095871
IC
24100 var ret;
24101 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
24102 // read it all, truncate the list
24103 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);
24104 state.buffer.clear();
24105 } else {
24106 // read part of list
24107 ret = fromListPartial(n, state.buffer, state.decoder);
24108 }
24109
24110 return ret;
24111}
24112
24113// Extracts only enough buffered data to satisfy the amount requested.
24114// This function is designed to be inlinable, so please take care when making
24115// changes to the function body.
24116function fromListPartial(n, list, hasStrings) {
24117 var ret;
24118 if (n < list.head.data.length) {
24119 // slice is the same for buffers and strings
24120 ret = list.head.data.slice(0, n);
24121 list.head.data = list.head.data.slice(n);
24122 } else if (n === list.head.data.length) {
24123 // first chunk is a perfect match
24124 ret = list.shift();
24125 } else {
24126 // result spans more than one buffer
24127 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
24128 }
24129 return ret;
ab78acc6 24130}
ebd8d4e8 24131
8b095871
IC
24132// Copies a specified amount of characters from the list of buffered data
24133// chunks.
24134// This function is designed to be inlinable, so please take care when making
24135// changes to the function body.
24136function copyFromBufferString(n, list) {
24137 var p = list.head;
24138 var c = 1;
24139 var ret = p.data;
24140 n -= ret.length;
24141 while (p = p.next) {
24142 var str = p.data;
24143 var nb = n > str.length ? str.length : n;
24144 if (nb === str.length) ret += str;else ret += str.slice(0, n);
24145 n -= nb;
24146 if (n === 0) {
24147 if (nb === str.length) {
24148 ++c;
24149 if (p.next) list.head = p.next;else list.head = list.tail = null;
24150 } else {
24151 list.head = p;
24152 p.data = str.slice(nb);
24153 }
24154 break;
ab78acc6 24155 }
8b095871
IC
24156 ++c;
24157 }
24158 list.length -= c;
24159 return ret;
ab78acc6
IC
24160}
24161
8b095871
IC
24162// Copies a specified amount of bytes from the list of buffered data chunks.
24163// This function is designed to be inlinable, so please take care when making
24164// changes to the function body.
24165function copyFromBuffer(n, list) {
24166 var ret = bufferShim.allocUnsafe(n);
24167 var p = list.head;
24168 var c = 1;
24169 p.data.copy(ret);
24170 n -= p.data.length;
24171 while (p = p.next) {
24172 var buf = p.data;
24173 var nb = n > buf.length ? buf.length : n;
24174 buf.copy(ret, ret.length - n, 0, nb);
24175 n -= nb;
24176 if (n === 0) {
24177 if (nb === buf.length) {
24178 ++c;
24179 if (p.next) list.head = p.next;else list.head = list.tail = null;
24180 } else {
24181 list.head = p;
24182 p.data = buf.slice(nb);
24183 }
24184 break;
ab78acc6 24185 }
8b095871
IC
24186 ++c;
24187 }
24188 list.length -= c;
24189 return ret;
ab78acc6 24190}
ebd8d4e8 24191
8b095871
IC
24192function endReadable(stream) {
24193 var state = stream._readableState;
ab78acc6 24194
8b095871
IC
24195 // If we get here before consuming all the bytes, then that is a
24196 // bug in node. Should never happen.
24197 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 24198
8b095871
IC
24199 if (!state.endEmitted) {
24200 state.ended = true;
24201 processNextTick(endReadableNT, state, stream);
24202 }
24203}
ebd8d4e8 24204
8b095871
IC
24205function endReadableNT(state, stream) {
24206 // Check that we didn't get one last unshift.
24207 if (!state.endEmitted && state.length === 0) {
24208 state.endEmitted = true;
24209 stream.readable = false;
24210 stream.emit('end');
24211 }
24212}
ebd8d4e8 24213
8b095871
IC
24214function forEach(xs, f) {
24215 for (var i = 0, l = xs.length; i < l; i++) {
24216 f(xs[i], i);
24217 }
24218}
ebd8d4e8 24219
8b095871
IC
24220function indexOf(xs, x) {
24221 for (var i = 0, l = xs.length; i < l; i++) {
24222 if (xs[i] === x) return i;
24223 }
24224 return -1;
24225}
24226}).call(this,require('_process'))
24227},{"./_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){
24228// a transform stream is a readable/writable stream where you do
24229// something with the data. Sometimes it's called a "filter",
24230// but that's not a great name for it, since that implies a thing where
24231// some bits pass through, and others are simply ignored. (That would
24232// be a valid example of a transform, of course.)
ab78acc6 24233//
8b095871
IC
24234// While the output is causally related to the input, it's not a
24235// necessarily symmetric or synchronous transformation. For example,
24236// a zlib stream might take multiple plain-text writes(), and then
24237// emit a single compressed chunk some time in the future.
ab78acc6 24238//
8b095871 24239// Here's how this works:
ab78acc6 24240//
8b095871
IC
24241// The Transform stream has all the aspects of the readable and writable
24242// stream classes. When you write(chunk), that calls _write(chunk,cb)
24243// internally, and returns false if there's a lot of pending writes
24244// buffered up. When you call read(), that calls _read(n) until
24245// there's enough pending readable data buffered up.
24246//
24247// In a transform stream, the written data is placed in a buffer. When
24248// _read(n) is called, it transforms the queued up data, calling the
24249// buffered _write cb's as it consumes chunks. If consuming a single
24250// written chunk would result in multiple output chunks, then the first
24251// outputted bit calls the readcb, and subsequent chunks just go into
24252// the read buffer, and will cause it to emit 'readable' if necessary.
24253//
24254// This way, back-pressure is actually determined by the reading side,
24255// since _read has to be called to start processing a new chunk. However,
24256// a pathological inflate type of transform can cause excessive buffering
24257// here. For example, imagine a stream where every byte of input is
24258// interpreted as an integer from 0-255, and then results in that many
24259// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
24260// 1kb of data being output. In this case, you could write a very small
24261// amount of input, and end up with a very large amount of output. In
24262// such a pathological inflating mechanism, there'd be no way to tell
24263// the system to stop doing the transform. A single 4MB write could
24264// cause the system to run out of memory.
24265//
24266// However, even in such a pathological case, only a single written chunk
24267// would be consumed, and then the rest would wait (un-transformed) until
24268// the results of the previous transformed chunk were consumed.
ebd8d4e8 24269
8b095871 24270'use strict';
ebd8d4e8 24271
8b095871 24272module.exports = Transform;
ebd8d4e8 24273
8b095871 24274var Duplex = require('./_stream_duplex');
ebd8d4e8 24275
ab78acc6
IC
24276/*<replacement>*/
24277var util = require('core-util-is');
24278util.inherits = require('inherits');
24279/*</replacement>*/
ebd8d4e8 24280
8b095871 24281util.inherits(Transform, Duplex);
ebd8d4e8 24282
8b095871
IC
24283function TransformState(stream) {
24284 this.afterTransform = function (er, data) {
24285 return afterTransform(stream, er, data);
24286 };
ebd8d4e8 24287
8b095871
IC
24288 this.needTransform = false;
24289 this.transforming = false;
24290 this.writecb = null;
24291 this.writechunk = null;
24292 this.writeencoding = null;
24293}
ebd8d4e8 24294
8b095871
IC
24295function afterTransform(stream, er, data) {
24296 var ts = stream._transformState;
24297 ts.transforming = false;
ebd8d4e8 24298
8b095871 24299 var cb = ts.writecb;
ebd8d4e8 24300
8b095871 24301 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 24302
8b095871
IC
24303 ts.writechunk = null;
24304 ts.writecb = null;
ebd8d4e8 24305
8b095871 24306 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 24307
8b095871
IC
24308 cb(er);
24309
24310 var rs = stream._readableState;
24311 rs.reading = false;
24312 if (rs.needReadable || rs.length < rs.highWaterMark) {
24313 stream._read(rs.highWaterMark);
24314 }
ebd8d4e8
IC
24315}
24316
8b095871
IC
24317function Transform(options) {
24318 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 24319
8b095871 24320 Duplex.call(this, options);
ebd8d4e8 24321
8b095871
IC
24322 this._transformState = new TransformState(this);
24323
24324 var stream = this;
24325
24326 // start out asking for a readable event once data is transformed.
24327 this._readableState.needReadable = true;
24328
24329 // we have implemented the _read method, and done the other things
24330 // that Readable wants before the first _read call, so unset the
24331 // sync guard flag.
24332 this._readableState.sync = false;
24333
24334 if (options) {
24335 if (typeof options.transform === 'function') this._transform = options.transform;
24336
24337 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 24338 }
8b095871
IC
24339
24340 // When the writable side finishes, then flush out anything remaining.
24341 this.once('prefinish', function () {
24342 if (typeof this._flush === 'function') this._flush(function (er, data) {
24343 done(stream, er, data);
24344 });else done(stream);
24345 });
ab78acc6 24346}
ebd8d4e8 24347
8b095871
IC
24348Transform.prototype.push = function (chunk, encoding) {
24349 this._transformState.needTransform = false;
24350 return Duplex.prototype.push.call(this, chunk, encoding);
24351};
24352
24353// This is the part where you do stuff!
24354// override this function in implementation classes.
24355// 'chunk' is an input chunk.
ab78acc6 24356//
8b095871
IC
24357// Call `push(newChunk)` to pass along transformed output
24358// to the readable side. You may call 'push' zero or more times.
ab78acc6 24359//
8b095871
IC
24360// Call `cb(err)` when you are done with this chunk. If you pass
24361// an error, then that'll put the hurt on the whole operation. If you
24362// never call cb(), then you'll never get another chunk.
24363Transform.prototype._transform = function (chunk, encoding, cb) {
24364 throw new Error('_transform() is not implemented');
24365};
ebd8d4e8 24366
8b095871
IC
24367Transform.prototype._write = function (chunk, encoding, cb) {
24368 var ts = this._transformState;
24369 ts.writecb = cb;
24370 ts.writechunk = chunk;
24371 ts.writeencoding = encoding;
24372 if (!ts.transforming) {
24373 var rs = this._readableState;
24374 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
24375 }
24376};
ebd8d4e8 24377
8b095871
IC
24378// Doesn't matter what the args are here.
24379// _transform does all the work.
24380// That we got here means that the readable side wants more data.
24381Transform.prototype._read = function (n) {
24382 var ts = this._transformState;
ebd8d4e8 24383
8b095871
IC
24384 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
24385 ts.transforming = true;
24386 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
24387 } else {
24388 // mark that we need a transform, so that any data that comes in
24389 // will get processed, now that we've asked for it.
24390 ts.needTransform = true;
24391 }
24392};
ebd8d4e8 24393
8b095871
IC
24394function done(stream, er, data) {
24395 if (er) return stream.emit('error', er);
ebd8d4e8 24396
8b095871 24397 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 24398
8b095871
IC
24399 // if there's nothing in the write buffer, then that means
24400 // that nothing more will ever be provided
24401 var ws = stream._writableState;
24402 var ts = stream._transformState;
ebd8d4e8 24403
8b095871 24404 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 24405
8b095871 24406 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 24407
8b095871
IC
24408 return stream.push(null);
24409}
24410},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 24411(function (process){
8b095871
IC
24412// A bit simpler than readable streams.
24413// Implement an async ._write(chunk, encoding, cb), and it'll handle all
24414// the drain event emission and buffering.
ebd8d4e8 24415
8b095871
IC
24416'use strict';
24417
24418module.exports = Writable;
ebd8d4e8 24419
ab78acc6 24420/*<replacement>*/
8b095871 24421var processNextTick = require('process-nextick-args');
ab78acc6
IC
24422/*</replacement>*/
24423
ab78acc6 24424/*<replacement>*/
8b095871 24425var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
24426/*</replacement>*/
24427
ab78acc6 24428/*<replacement>*/
8b095871 24429var Duplex;
ab78acc6
IC
24430/*</replacement>*/
24431
8b095871 24432Writable.WritableState = WritableState;
ab78acc6
IC
24433
24434/*<replacement>*/
24435var util = require('core-util-is');
24436util.inherits = require('inherits');
24437/*</replacement>*/
24438
8b095871
IC
24439/*<replacement>*/
24440var internalUtil = {
24441 deprecate: require('util-deprecate')
24442};
24443/*</replacement>*/
ab78acc6 24444
8b095871
IC
24445/*<replacement>*/
24446var Stream;
24447(function () {
24448 try {
24449 Stream = require('st' + 'ream');
24450 } catch (_) {} finally {
24451 if (!Stream) Stream = require('events').EventEmitter;
24452 }
24453})();
24454/*</replacement>*/
ab78acc6 24455
8b095871 24456var Buffer = require('buffer').Buffer;
ab78acc6 24457/*<replacement>*/
8b095871 24458var bufferShim = require('buffer-shims');
ab78acc6
IC
24459/*</replacement>*/
24460
8b095871
IC
24461util.inherits(Writable, Stream);
24462
24463function nop() {}
ab78acc6 24464
8b095871
IC
24465function WriteReq(chunk, encoding, cb) {
24466 this.chunk = chunk;
24467 this.encoding = encoding;
24468 this.callback = cb;
24469 this.next = null;
24470}
ab78acc6 24471
8b095871
IC
24472function WritableState(options, stream) {
24473 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
24474
24475 options = options || {};
24476
8b095871
IC
24477 // object stream flag to indicate whether or not this stream
24478 // contains buffers or objects.
24479 this.objectMode = !!options.objectMode;
24480
24481 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
24482
24483 // the point at which write() starts returning false
24484 // Note: 0 is a valid value, means that we always return false if
24485 // the entire buffer is not flushed immediately on write()
ab78acc6 24486 var hwm = options.highWaterMark;
8b095871
IC
24487 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
24488 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
24489
24490 // cast to ints.
8b095871 24491 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 24492
8b095871
IC
24493 // drain event flag.
24494 this.needDrain = false;
24495 // at the start of calling end()
24496 this.ending = false;
24497 // when end() has been called, and returned
ab78acc6 24498 this.ended = false;
8b095871
IC
24499 // when 'finish' is emitted
24500 this.finished = false;
24501
24502 // should we decode strings into buffers before passing to _write?
24503 // this is here so that some node-core streams can optimize string
24504 // handling at a lower level.
24505 var noDecode = options.decodeStrings === false;
24506 this.decodeStrings = !noDecode;
24507
24508 // Crypto is kind of old and crusty. Historically, its default string
24509 // encoding is 'binary' so we have to make this configurable.
24510 // Everything else in the universe uses 'utf8', though.
24511 this.defaultEncoding = options.defaultEncoding || 'utf8';
24512
24513 // not an actual buffer we keep track of, but a measurement
24514 // of how much we're waiting to get pushed to some underlying
24515 // socket or file.
24516 this.length = 0;
24517
24518 // a flag to see when we're in the middle of a write.
24519 this.writing = false;
24520
24521 // when true all writes will be buffered until .uncork() call
24522 this.corked = 0;
ebd8d4e8 24523
ab78acc6
IC
24524 // a flag to be able to tell if the onwrite cb is called immediately,
24525 // or on a later tick. We set this to true at first, because any
24526 // actions that shouldn't happen until "later" should generally also
24527 // not happen before the first write call.
24528 this.sync = true;
ebd8d4e8 24529
8b095871
IC
24530 // a flag to know if we're processing previously buffered items, which
24531 // may call the _write() callback in the same tick, so that we don't
24532 // end up in an overlapped onwrite situation.
24533 this.bufferProcessing = false;
24534
24535 // the callback that's passed to _write(chunk,cb)
24536 this.onwrite = function (er) {
24537 onwrite(stream, er);
24538 };
24539
24540 // the callback that the user supplies to write(chunk,encoding,cb)
24541 this.writecb = null;
24542
24543 // the amount that is being written when _write is called.
24544 this.writelen = 0;
24545
24546 this.bufferedRequest = null;
24547 this.lastBufferedRequest = null;
24548
24549 // number of pending user-supplied write callbacks
24550 // this must be 0 before 'finish' can be emitted
24551 this.pendingcb = 0;
24552
24553 // emit prefinish if the only thing we're waiting for is _write cbs
24554 // This is relevant for synchronous Transform streams
24555 this.prefinished = false;
24556
24557 // True if the error was already emitted and should not be thrown again
24558 this.errorEmitted = false;
24559
24560 // count buffered requests
24561 this.bufferedRequestCount = 0;
24562
24563 // allocate the first CorkedRequest, there is always
24564 // one allocated and free to use, and we maintain at most two
24565 this.corkedRequestsFree = new CorkedRequest(this);
24566}
24567
24568WritableState.prototype.getBuffer = function getBuffer() {
24569 var current = this.bufferedRequest;
24570 var out = [];
24571 while (current) {
24572 out.push(current);
24573 current = current.next;
24574 }
24575 return out;
24576};
24577
24578(function () {
24579 try {
24580 Object.defineProperty(WritableState.prototype, 'buffer', {
24581 get: internalUtil.deprecate(function () {
24582 return this.getBuffer();
24583 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
24584 });
24585 } catch (_) {}
24586})();
24587
24588// Test _writableState for inheritance to account for Duplex streams,
24589// whose prototype chain only points to Readable.
24590var realHasInstance;
24591if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
24592 realHasInstance = Function.prototype[Symbol.hasInstance];
24593 Object.defineProperty(Writable, Symbol.hasInstance, {
24594 value: function (object) {
24595 if (realHasInstance.call(this, object)) return true;
24596
24597 return object && object._writableState instanceof WritableState;
24598 }
24599 });
24600} else {
24601 realHasInstance = function (object) {
24602 return object instanceof this;
24603 };
24604}
24605
24606function Writable(options) {
24607 Duplex = Duplex || require('./_stream_duplex');
24608
24609 // Writable ctor is applied to Duplexes, too.
24610 // `realHasInstance` is necessary because using plain `instanceof`
24611 // would return false, as no `_writableState` property is attached.
24612
24613 // Trying to use the custom `instanceof` for Writable here will also break the
24614 // Node.js LazyTransform implementation, which has a non-trivial getter for
24615 // `_writableState` that would lead to infinite recursion.
24616 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
24617 return new Writable(options);
24618 }
24619
24620 this._writableState = new WritableState(options, this);
24621
24622 // legacy.
24623 this.writable = true;
24624
24625 if (options) {
24626 if (typeof options.write === 'function') this._write = options.write;
24627
24628 if (typeof options.writev === 'function') this._writev = options.writev;
24629 }
24630
24631 Stream.call(this);
24632}
24633
24634// Otherwise people can pipe Writable streams, which is just wrong.
24635Writable.prototype.pipe = function () {
24636 this.emit('error', new Error('Cannot pipe, not readable'));
24637};
24638
24639function writeAfterEnd(stream, cb) {
24640 var er = new Error('write after end');
24641 // TODO: defer error events consistently everywhere, not just the cb
24642 stream.emit('error', er);
24643 processNextTick(cb, er);
24644}
24645
24646// If we get something that is not a buffer, string, null, or undefined,
24647// and we're not in objectMode, then that's an error.
24648// Otherwise stream chunks are all considered to be of length=1, and the
24649// watermarks determine how many objects to keep in the buffer, rather than
24650// how many bytes or characters.
24651function validChunk(stream, state, chunk, cb) {
24652 var valid = true;
24653 var er = false;
24654 // Always throw error if a null is written
24655 // if we are not in object mode then throw
24656 // if it is not a buffer, string, or undefined.
24657 if (chunk === null) {
24658 er = new TypeError('May not write null values to stream');
24659 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
24660 er = new TypeError('Invalid non-string/buffer chunk');
24661 }
24662 if (er) {
24663 stream.emit('error', er);
24664 processNextTick(cb, er);
24665 valid = false;
24666 }
24667 return valid;
24668}
ebd8d4e8 24669
8b095871
IC
24670Writable.prototype.write = function (chunk, encoding, cb) {
24671 var state = this._writableState;
24672 var ret = false;
ab78acc6 24673
8b095871
IC
24674 if (typeof encoding === 'function') {
24675 cb = encoding;
24676 encoding = null;
24677 }
ab78acc6 24678
8b095871 24679 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 24680
8b095871 24681 if (typeof cb !== 'function') cb = nop;
ab78acc6 24682
8b095871
IC
24683 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
24684 state.pendingcb++;
24685 ret = writeOrBuffer(this, state, chunk, encoding, cb);
24686 }
ab78acc6 24687
8b095871
IC
24688 return ret;
24689};
ab78acc6 24690
8b095871
IC
24691Writable.prototype.cork = function () {
24692 var state = this._writableState;
ab78acc6 24693
8b095871
IC
24694 state.corked++;
24695};
ebd8d4e8 24696
8b095871
IC
24697Writable.prototype.uncork = function () {
24698 var state = this._writableState;
ab78acc6 24699
8b095871
IC
24700 if (state.corked) {
24701 state.corked--;
ab78acc6 24702
8b095871
IC
24703 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
24704 }
24705};
ab78acc6 24706
8b095871
IC
24707Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
24708 // node::ParseEncoding() requires lower case.
24709 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
24710 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);
24711 this._writableState.defaultEncoding = encoding;
24712 return this;
24713};
ab78acc6 24714
8b095871
IC
24715function decodeChunk(state, chunk, encoding) {
24716 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
24717 chunk = bufferShim.from(chunk, encoding);
24718 }
24719 return chunk;
ab78acc6
IC
24720}
24721
8b095871
IC
24722// if we're already writing something, then just put this
24723// in the queue, and wait our turn. Otherwise, call _write
24724// If we return false, then we need a drain event, so set that flag.
24725function writeOrBuffer(stream, state, chunk, encoding, cb) {
24726 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 24727
8b095871
IC
24728 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
24729 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 24730
8b095871 24731 state.length += len;
ebd8d4e8 24732
8b095871
IC
24733 var ret = state.length < state.highWaterMark;
24734 // we must ensure that previous needDrain will not be reset to false.
24735 if (!ret) state.needDrain = true;
ebd8d4e8 24736
8b095871
IC
24737 if (state.writing || state.corked) {
24738 var last = state.lastBufferedRequest;
24739 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
24740 if (last) {
24741 last.next = state.lastBufferedRequest;
ebd8d4e8 24742 } else {
8b095871
IC
24743 state.bufferedRequest = state.lastBufferedRequest;
24744 }
24745 state.bufferedRequestCount += 1;
24746 } else {
24747 doWrite(stream, state, false, len, chunk, encoding, cb);
24748 }
ab78acc6 24749
8b095871
IC
24750 return ret;
24751}
ab78acc6 24752
8b095871
IC
24753function doWrite(stream, state, writev, len, chunk, encoding, cb) {
24754 state.writelen = len;
24755 state.writecb = cb;
24756 state.writing = true;
24757 state.sync = true;
24758 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
24759 state.sync = false;
24760}
ab78acc6 24761
8b095871
IC
24762function onwriteError(stream, state, sync, er, cb) {
24763 --state.pendingcb;
24764 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 24765
8b095871
IC
24766 stream._writableState.errorEmitted = true;
24767 stream.emit('error', er);
24768}
ebd8d4e8 24769
8b095871
IC
24770function onwriteStateUpdate(state) {
24771 state.writing = false;
24772 state.writecb = null;
24773 state.length -= state.writelen;
24774 state.writelen = 0;
ab78acc6 24775}
ebd8d4e8 24776
8b095871
IC
24777function onwrite(stream, er) {
24778 var state = stream._writableState;
24779 var sync = state.sync;
24780 var cb = state.writecb;
ab78acc6 24781
8b095871 24782 onwriteStateUpdate(state);
ab78acc6 24783
8b095871
IC
24784 if (er) onwriteError(stream, state, sync, er, cb);else {
24785 // Check if we're actually ready to finish, but don't emit yet
24786 var finished = needFinish(state);
24787
24788 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
24789 clearBuffer(stream, state);
24790 }
24791
24792 if (sync) {
24793 /*<replacement>*/
24794 asyncWrite(afterWrite, stream, state, finished, cb);
24795 /*</replacement>*/
24796 } else {
24797 afterWrite(stream, state, finished, cb);
24798 }
24799 }
ab78acc6
IC
24800}
24801
8b095871
IC
24802function afterWrite(stream, state, finished, cb) {
24803 if (!finished) onwriteDrain(stream, state);
24804 state.pendingcb--;
24805 cb();
24806 finishMaybe(stream, state);
24807}
ab78acc6 24808
8b095871
IC
24809// Must force callback to be called on nextTick, so that we don't
24810// emit 'drain' before the write() consumer gets the 'false' return
24811// value, and has a chance to attach a 'drain' listener.
24812function onwriteDrain(stream, state) {
24813 if (state.length === 0 && state.needDrain) {
24814 state.needDrain = false;
24815 stream.emit('drain');
ebd8d4e8 24816 }
ebd8d4e8 24817}
ebd8d4e8 24818
8b095871
IC
24819// if there's something in the buffer waiting, then process it
24820function clearBuffer(stream, state) {
24821 state.bufferProcessing = true;
24822 var entry = state.bufferedRequest;
ebd8d4e8 24823
8b095871
IC
24824 if (stream._writev && entry && entry.next) {
24825 // Fast case, write everything using _writev()
24826 var l = state.bufferedRequestCount;
24827 var buffer = new Array(l);
24828 var holder = state.corkedRequestsFree;
24829 holder.entry = entry;
ebd8d4e8 24830
8b095871
IC
24831 var count = 0;
24832 while (entry) {
24833 buffer[count] = entry;
24834 entry = entry.next;
24835 count += 1;
24836 }
ebd8d4e8 24837
8b095871 24838 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 24839
8b095871
IC
24840 // doWrite is almost always async, defer these to save a bit of time
24841 // as the hot path ends with doWrite
24842 state.pendingcb++;
24843 state.lastBufferedRequest = null;
24844 if (holder.next) {
24845 state.corkedRequestsFree = holder.next;
24846 holder.next = null;
24847 } else {
24848 state.corkedRequestsFree = new CorkedRequest(state);
24849 }
24850 } else {
24851 // Slow case, write chunks one-by-one
24852 while (entry) {
24853 var chunk = entry.chunk;
24854 var encoding = entry.encoding;
24855 var cb = entry.callback;
24856 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 24857
8b095871
IC
24858 doWrite(stream, state, false, len, chunk, encoding, cb);
24859 entry = entry.next;
24860 // if we didn't call the onwrite immediately, then
24861 // it means that we need to wait until it does.
24862 // also, that means that the chunk and cb are currently
24863 // being processed, so move the buffer counter past them.
24864 if (state.writing) {
24865 break;
24866 }
24867 }
24868
24869 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 24870 }
ab78acc6 24871
8b095871
IC
24872 state.bufferedRequestCount = 0;
24873 state.bufferedRequest = entry;
24874 state.bufferProcessing = false;
ebd8d4e8
IC
24875}
24876
8b095871
IC
24877Writable.prototype._write = function (chunk, encoding, cb) {
24878 cb(new Error('_write() is not implemented'));
24879};
ebd8d4e8 24880
8b095871 24881Writable.prototype._writev = null;
ab78acc6 24882
8b095871
IC
24883Writable.prototype.end = function (chunk, encoding, cb) {
24884 var state = this._writableState;
24885
24886 if (typeof chunk === 'function') {
24887 cb = chunk;
24888 chunk = null;
24889 encoding = null;
24890 } else if (typeof encoding === 'function') {
24891 cb = encoding;
24892 encoding = null;
ab78acc6
IC
24893 }
24894
8b095871 24895 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 24896
8b095871
IC
24897 // .end() fully uncorks
24898 if (state.corked) {
24899 state.corked = 1;
24900 this.uncork();
ab78acc6
IC
24901 }
24902
8b095871
IC
24903 // ignore unnecessary end() calls.
24904 if (!state.ending && !state.finished) endWritable(this, state, cb);
24905};
ab78acc6 24906
8b095871
IC
24907function needFinish(state) {
24908 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
24909}
ab78acc6 24910
8b095871
IC
24911function prefinish(stream, state) {
24912 if (!state.prefinished) {
24913 state.prefinished = true;
24914 stream.emit('prefinish');
ab78acc6 24915 }
8b095871 24916}
ab78acc6 24917
8b095871
IC
24918function finishMaybe(stream, state) {
24919 var need = needFinish(state);
24920 if (need) {
24921 if (state.pendingcb === 0) {
24922 prefinish(stream, state);
24923 state.finished = true;
24924 stream.emit('finish');
24925 } else {
24926 prefinish(stream, state);
24927 }
ab78acc6 24928 }
8b095871
IC
24929 return need;
24930}
ab78acc6 24931
8b095871
IC
24932function endWritable(stream, state, cb) {
24933 state.ending = true;
24934 finishMaybe(stream, state);
24935 if (cb) {
24936 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 24937 }
8b095871
IC
24938 state.ended = true;
24939 stream.writable = false;
24940}
ab78acc6 24941
8b095871
IC
24942// It seems a linked list but it is not
24943// there will be only 2 of these for each stream
24944function CorkedRequest(state) {
24945 var _this = this;
ab78acc6 24946
8b095871
IC
24947 this.next = null;
24948 this.entry = null;
ebd8d4e8 24949
8b095871
IC
24950 this.finish = function (err) {
24951 var entry = _this.entry;
24952 _this.entry = null;
24953 while (entry) {
24954 var cb = entry.callback;
24955 state.pendingcb--;
24956 cb(err);
24957 entry = entry.next;
24958 }
24959 if (state.corkedRequestsFree) {
24960 state.corkedRequestsFree.next = _this;
24961 } else {
24962 state.corkedRequestsFree = _this;
24963 }
24964 };
24965}
24966}).call(this,require('_process'))
24967},{"./_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){
24968'use strict';
ebd8d4e8 24969
8b095871
IC
24970var Buffer = require('buffer').Buffer;
24971/*<replacement>*/
24972var bufferShim = require('buffer-shims');
24973/*</replacement>*/
ebd8d4e8 24974
8b095871 24975module.exports = BufferList;
ebd8d4e8 24976
8b095871
IC
24977function BufferList() {
24978 this.head = null;
24979 this.tail = null;
24980 this.length = 0;
24981}
ab78acc6 24982
8b095871
IC
24983BufferList.prototype.push = function (v) {
24984 var entry = { data: v, next: null };
24985 if (this.length > 0) this.tail.next = entry;else this.head = entry;
24986 this.tail = entry;
24987 ++this.length;
24988};
24989
24990BufferList.prototype.unshift = function (v) {
24991 var entry = { data: v, next: this.head };
24992 if (this.length === 0) this.tail = entry;
24993 this.head = entry;
24994 ++this.length;
24995};
ab78acc6 24996
8b095871
IC
24997BufferList.prototype.shift = function () {
24998 if (this.length === 0) return;
24999 var ret = this.head.data;
25000 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
25001 --this.length;
ab78acc6
IC
25002 return ret;
25003};
25004
8b095871
IC
25005BufferList.prototype.clear = function () {
25006 this.head = this.tail = null;
25007 this.length = 0;
25008};
ebd8d4e8 25009
8b095871
IC
25010BufferList.prototype.join = function (s) {
25011 if (this.length === 0) return '';
25012 var p = this.head;
25013 var ret = '' + p.data;
25014 while (p = p.next) {
25015 ret += s + p.data;
25016 }return ret;
25017};
ebd8d4e8 25018
8b095871
IC
25019BufferList.prototype.concat = function (n) {
25020 if (this.length === 0) return bufferShim.alloc(0);
25021 if (this.length === 1) return this.head.data;
25022 var ret = bufferShim.allocUnsafe(n >>> 0);
25023 var p = this.head;
25024 var i = 0;
25025 while (p) {
25026 p.data.copy(ret, i);
25027 i += p.data.length;
25028 p = p.next;
ebd8d4e8 25029 }
8b095871
IC
25030 return ret;
25031};
25032},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
25033module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 25034
8b095871
IC
25035},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
25036(function (process){
25037var Stream = (function (){
25038 try {
25039 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
25040 } catch(_){}
25041}());
25042exports = module.exports = require('./lib/_stream_readable.js');
25043exports.Stream = Stream || exports;
25044exports.Readable = exports;
25045exports.Writable = require('./lib/_stream_writable.js');
25046exports.Duplex = require('./lib/_stream_duplex.js');
25047exports.Transform = require('./lib/_stream_transform.js');
25048exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 25049
8b095871
IC
25050if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
25051 module.exports = Stream;
ab78acc6 25052}
ebd8d4e8 25053
8b095871
IC
25054}).call(this,require('_process'))
25055},{"./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){
25056module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 25057
8b095871
IC
25058},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
25059module.exports = require("./lib/_stream_writable.js")
ab78acc6 25060
8b095871
IC
25061},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
25062// Copyright Joyent, Inc. and other Node contributors.
25063//
25064// Permission is hereby granted, free of charge, to any person obtaining a
25065// copy of this software and associated documentation files (the
25066// "Software"), to deal in the Software without restriction, including
25067// without limitation the rights to use, copy, modify, merge, publish,
25068// distribute, sublicense, and/or sell copies of the Software, and to permit
25069// persons to whom the Software is furnished to do so, subject to the
25070// following conditions:
25071//
25072// The above copyright notice and this permission notice shall be included
25073// in all copies or substantial portions of the Software.
25074//
25075// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25076// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25077// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25078// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25079// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25080// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25081// USE OR OTHER DEALINGS IN THE SOFTWARE.
25082
25083module.exports = Stream;
25084
25085var EE = require('events').EventEmitter;
25086var inherits = require('inherits');
25087
25088inherits(Stream, EE);
25089Stream.Readable = require('readable-stream/readable.js');
25090Stream.Writable = require('readable-stream/writable.js');
25091Stream.Duplex = require('readable-stream/duplex.js');
25092Stream.Transform = require('readable-stream/transform.js');
25093Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 25094
8b095871
IC
25095// Backwards-compat with node 0.4.x
25096Stream.Stream = Stream;
ebd8d4e8 25097
ab78acc6 25098
ab78acc6 25099
8b095871
IC
25100// old-style streams. Note that the pipe method (the only relevant
25101// part of this class) is overridden in the Readable class.
ebd8d4e8 25102
8b095871
IC
25103function Stream() {
25104 EE.call(this);
25105}
ebd8d4e8 25106
8b095871
IC
25107Stream.prototype.pipe = function(dest, options) {
25108 var source = this;
ab78acc6 25109
8b095871
IC
25110 function ondata(chunk) {
25111 if (dest.writable) {
25112 if (false === dest.write(chunk) && source.pause) {
25113 source.pause();
25114 }
ab78acc6
IC
25115 }
25116 }
25117
8b095871
IC
25118 source.on('data', ondata);
25119
25120 function ondrain() {
25121 if (source.readable && source.resume) {
25122 source.resume();
25123 }
ab78acc6
IC
25124 }
25125
ab78acc6
IC
25126 dest.on('drain', ondrain);
25127
8b095871
IC
25128 // If the 'end' option is not supplied, dest.end() will be called when
25129 // source gets the 'end' or 'close' events. Only dest.end() once.
25130 if (!dest._isStdio && (!options || options.end !== false)) {
25131 source.on('end', onend);
25132 source.on('close', onclose);
ab78acc6
IC
25133 }
25134
8b095871
IC
25135 var didOnEnd = false;
25136 function onend() {
25137 if (didOnEnd) return;
25138 didOnEnd = true;
ab78acc6 25139
8b095871 25140 dest.end();
ab78acc6 25141 }
ab78acc6
IC
25142
25143
ab78acc6 25144 function onclose() {
8b095871
IC
25145 if (didOnEnd) return;
25146 didOnEnd = true;
ebd8d4e8 25147
8b095871 25148 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
25149 }
25150
8b095871
IC
25151 // don't leave dangling pipes when there are errors.
25152 function onerror(er) {
25153 cleanup();
25154 if (EE.listenerCount(this, 'error') === 0) {
25155 throw er; // Unhandled stream error in pipe.
25156 }
ebd8d4e8
IC
25157 }
25158
8b095871
IC
25159 source.on('error', onerror);
25160 dest.on('error', onerror);
ab78acc6 25161
8b095871
IC
25162 // remove all the event listeners that were added.
25163 function cleanup() {
25164 source.removeListener('data', ondata);
25165 dest.removeListener('drain', ondrain);
ab78acc6 25166
8b095871
IC
25167 source.removeListener('end', onend);
25168 source.removeListener('close', onclose);
ab78acc6 25169
8b095871
IC
25170 source.removeListener('error', onerror);
25171 dest.removeListener('error', onerror);
ab78acc6 25172
8b095871
IC
25173 source.removeListener('end', cleanup);
25174 source.removeListener('close', cleanup);
ab78acc6 25175
8b095871
IC
25176 dest.removeListener('close', cleanup);
25177 }
ab78acc6 25178
8b095871
IC
25179 source.on('end', cleanup);
25180 source.on('close', cleanup);
ab78acc6 25181
8b095871 25182 dest.on('close', cleanup);
ebd8d4e8 25183
8b095871 25184 dest.emit('pipe', source);
ab78acc6 25185
8b095871
IC
25186 // Allow for unix-like usage: A.pipe(B).pipe(C)
25187 return dest;
25188};
ab78acc6 25189
8b095871
IC
25190},{"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){
25191// Copyright Joyent, Inc. and other Node contributors.
25192//
25193// Permission is hereby granted, free of charge, to any person obtaining a
25194// copy of this software and associated documentation files (the
25195// "Software"), to deal in the Software without restriction, including
25196// without limitation the rights to use, copy, modify, merge, publish,
25197// distribute, sublicense, and/or sell copies of the Software, and to permit
25198// persons to whom the Software is furnished to do so, subject to the
25199// following conditions:
25200//
25201// The above copyright notice and this permission notice shall be included
25202// in all copies or substantial portions of the Software.
25203//
25204// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25205// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25206// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25207// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25208// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25209// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25210// USE OR OTHER DEALINGS IN THE SOFTWARE.
25211
25212var Buffer = require('buffer').Buffer;
ebd8d4e8 25213
8b095871
IC
25214var isBufferEncoding = Buffer.isEncoding
25215 || function(encoding) {
25216 switch (encoding && encoding.toLowerCase()) {
25217 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;
25218 default: return false;
25219 }
25220 }
ab78acc6 25221
ab78acc6 25222
8b095871
IC
25223function assertEncoding(encoding) {
25224 if (encoding && !isBufferEncoding(encoding)) {
25225 throw new Error('Unknown encoding: ' + encoding);
25226 }
25227}
ebd8d4e8 25228
8b095871
IC
25229// StringDecoder provides an interface for efficiently splitting a series of
25230// buffers into a series of JS strings without breaking apart multi-byte
25231// characters. CESU-8 is handled as part of the UTF-8 encoding.
25232//
25233// @TODO Handling all encodings inside a single object makes it very difficult
25234// to reason about this code, so it should be split up in the future.
25235// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
25236// points as used by CESU-8.
25237var StringDecoder = exports.StringDecoder = function(encoding) {
25238 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
25239 assertEncoding(encoding);
25240 switch (this.encoding) {
25241 case 'utf8':
25242 // CESU-8 represents each of Surrogate Pair by 3-bytes
25243 this.surrogateSize = 3;
25244 break;
25245 case 'ucs2':
25246 case 'utf16le':
25247 // UTF-16 represents each of Surrogate Pair by 2-bytes
25248 this.surrogateSize = 2;
25249 this.detectIncompleteChar = utf16DetectIncompleteChar;
25250 break;
25251 case 'base64':
25252 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
25253 this.surrogateSize = 3;
25254 this.detectIncompleteChar = base64DetectIncompleteChar;
25255 break;
25256 default:
25257 this.write = passThroughWrite;
25258 return;
25259 }
25260
25261 // Enough space to store all bytes of a single character. UTF-8 needs 4
25262 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
25263 this.charBuffer = new Buffer(6);
25264 // Number of bytes received for the current incomplete multi-byte character.
25265 this.charReceived = 0;
25266 // Number of bytes expected for the current incomplete multi-byte character.
25267 this.charLength = 0;
ab78acc6
IC
25268};
25269
ab78acc6 25270
8b095871
IC
25271// write decodes the given buffer and returns it as JS string that is
25272// guaranteed to not contain any partial multi-byte characters. Any partial
25273// character found at the end of the buffer is buffered up, and will be
25274// returned when calling write again with the remaining bytes.
25275//
25276// Note: Converting a Buffer containing an orphan surrogate to a String
25277// currently works, but converting a String to a Buffer (via `new Buffer`, or
25278// Buffer#write) will replace incomplete surrogates with the unicode
25279// replacement character. See https://codereview.chromium.org/121173009/ .
25280StringDecoder.prototype.write = function(buffer) {
25281 var charStr = '';
25282 // if our last write ended with an incomplete multibyte character
25283 while (this.charLength) {
25284 // determine how many remaining bytes this buffer has to offer for this char
25285 var available = (buffer.length >= this.charLength - this.charReceived) ?
25286 this.charLength - this.charReceived :
25287 buffer.length;
ab78acc6 25288
8b095871
IC
25289 // add the new bytes to the char buffer
25290 buffer.copy(this.charBuffer, this.charReceived, 0, available);
25291 this.charReceived += available;
25292
25293 if (this.charReceived < this.charLength) {
25294 // still not enough chars in this buffer? wait for more ...
25295 return '';
ebd8d4e8 25296 }
ebd8d4e8 25297
8b095871
IC
25298 // remove bytes belonging to the current character from the buffer
25299 buffer = buffer.slice(available, buffer.length);
ab78acc6 25300
8b095871
IC
25301 // get the character that was split
25302 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
25303
25304 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25305 var charCode = charStr.charCodeAt(charStr.length - 1);
25306 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25307 this.charLength += this.surrogateSize;
25308 charStr = '';
25309 continue;
ab78acc6 25310 }
8b095871 25311 this.charReceived = this.charLength = 0;
ebd8d4e8 25312
8b095871
IC
25313 // if there are no more bytes in this buffer, just emit our char
25314 if (buffer.length === 0) {
25315 return charStr;
25316 }
25317 break;
ebd8d4e8 25318 }
ebd8d4e8 25319
8b095871
IC
25320 // determine and set charLength / charReceived
25321 this.detectIncompleteChar(buffer);
ebd8d4e8 25322
8b095871
IC
25323 var end = buffer.length;
25324 if (this.charLength) {
25325 // buffer the incomplete character bytes we got
25326 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
25327 end -= this.charReceived;
ab78acc6 25328 }
ebd8d4e8 25329
8b095871
IC
25330 charStr += buffer.toString(this.encoding, 0, end);
25331
25332 var end = charStr.length - 1;
25333 var charCode = charStr.charCodeAt(end);
25334 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25335 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25336 var size = this.surrogateSize;
25337 this.charLength += size;
25338 this.charReceived += size;
25339 this.charBuffer.copy(this.charBuffer, size, 0, size);
25340 buffer.copy(this.charBuffer, 0, 0, size);
25341 return charStr.substring(0, end);
ab78acc6 25342 }
ebd8d4e8 25343
8b095871
IC
25344 // or just emit the charStr
25345 return charStr;
25346};
ebd8d4e8 25347
8b095871
IC
25348// detectIncompleteChar determines if there is an incomplete UTF-8 character at
25349// the end of the given buffer. If so, it sets this.charLength to the byte
25350// length that character, and sets this.charReceived to the number of bytes
25351// that are available for this character.
25352StringDecoder.prototype.detectIncompleteChar = function(buffer) {
25353 // determine how many bytes we have to check at the end of this buffer
25354 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 25355
8b095871
IC
25356 // Figure out if one of the last i bytes of our buffer announces an
25357 // incomplete char.
25358 for (; i > 0; i--) {
25359 var c = buffer[buffer.length - i];
ebd8d4e8 25360
8b095871 25361 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 25362
8b095871
IC
25363 // 110XXXXX
25364 if (i == 1 && c >> 5 == 0x06) {
25365 this.charLength = 2;
25366 break;
ebd8d4e8 25367 }
ab78acc6 25368
8b095871
IC
25369 // 1110XXXX
25370 if (i <= 2 && c >> 4 == 0x0E) {
25371 this.charLength = 3;
25372 break;
25373 }
25374
25375 // 11110XXX
25376 if (i <= 3 && c >> 3 == 0x1E) {
25377 this.charLength = 4;
25378 break;
ebd8d4e8
IC
25379 }
25380 }
8b095871
IC
25381 this.charReceived = i;
25382};
ab78acc6 25383
8b095871
IC
25384StringDecoder.prototype.end = function(buffer) {
25385 var res = '';
25386 if (buffer && buffer.length)
25387 res = this.write(buffer);
ab78acc6 25388
8b095871
IC
25389 if (this.charReceived) {
25390 var cr = this.charReceived;
25391 var buf = this.charBuffer;
25392 var enc = this.encoding;
25393 res += buf.slice(0, cr).toString(enc);
25394 }
ab78acc6 25395
8b095871 25396 return res;
ab78acc6
IC
25397};
25398
8b095871
IC
25399function passThroughWrite(buffer) {
25400 return buffer.toString(this.encoding);
25401}
ab78acc6 25402
8b095871
IC
25403function utf16DetectIncompleteChar(buffer) {
25404 this.charReceived = buffer.length % 2;
25405 this.charLength = this.charReceived ? 2 : 0;
25406}
ab78acc6 25407
8b095871
IC
25408function base64DetectIncompleteChar(buffer) {
25409 this.charReceived = buffer.length % 3;
25410 this.charLength = this.charReceived ? 3 : 0;
25411}
ab78acc6 25412
8b095871
IC
25413},{"buffer":5}],27:[function(require,module,exports){
25414(function (global){
ab78acc6 25415
8b095871
IC
25416/**
25417 * Module exports.
25418 */
ebd8d4e8 25419
8b095871 25420module.exports = deprecate;
ebd8d4e8 25421
8b095871
IC
25422/**
25423 * Mark that a method should not be used.
25424 * Returns a modified function which warns once by default.
25425 *
25426 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
25427 *
25428 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
25429 * will throw an Error when invoked.
25430 *
25431 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
25432 * will invoke `console.trace()` instead of `console.error()`.
25433 *
25434 * @param {Function} fn - the function to deprecate
25435 * @param {String} msg - the string to print to the console when `fn` is invoked
25436 * @returns {Function} a new "deprecated" version of `fn`
25437 * @api public
25438 */
ebd8d4e8 25439
8b095871
IC
25440function deprecate (fn, msg) {
25441 if (config('noDeprecation')) {
25442 return fn;
25443 }
ebd8d4e8 25444
8b095871
IC
25445 var warned = false;
25446 function deprecated() {
25447 if (!warned) {
25448 if (config('throwDeprecation')) {
25449 throw new Error(msg);
25450 } else if (config('traceDeprecation')) {
25451 console.trace(msg);
25452 } else {
25453 console.warn(msg);
ab78acc6 25454 }
8b095871 25455 warned = true;
ab78acc6 25456 }
8b095871 25457 return fn.apply(this, arguments);
ebd8d4e8
IC
25458 }
25459
8b095871 25460 return deprecated;
ebd8d4e8
IC
25461}
25462
8b095871
IC
25463/**
25464 * Checks `localStorage` for boolean values for the given `name`.
25465 *
25466 * @param {String} name
25467 * @returns {Boolean}
25468 * @api private
25469 */
ebd8d4e8 25470
8b095871
IC
25471function config (name) {
25472 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
25473 try {
25474 if (!global.localStorage) return false;
25475 } catch (_) {
25476 return false;
ab78acc6 25477 }
8b095871
IC
25478 var val = global.localStorage[name];
25479 if (null == val) return false;
25480 return String(val).toLowerCase() === 'true';
ebd8d4e8 25481}
ebd8d4e8 25482
8b095871
IC
25483}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
25484},{}],28:[function(require,module,exports){
25485arguments[4][9][0].apply(exports,arguments)
25486},{"dup":9}],29:[function(require,module,exports){
25487module.exports = function isBuffer(arg) {
25488 return arg && typeof arg === 'object'
25489 && typeof arg.copy === 'function'
25490 && typeof arg.fill === 'function'
25491 && typeof arg.readUInt8 === 'function';
ebd8d4e8 25492}
8b095871
IC
25493},{}],30:[function(require,module,exports){
25494(function (process,global){
ab78acc6
IC
25495// Copyright Joyent, Inc. and other Node contributors.
25496//
25497// Permission is hereby granted, free of charge, to any person obtaining a
25498// copy of this software and associated documentation files (the
25499// "Software"), to deal in the Software without restriction, including
25500// without limitation the rights to use, copy, modify, merge, publish,
25501// distribute, sublicense, and/or sell copies of the Software, and to permit
25502// persons to whom the Software is furnished to do so, subject to the
25503// following conditions:
25504//
25505// The above copyright notice and this permission notice shall be included
25506// in all copies or substantial portions of the Software.
25507//
25508// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25509// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25510// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25511// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25512// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25513// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25514// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 25515
8b095871
IC
25516var formatRegExp = /%[sdj%]/g;
25517exports.format = function(f) {
25518 if (!isString(f)) {
25519 var objects = [];
25520 for (var i = 0; i < arguments.length; i++) {
25521 objects.push(inspect(arguments[i]));
25522 }
25523 return objects.join(' ');
25524 }
ebd8d4e8 25525
8b095871
IC
25526 var i = 1;
25527 var args = arguments;
25528 var len = args.length;
25529 var str = String(f).replace(formatRegExp, function(x) {
25530 if (x === '%%') return '%';
25531 if (i >= len) return x;
25532 switch (x) {
25533 case '%s': return String(args[i++]);
25534 case '%d': return Number(args[i++]);
25535 case '%j':
25536 try {
25537 return JSON.stringify(args[i++]);
25538 } catch (_) {
25539 return '[Circular]';
25540 }
25541 default:
25542 return x;
25543 }
25544 });
25545 for (var x = args[i]; i < len; x = args[++i]) {
25546 if (isNull(x) || !isObject(x)) {
25547 str += ' ' + x;
25548 } else {
25549 str += ' ' + inspect(x);
25550 }
25551 }
25552 return str;
25553};
ebd8d4e8 25554
ebd8d4e8 25555
8b095871
IC
25556// Mark that a method should not be used.
25557// Returns a modified function which warns once by default.
25558// If --no-deprecation is set, then it is a no-op.
25559exports.deprecate = function(fn, msg) {
25560 // Allow for deprecating things in the process of starting up.
25561 if (isUndefined(global.process)) {
25562 return function() {
25563 return exports.deprecate(fn, msg).apply(this, arguments);
25564 };
25565 }
25566
25567 if (process.noDeprecation === true) {
25568 return fn;
25569 }
25570
25571 var warned = false;
25572 function deprecated() {
25573 if (!warned) {
25574 if (process.throwDeprecation) {
25575 throw new Error(msg);
25576 } else if (process.traceDeprecation) {
25577 console.trace(msg);
25578 } else {
25579 console.error(msg);
25580 }
25581 warned = true;
25582 }
25583 return fn.apply(this, arguments);
25584 }
25585
25586 return deprecated;
25587};
ebd8d4e8 25588
ab78acc6 25589
8b095871
IC
25590var debugs = {};
25591var debugEnviron;
25592exports.debuglog = function(set) {
25593 if (isUndefined(debugEnviron))
25594 debugEnviron = process.env.NODE_DEBUG || '';
25595 set = set.toUpperCase();
25596 if (!debugs[set]) {
25597 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
25598 var pid = process.pid;
25599 debugs[set] = function() {
25600 var msg = exports.format.apply(exports, arguments);
25601 console.error('%s %d: %s', set, pid, msg);
25602 };
25603 } else {
25604 debugs[set] = function() {};
25605 }
25606 }
25607 return debugs[set];
25608};
ab78acc6
IC
25609
25610
8b095871
IC
25611/**
25612 * Echos the value of a value. Trys to print the value out
25613 * in the best way possible given the different types.
25614 *
25615 * @param {Object} obj The object to print out.
25616 * @param {Object} opts Optional options object that alters the output.
25617 */
25618/* legacy: obj, showHidden, depth, colors*/
25619function inspect(obj, opts) {
25620 // default options
25621 var ctx = {
25622 seen: [],
25623 stylize: stylizeNoColor
ab78acc6 25624 };
8b095871
IC
25625 // legacy...
25626 if (arguments.length >= 3) ctx.depth = arguments[2];
25627 if (arguments.length >= 4) ctx.colors = arguments[3];
25628 if (isBoolean(opts)) {
25629 // legacy...
25630 ctx.showHidden = opts;
25631 } else if (opts) {
25632 // got an "options" object
25633 exports._extend(ctx, opts);
25634 }
25635 // set default options
25636 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
25637 if (isUndefined(ctx.depth)) ctx.depth = 2;
25638 if (isUndefined(ctx.colors)) ctx.colors = false;
25639 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
25640 if (ctx.colors) ctx.stylize = stylizeWithColor;
25641 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 25642}
8b095871 25643exports.inspect = inspect;
ebd8d4e8 25644
ab78acc6 25645
8b095871
IC
25646// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
25647inspect.colors = {
25648 'bold' : [1, 22],
25649 'italic' : [3, 23],
25650 'underline' : [4, 24],
25651 'inverse' : [7, 27],
25652 'white' : [37, 39],
25653 'grey' : [90, 39],
25654 'black' : [30, 39],
25655 'blue' : [34, 39],
25656 'cyan' : [36, 39],
25657 'green' : [32, 39],
25658 'magenta' : [35, 39],
25659 'red' : [31, 39],
25660 'yellow' : [33, 39]
25661};
ab78acc6 25662
8b095871
IC
25663// Don't use 'blue' not visible on cmd.exe
25664inspect.styles = {
25665 'special': 'cyan',
25666 'number': 'yellow',
25667 'boolean': 'yellow',
25668 'undefined': 'grey',
25669 'null': 'bold',
25670 'string': 'green',
25671 'date': 'magenta',
25672 // "name": intentionally not styling
25673 'regexp': 'red'
25674};
ab78acc6 25675
ab78acc6 25676
8b095871
IC
25677function stylizeWithColor(str, styleType) {
25678 var style = inspect.styles[styleType];
ab78acc6 25679
8b095871
IC
25680 if (style) {
25681 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
25682 '\u001b[' + inspect.colors[style][1] + 'm';
25683 } else {
25684 return str;
ab78acc6 25685 }
ebd8d4e8 25686}
ebd8d4e8 25687
ab78acc6 25688
8b095871
IC
25689function stylizeNoColor(str, styleType) {
25690 return str;
25691}
ab78acc6 25692
ab78acc6 25693
8b095871
IC
25694function arrayToHash(array) {
25695 var hash = {};
ab78acc6 25696
8b095871
IC
25697 array.forEach(function(val, idx) {
25698 hash[val] = true;
ab78acc6 25699 });
ebd8d4e8 25700
8b095871
IC
25701 return hash;
25702}
ab78acc6 25703
ab78acc6 25704
8b095871
IC
25705function formatValue(ctx, value, recurseTimes) {
25706 // Provide a hook for user-specified inspect functions.
25707 // Check that value is an object with an inspect function on it
25708 if (ctx.customInspect &&
25709 value &&
25710 isFunction(value.inspect) &&
25711 // Filter out the util module, it's inspect function is special
25712 value.inspect !== exports.inspect &&
25713 // Also filter out any prototype objects using the circular check.
25714 !(value.constructor && value.constructor.prototype === value)) {
25715 var ret = value.inspect(recurseTimes, ctx);
25716 if (!isString(ret)) {
25717 ret = formatValue(ctx, ret, recurseTimes);
25718 }
25719 return ret;
ab78acc6 25720 }
ebd8d4e8 25721
8b095871
IC
25722 // Primitive types cannot have properties
25723 var primitive = formatPrimitive(ctx, value);
25724 if (primitive) {
25725 return primitive;
ab78acc6 25726 }
ebd8d4e8 25727
8b095871
IC
25728 // Look up the keys of the object.
25729 var keys = Object.keys(value);
25730 var visibleKeys = arrayToHash(keys);
ebd8d4e8 25731
8b095871
IC
25732 if (ctx.showHidden) {
25733 keys = Object.getOwnPropertyNames(value);
25734 }
ebd8d4e8 25735
8b095871
IC
25736 // IE doesn't make error fields non-enumerable
25737 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
25738 if (isError(value)
25739 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
25740 return formatError(value);
25741 }
ebd8d4e8 25742
8b095871
IC
25743 // Some type of object without properties can be shortcutted.
25744 if (keys.length === 0) {
25745 if (isFunction(value)) {
25746 var name = value.name ? ': ' + value.name : '';
25747 return ctx.stylize('[Function' + name + ']', 'special');
25748 }
25749 if (isRegExp(value)) {
25750 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25751 }
25752 if (isDate(value)) {
25753 return ctx.stylize(Date.prototype.toString.call(value), 'date');
25754 }
25755 if (isError(value)) {
25756 return formatError(value);
25757 }
25758 }
ab78acc6 25759
8b095871 25760 var base = '', array = false, braces = ['{', '}'];
ab78acc6 25761
8b095871
IC
25762 // Make Array say that they are Array
25763 if (isArray(value)) {
25764 array = true;
25765 braces = ['[', ']'];
25766 }
ebd8d4e8 25767
8b095871
IC
25768 // Make functions say that they are functions
25769 if (isFunction(value)) {
25770 var n = value.name ? ': ' + value.name : '';
25771 base = ' [Function' + n + ']';
25772 }
ebd8d4e8 25773
8b095871
IC
25774 // Make RegExps say that they are RegExps
25775 if (isRegExp(value)) {
25776 base = ' ' + RegExp.prototype.toString.call(value);
25777 }
ebd8d4e8 25778
8b095871
IC
25779 // Make dates with properties first say the date
25780 if (isDate(value)) {
25781 base = ' ' + Date.prototype.toUTCString.call(value);
25782 }
ebd8d4e8 25783
8b095871
IC
25784 // Make error with message first say the error
25785 if (isError(value)) {
25786 base = ' ' + formatError(value);
25787 }
ebd8d4e8 25788
8b095871
IC
25789 if (keys.length === 0 && (!array || value.length == 0)) {
25790 return braces[0] + base + braces[1];
25791 }
ebd8d4e8 25792
8b095871
IC
25793 if (recurseTimes < 0) {
25794 if (isRegExp(value)) {
25795 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25796 } else {
25797 return ctx.stylize('[Object]', 'special');
25798 }
25799 }
ebd8d4e8 25800
8b095871 25801 ctx.seen.push(value);
ebd8d4e8 25802
8b095871
IC
25803 var output;
25804 if (array) {
25805 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
25806 } else {
25807 output = keys.map(function(key) {
25808 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
25809 });
25810 }
ebd8d4e8 25811
8b095871 25812 ctx.seen.pop();
ebd8d4e8 25813
8b095871 25814 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
25815}
25816
ebd8d4e8 25817
8b095871
IC
25818function formatPrimitive(ctx, value) {
25819 if (isUndefined(value))
25820 return ctx.stylize('undefined', 'undefined');
25821 if (isString(value)) {
25822 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
25823 .replace(/'/g, "\\'")
25824 .replace(/\\"/g, '"') + '\'';
25825 return ctx.stylize(simple, 'string');
25826 }
25827 if (isNumber(value))
25828 return ctx.stylize('' + value, 'number');
25829 if (isBoolean(value))
25830 return ctx.stylize('' + value, 'boolean');
25831 // For some reason typeof null is "object", so special case here.
25832 if (isNull(value))
25833 return ctx.stylize('null', 'null');
25834}
ebd8d4e8 25835
ebd8d4e8 25836
8b095871
IC
25837function formatError(value) {
25838 return '[' + Error.prototype.toString.call(value) + ']';
25839}
ebd8d4e8 25840
ebd8d4e8 25841
8b095871
IC
25842function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
25843 var output = [];
25844 for (var i = 0, l = value.length; i < l; ++i) {
25845 if (hasOwnProperty(value, String(i))) {
25846 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25847 String(i), true));
25848 } else {
25849 output.push('');
25850 }
25851 }
25852 keys.forEach(function(key) {
25853 if (!key.match(/^\d+$/)) {
25854 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25855 key, true));
25856 }
25857 });
25858 return output;
25859}
ebd8d4e8 25860
ebd8d4e8 25861
8b095871
IC
25862function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
25863 var name, str, desc;
25864 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
25865 if (desc.get) {
25866 if (desc.set) {
25867 str = ctx.stylize('[Getter/Setter]', 'special');
25868 } else {
25869 str = ctx.stylize('[Getter]', 'special');
25870 }
25871 } else {
25872 if (desc.set) {
25873 str = ctx.stylize('[Setter]', 'special');
25874 }
25875 }
25876 if (!hasOwnProperty(visibleKeys, key)) {
25877 name = '[' + key + ']';
25878 }
25879 if (!str) {
25880 if (ctx.seen.indexOf(desc.value) < 0) {
25881 if (isNull(recurseTimes)) {
25882 str = formatValue(ctx, desc.value, null);
25883 } else {
25884 str = formatValue(ctx, desc.value, recurseTimes - 1);
25885 }
25886 if (str.indexOf('\n') > -1) {
25887 if (array) {
25888 str = str.split('\n').map(function(line) {
25889 return ' ' + line;
25890 }).join('\n').substr(2);
25891 } else {
25892 str = '\n' + str.split('\n').map(function(line) {
25893 return ' ' + line;
25894 }).join('\n');
25895 }
25896 }
25897 } else {
25898 str = ctx.stylize('[Circular]', 'special');
25899 }
25900 }
25901 if (isUndefined(name)) {
25902 if (array && key.match(/^\d+$/)) {
25903 return str;
25904 }
25905 name = JSON.stringify('' + key);
25906 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
25907 name = name.substr(1, name.length - 2);
25908 name = ctx.stylize(name, 'name');
25909 } else {
25910 name = name.replace(/'/g, "\\'")
25911 .replace(/\\"/g, '"')
25912 .replace(/(^"|"$)/g, "'");
25913 name = ctx.stylize(name, 'string');
25914 }
25915 }
ebd8d4e8 25916
8b095871
IC
25917 return name + ': ' + str;
25918}
ebd8d4e8 25919
ebd8d4e8 25920
8b095871
IC
25921function reduceToSingleString(output, base, braces) {
25922 var numLinesEst = 0;
25923 var length = output.reduce(function(prev, cur) {
25924 numLinesEst++;
25925 if (cur.indexOf('\n') >= 0) numLinesEst++;
25926 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
25927 }, 0);
ebd8d4e8 25928
8b095871
IC
25929 if (length > 60) {
25930 return braces[0] +
25931 (base === '' ? '' : base + '\n ') +
25932 ' ' +
25933 output.join(',\n ') +
25934 ' ' +
25935 braces[1];
25936 }
ebd8d4e8 25937
8b095871
IC
25938 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
25939}
ebd8d4e8 25940
ebd8d4e8 25941
8b095871
IC
25942// NOTE: These type checking functions intentionally don't use `instanceof`
25943// because it is fragile and can be easily faked with `Object.create()`.
25944function isArray(ar) {
25945 return Array.isArray(ar);
25946}
25947exports.isArray = isArray;
ebd8d4e8 25948
8b095871
IC
25949function isBoolean(arg) {
25950 return typeof arg === 'boolean';
25951}
25952exports.isBoolean = isBoolean;
ebd8d4e8 25953
8b095871
IC
25954function isNull(arg) {
25955 return arg === null;
25956}
25957exports.isNull = isNull;
ebd8d4e8 25958
8b095871
IC
25959function isNullOrUndefined(arg) {
25960 return arg == null;
ebd8d4e8 25961}
8b095871 25962exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 25963
8b095871
IC
25964function isNumber(arg) {
25965 return typeof arg === 'number';
25966}
25967exports.isNumber = isNumber;
ebd8d4e8 25968
8b095871
IC
25969function isString(arg) {
25970 return typeof arg === 'string';
25971}
25972exports.isString = isString;
ebd8d4e8 25973
8b095871
IC
25974function isSymbol(arg) {
25975 return typeof arg === 'symbol';
25976}
25977exports.isSymbol = isSymbol;
ebd8d4e8 25978
8b095871
IC
25979function isUndefined(arg) {
25980 return arg === void 0;
25981}
25982exports.isUndefined = isUndefined;
ebd8d4e8 25983
8b095871
IC
25984function isRegExp(re) {
25985 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 25986}
8b095871 25987exports.isRegExp = isRegExp;
ebd8d4e8 25988
8b095871
IC
25989function isObject(arg) {
25990 return typeof arg === 'object' && arg !== null;
25991}
25992exports.isObject = isObject;
ebd8d4e8 25993
8b095871
IC
25994function isDate(d) {
25995 return isObject(d) && objectToString(d) === '[object Date]';
25996}
25997exports.isDate = isDate;
ebd8d4e8 25998
8b095871
IC
25999function isError(e) {
26000 return isObject(e) &&
26001 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 26002}
8b095871 26003exports.isError = isError;
ebd8d4e8 26004
8b095871
IC
26005function isFunction(arg) {
26006 return typeof arg === 'function';
ebd8d4e8 26007}
8b095871 26008exports.isFunction = isFunction;
ebd8d4e8 26009
8b095871
IC
26010function isPrimitive(arg) {
26011 return arg === null ||
26012 typeof arg === 'boolean' ||
26013 typeof arg === 'number' ||
26014 typeof arg === 'string' ||
26015 typeof arg === 'symbol' || // ES6 symbol
26016 typeof arg === 'undefined';
26017}
26018exports.isPrimitive = isPrimitive;
ebd8d4e8 26019
8b095871 26020exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 26021
8b095871
IC
26022function objectToString(o) {
26023 return Object.prototype.toString.call(o);
26024}
ab78acc6 26025
ab78acc6 26026
8b095871
IC
26027function pad(n) {
26028 return n < 10 ? '0' + n.toString(10) : n.toString(10);
26029}
ebd8d4e8 26030
ab78acc6 26031
8b095871
IC
26032var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
26033 'Oct', 'Nov', 'Dec'];
ab78acc6 26034
8b095871
IC
26035// 26 Feb 16:19:34
26036function timestamp() {
26037 var d = new Date();
26038 var time = [pad(d.getHours()),
26039 pad(d.getMinutes()),
26040 pad(d.getSeconds())].join(':');
26041 return [d.getDate(), months[d.getMonth()], time].join(' ');
26042}
26043
26044
26045// log is just a thin wrapper to console.log that prepends a timestamp
26046exports.log = function() {
26047 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 26048};
ebd8d4e8 26049
ebd8d4e8 26050
8b095871
IC
26051/**
26052 * Inherit the prototype methods from one constructor into another.
26053 *
26054 * The Function.prototype.inherits from lang.js rewritten as a standalone
26055 * function (not on Function.prototype). NOTE: If this file is to be loaded
26056 * during bootstrapping this function needs to be rewritten using some native
26057 * functions as prototype setup using normal JavaScript does not work as
26058 * expected during bootstrapping (see mirror.js in r114903).
26059 *
26060 * @param {function} ctor Constructor function which needs to inherit the
26061 * prototype.
26062 * @param {function} superCtor Constructor function to inherit prototype from.
26063 */
26064exports.inherits = require('inherits');
ebd8d4e8 26065
8b095871
IC
26066exports._extend = function(origin, add) {
26067 // Don't do anything if add isn't an object
26068 if (!add || !isObject(add)) return origin;
26069
26070 var keys = Object.keys(add);
26071 var i = keys.length;
26072 while (i--) {
26073 origin[keys[i]] = add[keys[i]];
ebd8d4e8 26074 }
8b095871 26075 return origin;
ab78acc6 26076};
ebd8d4e8 26077
8b095871
IC
26078function hasOwnProperty(obj, prop) {
26079 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
26080}
26081
8b095871
IC
26082}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
26083},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
26084(function (Buffer){
26085const createKeccakHash = require('keccak')
26086const secp256k1 = require('secp256k1')
26087const assert = require('assert')
26088const rlp = require('rlp')
26089const BN = require('bn.js')
26090const createHash = require('create-hash')
26091Object.assign(exports, require('ethjs-util'))
ab78acc6 26092
8b095871
IC
26093/**
26094 * the max integer that this VM can handle (a ```BN```)
26095 * @var {BN} MAX_INTEGER
26096 */
26097exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 26098
8b095871
IC
26099/**
26100 * 2^256 (a ```BN```)
26101 * @var {BN} TWO_POW256
26102 */
26103exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 26104
8b095871
IC
26105/**
26106 * SHA3-256 hash of null (a ```String```)
26107 * @var {String} SHA3_NULL_S
26108 */
26109exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 26110
8b095871
IC
26111/**
26112 * SHA3-256 hash of null (a ```Buffer```)
26113 * @var {Buffer} SHA3_NULL
26114 */
26115exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 26116
8b095871
IC
26117/**
26118 * SHA3-256 of an RLP of an empty array (a ```String```)
26119 * @var {String} SHA3_RLP_ARRAY_S
26120 */
26121exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 26122
8b095871
IC
26123/**
26124 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
26125 * @var {Buffer} SHA3_RLP_ARRAY
26126 */
26127exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 26128
8b095871
IC
26129/**
26130 * SHA3-256 hash of the RLP of null (a ```String```)
26131 * @var {String} SHA3_RLP_S
26132 */
26133exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 26134
8b095871
IC
26135/**
26136 * SHA3-256 hash of the RLP of null (a ```Buffer```)
26137 * @var {Buffer} SHA3_RLP
26138 */
26139exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 26140
8b095871
IC
26141/**
26142 * [`BN`](https://github.com/indutny/bn.js)
26143 * @var {Function}
26144 */
26145exports.BN = BN
ebd8d4e8 26146
8b095871
IC
26147/**
26148 * [`rlp`](https://github.com/ethereumjs/rlp)
26149 * @var {Function}
26150 */
26151exports.rlp = rlp
ebd8d4e8 26152
8b095871
IC
26153/**
26154 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
26155 * @var {Object}
26156 */
26157exports.secp256k1 = secp256k1
ab78acc6 26158
8b095871
IC
26159/**
26160 * Returns a buffer filled with 0s
26161 * @method zeros
26162 * @param {Number} bytes the number of bytes the buffer should be
26163 * @return {Buffer}
26164 */
26165exports.zeros = function (bytes) {
26166 return Buffer.allocUnsafe(bytes).fill(0)
26167}
26168
26169/**
26170 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26171 * Or it truncates the beginning if it exceeds.
26172 * @method lsetLength
26173 * @param {Buffer|Array} msg the value to pad
26174 * @param {Number} length the number of bytes the output should be
26175 * @param {Boolean} [right=false] whether to start padding form the left or right
26176 * @return {Buffer|Array}
26177 */
26178exports.setLengthLeft = exports.setLength = function (msg, length, right) {
26179 var buf = exports.zeros(length)
26180 msg = exports.toBuffer(msg)
26181 if (right) {
26182 if (msg.length < length) {
26183 msg.copy(buf)
26184 return buf
26185 }
26186 return msg.slice(0, length)
26187 } else {
26188 if (msg.length < length) {
26189 msg.copy(buf, length - msg.length)
26190 return buf
ebd8d4e8 26191 }
8b095871 26192 return msg.slice(-length)
ebd8d4e8
IC
26193 }
26194}
26195
8b095871
IC
26196/**
26197 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26198 * Or it truncates the beginning if it exceeds.
26199 * @param {Buffer|Array} msg the value to pad
26200 * @param {Number} length the number of bytes the output should be
26201 * @return {Buffer|Array}
26202 */
26203exports.setLengthRight = function (msg, length) {
26204 return exports.setLength(msg, length, true)
ab78acc6
IC
26205}
26206
8b095871
IC
26207/**
26208 * Trims leading zeros from a `Buffer` or an `Array`
26209 * @param {Buffer|Array|String} a
26210 * @return {Buffer|Array|String}
26211 */
26212exports.unpad = exports.stripZeros = function (a) {
26213 a = exports.stripHexPrefix(a)
26214 var first = a[0]
26215 while (a.length > 0 && first.toString() === '0') {
26216 a = a.slice(1)
26217 first = a[0]
26218 }
26219 return a
26220}
26221/**
26222 * 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.
26223 * @param {*} v the value
26224 */
26225exports.toBuffer = function (v) {
26226 if (!Buffer.isBuffer(v)) {
26227 if (Array.isArray(v)) {
26228 v = Buffer.from(v)
26229 } else if (typeof v === 'string') {
26230 if (exports.isHexPrefixed(v)) {
26231 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
26232 } else {
26233 v = Buffer.from(v)
26234 }
26235 } else if (typeof v === 'number') {
26236 v = exports.intToBuffer(v)
26237 } else if (v === null || v === undefined) {
26238 v = Buffer.allocUnsafe(0)
26239 } else if (v.toArray) {
26240 // converts a BN to a Buffer
26241 v = Buffer.from(v.toArray())
26242 } else {
26243 throw new Error('invalid type')
26244 }
ebd8d4e8 26245 }
8b095871 26246 return v
ebd8d4e8
IC
26247}
26248
8b095871
IC
26249/**
26250 * Converts a `Buffer` to a `Number`
26251 * @param {Buffer} buf
26252 * @return {Number}
26253 * @throws If the input number exceeds 53 bits.
26254 */
26255exports.bufferToInt = function (buf) {
26256 return new BN(exports.toBuffer(buf)).toNumber()
26257}
ebd8d4e8 26258
8b095871
IC
26259/**
26260 * Converts a `Buffer` into a hex `String`
26261 * @param {Buffer} buf
26262 * @return {String}
26263 */
26264exports.bufferToHex = function (buf) {
26265 buf = exports.toBuffer(buf)
26266 return '0x' + buf.toString('hex')
26267}
ab78acc6 26268
8b095871
IC
26269/**
26270 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
26271 * @param {Buffer} num
26272 * @return {BN}
26273 */
26274exports.fromSigned = function (num) {
26275 return new BN(num).fromTwos(256)
26276}
ab78acc6 26277
8b095871
IC
26278/**
26279 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
26280 * @param {BN} num
26281 * @return {Buffer}
26282 */
26283exports.toUnsigned = function (num) {
26284 return Buffer.from(num.toTwos(256).toArray())
26285}
ab78acc6 26286
8b095871
IC
26287/**
26288 * Creates SHA-3 hash of the input
26289 * @param {Buffer|Array|String|Number} a the input data
26290 * @param {Number} [bits=256] the SHA width
26291 * @return {Buffer}
26292 */
26293exports.sha3 = function (a, bits) {
26294 a = exports.toBuffer(a)
26295 if (!bits) bits = 256
ab78acc6 26296
8b095871
IC
26297 return createKeccakHash('keccak' + bits).update(a).digest()
26298}
ab78acc6 26299
8b095871
IC
26300/**
26301 * Creates SHA256 hash of the input
26302 * @param {Buffer|Array|String|Number} a the input data
26303 * @return {Buffer}
26304 */
26305exports.sha256 = function (a) {
26306 a = exports.toBuffer(a)
26307 return createHash('sha256').update(a).digest()
26308}
ab78acc6 26309
8b095871
IC
26310/**
26311 * Creates RIPEMD160 hash of the input
26312 * @param {Buffer|Array|String|Number} a the input data
26313 * @param {Boolean} padded whether it should be padded to 256 bits or not
26314 * @return {Buffer}
26315 */
26316exports.ripemd160 = function (a, padded) {
26317 a = exports.toBuffer(a)
26318 var hash = createHash('rmd160').update(a).digest()
26319 if (padded === true) {
26320 return exports.setLength(hash, 32)
26321 } else {
26322 return hash
ebd8d4e8 26323 }
8b095871 26324}
ebd8d4e8 26325
8b095871
IC
26326/**
26327 * Creates SHA-3 hash of the RLP encoded version of the input
26328 * @param {Buffer|Array|String|Number} a the input data
26329 * @return {Buffer}
26330 */
26331exports.rlphash = function (a) {
26332 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
26333}
26334
8b095871
IC
26335/**
26336 * Checks if the private key satisfies the rules of the curve secp256k1.
26337 * @param {Buffer} privateKey
26338 * @return {Boolean}
26339 */
26340exports.isValidPrivate = function (privateKey) {
26341 return secp256k1.privateKeyVerify(privateKey)
26342}
ebd8d4e8 26343
8b095871
IC
26344/**
26345 * Checks if the public key satisfies the rules of the curve secp256k1
26346 * and the requirements of Ethereum.
26347 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
26348 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26349 * @return {Boolean}
26350 */
26351exports.isValidPublic = function (publicKey, sanitize) {
26352 if (publicKey.length === 64) {
26353 // Convert to SEC1 for secp256k1
26354 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
26355 }
ebd8d4e8 26356
8b095871
IC
26357 if (!sanitize) {
26358 return false
26359 }
ebd8d4e8 26360
8b095871
IC
26361 return secp256k1.publicKeyVerify(publicKey)
26362}
ebd8d4e8 26363
8b095871
IC
26364/**
26365 * Returns the ethereum address of a given public key.
26366 * Accepts "Ethereum public keys" and SEC1 encoded keys.
26367 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
26368 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26369 * @return {Buffer}
26370 */
26371exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
26372 pubKey = exports.toBuffer(pubKey)
26373 if (sanitize && (pubKey.length !== 64)) {
26374 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 26375 }
8b095871
IC
26376 assert(pubKey.length === 64)
26377 // Only take the lower 160bits of the hash
26378 return exports.sha3(pubKey).slice(-20)
26379}
ebd8d4e8 26380
8b095871
IC
26381/**
26382 * Returns the ethereum public key of a given private key
26383 * @param {Buffer} privateKey A private key must be 256 bits wide
26384 * @return {Buffer}
26385 */
26386var privateToPublic = exports.privateToPublic = function (privateKey) {
26387 privateKey = exports.toBuffer(privateKey)
26388 // skip the type flag and use the X, Y points
26389 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
26390}
ab78acc6 26391
8b095871
IC
26392/**
26393 * Converts a public key to the Ethereum format.
26394 * @param {Buffer} publicKey
26395 * @return {Buffer}
26396 */
26397exports.importPublic = function (publicKey) {
26398 publicKey = exports.toBuffer(publicKey)
26399 if (publicKey.length !== 64) {
26400 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 26401 }
8b095871
IC
26402 return publicKey
26403}
ab78acc6 26404
8b095871
IC
26405/**
26406 * ECDSA sign
26407 * @param {Buffer} msgHash
26408 * @param {Buffer} privateKey
26409 * @return {Object}
26410 */
26411exports.ecsign = function (msgHash, privateKey) {
26412 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 26413
8b095871
IC
26414 var ret = {}
26415 ret.r = sig.signature.slice(0, 32)
26416 ret.s = sig.signature.slice(32, 64)
26417 ret.v = sig.recovery + 27
26418 return ret
ebd8d4e8
IC
26419}
26420
8b095871
IC
26421/**
26422 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
26423 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
26424 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
26425 * used to produce the signature.
26426 * @param message
26427 * @returns {Buffer} hash
26428 */
26429exports.hashPersonalMessage = function (message) {
26430 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
26431 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
26432}
26433
8b095871
IC
26434/**
26435 * ECDSA public key recovery from signature
26436 * @param {Buffer} msgHash
26437 * @param {Number} v
26438 * @param {Buffer} r
26439 * @param {Buffer} s
26440 * @return {Buffer} publicKey
26441 */
26442exports.ecrecover = function (msgHash, v, r, s) {
26443 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
26444 var recovery = v - 27
26445 if (recovery !== 0 && recovery !== 1) {
26446 throw new Error('Invalid signature v value')
ab78acc6 26447 }
8b095871
IC
26448 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
26449 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 26450}
ebd8d4e8 26451
8b095871
IC
26452/**
26453 * Convert signature parameters into the format of `eth_sign` RPC method
26454 * @param {Number} v
26455 * @param {Buffer} r
26456 * @param {Buffer} s
26457 * @return {String} sig
26458 */
26459exports.toRpcSig = function (v, r, s) {
26460 // NOTE: with potential introduction of chainId this might need to be updated
26461 if (v !== 27 && v !== 28) {
26462 throw new Error('Invalid recovery id')
26463 }
26464
26465 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
26466 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
26467 return exports.bufferToHex(Buffer.concat([
26468 exports.setLengthLeft(r, 32),
26469 exports.setLengthLeft(s, 32),
26470 exports.toBuffer(v - 27)
26471 ]))
ebd8d4e8
IC
26472}
26473
8b095871
IC
26474/**
26475 * Convert signature format of the `eth_sign` RPC method to signature parameters
26476 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
26477 * @param {String} sig
26478 * @return {Object}
26479 */
26480exports.fromRpcSig = function (sig) {
26481 sig = exports.toBuffer(sig)
ebd8d4e8 26482
8b095871
IC
26483 // NOTE: with potential introduction of chainId this might need to be updated
26484 if (sig.length !== 65) {
26485 throw new Error('Invalid signature length')
26486 }
26487
26488 var v = sig[64]
26489 // support both versions of `eth_sign` responses
26490 if (v < 27) {
26491 v += 27
26492 }
26493
26494 return {
26495 v: v,
26496 r: sig.slice(0, 32),
26497 s: sig.slice(32, 64)
26498 }
ebd8d4e8
IC
26499}
26500
8b095871
IC
26501/**
26502 * Returns the ethereum address of a given private key
26503 * @param {Buffer} privateKey A private key must be 256 bits wide
26504 * @return {Buffer}
26505 */
26506exports.privateToAddress = function (privateKey) {
26507 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 26508}
ebd8d4e8 26509
8b095871
IC
26510/**
26511 * Checks if the address is a valid. Accepts checksummed addresses too
26512 * @param {String} address
26513 * @return {Boolean}
26514 */
26515exports.isValidAddress = function (address) {
26516 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 26517}
ebd8d4e8 26518
8b095871
IC
26519/**
26520 * Returns a checksummed address
26521 * @param {String} address
26522 * @return {String}
26523 */
26524exports.toChecksumAddress = function (address) {
26525 address = exports.stripHexPrefix(address).toLowerCase()
26526 var hash = exports.sha3(address).toString('hex')
26527 var ret = '0x'
26528
26529 for (var i = 0; i < address.length; i++) {
26530 if (parseInt(hash[i], 16) >= 8) {
26531 ret += address[i].toUpperCase()
26532 } else {
26533 ret += address[i]
26534 }
26535 }
26536
26537 return ret
ebd8d4e8
IC
26538}
26539
8b095871
IC
26540/**
26541 * Checks if the address is a valid checksummed address
26542 * @param {Buffer} address
26543 * @return {Boolean}
26544 */
26545exports.isValidChecksumAddress = function (address) {
26546 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 26547}
ebd8d4e8 26548
8b095871
IC
26549/**
26550 * Generates an address of a newly created contract
26551 * @param {Buffer} from the address which is creating this new address
26552 * @param {Buffer} nonce the nonce of the from account
26553 * @return {Buffer}
26554 */
26555exports.generateAddress = function (from, nonce) {
26556 from = exports.toBuffer(from)
26557 nonce = new BN(nonce)
26558
26559 if (nonce.isZero()) {
26560 // in RLP we want to encode null in the case of zero nonce
26561 // read the RLP documentation for an answer if you dare
26562 nonce = null
26563 } else {
26564 nonce = Buffer.from(nonce.toArray())
26565 }
26566
26567 // Only take the lower 160bits of the hash
26568 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 26569}
ebd8d4e8 26570
8b095871
IC
26571/**
26572 * Returns true if the supplied address belongs to a precompiled account
26573 * @param {Buffer|String} address
26574 * @return {Boolean}
26575 */
26576exports.isPrecompiled = function (address) {
26577 var a = exports.unpad(address)
26578 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
26579}
26580
8b095871
IC
26581/**
26582 * Adds "0x" to a given `String` if it does not already start with "0x"
26583 * @param {String} str
26584 * @return {String}
26585 */
26586exports.addHexPrefix = function (str) {
26587 if (typeof str !== 'string') {
26588 return str
26589 }
26590
26591 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
26592}
26593
8b095871
IC
26594/**
26595 * Validate ECDSA signature
26596 * @method isValidSignature
26597 * @param {Buffer} v
26598 * @param {Buffer} r
26599 * @param {Buffer} s
26600 * @param {Boolean} [homestead=true]
26601 * @return {Boolean}
26602 */
26603
26604exports.isValidSignature = function (v, r, s, homestead) {
26605 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
26606 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
26607
26608 if (r.length !== 32 || s.length !== 32) {
26609 return false
26610 }
26611
26612 if (v !== 27 && v !== 28) {
26613 return false
26614 }
26615
26616 r = new BN(r)
26617 s = new BN(s)
26618
26619 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
26620 return false
26621 }
26622
26623 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
26624 return false
26625 }
26626
26627 return true
ebd8d4e8
IC
26628}
26629
8b095871
IC
26630/**
26631 * Converts a `Buffer` or `Array` to JSON
26632 * @param {Buffer|Array} ba
26633 * @return {Array|String|null}
26634 */
26635exports.baToJSON = function (ba) {
26636 if (Buffer.isBuffer(ba)) {
26637 return '0x' + ba.toString('hex')
26638 } else if (ba instanceof Array) {
26639 var array = []
26640 for (var i = 0; i < ba.length; i++) {
26641 array.push(exports.baToJSON(ba[i]))
26642 }
26643 return array
26644 }
ab78acc6 26645}
ebd8d4e8 26646
8b095871
IC
26647/**
26648 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
26649 * @param {Object} self the `Object` to define properties on
26650 * @param {Array} fields an array fields to define. Fields can contain:
26651 * * `name` - the name of the properties
26652 * * `length` - the number of bytes the field can have
26653 * * `allowLess` - if the field can be less than the length
26654 * * `allowEmpty`
26655 * @param {*} data data to be validated against the definitions
26656 */
26657exports.defineProperties = function (self, fields, data) {
26658 self.raw = []
26659 self._fields = []
26660
26661 // attach the `toJSON`
26662 self.toJSON = function (label) {
26663 if (label) {
26664 var obj = {}
26665 self._fields.forEach(function (field) {
26666 obj[field] = '0x' + self[field].toString('hex')
26667 })
26668 return obj
26669 }
26670 return exports.baToJSON(this.raw)
26671 }
26672
26673 self.serialize = function serialize () {
26674 return rlp.encode(self.raw)
26675 }
26676
26677 fields.forEach(function (field, i) {
26678 self._fields.push(field.name)
26679 function getter () {
26680 return self.raw[i]
26681 }
26682 function setter (v) {
26683 v = exports.toBuffer(v)
26684
26685 if (v.toString('hex') === '00' && !field.allowZero) {
26686 v = Buffer.allocUnsafe(0)
26687 }
26688
26689 if (field.allowLess && field.length) {
26690 v = exports.stripZeros(v)
26691 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
26692 } else if (!(field.allowZero && v.length === 0) && field.length) {
26693 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
26694 }
26695
26696 self.raw[i] = v
26697 }
26698
26699 Object.defineProperty(self, field.name, {
26700 enumerable: true,
26701 configurable: true,
26702 get: getter,
26703 set: setter
26704 })
26705
26706 if (field.default) {
26707 self[field.name] = field.default
26708 }
26709
26710 // attach alias
26711 if (field.alias) {
26712 Object.defineProperty(self, field.alias, {
26713 enumerable: false,
26714 configurable: true,
26715 set: setter,
26716 get: getter
26717 })
26718 }
26719 })
26720
26721 // if the constuctor is passed data
26722 if (data) {
26723 if (typeof data === 'string') {
26724 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
26725 }
26726
26727 if (Buffer.isBuffer(data)) {
26728 data = rlp.decode(data)
26729 }
26730
26731 if (Array.isArray(data)) {
26732 if (data.length > self._fields.length) {
26733 throw (new Error('wrong number of fields in data'))
26734 }
26735
26736 // make sure all the items are buffers
26737 data.forEach(function (d, i) {
26738 self[self._fields[i]] = exports.toBuffer(d)
26739 })
26740 } else if (typeof data === 'object') {
26741 const keys = Object.keys(data)
26742 fields.forEach(function (field) {
26743 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
26744 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
26745 })
26746 } else {
26747 throw new Error('invalid data')
26748 }
26749 }
ab78acc6 26750}
ebd8d4e8 26751
8b095871
IC
26752}).call(this,require("buffer").Buffer)
26753},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
26754(function (Buffer){
26755// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
26756// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26757// NOTE: SIGHASH byte ignored AND restricted, truncate before use
26758
26759function check (buffer) {
26760 if (buffer.length < 8) return false
26761 if (buffer.length > 72) return false
26762 if (buffer[0] !== 0x30) return false
26763 if (buffer[1] !== buffer.length - 2) return false
26764 if (buffer[2] !== 0x02) return false
26765
26766 var lenR = buffer[3]
26767 if (lenR === 0) return false
26768 if (5 + lenR >= buffer.length) return false
26769 if (buffer[4 + lenR] !== 0x02) return false
26770
26771 var lenS = buffer[5 + lenR]
26772 if (lenS === 0) return false
26773 if ((6 + lenR + lenS) !== buffer.length) return false
26774
26775 if (buffer[4] & 0x80) return false
26776 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
26777
26778 if (buffer[lenR + 6] & 0x80) return false
26779 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
26780 return true
ab78acc6 26781}
ab78acc6 26782
8b095871
IC
26783function decode (buffer) {
26784 if (buffer.length < 8) throw new Error('DER sequence length is too short')
26785 if (buffer.length > 72) throw new Error('DER sequence length is too long')
26786 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
26787 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
26788 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
26789
26790 var lenR = buffer[3]
26791 if (lenR === 0) throw new Error('R length is zero')
26792 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
26793 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
26794
26795 var lenS = buffer[5 + lenR]
26796 if (lenS === 0) throw new Error('S length is zero')
26797 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
26798
26799 if (buffer[4] & 0x80) throw new Error('R value is negative')
26800 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
26801
26802 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
26803 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
26804
26805 // non-BIP66 - extract R, S values
26806 return {
26807 r: buffer.slice(4, 4 + lenR),
26808 s: buffer.slice(6 + lenR)
26809 }
ebd8d4e8
IC
26810}
26811
8b095871
IC
26812/*
26813 * Expects r and s to be positive DER integers.
26814 *
26815 * The DER format uses the most significant bit as a sign bit (& 0x80).
26816 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
26817 *
26818 * Examples:
26819 *
26820 * 0 => 0x00
26821 * 1 => 0x01
26822 * -1 => 0xff
26823 * 127 => 0x7f
26824 * -127 => 0x81
26825 * 128 => 0x0080
26826 * -128 => 0x80
26827 * 255 => 0x00ff
26828 * -255 => 0xff01
26829 * 16300 => 0x3fac
26830 * -16300 => 0xc054
26831 * 62300 => 0x00f35c
26832 * -62300 => 0xff0ca4
26833*/
26834function encode (r, s) {
26835 var lenR = r.length
26836 var lenS = s.length
26837 if (lenR === 0) throw new Error('R length is zero')
26838 if (lenS === 0) throw new Error('S length is zero')
26839 if (lenR > 33) throw new Error('R length is too long')
26840 if (lenS > 33) throw new Error('S length is too long')
26841 if (r[0] & 0x80) throw new Error('R value is negative')
26842 if (s[0] & 0x80) throw new Error('S value is negative')
26843 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
26844 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
26845
26846 var signature = new Buffer(6 + lenR + lenS)
26847
26848 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26849 signature[0] = 0x30
26850 signature[1] = signature.length - 2
26851 signature[2] = 0x02
26852 signature[3] = r.length
26853 r.copy(signature, 4)
26854 signature[4 + lenR] = 0x02
26855 signature[5 + lenR] = s.length
26856 s.copy(signature, 6 + lenR)
26857
26858 return signature
ebd8d4e8
IC
26859}
26860
8b095871
IC
26861module.exports = {
26862 check: check,
26863 decode: decode,
26864 encode: encode
ebd8d4e8 26865}
8b095871 26866
ab78acc6 26867}).call(this,require("buffer").Buffer)
8b095871
IC
26868},{"buffer":5}],33:[function(require,module,exports){
26869(function (module, exports) {
26870 'use strict';
ebd8d4e8 26871
8b095871
IC
26872 // Utils
26873 function assert (val, msg) {
26874 if (!val) throw new Error(msg || 'Assertion failed');
26875 }
ebd8d4e8 26876
8b095871
IC
26877 // Could use `inherits` module, but don't want to move from single file
26878 // architecture yet.
26879 function inherits (ctor, superCtor) {
26880 ctor.super_ = superCtor;
26881 var TempCtor = function () {};
26882 TempCtor.prototype = superCtor.prototype;
26883 ctor.prototype = new TempCtor();
26884 ctor.prototype.constructor = ctor;
26885 }
ebd8d4e8 26886
8b095871 26887 // BN
ab78acc6 26888
8b095871
IC
26889 function BN (number, base, endian) {
26890 if (BN.isBN(number)) {
26891 return number;
26892 }
ab78acc6 26893
8b095871
IC
26894 this.negative = 0;
26895 this.words = null;
26896 this.length = 0;
ab78acc6 26897
8b095871
IC
26898 // Reduction context
26899 this.red = null;
ab78acc6 26900
8b095871
IC
26901 if (number !== null) {
26902 if (base === 'le' || base === 'be') {
26903 endian = base;
26904 base = 10;
26905 }
ab78acc6 26906
8b095871
IC
26907 this._init(number || 0, base || 10, endian || 'be');
26908 }
26909 }
26910 if (typeof module === 'object') {
26911 module.exports = BN;
26912 } else {
26913 exports.BN = BN;
26914 }
ab78acc6 26915
8b095871
IC
26916 BN.BN = BN;
26917 BN.wordSize = 26;
ab78acc6 26918
8b095871
IC
26919 var Buffer;
26920 try {
26921 Buffer = require('buf' + 'fer').Buffer;
26922 } catch (e) {
26923 }
ab78acc6 26924
8b095871
IC
26925 BN.isBN = function isBN (num) {
26926 if (num instanceof BN) {
26927 return true;
26928 }
ab78acc6 26929
8b095871
IC
26930 return num !== null && typeof num === 'object' &&
26931 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
26932 };
ebd8d4e8 26933
8b095871
IC
26934 BN.max = function max (left, right) {
26935 if (left.cmp(right) > 0) return left;
26936 return right;
26937 };
ebd8d4e8 26938
8b095871
IC
26939 BN.min = function min (left, right) {
26940 if (left.cmp(right) < 0) return left;
26941 return right;
26942 };
26943
26944 BN.prototype._init = function init (number, base, endian) {
26945 if (typeof number === 'number') {
26946 return this._initNumber(number, base, endian);
ab78acc6 26947 }
ebd8d4e8 26948
8b095871
IC
26949 if (typeof number === 'object') {
26950 return this._initArray(number, base, endian);
26951 }
ebd8d4e8 26952
8b095871
IC
26953 if (base === 'hex') {
26954 base = 16;
26955 }
26956 assert(base === (base | 0) && base >= 2 && base <= 36);
26957
26958 number = number.toString().replace(/\s+/g, '');
26959 var start = 0;
26960 if (number[0] === '-') {
26961 start++;
26962 }
26963
26964 if (base === 16) {
26965 this._parseHex(number, start);
26966 } else {
26967 this._parseBase(number, base, start);
ab78acc6 26968 }
ebd8d4e8 26969
8b095871
IC
26970 if (number[0] === '-') {
26971 this.negative = 1;
26972 }
ebd8d4e8 26973
8b095871 26974 this.strip();
ebd8d4e8 26975
8b095871 26976 if (endian !== 'le') return;
ebd8d4e8 26977
8b095871
IC
26978 this._initArray(this.toArray(), base, endian);
26979 };
ebd8d4e8 26980
8b095871
IC
26981 BN.prototype._initNumber = function _initNumber (number, base, endian) {
26982 if (number < 0) {
26983 this.negative = 1;
26984 number = -number;
26985 }
26986 if (number < 0x4000000) {
26987 this.words = [ number & 0x3ffffff ];
26988 this.length = 1;
26989 } else if (number < 0x10000000000000) {
26990 this.words = [
26991 number & 0x3ffffff,
26992 (number / 0x4000000) & 0x3ffffff
26993 ];
26994 this.length = 2;
26995 } else {
26996 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
26997 this.words = [
26998 number & 0x3ffffff,
26999 (number / 0x4000000) & 0x3ffffff,
27000 1
27001 ];
27002 this.length = 3;
27003 }
ebd8d4e8 27004
8b095871 27005 if (endian !== 'le') return;
ebd8d4e8 27006
8b095871
IC
27007 // Reverse the bytes
27008 this._initArray(this.toArray(), base, endian);
27009 };
ebd8d4e8 27010
8b095871
IC
27011 BN.prototype._initArray = function _initArray (number, base, endian) {
27012 // Perhaps a Uint8Array
27013 assert(typeof number.length === 'number');
27014 if (number.length <= 0) {
27015 this.words = [ 0 ];
27016 this.length = 1;
27017 return this;
ab78acc6 27018 }
ebd8d4e8 27019
8b095871
IC
27020 this.length = Math.ceil(number.length / 3);
27021 this.words = new Array(this.length);
27022 for (var i = 0; i < this.length; i++) {
27023 this.words[i] = 0;
27024 }
ebd8d4e8 27025
8b095871
IC
27026 var j, w;
27027 var off = 0;
27028 if (endian === 'be') {
27029 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
27030 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
27031 this.words[j] |= (w << off) & 0x3ffffff;
27032 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27033 off += 24;
27034 if (off >= 26) {
27035 off -= 26;
27036 j++;
27037 }
27038 }
27039 } else if (endian === 'le') {
27040 for (i = 0, j = 0; i < number.length; i += 3) {
27041 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
27042 this.words[j] |= (w << off) & 0x3ffffff;
27043 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27044 off += 24;
27045 if (off >= 26) {
27046 off -= 26;
27047 j++;
27048 }
27049 }
27050 }
27051 return this.strip();
27052 };
ebd8d4e8 27053
8b095871
IC
27054 function parseHex (str, start, end) {
27055 var r = 0;
27056 var len = Math.min(str.length, end);
27057 for (var i = start; i < len; i++) {
27058 var c = str.charCodeAt(i) - 48;
ab78acc6 27059
8b095871 27060 r <<= 4;
ab78acc6 27061
8b095871
IC
27062 // 'a' - 'f'
27063 if (c >= 49 && c <= 54) {
27064 r |= c - 49 + 0xa;
ab78acc6 27065
8b095871
IC
27066 // 'A' - 'F'
27067 } else if (c >= 17 && c <= 22) {
27068 r |= c - 17 + 0xa;
ebd8d4e8 27069
8b095871
IC
27070 // '0' - '9'
27071 } else {
27072 r |= c & 0xf;
27073 }
27074 }
27075 return r;
27076 }
27077
27078 BN.prototype._parseHex = function _parseHex (number, start) {
27079 // Create possibly bigger array to ensure that it fits the number
27080 this.length = Math.ceil((number.length - start) / 6);
27081 this.words = new Array(this.length);
27082 for (var i = 0; i < this.length; i++) {
27083 this.words[i] = 0;
27084 }
27085
27086 var j, w;
27087 // Scan 24-bit chunks and add them to the number
27088 var off = 0;
27089 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
27090 w = parseHex(number, i, i + 6);
27091 this.words[j] |= (w << off) & 0x3ffffff;
27092 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
27093 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27094 off += 24;
27095 if (off >= 26) {
27096 off -= 26;
27097 j++;
27098 }
27099 }
27100 if (i + 6 !== start) {
27101 w = parseHex(number, start, i + 6);
27102 this.words[j] |= (w << off) & 0x3ffffff;
27103 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27104 }
27105 this.strip();
27106 };
ebd8d4e8 27107
8b095871
IC
27108 function parseBase (str, start, end, mul) {
27109 var r = 0;
27110 var len = Math.min(str.length, end);
27111 for (var i = start; i < len; i++) {
27112 var c = str.charCodeAt(i) - 48;
ebd8d4e8 27113
8b095871 27114 r *= mul;
ebd8d4e8 27115
8b095871
IC
27116 // 'a'
27117 if (c >= 49) {
27118 r += c - 49 + 0xa;
ebd8d4e8 27119
8b095871
IC
27120 // 'A'
27121 } else if (c >= 17) {
27122 r += c - 17 + 0xa;
ebd8d4e8 27123
8b095871
IC
27124 // '0' - '9'
27125 } else {
27126 r += c;
27127 }
27128 }
27129 return r;
27130 }
ebd8d4e8 27131
8b095871
IC
27132 BN.prototype._parseBase = function _parseBase (number, base, start) {
27133 // Initialize as zero
27134 this.words = [ 0 ];
27135 this.length = 1;
ebd8d4e8 27136
8b095871
IC
27137 // Find length of limb in base
27138 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
27139 limbLen++;
27140 }
27141 limbLen--;
27142 limbPow = (limbPow / base) | 0;
ebd8d4e8 27143
8b095871
IC
27144 var total = number.length - start;
27145 var mod = total % limbLen;
27146 var end = Math.min(total, total - mod) + start;
ebd8d4e8 27147
8b095871
IC
27148 var word = 0;
27149 for (var i = start; i < end; i += limbLen) {
27150 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 27151
8b095871
IC
27152 this.imuln(limbPow);
27153 if (this.words[0] + word < 0x4000000) {
27154 this.words[0] += word;
27155 } else {
27156 this._iaddn(word);
27157 }
27158 }
ebd8d4e8 27159
8b095871
IC
27160 if (mod !== 0) {
27161 var pow = 1;
27162 word = parseBase(number, i, number.length, base);
ebd8d4e8 27163
8b095871
IC
27164 for (i = 0; i < mod; i++) {
27165 pow *= base;
27166 }
ab78acc6 27167
8b095871
IC
27168 this.imuln(pow);
27169 if (this.words[0] + word < 0x4000000) {
27170 this.words[0] += word;
27171 } else {
27172 this._iaddn(word);
27173 }
27174 }
27175 };
ab78acc6 27176
8b095871
IC
27177 BN.prototype.copy = function copy (dest) {
27178 dest.words = new Array(this.length);
27179 for (var i = 0; i < this.length; i++) {
27180 dest.words[i] = this.words[i];
ab78acc6 27181 }
8b095871
IC
27182 dest.length = this.length;
27183 dest.negative = this.negative;
27184 dest.red = this.red;
27185 };
ab78acc6 27186
8b095871
IC
27187 BN.prototype.clone = function clone () {
27188 var r = new BN(null);
27189 this.copy(r);
27190 return r;
27191 };
ab78acc6 27192
8b095871
IC
27193 BN.prototype._expand = function _expand (size) {
27194 while (this.length < size) {
27195 this.words[this.length++] = 0;
27196 }
27197 return this;
27198 };
ab78acc6 27199
8b095871
IC
27200 // Remove leading `0` from `this`
27201 BN.prototype.strip = function strip () {
27202 while (this.length > 1 && this.words[this.length - 1] === 0) {
27203 this.length--;
ab78acc6 27204 }
8b095871
IC
27205 return this._normSign();
27206 };
ebd8d4e8 27207
8b095871
IC
27208 BN.prototype._normSign = function _normSign () {
27209 // -0 = 0
27210 if (this.length === 1 && this.words[0] === 0) {
27211 this.negative = 0;
ab78acc6 27212 }
8b095871
IC
27213 return this;
27214 };
ebd8d4e8 27215
8b095871
IC
27216 BN.prototype.inspect = function inspect () {
27217 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
27218 };
ebd8d4e8 27219
8b095871 27220 /*
ebd8d4e8 27221
8b095871
IC
27222 var zeros = [];
27223 var groupSizes = [];
27224 var groupBases = [];
ebd8d4e8 27225
8b095871
IC
27226 var s = '';
27227 var i = -1;
27228 while (++i < BN.wordSize) {
27229 zeros[i] = s;
27230 s += '0';
27231 }
27232 groupSizes[0] = 0;
27233 groupSizes[1] = 0;
27234 groupBases[0] = 0;
27235 groupBases[1] = 0;
27236 var base = 2 - 1;
27237 while (++base < 36 + 1) {
27238 var groupSize = 0;
27239 var groupBase = 1;
27240 while (groupBase < (1 << BN.wordSize) / base) {
27241 groupBase *= base;
27242 groupSize += 1;
27243 }
27244 groupSizes[base] = groupSize;
27245 groupBases[base] = groupBase;
ebd8d4e8
IC
27246 }
27247
8b095871 27248 */
ebd8d4e8 27249
8b095871
IC
27250 var zeros = [
27251 '',
27252 '0',
27253 '00',
27254 '000',
27255 '0000',
27256 '00000',
27257 '000000',
27258 '0000000',
27259 '00000000',
27260 '000000000',
27261 '0000000000',
27262 '00000000000',
27263 '000000000000',
27264 '0000000000000',
27265 '00000000000000',
27266 '000000000000000',
27267 '0000000000000000',
27268 '00000000000000000',
27269 '000000000000000000',
27270 '0000000000000000000',
27271 '00000000000000000000',
27272 '000000000000000000000',
27273 '0000000000000000000000',
27274 '00000000000000000000000',
27275 '000000000000000000000000',
27276 '0000000000000000000000000'
27277 ];
27278
27279 var groupSizes = [
27280 0, 0,
27281 25, 16, 12, 11, 10, 9, 8,
27282 8, 7, 7, 7, 7, 6, 6,
27283 6, 6, 6, 6, 6, 5, 5,
27284 5, 5, 5, 5, 5, 5, 5,
27285 5, 5, 5, 5, 5, 5, 5
27286 ];
27287
27288 var groupBases = [
27289 0, 0,
27290 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
27291 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
27292 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
27293 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
27294 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
27295 ];
27296
27297 BN.prototype.toString = function toString (base, padding) {
27298 base = base || 10;
27299 padding = padding | 0 || 1;
27300
27301 var out;
27302 if (base === 16 || base === 'hex') {
27303 out = '';
27304 var off = 0;
27305 var carry = 0;
27306 for (var i = 0; i < this.length; i++) {
27307 var w = this.words[i];
27308 var word = (((w << off) | carry) & 0xffffff).toString(16);
27309 carry = (w >>> (24 - off)) & 0xffffff;
27310 if (carry !== 0 || i !== this.length - 1) {
27311 out = zeros[6 - word.length] + word + out;
27312 } else {
27313 out = word + out;
27314 }
27315 off += 2;
27316 if (off >= 26) {
27317 off -= 26;
27318 i--;
27319 }
27320 }
27321 if (carry !== 0) {
27322 out = carry.toString(16) + out;
27323 }
27324 while (out.length % padding !== 0) {
27325 out = '0' + out;
27326 }
27327 if (this.negative !== 0) {
27328 out = '-' + out;
27329 }
27330 return out;
27331 }
27332
27333 if (base === (base | 0) && base >= 2 && base <= 36) {
27334 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
27335 var groupSize = groupSizes[base];
27336 // var groupBase = Math.pow(base, groupSize);
27337 var groupBase = groupBases[base];
27338 out = '';
27339 var c = this.clone();
27340 c.negative = 0;
27341 while (!c.isZero()) {
27342 var r = c.modn(groupBase).toString(base);
27343 c = c.idivn(groupBase);
27344
27345 if (!c.isZero()) {
27346 out = zeros[groupSize - r.length] + r + out;
27347 } else {
27348 out = r + out;
27349 }
27350 }
27351 if (this.isZero()) {
27352 out = '0' + out;
27353 }
27354 while (out.length % padding !== 0) {
27355 out = '0' + out;
27356 }
27357 if (this.negative !== 0) {
27358 out = '-' + out;
27359 }
27360 return out;
27361 }
27362
27363 assert(false, 'Base should be between 2 and 36');
27364 };
27365
27366 BN.prototype.toNumber = function toNumber () {
27367 var ret = this.words[0];
27368 if (this.length === 2) {
27369 ret += this.words[1] * 0x4000000;
27370 } else if (this.length === 3 && this.words[2] === 0x01) {
27371 // NOTE: at this stage it is known that the top bit is set
27372 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
27373 } else if (this.length > 2) {
27374 assert(false, 'Number can only safely store up to 53 bits');
27375 }
27376 return (this.negative !== 0) ? -ret : ret;
27377 };
27378
27379 BN.prototype.toJSON = function toJSON () {
27380 return this.toString(16);
27381 };
27382
27383 BN.prototype.toBuffer = function toBuffer (endian, length) {
27384 assert(typeof Buffer !== 'undefined');
27385 return this.toArrayLike(Buffer, endian, length);
27386 };
ebd8d4e8 27387
8b095871
IC
27388 BN.prototype.toArray = function toArray (endian, length) {
27389 return this.toArrayLike(Array, endian, length);
27390 };
ebd8d4e8 27391
8b095871
IC
27392 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
27393 var byteLength = this.byteLength();
27394 var reqLength = length || Math.max(1, byteLength);
27395 assert(byteLength <= reqLength, 'byte array longer than desired length');
27396 assert(reqLength > 0, 'Requested array length <= 0');
27397
27398 this.strip();
27399 var littleEndian = endian === 'le';
27400 var res = new ArrayType(reqLength);
27401
27402 var b, i;
27403 var q = this.clone();
27404 if (!littleEndian) {
27405 // Assume big-endian
27406 for (i = 0; i < reqLength - byteLength; i++) {
27407 res[i] = 0;
27408 }
ebd8d4e8 27409
8b095871
IC
27410 for (i = 0; !q.isZero(); i++) {
27411 b = q.andln(0xff);
27412 q.iushrn(8);
ebd8d4e8 27413
8b095871
IC
27414 res[reqLength - i - 1] = b;
27415 }
27416 } else {
27417 for (i = 0; !q.isZero(); i++) {
27418 b = q.andln(0xff);
27419 q.iushrn(8);
ebd8d4e8 27420
8b095871
IC
27421 res[i] = b;
27422 }
27423
27424 for (; i < reqLength; i++) {
27425 res[i] = 0;
27426 }
ab78acc6 27427 }
ebd8d4e8 27428
8b095871
IC
27429 return res;
27430 };
ebd8d4e8 27431
8b095871
IC
27432 if (Math.clz32) {
27433 BN.prototype._countBits = function _countBits (w) {
27434 return 32 - Math.clz32(w);
27435 };
27436 } else {
27437 BN.prototype._countBits = function _countBits (w) {
27438 var t = w;
27439 var r = 0;
27440 if (t >= 0x1000) {
27441 r += 13;
27442 t >>>= 13;
27443 }
27444 if (t >= 0x40) {
27445 r += 7;
27446 t >>>= 7;
27447 }
27448 if (t >= 0x8) {
27449 r += 4;
27450 t >>>= 4;
27451 }
27452 if (t >= 0x02) {
27453 r += 2;
27454 t >>>= 2;
27455 }
27456 return r + t;
27457 };
ebd8d4e8
IC
27458 }
27459
8b095871
IC
27460 BN.prototype._zeroBits = function _zeroBits (w) {
27461 // Short-cut
27462 if (w === 0) return 26;
ebd8d4e8 27463
8b095871
IC
27464 var t = w;
27465 var r = 0;
27466 if ((t & 0x1fff) === 0) {
27467 r += 13;
27468 t >>>= 13;
27469 }
27470 if ((t & 0x7f) === 0) {
27471 r += 7;
27472 t >>>= 7;
27473 }
27474 if ((t & 0xf) === 0) {
27475 r += 4;
27476 t >>>= 4;
27477 }
27478 if ((t & 0x3) === 0) {
27479 r += 2;
27480 t >>>= 2;
27481 }
27482 if ((t & 0x1) === 0) {
27483 r++;
27484 }
27485 return r;
27486 };
ebd8d4e8 27487
8b095871
IC
27488 // Return number of used bits in a BN
27489 BN.prototype.bitLength = function bitLength () {
27490 var w = this.words[this.length - 1];
27491 var hi = this._countBits(w);
27492 return (this.length - 1) * 26 + hi;
27493 };
ebd8d4e8 27494
8b095871
IC
27495 function toBitArray (num) {
27496 var w = new Array(num.bitLength());
ebd8d4e8 27497
8b095871
IC
27498 for (var bit = 0; bit < w.length; bit++) {
27499 var off = (bit / 26) | 0;
27500 var wbit = bit % 26;
ebd8d4e8 27501
8b095871 27502 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 27503 }
8b095871
IC
27504
27505 return w;
ab78acc6 27506 }
ebd8d4e8 27507
8b095871
IC
27508 // Number of trailing zero bits
27509 BN.prototype.zeroBits = function zeroBits () {
27510 if (this.isZero()) return 0;
27511
27512 var r = 0;
27513 for (var i = 0; i < this.length; i++) {
27514 var b = this._zeroBits(this.words[i]);
27515 r += b;
27516 if (b !== 26) break;
ab78acc6 27517 }
8b095871
IC
27518 return r;
27519 };
27520
27521 BN.prototype.byteLength = function byteLength () {
27522 return Math.ceil(this.bitLength() / 8);
27523 };
27524
27525 BN.prototype.toTwos = function toTwos (width) {
27526 if (this.negative !== 0) {
27527 return this.abs().inotn(width).iaddn(1);
ab78acc6 27528 }
8b095871
IC
27529 return this.clone();
27530 };
ebd8d4e8 27531
8b095871
IC
27532 BN.prototype.fromTwos = function fromTwos (width) {
27533 if (this.testn(width - 1)) {
27534 return this.notn(width).iaddn(1).ineg();
27535 }
27536 return this.clone();
27537 };
ebd8d4e8 27538
8b095871
IC
27539 BN.prototype.isNeg = function isNeg () {
27540 return this.negative !== 0;
27541 };
ebd8d4e8 27542
8b095871
IC
27543 // Return negative clone of `this`
27544 BN.prototype.neg = function neg () {
27545 return this.clone().ineg();
27546 };
ebd8d4e8 27547
8b095871
IC
27548 BN.prototype.ineg = function ineg () {
27549 if (!this.isZero()) {
27550 this.negative ^= 1;
ab78acc6 27551 }
ebd8d4e8 27552
8b095871
IC
27553 return this;
27554 };
ebd8d4e8 27555
8b095871
IC
27556 // Or `num` with `this` in-place
27557 BN.prototype.iuor = function iuor (num) {
27558 while (this.length < num.length) {
27559 this.words[this.length++] = 0;
27560 }
ebd8d4e8 27561
8b095871
IC
27562 for (var i = 0; i < num.length; i++) {
27563 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 27564 }
ebd8d4e8 27565
8b095871
IC
27566 return this.strip();
27567 };
ebd8d4e8 27568
8b095871
IC
27569 BN.prototype.ior = function ior (num) {
27570 assert((this.negative | num.negative) === 0);
27571 return this.iuor(num);
ab78acc6 27572 };
ebd8d4e8 27573
8b095871
IC
27574 // Or `num` with `this`
27575 BN.prototype.or = function or (num) {
27576 if (this.length > num.length) return this.clone().ior(num);
27577 return num.clone().ior(this);
27578 };
ebd8d4e8 27579
8b095871
IC
27580 BN.prototype.uor = function uor (num) {
27581 if (this.length > num.length) return this.clone().iuor(num);
27582 return num.clone().iuor(this);
27583 };
ebd8d4e8 27584
8b095871
IC
27585 // And `num` with `this` in-place
27586 BN.prototype.iuand = function iuand (num) {
27587 // b = min-length(num, this)
27588 var b;
27589 if (this.length > num.length) {
27590 b = num;
27591 } else {
27592 b = this;
27593 }
27594
27595 for (var i = 0; i < b.length; i++) {
27596 this.words[i] = this.words[i] & num.words[i];
27597 }
ebd8d4e8 27598
8b095871 27599 this.length = b.length;
ebd8d4e8 27600
8b095871
IC
27601 return this.strip();
27602 };
ebd8d4e8 27603
8b095871
IC
27604 BN.prototype.iand = function iand (num) {
27605 assert((this.negative | num.negative) === 0);
27606 return this.iuand(num);
27607 };
ebd8d4e8 27608
8b095871
IC
27609 // And `num` with `this`
27610 BN.prototype.and = function and (num) {
27611 if (this.length > num.length) return this.clone().iand(num);
27612 return num.clone().iand(this);
27613 };
ebd8d4e8 27614
8b095871
IC
27615 BN.prototype.uand = function uand (num) {
27616 if (this.length > num.length) return this.clone().iuand(num);
27617 return num.clone().iuand(this);
27618 };
ebd8d4e8 27619
8b095871
IC
27620 // Xor `num` with `this` in-place
27621 BN.prototype.iuxor = function iuxor (num) {
27622 // a.length > b.length
27623 var a;
27624 var b;
27625 if (this.length > num.length) {
27626 a = this;
27627 b = num;
27628 } else {
27629 a = num;
27630 b = this;
27631 }
ebd8d4e8 27632
8b095871
IC
27633 for (var i = 0; i < b.length; i++) {
27634 this.words[i] = a.words[i] ^ b.words[i];
27635 }
ebd8d4e8 27636
8b095871
IC
27637 if (this !== a) {
27638 for (; i < a.length; i++) {
27639 this.words[i] = a.words[i];
27640 }
27641 }
ebd8d4e8 27642
8b095871 27643 this.length = a.length;
ebd8d4e8 27644
8b095871
IC
27645 return this.strip();
27646 };
ebd8d4e8 27647
8b095871
IC
27648 BN.prototype.ixor = function ixor (num) {
27649 assert((this.negative | num.negative) === 0);
27650 return this.iuxor(num);
27651 };
ebd8d4e8 27652
8b095871
IC
27653 // Xor `num` with `this`
27654 BN.prototype.xor = function xor (num) {
27655 if (this.length > num.length) return this.clone().ixor(num);
27656 return num.clone().ixor(this);
27657 };
ebd8d4e8 27658
8b095871
IC
27659 BN.prototype.uxor = function uxor (num) {
27660 if (this.length > num.length) return this.clone().iuxor(num);
27661 return num.clone().iuxor(this);
27662 };
ebd8d4e8 27663
8b095871
IC
27664 // Not ``this`` with ``width`` bitwidth
27665 BN.prototype.inotn = function inotn (width) {
27666 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 27667
8b095871
IC
27668 var bytesNeeded = Math.ceil(width / 26) | 0;
27669 var bitsLeft = width % 26;
ebd8d4e8 27670
8b095871
IC
27671 // Extend the buffer with leading zeroes
27672 this._expand(bytesNeeded);
27673
27674 if (bitsLeft > 0) {
27675 bytesNeeded--;
ab78acc6 27676 }
8b095871
IC
27677
27678 // Handle complete words
27679 for (var i = 0; i < bytesNeeded; i++) {
27680 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 27681 }
8b095871
IC
27682
27683 // Handle the residue
27684 if (bitsLeft > 0) {
27685 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 27686 }
ebd8d4e8 27687
8b095871
IC
27688 // And remove leading zeroes
27689 return this.strip();
27690 };
ebd8d4e8 27691
8b095871
IC
27692 BN.prototype.notn = function notn (width) {
27693 return this.clone().inotn(width);
27694 };
ebd8d4e8 27695
8b095871
IC
27696 // Set `bit` of `this`
27697 BN.prototype.setn = function setn (bit, val) {
27698 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 27699
8b095871
IC
27700 var off = (bit / 26) | 0;
27701 var wbit = bit % 26;
ebd8d4e8 27702
8b095871 27703 this._expand(off + 1);
ebd8d4e8 27704
8b095871
IC
27705 if (val) {
27706 this.words[off] = this.words[off] | (1 << wbit);
27707 } else {
27708 this.words[off] = this.words[off] & ~(1 << wbit);
27709 }
ebd8d4e8 27710
8b095871
IC
27711 return this.strip();
27712 };
ebd8d4e8 27713
8b095871
IC
27714 // Add `num` to `this` in-place
27715 BN.prototype.iadd = function iadd (num) {
27716 var r;
27717
27718 // negative + positive
27719 if (this.negative !== 0 && num.negative === 0) {
27720 this.negative = 0;
27721 r = this.isub(num);
27722 this.negative ^= 1;
27723 return this._normSign();
27724
27725 // positive + negative
27726 } else if (this.negative === 0 && num.negative !== 0) {
27727 num.negative = 0;
27728 r = this.isub(num);
27729 num.negative = 1;
27730 return r._normSign();
27731 }
27732
27733 // a.length > b.length
27734 var a, b;
27735 if (this.length > num.length) {
27736 a = this;
27737 b = num;
ab78acc6 27738 } else {
8b095871
IC
27739 a = num;
27740 b = this;
27741 }
27742
27743 var carry = 0;
27744 for (var i = 0; i < b.length; i++) {
27745 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
27746 this.words[i] = r & 0x3ffffff;
27747 carry = r >>> 26;
27748 }
27749 for (; carry !== 0 && i < a.length; i++) {
27750 r = (a.words[i] | 0) + carry;
27751 this.words[i] = r & 0x3ffffff;
27752 carry = r >>> 26;
27753 }
27754
27755 this.length = a.length;
27756 if (carry !== 0) {
27757 this.words[this.length] = carry;
27758 this.length++;
27759 // Copy the rest of the words
27760 } else if (a !== this) {
27761 for (; i < a.length; i++) {
27762 this.words[i] = a.words[i];
27763 }
ab78acc6 27764 }
ebd8d4e8 27765
8b095871
IC
27766 return this;
27767 };
ebd8d4e8 27768
8b095871
IC
27769 // Add `num` to `this`
27770 BN.prototype.add = function add (num) {
27771 var res;
27772 if (num.negative !== 0 && this.negative === 0) {
27773 num.negative = 0;
27774 res = this.sub(num);
27775 num.negative ^= 1;
27776 return res;
27777 } else if (num.negative === 0 && this.negative !== 0) {
27778 this.negative = 0;
27779 res = num.sub(this);
27780 this.negative = 1;
27781 return res;
27782 }
ebd8d4e8 27783
8b095871 27784 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 27785
8b095871
IC
27786 return num.clone().iadd(this);
27787 };
ebd8d4e8 27788
8b095871
IC
27789 // Subtract `num` from `this` in-place
27790 BN.prototype.isub = function isub (num) {
27791 // this - (-num) = this + num
27792 if (num.negative !== 0) {
27793 num.negative = 0;
27794 var r = this.iadd(num);
27795 num.negative = 1;
27796 return r._normSign();
27797
27798 // -this - num = -(this + num)
27799 } else if (this.negative !== 0) {
27800 this.negative = 0;
27801 this.iadd(num);
27802 this.negative = 1;
27803 return this._normSign();
27804 }
27805
27806 // At this point both numbers are positive
27807 var cmp = this.cmp(num);
27808
27809 // Optimization - zeroify
27810 if (cmp === 0) {
27811 this.negative = 0;
27812 this.length = 1;
27813 this.words[0] = 0;
27814 return this;
27815 }
ebd8d4e8 27816
8b095871
IC
27817 // a > b
27818 var a, b;
27819 if (cmp > 0) {
27820 a = this;
27821 b = num;
27822 } else {
27823 a = num;
27824 b = this;
27825 }
ebd8d4e8 27826
8b095871
IC
27827 var carry = 0;
27828 for (var i = 0; i < b.length; i++) {
27829 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
27830 carry = r >> 26;
27831 this.words[i] = r & 0x3ffffff;
27832 }
27833 for (; carry !== 0 && i < a.length; i++) {
27834 r = (a.words[i] | 0) + carry;
27835 carry = r >> 26;
27836 this.words[i] = r & 0x3ffffff;
27837 }
ebd8d4e8 27838
8b095871
IC
27839 // Copy rest of the words
27840 if (carry === 0 && i < a.length && a !== this) {
27841 for (; i < a.length; i++) {
27842 this.words[i] = a.words[i];
27843 }
27844 }
ebd8d4e8 27845
8b095871 27846 this.length = Math.max(this.length, i);
ebd8d4e8 27847
8b095871
IC
27848 if (a !== this) {
27849 this.negative = 1;
ab78acc6 27850 }
ebd8d4e8 27851
8b095871
IC
27852 return this.strip();
27853 };
ebd8d4e8 27854
8b095871
IC
27855 // Subtract `num` from `this`
27856 BN.prototype.sub = function sub (num) {
27857 return this.clone().isub(num);
27858 };
27859
27860 function smallMulTo (self, num, out) {
27861 out.negative = num.negative ^ self.negative;
27862 var len = (self.length + num.length) | 0;
27863 out.length = len;
27864 len = (len - 1) | 0;
27865
27866 // Peel one iteration (compiler can't do it, because of code complexity)
27867 var a = self.words[0] | 0;
27868 var b = num.words[0] | 0;
27869 var r = a * b;
27870
27871 var lo = r & 0x3ffffff;
27872 var carry = (r / 0x4000000) | 0;
27873 out.words[0] = lo;
27874
27875 for (var k = 1; k < len; k++) {
27876 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
27877 // note that ncarry could be >= 0x3ffffff
27878 var ncarry = carry >>> 26;
27879 var rword = carry & 0x3ffffff;
27880 var maxJ = Math.min(k, num.length - 1);
27881 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
27882 var i = (k - j) | 0;
27883 a = self.words[i] | 0;
27884 b = num.words[j] | 0;
27885 r = a * b + rword;
27886 ncarry += (r / 0x4000000) | 0;
27887 rword = r & 0x3ffffff;
27888 }
27889 out.words[k] = rword | 0;
27890 carry = ncarry | 0;
27891 }
27892 if (carry !== 0) {
27893 out.words[k] = carry | 0;
ab78acc6 27894 } else {
8b095871
IC
27895 out.length--;
27896 }
27897
27898 return out.strip();
27899 }
27900
27901 // TODO(indutny): it may be reasonable to omit it for users who don't need
27902 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
27903 // multiplication (like elliptic secp256k1).
27904 var comb10MulTo = function comb10MulTo (self, num, out) {
27905 var a = self.words;
27906 var b = num.words;
27907 var o = out.words;
27908 var c = 0;
27909 var lo;
27910 var mid;
27911 var hi;
27912 var a0 = a[0] | 0;
27913 var al0 = a0 & 0x1fff;
27914 var ah0 = a0 >>> 13;
27915 var a1 = a[1] | 0;
27916 var al1 = a1 & 0x1fff;
27917 var ah1 = a1 >>> 13;
27918 var a2 = a[2] | 0;
27919 var al2 = a2 & 0x1fff;
27920 var ah2 = a2 >>> 13;
27921 var a3 = a[3] | 0;
27922 var al3 = a3 & 0x1fff;
27923 var ah3 = a3 >>> 13;
27924 var a4 = a[4] | 0;
27925 var al4 = a4 & 0x1fff;
27926 var ah4 = a4 >>> 13;
27927 var a5 = a[5] | 0;
27928 var al5 = a5 & 0x1fff;
27929 var ah5 = a5 >>> 13;
27930 var a6 = a[6] | 0;
27931 var al6 = a6 & 0x1fff;
27932 var ah6 = a6 >>> 13;
27933 var a7 = a[7] | 0;
27934 var al7 = a7 & 0x1fff;
27935 var ah7 = a7 >>> 13;
27936 var a8 = a[8] | 0;
27937 var al8 = a8 & 0x1fff;
27938 var ah8 = a8 >>> 13;
27939 var a9 = a[9] | 0;
27940 var al9 = a9 & 0x1fff;
27941 var ah9 = a9 >>> 13;
27942 var b0 = b[0] | 0;
27943 var bl0 = b0 & 0x1fff;
27944 var bh0 = b0 >>> 13;
27945 var b1 = b[1] | 0;
27946 var bl1 = b1 & 0x1fff;
27947 var bh1 = b1 >>> 13;
27948 var b2 = b[2] | 0;
27949 var bl2 = b2 & 0x1fff;
27950 var bh2 = b2 >>> 13;
27951 var b3 = b[3] | 0;
27952 var bl3 = b3 & 0x1fff;
27953 var bh3 = b3 >>> 13;
27954 var b4 = b[4] | 0;
27955 var bl4 = b4 & 0x1fff;
27956 var bh4 = b4 >>> 13;
27957 var b5 = b[5] | 0;
27958 var bl5 = b5 & 0x1fff;
27959 var bh5 = b5 >>> 13;
27960 var b6 = b[6] | 0;
27961 var bl6 = b6 & 0x1fff;
27962 var bh6 = b6 >>> 13;
27963 var b7 = b[7] | 0;
27964 var bl7 = b7 & 0x1fff;
27965 var bh7 = b7 >>> 13;
27966 var b8 = b[8] | 0;
27967 var bl8 = b8 & 0x1fff;
27968 var bh8 = b8 >>> 13;
27969 var b9 = b[9] | 0;
27970 var bl9 = b9 & 0x1fff;
27971 var bh9 = b9 >>> 13;
27972
27973 out.negative = self.negative ^ num.negative;
27974 out.length = 19;
27975 /* k = 0 */
27976 lo = Math.imul(al0, bl0);
27977 mid = Math.imul(al0, bh0);
27978 mid = (mid + Math.imul(ah0, bl0)) | 0;
27979 hi = Math.imul(ah0, bh0);
27980 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
27981 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
27982 w0 &= 0x3ffffff;
27983 /* k = 1 */
27984 lo = Math.imul(al1, bl0);
27985 mid = Math.imul(al1, bh0);
27986 mid = (mid + Math.imul(ah1, bl0)) | 0;
27987 hi = Math.imul(ah1, bh0);
27988 lo = (lo + Math.imul(al0, bl1)) | 0;
27989 mid = (mid + Math.imul(al0, bh1)) | 0;
27990 mid = (mid + Math.imul(ah0, bl1)) | 0;
27991 hi = (hi + Math.imul(ah0, bh1)) | 0;
27992 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
27993 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
27994 w1 &= 0x3ffffff;
27995 /* k = 2 */
27996 lo = Math.imul(al2, bl0);
27997 mid = Math.imul(al2, bh0);
27998 mid = (mid + Math.imul(ah2, bl0)) | 0;
27999 hi = Math.imul(ah2, bh0);
28000 lo = (lo + Math.imul(al1, bl1)) | 0;
28001 mid = (mid + Math.imul(al1, bh1)) | 0;
28002 mid = (mid + Math.imul(ah1, bl1)) | 0;
28003 hi = (hi + Math.imul(ah1, bh1)) | 0;
28004 lo = (lo + Math.imul(al0, bl2)) | 0;
28005 mid = (mid + Math.imul(al0, bh2)) | 0;
28006 mid = (mid + Math.imul(ah0, bl2)) | 0;
28007 hi = (hi + Math.imul(ah0, bh2)) | 0;
28008 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28009 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
28010 w2 &= 0x3ffffff;
28011 /* k = 3 */
28012 lo = Math.imul(al3, bl0);
28013 mid = Math.imul(al3, bh0);
28014 mid = (mid + Math.imul(ah3, bl0)) | 0;
28015 hi = Math.imul(ah3, bh0);
28016 lo = (lo + Math.imul(al2, bl1)) | 0;
28017 mid = (mid + Math.imul(al2, bh1)) | 0;
28018 mid = (mid + Math.imul(ah2, bl1)) | 0;
28019 hi = (hi + Math.imul(ah2, bh1)) | 0;
28020 lo = (lo + Math.imul(al1, bl2)) | 0;
28021 mid = (mid + Math.imul(al1, bh2)) | 0;
28022 mid = (mid + Math.imul(ah1, bl2)) | 0;
28023 hi = (hi + Math.imul(ah1, bh2)) | 0;
28024 lo = (lo + Math.imul(al0, bl3)) | 0;
28025 mid = (mid + Math.imul(al0, bh3)) | 0;
28026 mid = (mid + Math.imul(ah0, bl3)) | 0;
28027 hi = (hi + Math.imul(ah0, bh3)) | 0;
28028 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28029 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
28030 w3 &= 0x3ffffff;
28031 /* k = 4 */
28032 lo = Math.imul(al4, bl0);
28033 mid = Math.imul(al4, bh0);
28034 mid = (mid + Math.imul(ah4, bl0)) | 0;
28035 hi = Math.imul(ah4, bh0);
28036 lo = (lo + Math.imul(al3, bl1)) | 0;
28037 mid = (mid + Math.imul(al3, bh1)) | 0;
28038 mid = (mid + Math.imul(ah3, bl1)) | 0;
28039 hi = (hi + Math.imul(ah3, bh1)) | 0;
28040 lo = (lo + Math.imul(al2, bl2)) | 0;
28041 mid = (mid + Math.imul(al2, bh2)) | 0;
28042 mid = (mid + Math.imul(ah2, bl2)) | 0;
28043 hi = (hi + Math.imul(ah2, bh2)) | 0;
28044 lo = (lo + Math.imul(al1, bl3)) | 0;
28045 mid = (mid + Math.imul(al1, bh3)) | 0;
28046 mid = (mid + Math.imul(ah1, bl3)) | 0;
28047 hi = (hi + Math.imul(ah1, bh3)) | 0;
28048 lo = (lo + Math.imul(al0, bl4)) | 0;
28049 mid = (mid + Math.imul(al0, bh4)) | 0;
28050 mid = (mid + Math.imul(ah0, bl4)) | 0;
28051 hi = (hi + Math.imul(ah0, bh4)) | 0;
28052 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28053 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
28054 w4 &= 0x3ffffff;
28055 /* k = 5 */
28056 lo = Math.imul(al5, bl0);
28057 mid = Math.imul(al5, bh0);
28058 mid = (mid + Math.imul(ah5, bl0)) | 0;
28059 hi = Math.imul(ah5, bh0);
28060 lo = (lo + Math.imul(al4, bl1)) | 0;
28061 mid = (mid + Math.imul(al4, bh1)) | 0;
28062 mid = (mid + Math.imul(ah4, bl1)) | 0;
28063 hi = (hi + Math.imul(ah4, bh1)) | 0;
28064 lo = (lo + Math.imul(al3, bl2)) | 0;
28065 mid = (mid + Math.imul(al3, bh2)) | 0;
28066 mid = (mid + Math.imul(ah3, bl2)) | 0;
28067 hi = (hi + Math.imul(ah3, bh2)) | 0;
28068 lo = (lo + Math.imul(al2, bl3)) | 0;
28069 mid = (mid + Math.imul(al2, bh3)) | 0;
28070 mid = (mid + Math.imul(ah2, bl3)) | 0;
28071 hi = (hi + Math.imul(ah2, bh3)) | 0;
28072 lo = (lo + Math.imul(al1, bl4)) | 0;
28073 mid = (mid + Math.imul(al1, bh4)) | 0;
28074 mid = (mid + Math.imul(ah1, bl4)) | 0;
28075 hi = (hi + Math.imul(ah1, bh4)) | 0;
28076 lo = (lo + Math.imul(al0, bl5)) | 0;
28077 mid = (mid + Math.imul(al0, bh5)) | 0;
28078 mid = (mid + Math.imul(ah0, bl5)) | 0;
28079 hi = (hi + Math.imul(ah0, bh5)) | 0;
28080 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28081 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
28082 w5 &= 0x3ffffff;
28083 /* k = 6 */
28084 lo = Math.imul(al6, bl0);
28085 mid = Math.imul(al6, bh0);
28086 mid = (mid + Math.imul(ah6, bl0)) | 0;
28087 hi = Math.imul(ah6, bh0);
28088 lo = (lo + Math.imul(al5, bl1)) | 0;
28089 mid = (mid + Math.imul(al5, bh1)) | 0;
28090 mid = (mid + Math.imul(ah5, bl1)) | 0;
28091 hi = (hi + Math.imul(ah5, bh1)) | 0;
28092 lo = (lo + Math.imul(al4, bl2)) | 0;
28093 mid = (mid + Math.imul(al4, bh2)) | 0;
28094 mid = (mid + Math.imul(ah4, bl2)) | 0;
28095 hi = (hi + Math.imul(ah4, bh2)) | 0;
28096 lo = (lo + Math.imul(al3, bl3)) | 0;
28097 mid = (mid + Math.imul(al3, bh3)) | 0;
28098 mid = (mid + Math.imul(ah3, bl3)) | 0;
28099 hi = (hi + Math.imul(ah3, bh3)) | 0;
28100 lo = (lo + Math.imul(al2, bl4)) | 0;
28101 mid = (mid + Math.imul(al2, bh4)) | 0;
28102 mid = (mid + Math.imul(ah2, bl4)) | 0;
28103 hi = (hi + Math.imul(ah2, bh4)) | 0;
28104 lo = (lo + Math.imul(al1, bl5)) | 0;
28105 mid = (mid + Math.imul(al1, bh5)) | 0;
28106 mid = (mid + Math.imul(ah1, bl5)) | 0;
28107 hi = (hi + Math.imul(ah1, bh5)) | 0;
28108 lo = (lo + Math.imul(al0, bl6)) | 0;
28109 mid = (mid + Math.imul(al0, bh6)) | 0;
28110 mid = (mid + Math.imul(ah0, bl6)) | 0;
28111 hi = (hi + Math.imul(ah0, bh6)) | 0;
28112 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28113 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
28114 w6 &= 0x3ffffff;
28115 /* k = 7 */
28116 lo = Math.imul(al7, bl0);
28117 mid = Math.imul(al7, bh0);
28118 mid = (mid + Math.imul(ah7, bl0)) | 0;
28119 hi = Math.imul(ah7, bh0);
28120 lo = (lo + Math.imul(al6, bl1)) | 0;
28121 mid = (mid + Math.imul(al6, bh1)) | 0;
28122 mid = (mid + Math.imul(ah6, bl1)) | 0;
28123 hi = (hi + Math.imul(ah6, bh1)) | 0;
28124 lo = (lo + Math.imul(al5, bl2)) | 0;
28125 mid = (mid + Math.imul(al5, bh2)) | 0;
28126 mid = (mid + Math.imul(ah5, bl2)) | 0;
28127 hi = (hi + Math.imul(ah5, bh2)) | 0;
28128 lo = (lo + Math.imul(al4, bl3)) | 0;
28129 mid = (mid + Math.imul(al4, bh3)) | 0;
28130 mid = (mid + Math.imul(ah4, bl3)) | 0;
28131 hi = (hi + Math.imul(ah4, bh3)) | 0;
28132 lo = (lo + Math.imul(al3, bl4)) | 0;
28133 mid = (mid + Math.imul(al3, bh4)) | 0;
28134 mid = (mid + Math.imul(ah3, bl4)) | 0;
28135 hi = (hi + Math.imul(ah3, bh4)) | 0;
28136 lo = (lo + Math.imul(al2, bl5)) | 0;
28137 mid = (mid + Math.imul(al2, bh5)) | 0;
28138 mid = (mid + Math.imul(ah2, bl5)) | 0;
28139 hi = (hi + Math.imul(ah2, bh5)) | 0;
28140 lo = (lo + Math.imul(al1, bl6)) | 0;
28141 mid = (mid + Math.imul(al1, bh6)) | 0;
28142 mid = (mid + Math.imul(ah1, bl6)) | 0;
28143 hi = (hi + Math.imul(ah1, bh6)) | 0;
28144 lo = (lo + Math.imul(al0, bl7)) | 0;
28145 mid = (mid + Math.imul(al0, bh7)) | 0;
28146 mid = (mid + Math.imul(ah0, bl7)) | 0;
28147 hi = (hi + Math.imul(ah0, bh7)) | 0;
28148 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28149 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
28150 w7 &= 0x3ffffff;
28151 /* k = 8 */
28152 lo = Math.imul(al8, bl0);
28153 mid = Math.imul(al8, bh0);
28154 mid = (mid + Math.imul(ah8, bl0)) | 0;
28155 hi = Math.imul(ah8, bh0);
28156 lo = (lo + Math.imul(al7, bl1)) | 0;
28157 mid = (mid + Math.imul(al7, bh1)) | 0;
28158 mid = (mid + Math.imul(ah7, bl1)) | 0;
28159 hi = (hi + Math.imul(ah7, bh1)) | 0;
28160 lo = (lo + Math.imul(al6, bl2)) | 0;
28161 mid = (mid + Math.imul(al6, bh2)) | 0;
28162 mid = (mid + Math.imul(ah6, bl2)) | 0;
28163 hi = (hi + Math.imul(ah6, bh2)) | 0;
28164 lo = (lo + Math.imul(al5, bl3)) | 0;
28165 mid = (mid + Math.imul(al5, bh3)) | 0;
28166 mid = (mid + Math.imul(ah5, bl3)) | 0;
28167 hi = (hi + Math.imul(ah5, bh3)) | 0;
28168 lo = (lo + Math.imul(al4, bl4)) | 0;
28169 mid = (mid + Math.imul(al4, bh4)) | 0;
28170 mid = (mid + Math.imul(ah4, bl4)) | 0;
28171 hi = (hi + Math.imul(ah4, bh4)) | 0;
28172 lo = (lo + Math.imul(al3, bl5)) | 0;
28173 mid = (mid + Math.imul(al3, bh5)) | 0;
28174 mid = (mid + Math.imul(ah3, bl5)) | 0;
28175 hi = (hi + Math.imul(ah3, bh5)) | 0;
28176 lo = (lo + Math.imul(al2, bl6)) | 0;
28177 mid = (mid + Math.imul(al2, bh6)) | 0;
28178 mid = (mid + Math.imul(ah2, bl6)) | 0;
28179 hi = (hi + Math.imul(ah2, bh6)) | 0;
28180 lo = (lo + Math.imul(al1, bl7)) | 0;
28181 mid = (mid + Math.imul(al1, bh7)) | 0;
28182 mid = (mid + Math.imul(ah1, bl7)) | 0;
28183 hi = (hi + Math.imul(ah1, bh7)) | 0;
28184 lo = (lo + Math.imul(al0, bl8)) | 0;
28185 mid = (mid + Math.imul(al0, bh8)) | 0;
28186 mid = (mid + Math.imul(ah0, bl8)) | 0;
28187 hi = (hi + Math.imul(ah0, bh8)) | 0;
28188 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28189 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
28190 w8 &= 0x3ffffff;
28191 /* k = 9 */
28192 lo = Math.imul(al9, bl0);
28193 mid = Math.imul(al9, bh0);
28194 mid = (mid + Math.imul(ah9, bl0)) | 0;
28195 hi = Math.imul(ah9, bh0);
28196 lo = (lo + Math.imul(al8, bl1)) | 0;
28197 mid = (mid + Math.imul(al8, bh1)) | 0;
28198 mid = (mid + Math.imul(ah8, bl1)) | 0;
28199 hi = (hi + Math.imul(ah8, bh1)) | 0;
28200 lo = (lo + Math.imul(al7, bl2)) | 0;
28201 mid = (mid + Math.imul(al7, bh2)) | 0;
28202 mid = (mid + Math.imul(ah7, bl2)) | 0;
28203 hi = (hi + Math.imul(ah7, bh2)) | 0;
28204 lo = (lo + Math.imul(al6, bl3)) | 0;
28205 mid = (mid + Math.imul(al6, bh3)) | 0;
28206 mid = (mid + Math.imul(ah6, bl3)) | 0;
28207 hi = (hi + Math.imul(ah6, bh3)) | 0;
28208 lo = (lo + Math.imul(al5, bl4)) | 0;
28209 mid = (mid + Math.imul(al5, bh4)) | 0;
28210 mid = (mid + Math.imul(ah5, bl4)) | 0;
28211 hi = (hi + Math.imul(ah5, bh4)) | 0;
28212 lo = (lo + Math.imul(al4, bl5)) | 0;
28213 mid = (mid + Math.imul(al4, bh5)) | 0;
28214 mid = (mid + Math.imul(ah4, bl5)) | 0;
28215 hi = (hi + Math.imul(ah4, bh5)) | 0;
28216 lo = (lo + Math.imul(al3, bl6)) | 0;
28217 mid = (mid + Math.imul(al3, bh6)) | 0;
28218 mid = (mid + Math.imul(ah3, bl6)) | 0;
28219 hi = (hi + Math.imul(ah3, bh6)) | 0;
28220 lo = (lo + Math.imul(al2, bl7)) | 0;
28221 mid = (mid + Math.imul(al2, bh7)) | 0;
28222 mid = (mid + Math.imul(ah2, bl7)) | 0;
28223 hi = (hi + Math.imul(ah2, bh7)) | 0;
28224 lo = (lo + Math.imul(al1, bl8)) | 0;
28225 mid = (mid + Math.imul(al1, bh8)) | 0;
28226 mid = (mid + Math.imul(ah1, bl8)) | 0;
28227 hi = (hi + Math.imul(ah1, bh8)) | 0;
28228 lo = (lo + Math.imul(al0, bl9)) | 0;
28229 mid = (mid + Math.imul(al0, bh9)) | 0;
28230 mid = (mid + Math.imul(ah0, bl9)) | 0;
28231 hi = (hi + Math.imul(ah0, bh9)) | 0;
28232 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28233 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
28234 w9 &= 0x3ffffff;
28235 /* k = 10 */
28236 lo = Math.imul(al9, bl1);
28237 mid = Math.imul(al9, bh1);
28238 mid = (mid + Math.imul(ah9, bl1)) | 0;
28239 hi = Math.imul(ah9, bh1);
28240 lo = (lo + Math.imul(al8, bl2)) | 0;
28241 mid = (mid + Math.imul(al8, bh2)) | 0;
28242 mid = (mid + Math.imul(ah8, bl2)) | 0;
28243 hi = (hi + Math.imul(ah8, bh2)) | 0;
28244 lo = (lo + Math.imul(al7, bl3)) | 0;
28245 mid = (mid + Math.imul(al7, bh3)) | 0;
28246 mid = (mid + Math.imul(ah7, bl3)) | 0;
28247 hi = (hi + Math.imul(ah7, bh3)) | 0;
28248 lo = (lo + Math.imul(al6, bl4)) | 0;
28249 mid = (mid + Math.imul(al6, bh4)) | 0;
28250 mid = (mid + Math.imul(ah6, bl4)) | 0;
28251 hi = (hi + Math.imul(ah6, bh4)) | 0;
28252 lo = (lo + Math.imul(al5, bl5)) | 0;
28253 mid = (mid + Math.imul(al5, bh5)) | 0;
28254 mid = (mid + Math.imul(ah5, bl5)) | 0;
28255 hi = (hi + Math.imul(ah5, bh5)) | 0;
28256 lo = (lo + Math.imul(al4, bl6)) | 0;
28257 mid = (mid + Math.imul(al4, bh6)) | 0;
28258 mid = (mid + Math.imul(ah4, bl6)) | 0;
28259 hi = (hi + Math.imul(ah4, bh6)) | 0;
28260 lo = (lo + Math.imul(al3, bl7)) | 0;
28261 mid = (mid + Math.imul(al3, bh7)) | 0;
28262 mid = (mid + Math.imul(ah3, bl7)) | 0;
28263 hi = (hi + Math.imul(ah3, bh7)) | 0;
28264 lo = (lo + Math.imul(al2, bl8)) | 0;
28265 mid = (mid + Math.imul(al2, bh8)) | 0;
28266 mid = (mid + Math.imul(ah2, bl8)) | 0;
28267 hi = (hi + Math.imul(ah2, bh8)) | 0;
28268 lo = (lo + Math.imul(al1, bl9)) | 0;
28269 mid = (mid + Math.imul(al1, bh9)) | 0;
28270 mid = (mid + Math.imul(ah1, bl9)) | 0;
28271 hi = (hi + Math.imul(ah1, bh9)) | 0;
28272 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28273 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
28274 w10 &= 0x3ffffff;
28275 /* k = 11 */
28276 lo = Math.imul(al9, bl2);
28277 mid = Math.imul(al9, bh2);
28278 mid = (mid + Math.imul(ah9, bl2)) | 0;
28279 hi = Math.imul(ah9, bh2);
28280 lo = (lo + Math.imul(al8, bl3)) | 0;
28281 mid = (mid + Math.imul(al8, bh3)) | 0;
28282 mid = (mid + Math.imul(ah8, bl3)) | 0;
28283 hi = (hi + Math.imul(ah8, bh3)) | 0;
28284 lo = (lo + Math.imul(al7, bl4)) | 0;
28285 mid = (mid + Math.imul(al7, bh4)) | 0;
28286 mid = (mid + Math.imul(ah7, bl4)) | 0;
28287 hi = (hi + Math.imul(ah7, bh4)) | 0;
28288 lo = (lo + Math.imul(al6, bl5)) | 0;
28289 mid = (mid + Math.imul(al6, bh5)) | 0;
28290 mid = (mid + Math.imul(ah6, bl5)) | 0;
28291 hi = (hi + Math.imul(ah6, bh5)) | 0;
28292 lo = (lo + Math.imul(al5, bl6)) | 0;
28293 mid = (mid + Math.imul(al5, bh6)) | 0;
28294 mid = (mid + Math.imul(ah5, bl6)) | 0;
28295 hi = (hi + Math.imul(ah5, bh6)) | 0;
28296 lo = (lo + Math.imul(al4, bl7)) | 0;
28297 mid = (mid + Math.imul(al4, bh7)) | 0;
28298 mid = (mid + Math.imul(ah4, bl7)) | 0;
28299 hi = (hi + Math.imul(ah4, bh7)) | 0;
28300 lo = (lo + Math.imul(al3, bl8)) | 0;
28301 mid = (mid + Math.imul(al3, bh8)) | 0;
28302 mid = (mid + Math.imul(ah3, bl8)) | 0;
28303 hi = (hi + Math.imul(ah3, bh8)) | 0;
28304 lo = (lo + Math.imul(al2, bl9)) | 0;
28305 mid = (mid + Math.imul(al2, bh9)) | 0;
28306 mid = (mid + Math.imul(ah2, bl9)) | 0;
28307 hi = (hi + Math.imul(ah2, bh9)) | 0;
28308 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28309 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
28310 w11 &= 0x3ffffff;
28311 /* k = 12 */
28312 lo = Math.imul(al9, bl3);
28313 mid = Math.imul(al9, bh3);
28314 mid = (mid + Math.imul(ah9, bl3)) | 0;
28315 hi = Math.imul(ah9, bh3);
28316 lo = (lo + Math.imul(al8, bl4)) | 0;
28317 mid = (mid + Math.imul(al8, bh4)) | 0;
28318 mid = (mid + Math.imul(ah8, bl4)) | 0;
28319 hi = (hi + Math.imul(ah8, bh4)) | 0;
28320 lo = (lo + Math.imul(al7, bl5)) | 0;
28321 mid = (mid + Math.imul(al7, bh5)) | 0;
28322 mid = (mid + Math.imul(ah7, bl5)) | 0;
28323 hi = (hi + Math.imul(ah7, bh5)) | 0;
28324 lo = (lo + Math.imul(al6, bl6)) | 0;
28325 mid = (mid + Math.imul(al6, bh6)) | 0;
28326 mid = (mid + Math.imul(ah6, bl6)) | 0;
28327 hi = (hi + Math.imul(ah6, bh6)) | 0;
28328 lo = (lo + Math.imul(al5, bl7)) | 0;
28329 mid = (mid + Math.imul(al5, bh7)) | 0;
28330 mid = (mid + Math.imul(ah5, bl7)) | 0;
28331 hi = (hi + Math.imul(ah5, bh7)) | 0;
28332 lo = (lo + Math.imul(al4, bl8)) | 0;
28333 mid = (mid + Math.imul(al4, bh8)) | 0;
28334 mid = (mid + Math.imul(ah4, bl8)) | 0;
28335 hi = (hi + Math.imul(ah4, bh8)) | 0;
28336 lo = (lo + Math.imul(al3, bl9)) | 0;
28337 mid = (mid + Math.imul(al3, bh9)) | 0;
28338 mid = (mid + Math.imul(ah3, bl9)) | 0;
28339 hi = (hi + Math.imul(ah3, bh9)) | 0;
28340 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28341 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
28342 w12 &= 0x3ffffff;
28343 /* k = 13 */
28344 lo = Math.imul(al9, bl4);
28345 mid = Math.imul(al9, bh4);
28346 mid = (mid + Math.imul(ah9, bl4)) | 0;
28347 hi = Math.imul(ah9, bh4);
28348 lo = (lo + Math.imul(al8, bl5)) | 0;
28349 mid = (mid + Math.imul(al8, bh5)) | 0;
28350 mid = (mid + Math.imul(ah8, bl5)) | 0;
28351 hi = (hi + Math.imul(ah8, bh5)) | 0;
28352 lo = (lo + Math.imul(al7, bl6)) | 0;
28353 mid = (mid + Math.imul(al7, bh6)) | 0;
28354 mid = (mid + Math.imul(ah7, bl6)) | 0;
28355 hi = (hi + Math.imul(ah7, bh6)) | 0;
28356 lo = (lo + Math.imul(al6, bl7)) | 0;
28357 mid = (mid + Math.imul(al6, bh7)) | 0;
28358 mid = (mid + Math.imul(ah6, bl7)) | 0;
28359 hi = (hi + Math.imul(ah6, bh7)) | 0;
28360 lo = (lo + Math.imul(al5, bl8)) | 0;
28361 mid = (mid + Math.imul(al5, bh8)) | 0;
28362 mid = (mid + Math.imul(ah5, bl8)) | 0;
28363 hi = (hi + Math.imul(ah5, bh8)) | 0;
28364 lo = (lo + Math.imul(al4, bl9)) | 0;
28365 mid = (mid + Math.imul(al4, bh9)) | 0;
28366 mid = (mid + Math.imul(ah4, bl9)) | 0;
28367 hi = (hi + Math.imul(ah4, bh9)) | 0;
28368 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28369 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
28370 w13 &= 0x3ffffff;
28371 /* k = 14 */
28372 lo = Math.imul(al9, bl5);
28373 mid = Math.imul(al9, bh5);
28374 mid = (mid + Math.imul(ah9, bl5)) | 0;
28375 hi = Math.imul(ah9, bh5);
28376 lo = (lo + Math.imul(al8, bl6)) | 0;
28377 mid = (mid + Math.imul(al8, bh6)) | 0;
28378 mid = (mid + Math.imul(ah8, bl6)) | 0;
28379 hi = (hi + Math.imul(ah8, bh6)) | 0;
28380 lo = (lo + Math.imul(al7, bl7)) | 0;
28381 mid = (mid + Math.imul(al7, bh7)) | 0;
28382 mid = (mid + Math.imul(ah7, bl7)) | 0;
28383 hi = (hi + Math.imul(ah7, bh7)) | 0;
28384 lo = (lo + Math.imul(al6, bl8)) | 0;
28385 mid = (mid + Math.imul(al6, bh8)) | 0;
28386 mid = (mid + Math.imul(ah6, bl8)) | 0;
28387 hi = (hi + Math.imul(ah6, bh8)) | 0;
28388 lo = (lo + Math.imul(al5, bl9)) | 0;
28389 mid = (mid + Math.imul(al5, bh9)) | 0;
28390 mid = (mid + Math.imul(ah5, bl9)) | 0;
28391 hi = (hi + Math.imul(ah5, bh9)) | 0;
28392 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28393 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
28394 w14 &= 0x3ffffff;
28395 /* k = 15 */
28396 lo = Math.imul(al9, bl6);
28397 mid = Math.imul(al9, bh6);
28398 mid = (mid + Math.imul(ah9, bl6)) | 0;
28399 hi = Math.imul(ah9, bh6);
28400 lo = (lo + Math.imul(al8, bl7)) | 0;
28401 mid = (mid + Math.imul(al8, bh7)) | 0;
28402 mid = (mid + Math.imul(ah8, bl7)) | 0;
28403 hi = (hi + Math.imul(ah8, bh7)) | 0;
28404 lo = (lo + Math.imul(al7, bl8)) | 0;
28405 mid = (mid + Math.imul(al7, bh8)) | 0;
28406 mid = (mid + Math.imul(ah7, bl8)) | 0;
28407 hi = (hi + Math.imul(ah7, bh8)) | 0;
28408 lo = (lo + Math.imul(al6, bl9)) | 0;
28409 mid = (mid + Math.imul(al6, bh9)) | 0;
28410 mid = (mid + Math.imul(ah6, bl9)) | 0;
28411 hi = (hi + Math.imul(ah6, bh9)) | 0;
28412 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28413 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
28414 w15 &= 0x3ffffff;
28415 /* k = 16 */
28416 lo = Math.imul(al9, bl7);
28417 mid = Math.imul(al9, bh7);
28418 mid = (mid + Math.imul(ah9, bl7)) | 0;
28419 hi = Math.imul(ah9, bh7);
28420 lo = (lo + Math.imul(al8, bl8)) | 0;
28421 mid = (mid + Math.imul(al8, bh8)) | 0;
28422 mid = (mid + Math.imul(ah8, bl8)) | 0;
28423 hi = (hi + Math.imul(ah8, bh8)) | 0;
28424 lo = (lo + Math.imul(al7, bl9)) | 0;
28425 mid = (mid + Math.imul(al7, bh9)) | 0;
28426 mid = (mid + Math.imul(ah7, bl9)) | 0;
28427 hi = (hi + Math.imul(ah7, bh9)) | 0;
28428 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28429 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
28430 w16 &= 0x3ffffff;
28431 /* k = 17 */
28432 lo = Math.imul(al9, bl8);
28433 mid = Math.imul(al9, bh8);
28434 mid = (mid + Math.imul(ah9, bl8)) | 0;
28435 hi = Math.imul(ah9, bh8);
28436 lo = (lo + Math.imul(al8, bl9)) | 0;
28437 mid = (mid + Math.imul(al8, bh9)) | 0;
28438 mid = (mid + Math.imul(ah8, bl9)) | 0;
28439 hi = (hi + Math.imul(ah8, bh9)) | 0;
28440 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28441 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
28442 w17 &= 0x3ffffff;
28443 /* k = 18 */
28444 lo = Math.imul(al9, bl9);
28445 mid = Math.imul(al9, bh9);
28446 mid = (mid + Math.imul(ah9, bl9)) | 0;
28447 hi = Math.imul(ah9, bh9);
28448 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28449 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
28450 w18 &= 0x3ffffff;
28451 o[0] = w0;
28452 o[1] = w1;
28453 o[2] = w2;
28454 o[3] = w3;
28455 o[4] = w4;
28456 o[5] = w5;
28457 o[6] = w6;
28458 o[7] = w7;
28459 o[8] = w8;
28460 o[9] = w9;
28461 o[10] = w10;
28462 o[11] = w11;
28463 o[12] = w12;
28464 o[13] = w13;
28465 o[14] = w14;
28466 o[15] = w15;
28467 o[16] = w16;
28468 o[17] = w17;
28469 o[18] = w18;
28470 if (c !== 0) {
28471 o[19] = c;
28472 out.length++;
ab78acc6 28473 }
8b095871
IC
28474 return out;
28475 };
28476
28477 // Polyfill comb
28478 if (!Math.imul) {
28479 comb10MulTo = smallMulTo;
28480 }
28481
28482 function bigMulTo (self, num, out) {
28483 out.negative = num.negative ^ self.negative;
28484 out.length = self.length + num.length;
28485
28486 var carry = 0;
28487 var hncarry = 0;
28488 for (var k = 0; k < out.length - 1; k++) {
28489 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
28490 // note that ncarry could be >= 0x3ffffff
28491 var ncarry = hncarry;
28492 hncarry = 0;
28493 var rword = carry & 0x3ffffff;
28494 var maxJ = Math.min(k, num.length - 1);
28495 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
28496 var i = k - j;
28497 var a = self.words[i] | 0;
28498 var b = num.words[j] | 0;
28499 var r = a * b;
28500
28501 var lo = r & 0x3ffffff;
28502 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
28503 lo = (lo + rword) | 0;
28504 rword = lo & 0x3ffffff;
28505 ncarry = (ncarry + (lo >>> 26)) | 0;
28506
28507 hncarry += ncarry >>> 26;
28508 ncarry &= 0x3ffffff;
28509 }
28510 out.words[k] = rword;
28511 carry = ncarry;
28512 ncarry = hncarry;
28513 }
28514 if (carry !== 0) {
28515 out.words[k] = carry;
28516 } else {
28517 out.length--;
ab78acc6 28518 }
8b095871
IC
28519
28520 return out.strip();
ab78acc6 28521 }
8b095871
IC
28522
28523 function jumboMulTo (self, num, out) {
28524 var fftm = new FFTM();
28525 return fftm.mulp(self, num, out);
ab78acc6 28526 }
8b095871
IC
28527
28528 BN.prototype.mulTo = function mulTo (num, out) {
28529 var res;
28530 var len = this.length + num.length;
28531 if (this.length === 10 && num.length === 10) {
28532 res = comb10MulTo(this, num, out);
28533 } else if (len < 63) {
28534 res = smallMulTo(this, num, out);
28535 } else if (len < 1024) {
28536 res = bigMulTo(this, num, out);
ab78acc6 28537 } else {
8b095871 28538 res = jumboMulTo(this, num, out);
ab78acc6 28539 }
8b095871
IC
28540
28541 return res;
28542 };
28543
28544 // Cooley-Tukey algorithm for FFT
28545 // slightly revisited to rely on looping instead of recursion
28546
28547 function FFTM (x, y) {
28548 this.x = x;
28549 this.y = y;
ab78acc6 28550 }
8b095871
IC
28551
28552 FFTM.prototype.makeRBT = function makeRBT (N) {
28553 var t = new Array(N);
28554 var l = BN.prototype._countBits(N) - 1;
28555 for (var i = 0; i < N; i++) {
28556 t[i] = this.revBin(i, l, N);
28557 }
28558
28559 return t;
28560 };
28561
28562 // Returns binary-reversed representation of `x`
28563 FFTM.prototype.revBin = function revBin (x, l, N) {
28564 if (x === 0 || x === N - 1) return x;
28565
28566 var rb = 0;
28567 for (var i = 0; i < l; i++) {
28568 rb |= (x & 1) << (l - i - 1);
28569 x >>= 1;
28570 }
28571
28572 return rb;
28573 };
28574
28575 // Performs "tweedling" phase, therefore 'emulating'
28576 // behaviour of the recursive algorithm
28577 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
28578 for (var i = 0; i < N; i++) {
28579 rtws[i] = rws[rbt[i]];
28580 itws[i] = iws[rbt[i]];
28581 }
28582 };
28583
28584 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
28585 this.permute(rbt, rws, iws, rtws, itws, N);
28586
28587 for (var s = 1; s < N; s <<= 1) {
28588 var l = s << 1;
28589
28590 var rtwdf = Math.cos(2 * Math.PI / l);
28591 var itwdf = Math.sin(2 * Math.PI / l);
28592
28593 for (var p = 0; p < N; p += l) {
28594 var rtwdf_ = rtwdf;
28595 var itwdf_ = itwdf;
28596
28597 for (var j = 0; j < s; j++) {
28598 var re = rtws[p + j];
28599 var ie = itws[p + j];
28600
28601 var ro = rtws[p + j + s];
28602 var io = itws[p + j + s];
28603
28604 var rx = rtwdf_ * ro - itwdf_ * io;
28605
28606 io = rtwdf_ * io + itwdf_ * ro;
28607 ro = rx;
28608
28609 rtws[p + j] = re + ro;
28610 itws[p + j] = ie + io;
28611
28612 rtws[p + j + s] = re - ro;
28613 itws[p + j + s] = ie - io;
28614
28615 /* jshint maxdepth : false */
28616 if (j !== l) {
28617 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
28618
28619 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
28620 rtwdf_ = rx;
28621 }
28622 }
28623 }
ab78acc6 28624 }
8b095871
IC
28625 };
28626
28627 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
28628 var N = Math.max(m, n) | 1;
28629 var odd = N & 1;
28630 var i = 0;
28631 for (N = N / 2 | 0; N; N = N >>> 1) {
28632 i++;
ab78acc6 28633 }
ebd8d4e8 28634
8b095871
IC
28635 return 1 << i + 1 + odd;
28636 };
ebd8d4e8 28637
8b095871
IC
28638 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
28639 if (N <= 1) return;
ebd8d4e8 28640
8b095871
IC
28641 for (var i = 0; i < N / 2; i++) {
28642 var t = rws[i];
ebd8d4e8 28643
8b095871
IC
28644 rws[i] = rws[N - i - 1];
28645 rws[N - i - 1] = t;
ebd8d4e8 28646
8b095871 28647 t = iws[i];
ebd8d4e8 28648
8b095871
IC
28649 iws[i] = -iws[N - i - 1];
28650 iws[N - i - 1] = -t;
28651 }
28652 };
ebd8d4e8 28653
8b095871
IC
28654 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
28655 var carry = 0;
28656 for (var i = 0; i < N / 2; i++) {
28657 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
28658 Math.round(ws[2 * i] / N) +
28659 carry;
ebd8d4e8 28660
8b095871 28661 ws[i] = w & 0x3ffffff;
ebd8d4e8 28662
8b095871
IC
28663 if (w < 0x4000000) {
28664 carry = 0;
28665 } else {
28666 carry = w / 0x4000000 | 0;
28667 }
28668 }
ebd8d4e8 28669
8b095871
IC
28670 return ws;
28671 };
ebd8d4e8 28672
8b095871
IC
28673 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
28674 var carry = 0;
28675 for (var i = 0; i < len; i++) {
28676 carry = carry + (ws[i] | 0);
ebd8d4e8 28677
8b095871
IC
28678 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
28679 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
28680 }
ebd8d4e8 28681
8b095871
IC
28682 // Pad with zeroes
28683 for (i = 2 * len; i < N; ++i) {
28684 rws[i] = 0;
28685 }
ebd8d4e8 28686
8b095871
IC
28687 assert(carry === 0);
28688 assert((carry & ~0x1fff) === 0);
28689 };
ebd8d4e8 28690
8b095871
IC
28691 FFTM.prototype.stub = function stub (N) {
28692 var ph = new Array(N);
28693 for (var i = 0; i < N; i++) {
28694 ph[i] = 0;
28695 }
ebd8d4e8 28696
8b095871
IC
28697 return ph;
28698 };
ebd8d4e8 28699
8b095871
IC
28700 FFTM.prototype.mulp = function mulp (x, y, out) {
28701 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 28702
8b095871 28703 var rbt = this.makeRBT(N);
ebd8d4e8 28704
8b095871 28705 var _ = this.stub(N);
ebd8d4e8 28706
8b095871
IC
28707 var rws = new Array(N);
28708 var rwst = new Array(N);
28709 var iwst = new Array(N);
ebd8d4e8 28710
8b095871
IC
28711 var nrws = new Array(N);
28712 var nrwst = new Array(N);
28713 var niwst = new Array(N);
ebd8d4e8 28714
8b095871
IC
28715 var rmws = out.words;
28716 rmws.length = N;
ebd8d4e8 28717
8b095871
IC
28718 this.convert13b(x.words, x.length, rws, N);
28719 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 28720
8b095871
IC
28721 this.transform(rws, _, rwst, iwst, N, rbt);
28722 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 28723
8b095871
IC
28724 for (var i = 0; i < N; i++) {
28725 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
28726 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
28727 rwst[i] = rx;
28728 }
ebd8d4e8 28729
8b095871
IC
28730 this.conjugate(rwst, iwst, N);
28731 this.transform(rwst, iwst, rmws, _, N, rbt);
28732 this.conjugate(rmws, _, N);
28733 this.normalize13b(rmws, N);
ebd8d4e8 28734
8b095871
IC
28735 out.negative = x.negative ^ y.negative;
28736 out.length = x.length + y.length;
28737 return out.strip();
28738 };
ebd8d4e8 28739
8b095871
IC
28740 // Multiply `this` by `num`
28741 BN.prototype.mul = function mul (num) {
28742 var out = new BN(null);
28743 out.words = new Array(this.length + num.length);
28744 return this.mulTo(num, out);
28745 };
ab78acc6 28746
8b095871
IC
28747 // Multiply employing FFT
28748 BN.prototype.mulf = function mulf (num) {
28749 var out = new BN(null);
28750 out.words = new Array(this.length + num.length);
28751 return jumboMulTo(this, num, out);
28752 };
ebd8d4e8 28753
8b095871
IC
28754 // In-place Multiplication
28755 BN.prototype.imul = function imul (num) {
28756 return this.clone().mulTo(num, this);
28757 };
ab78acc6 28758
8b095871
IC
28759 BN.prototype.imuln = function imuln (num) {
28760 assert(typeof num === 'number');
28761 assert(num < 0x4000000);
ab78acc6 28762
8b095871
IC
28763 // Carry
28764 var carry = 0;
28765 for (var i = 0; i < this.length; i++) {
28766 var w = (this.words[i] | 0) * num;
28767 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
28768 carry >>= 26;
28769 carry += (w / 0x4000000) | 0;
28770 // NOTE: lo is 27bit maximum
28771 carry += lo >>> 26;
28772 this.words[i] = lo & 0x3ffffff;
28773 }
ab78acc6 28774
8b095871
IC
28775 if (carry !== 0) {
28776 this.words[i] = carry;
28777 this.length++;
28778 }
ab78acc6 28779
8b095871
IC
28780 return this;
28781 };
ab78acc6 28782
8b095871
IC
28783 BN.prototype.muln = function muln (num) {
28784 return this.clone().imuln(num);
28785 };
ebd8d4e8 28786
8b095871
IC
28787 // `this` * `this`
28788 BN.prototype.sqr = function sqr () {
28789 return this.mul(this);
28790 };
ebd8d4e8 28791
8b095871
IC
28792 // `this` * `this` in-place
28793 BN.prototype.isqr = function isqr () {
28794 return this.imul(this.clone());
28795 };
ab78acc6 28796
8b095871
IC
28797 // Math.pow(`this`, `num`)
28798 BN.prototype.pow = function pow (num) {
28799 var w = toBitArray(num);
28800 if (w.length === 0) return new BN(1);
ab78acc6 28801
8b095871
IC
28802 // Skip leading zeroes
28803 var res = this;
28804 for (var i = 0; i < w.length; i++, res = res.sqr()) {
28805 if (w[i] !== 0) break;
28806 }
ebd8d4e8 28807
8b095871
IC
28808 if (++i < w.length) {
28809 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
28810 if (w[i] === 0) continue;
ebd8d4e8 28811
8b095871
IC
28812 res = res.mul(q);
28813 }
ab78acc6
IC
28814 }
28815
8b095871
IC
28816 return res;
28817 };
ab78acc6 28818
8b095871
IC
28819 // Shift-left in-place
28820 BN.prototype.iushln = function iushln (bits) {
28821 assert(typeof bits === 'number' && bits >= 0);
28822 var r = bits % 26;
28823 var s = (bits - r) / 26;
28824 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
28825 var i;
28826
28827 if (r !== 0) {
28828 var carry = 0;
28829
28830 for (i = 0; i < this.length; i++) {
28831 var newCarry = this.words[i] & carryMask;
28832 var c = ((this.words[i] | 0) - newCarry) << r;
28833 this.words[i] = c | carry;
28834 carry = newCarry >>> (26 - r);
28835 }
28836
28837 if (carry) {
28838 this.words[i] = carry;
28839 this.length++;
28840 }
ab78acc6 28841 }
ebd8d4e8 28842
8b095871
IC
28843 if (s !== 0) {
28844 for (i = this.length - 1; i >= 0; i--) {
28845 this.words[i + s] = this.words[i];
28846 }
ebd8d4e8 28847
8b095871
IC
28848 for (i = 0; i < s; i++) {
28849 this.words[i] = 0;
28850 }
ebd8d4e8 28851
8b095871
IC
28852 this.length += s;
28853 }
ebd8d4e8 28854
8b095871
IC
28855 return this.strip();
28856 };
ebd8d4e8 28857
8b095871
IC
28858 BN.prototype.ishln = function ishln (bits) {
28859 // TODO(indutny): implement me
28860 assert(this.negative === 0);
28861 return this.iushln(bits);
28862 };
ebd8d4e8 28863
8b095871
IC
28864 // Shift-right in-place
28865 // NOTE: `hint` is a lowest bit before trailing zeroes
28866 // NOTE: if `extended` is present - it will be filled with destroyed bits
28867 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
28868 assert(typeof bits === 'number' && bits >= 0);
28869 var h;
28870 if (hint) {
28871 h = (hint - (hint % 26)) / 26;
28872 } else {
28873 h = 0;
28874 }
ebd8d4e8 28875
8b095871
IC
28876 var r = bits % 26;
28877 var s = Math.min((bits - r) / 26, this.length);
28878 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
28879 var maskedWords = extended;
28880
28881 h -= s;
28882 h = Math.max(0, h);
28883
28884 // Extended mode, copy masked part
28885 if (maskedWords) {
28886 for (var i = 0; i < s; i++) {
28887 maskedWords.words[i] = this.words[i];
28888 }
28889 maskedWords.length = s;
ab78acc6 28890 }
ebd8d4e8 28891
8b095871
IC
28892 if (s === 0) {
28893 // No-op, we should not move anything at all
28894 } else if (this.length > s) {
28895 this.length -= s;
28896 for (i = 0; i < this.length; i++) {
28897 this.words[i] = this.words[i + s];
28898 }
28899 } else {
28900 this.words[0] = 0;
28901 this.length = 1;
28902 }
ab78acc6 28903
8b095871
IC
28904 var carry = 0;
28905 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
28906 var word = this.words[i] | 0;
28907 this.words[i] = (carry << (26 - r)) | (word >>> r);
28908 carry = word & mask;
ab78acc6 28909 }
ebd8d4e8 28910
8b095871
IC
28911 // Push carried bits as a mask
28912 if (maskedWords && carry !== 0) {
28913 maskedWords.words[maskedWords.length++] = carry;
28914 }
28915
28916 if (this.length === 0) {
28917 this.words[0] = 0;
28918 this.length = 1;
28919 }
28920
28921 return this.strip();
28922 };
28923
28924 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
28925 // TODO(indutny): implement me
28926 assert(this.negative === 0);
28927 return this.iushrn(bits, hint, extended);
28928 };
28929
28930 // Shift-left
28931 BN.prototype.shln = function shln (bits) {
28932 return this.clone().ishln(bits);
28933 };
28934
28935 BN.prototype.ushln = function ushln (bits) {
28936 return this.clone().iushln(bits);
28937 };
28938
28939 // Shift-right
28940 BN.prototype.shrn = function shrn (bits) {
28941 return this.clone().ishrn(bits);
28942 };
ebd8d4e8 28943
8b095871
IC
28944 BN.prototype.ushrn = function ushrn (bits) {
28945 return this.clone().iushrn(bits);
28946 };
ebd8d4e8 28947
8b095871
IC
28948 // Test if n bit is set
28949 BN.prototype.testn = function testn (bit) {
28950 assert(typeof bit === 'number' && bit >= 0);
28951 var r = bit % 26;
28952 var s = (bit - r) / 26;
28953 var q = 1 << r;
ebd8d4e8 28954
8b095871
IC
28955 // Fast case: bit is much higher than all existing words
28956 if (this.length <= s) return false;
ab78acc6 28957
8b095871
IC
28958 // Check bit and return
28959 var w = this.words[s];
ab78acc6 28960
8b095871
IC
28961 return !!(w & q);
28962 };
ab78acc6 28963
8b095871
IC
28964 // Return only lowers bits of number (in-place)
28965 BN.prototype.imaskn = function imaskn (bits) {
28966 assert(typeof bits === 'number' && bits >= 0);
28967 var r = bits % 26;
28968 var s = (bits - r) / 26;
ab78acc6 28969
8b095871 28970 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 28971
8b095871
IC
28972 if (this.length <= s) {
28973 return this;
28974 }
ab78acc6 28975
8b095871
IC
28976 if (r !== 0) {
28977 s++;
28978 }
28979 this.length = Math.min(s, this.length);
ab78acc6 28980
8b095871
IC
28981 if (r !== 0) {
28982 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
28983 this.words[this.length - 1] &= mask;
28984 }
ab78acc6 28985
8b095871
IC
28986 return this.strip();
28987 };
ab78acc6 28988
8b095871
IC
28989 // Return only lowers bits of number
28990 BN.prototype.maskn = function maskn (bits) {
28991 return this.clone().imaskn(bits);
28992 };
ebd8d4e8 28993
8b095871
IC
28994 // Add plain number `num` to `this`
28995 BN.prototype.iaddn = function iaddn (num) {
28996 assert(typeof num === 'number');
28997 assert(num < 0x4000000);
28998 if (num < 0) return this.isubn(-num);
28999
29000 // Possible sign change
29001 if (this.negative !== 0) {
29002 if (this.length === 1 && (this.words[0] | 0) < num) {
29003 this.words[0] = num - (this.words[0] | 0);
29004 this.negative = 0;
29005 return this;
29006 }
ebd8d4e8 29007
8b095871
IC
29008 this.negative = 0;
29009 this.isubn(num);
29010 this.negative = 1;
29011 return this;
29012 }
ebd8d4e8 29013
8b095871
IC
29014 // Add without checks
29015 return this._iaddn(num);
29016 };
ebd8d4e8 29017
8b095871
IC
29018 BN.prototype._iaddn = function _iaddn (num) {
29019 this.words[0] += num;
ebd8d4e8 29020
8b095871
IC
29021 // Carry
29022 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
29023 this.words[i] -= 0x4000000;
29024 if (i === this.length - 1) {
29025 this.words[i + 1] = 1;
29026 } else {
29027 this.words[i + 1]++;
29028 }
29029 }
29030 this.length = Math.max(this.length, i + 1);
ebd8d4e8 29031
8b095871
IC
29032 return this;
29033 };
ebd8d4e8 29034
8b095871
IC
29035 // Subtract plain number `num` from `this`
29036 BN.prototype.isubn = function isubn (num) {
29037 assert(typeof num === 'number');
29038 assert(num < 0x4000000);
29039 if (num < 0) return this.iaddn(-num);
ebd8d4e8 29040
8b095871
IC
29041 if (this.negative !== 0) {
29042 this.negative = 0;
29043 this.iaddn(num);
29044 this.negative = 1;
29045 return this;
29046 }
ebd8d4e8 29047
8b095871 29048 this.words[0] -= num;
ab78acc6 29049
8b095871
IC
29050 if (this.length === 1 && this.words[0] < 0) {
29051 this.words[0] = -this.words[0];
29052 this.negative = 1;
29053 } else {
29054 // Carry
29055 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
29056 this.words[i] += 0x4000000;
29057 this.words[i + 1] -= 1;
29058 }
29059 }
ebd8d4e8 29060
8b095871
IC
29061 return this.strip();
29062 };
ab78acc6 29063
8b095871
IC
29064 BN.prototype.addn = function addn (num) {
29065 return this.clone().iaddn(num);
29066 };
ab78acc6 29067
8b095871
IC
29068 BN.prototype.subn = function subn (num) {
29069 return this.clone().isubn(num);
29070 };
ab78acc6 29071
8b095871
IC
29072 BN.prototype.iabs = function iabs () {
29073 this.negative = 0;
ab78acc6 29074
8b095871
IC
29075 return this;
29076 };
ab78acc6 29077
8b095871
IC
29078 BN.prototype.abs = function abs () {
29079 return this.clone().iabs();
29080 };
ab78acc6 29081
8b095871
IC
29082 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
29083 var len = num.length + shift;
29084 var i;
ab78acc6 29085
8b095871 29086 this._expand(len);
ab78acc6 29087
8b095871
IC
29088 var w;
29089 var carry = 0;
29090 for (i = 0; i < num.length; i++) {
29091 w = (this.words[i + shift] | 0) + carry;
29092 var right = (num.words[i] | 0) * mul;
29093 w -= right & 0x3ffffff;
29094 carry = (w >> 26) - ((right / 0x4000000) | 0);
29095 this.words[i + shift] = w & 0x3ffffff;
29096 }
29097 for (; i < this.length - shift; i++) {
29098 w = (this.words[i + shift] | 0) + carry;
29099 carry = w >> 26;
29100 this.words[i + shift] = w & 0x3ffffff;
29101 }
ebd8d4e8 29102
8b095871 29103 if (carry === 0) return this.strip();
ab78acc6 29104
8b095871
IC
29105 // Subtraction overflow
29106 assert(carry === -1);
29107 carry = 0;
29108 for (i = 0; i < this.length; i++) {
29109 w = -(this.words[i] | 0) + carry;
29110 carry = w >> 26;
29111 this.words[i] = w & 0x3ffffff;
29112 }
29113 this.negative = 1;
ab78acc6 29114
8b095871
IC
29115 return this.strip();
29116 };
ab78acc6 29117
8b095871
IC
29118 BN.prototype._wordDiv = function _wordDiv (num, mode) {
29119 var shift = this.length - num.length;
ebd8d4e8 29120
8b095871
IC
29121 var a = this.clone();
29122 var b = num;
ab78acc6 29123
8b095871
IC
29124 // Normalize
29125 var bhi = b.words[b.length - 1] | 0;
29126 var bhiBits = this._countBits(bhi);
29127 shift = 26 - bhiBits;
29128 if (shift !== 0) {
29129 b = b.ushln(shift);
29130 a.iushln(shift);
29131 bhi = b.words[b.length - 1] | 0;
29132 }
ebd8d4e8 29133
8b095871
IC
29134 // Initialize quotient
29135 var m = a.length - b.length;
29136 var q;
ab78acc6 29137
8b095871
IC
29138 if (mode !== 'mod') {
29139 q = new BN(null);
29140 q.length = m + 1;
29141 q.words = new Array(q.length);
29142 for (var i = 0; i < q.length; i++) {
29143 q.words[i] = 0;
29144 }
29145 }
ebd8d4e8 29146
8b095871
IC
29147 var diff = a.clone()._ishlnsubmul(b, 1, m);
29148 if (diff.negative === 0) {
29149 a = diff;
29150 if (q) {
29151 q.words[m] = 1;
29152 }
29153 }
ebd8d4e8 29154
8b095871
IC
29155 for (var j = m - 1; j >= 0; j--) {
29156 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
29157 (a.words[b.length + j - 1] | 0);
ebd8d4e8 29158
8b095871
IC
29159 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
29160 // (0x7ffffff)
29161 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 29162
8b095871
IC
29163 a._ishlnsubmul(b, qj, j);
29164 while (a.negative !== 0) {
29165 qj--;
29166 a.negative = 0;
29167 a._ishlnsubmul(b, 1, j);
29168 if (!a.isZero()) {
29169 a.negative ^= 1;
29170 }
29171 }
29172 if (q) {
29173 q.words[j] = qj;
29174 }
29175 }
29176 if (q) {
29177 q.strip();
29178 }
29179 a.strip();
ebd8d4e8 29180
8b095871
IC
29181 // Denormalize
29182 if (mode !== 'div' && shift !== 0) {
29183 a.iushrn(shift);
29184 }
ebd8d4e8 29185
8b095871
IC
29186 return {
29187 div: q || null,
29188 mod: a
29189 };
29190 };
ebd8d4e8 29191
8b095871
IC
29192 // NOTE: 1) `mode` can be set to `mod` to request mod only,
29193 // to `div` to request div only, or be absent to
29194 // request both div & mod
29195 // 2) `positive` is true if unsigned mod is requested
29196 BN.prototype.divmod = function divmod (num, mode, positive) {
29197 assert(!num.isZero());
29198
29199 if (this.isZero()) {
29200 return {
29201 div: new BN(0),
29202 mod: new BN(0)
29203 };
29204 }
ebd8d4e8 29205
8b095871
IC
29206 var div, mod, res;
29207 if (this.negative !== 0 && num.negative === 0) {
29208 res = this.neg().divmod(num, mode);
ebd8d4e8 29209
8b095871
IC
29210 if (mode !== 'mod') {
29211 div = res.div.neg();
29212 }
ebd8d4e8 29213
8b095871
IC
29214 if (mode !== 'div') {
29215 mod = res.mod.neg();
29216 if (positive && mod.negative !== 0) {
29217 mod.iadd(num);
29218 }
29219 }
ebd8d4e8 29220
8b095871
IC
29221 return {
29222 div: div,
29223 mod: mod
29224 };
29225 }
ebd8d4e8 29226
8b095871
IC
29227 if (this.negative === 0 && num.negative !== 0) {
29228 res = this.divmod(num.neg(), mode);
ebd8d4e8 29229
8b095871
IC
29230 if (mode !== 'mod') {
29231 div = res.div.neg();
29232 }
ebd8d4e8 29233
8b095871
IC
29234 return {
29235 div: div,
29236 mod: res.mod
29237 };
29238 }
ebd8d4e8 29239
8b095871
IC
29240 if ((this.negative & num.negative) !== 0) {
29241 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 29242
8b095871
IC
29243 if (mode !== 'div') {
29244 mod = res.mod.neg();
29245 if (positive && mod.negative !== 0) {
29246 mod.isub(num);
29247 }
29248 }
ebd8d4e8 29249
8b095871
IC
29250 return {
29251 div: res.div,
29252 mod: mod
29253 };
29254 }
ebd8d4e8 29255
8b095871 29256 // Both numbers are positive at this point
ebd8d4e8 29257
8b095871
IC
29258 // Strip both numbers to approximate shift value
29259 if (num.length > this.length || this.cmp(num) < 0) {
29260 return {
29261 div: new BN(0),
29262 mod: this
29263 };
29264 }
ebd8d4e8 29265
8b095871
IC
29266 // Very short reduction
29267 if (num.length === 1) {
29268 if (mode === 'div') {
29269 return {
29270 div: this.divn(num.words[0]),
29271 mod: null
29272 };
29273 }
ebd8d4e8 29274
8b095871
IC
29275 if (mode === 'mod') {
29276 return {
29277 div: null,
29278 mod: new BN(this.modn(num.words[0]))
29279 };
29280 }
ebd8d4e8 29281
8b095871
IC
29282 return {
29283 div: this.divn(num.words[0]),
29284 mod: new BN(this.modn(num.words[0]))
29285 };
29286 }
ebd8d4e8 29287
8b095871
IC
29288 return this._wordDiv(num, mode);
29289 };
ab78acc6 29290
8b095871
IC
29291 // Find `this` / `num`
29292 BN.prototype.div = function div (num) {
29293 return this.divmod(num, 'div', false).div;
29294 };
ab78acc6 29295
8b095871
IC
29296 // Find `this` % `num`
29297 BN.prototype.mod = function mod (num) {
29298 return this.divmod(num, 'mod', false).mod;
29299 };
ab78acc6 29300
8b095871
IC
29301 BN.prototype.umod = function umod (num) {
29302 return this.divmod(num, 'mod', true).mod;
29303 };
ebd8d4e8 29304
8b095871
IC
29305 // Find Round(`this` / `num`)
29306 BN.prototype.divRound = function divRound (num) {
29307 var dm = this.divmod(num);
ebd8d4e8 29308
8b095871
IC
29309 // Fast case - exact division
29310 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 29311
8b095871 29312 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 29313
8b095871
IC
29314 var half = num.ushrn(1);
29315 var r2 = num.andln(1);
29316 var cmp = mod.cmp(half);
ebd8d4e8 29317
8b095871
IC
29318 // Round down
29319 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 29320
8b095871
IC
29321 // Round up
29322 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
29323 };
ab78acc6 29324
8b095871
IC
29325 BN.prototype.modn = function modn (num) {
29326 assert(num <= 0x3ffffff);
29327 var p = (1 << 26) % num;
ab78acc6 29328
8b095871
IC
29329 var acc = 0;
29330 for (var i = this.length - 1; i >= 0; i--) {
29331 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 29332 }
ab78acc6 29333
8b095871
IC
29334 return acc;
29335 };
29336
29337 // In-place division by number
29338 BN.prototype.idivn = function idivn (num) {
29339 assert(num <= 0x3ffffff);
29340
29341 var carry = 0;
29342 for (var i = this.length - 1; i >= 0; i--) {
29343 var w = (this.words[i] | 0) + carry * 0x4000000;
29344 this.words[i] = (w / num) | 0;
29345 carry = w % num;
ebd8d4e8 29346 }
ebd8d4e8 29347
8b095871
IC
29348 return this.strip();
29349 };
ab78acc6 29350
8b095871
IC
29351 BN.prototype.divn = function divn (num) {
29352 return this.clone().idivn(num);
29353 };
ebd8d4e8 29354
8b095871
IC
29355 BN.prototype.egcd = function egcd (p) {
29356 assert(p.negative === 0);
29357 assert(!p.isZero());
ebd8d4e8 29358
8b095871
IC
29359 var x = this;
29360 var y = p.clone();
29361
29362 if (x.negative !== 0) {
29363 x = x.umod(p);
29364 } else {
29365 x = x.clone();
29366 }
29367
29368 // A * x + B * y = x
29369 var A = new BN(1);
29370 var B = new BN(0);
29371
29372 // C * x + D * y = y
29373 var C = new BN(0);
29374 var D = new BN(1);
29375
29376 var g = 0;
29377
29378 while (x.isEven() && y.isEven()) {
29379 x.iushrn(1);
29380 y.iushrn(1);
29381 ++g;
29382 }
ebd8d4e8 29383
8b095871
IC
29384 var yp = y.clone();
29385 var xp = x.clone();
ebd8d4e8 29386
8b095871
IC
29387 while (!x.isZero()) {
29388 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29389 if (i > 0) {
29390 x.iushrn(i);
29391 while (i-- > 0) {
29392 if (A.isOdd() || B.isOdd()) {
29393 A.iadd(yp);
29394 B.isub(xp);
29395 }
ebd8d4e8 29396
8b095871
IC
29397 A.iushrn(1);
29398 B.iushrn(1);
29399 }
29400 }
ebd8d4e8 29401
8b095871
IC
29402 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29403 if (j > 0) {
29404 y.iushrn(j);
29405 while (j-- > 0) {
29406 if (C.isOdd() || D.isOdd()) {
29407 C.iadd(yp);
29408 D.isub(xp);
29409 }
ab78acc6 29410
8b095871
IC
29411 C.iushrn(1);
29412 D.iushrn(1);
29413 }
29414 }
ebd8d4e8 29415
8b095871
IC
29416 if (x.cmp(y) >= 0) {
29417 x.isub(y);
29418 A.isub(C);
29419 B.isub(D);
29420 } else {
29421 y.isub(x);
29422 C.isub(A);
29423 D.isub(B);
29424 }
29425 }
ebd8d4e8 29426
8b095871
IC
29427 return {
29428 a: C,
29429 b: D,
29430 gcd: y.iushln(g)
29431 };
29432 };
ebd8d4e8 29433
8b095871
IC
29434 // This is reduced incarnation of the binary EEA
29435 // above, designated to invert members of the
29436 // _prime_ fields F(p) at a maximal speed
29437 BN.prototype._invmp = function _invmp (p) {
29438 assert(p.negative === 0);
29439 assert(!p.isZero());
ebd8d4e8 29440
8b095871
IC
29441 var a = this;
29442 var b = p.clone();
ebd8d4e8 29443
8b095871
IC
29444 if (a.negative !== 0) {
29445 a = a.umod(p);
29446 } else {
29447 a = a.clone();
29448 }
ebd8d4e8 29449
8b095871
IC
29450 var x1 = new BN(1);
29451 var x2 = new BN(0);
ebd8d4e8 29452
8b095871 29453 var delta = b.clone();
ebd8d4e8 29454
8b095871
IC
29455 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
29456 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29457 if (i > 0) {
29458 a.iushrn(i);
29459 while (i-- > 0) {
29460 if (x1.isOdd()) {
29461 x1.iadd(delta);
29462 }
ebd8d4e8 29463
8b095871
IC
29464 x1.iushrn(1);
29465 }
29466 }
ab78acc6 29467
8b095871
IC
29468 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29469 if (j > 0) {
29470 b.iushrn(j);
29471 while (j-- > 0) {
29472 if (x2.isOdd()) {
29473 x2.iadd(delta);
29474 }
ebd8d4e8 29475
8b095871
IC
29476 x2.iushrn(1);
29477 }
29478 }
ebd8d4e8 29479
8b095871
IC
29480 if (a.cmp(b) >= 0) {
29481 a.isub(b);
29482 x1.isub(x2);
29483 } else {
29484 b.isub(a);
29485 x2.isub(x1);
29486 }
29487 }
ebd8d4e8 29488
8b095871
IC
29489 var res;
29490 if (a.cmpn(1) === 0) {
29491 res = x1;
29492 } else {
29493 res = x2;
29494 }
ebd8d4e8 29495
8b095871
IC
29496 if (res.cmpn(0) < 0) {
29497 res.iadd(p);
ab78acc6
IC
29498 }
29499
8b095871
IC
29500 return res;
29501 };
ebd8d4e8 29502
8b095871
IC
29503 BN.prototype.gcd = function gcd (num) {
29504 if (this.isZero()) return num.abs();
29505 if (num.isZero()) return this.abs();
29506
29507 var a = this.clone();
29508 var b = num.clone();
29509 a.negative = 0;
29510 b.negative = 0;
29511
29512 // Remove common factor of two
29513 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
29514 a.iushrn(1);
29515 b.iushrn(1);
ab78acc6 29516 }
ab78acc6 29517
8b095871
IC
29518 do {
29519 while (a.isEven()) {
29520 a.iushrn(1);
29521 }
29522 while (b.isEven()) {
29523 b.iushrn(1);
29524 }
ebd8d4e8 29525
8b095871
IC
29526 var r = a.cmp(b);
29527 if (r < 0) {
29528 // Swap `a` and `b` to make `a` always bigger than `b`
29529 var t = a;
29530 a = b;
29531 b = t;
29532 } else if (r === 0 || b.cmpn(1) === 0) {
29533 break;
29534 }
ab78acc6 29535
8b095871
IC
29536 a.isub(b);
29537 } while (true);
ab78acc6 29538
8b095871
IC
29539 return b.iushln(shift);
29540 };
ab78acc6 29541
8b095871
IC
29542 // Invert number in the field F(num)
29543 BN.prototype.invm = function invm (num) {
29544 return this.egcd(num).a.umod(num);
29545 };
ebd8d4e8 29546
8b095871
IC
29547 BN.prototype.isEven = function isEven () {
29548 return (this.words[0] & 1) === 0;
29549 };
ab78acc6 29550
8b095871
IC
29551 BN.prototype.isOdd = function isOdd () {
29552 return (this.words[0] & 1) === 1;
29553 };
ebd8d4e8 29554
8b095871
IC
29555 // And first word and num
29556 BN.prototype.andln = function andln (num) {
29557 return this.words[0] & num;
29558 };
ebd8d4e8 29559
8b095871
IC
29560 // Increment at the bit position in-line
29561 BN.prototype.bincn = function bincn (bit) {
29562 assert(typeof bit === 'number');
29563 var r = bit % 26;
29564 var s = (bit - r) / 26;
29565 var q = 1 << r;
29566
29567 // Fast case: bit is much higher than all existing words
29568 if (this.length <= s) {
29569 this._expand(s + 1);
29570 this.words[s] |= q;
29571 return this;
29572 }
ebd8d4e8 29573
8b095871
IC
29574 // Add bit and propagate, if needed
29575 var carry = q;
29576 for (var i = s; carry !== 0 && i < this.length; i++) {
29577 var w = this.words[i] | 0;
29578 w += carry;
29579 carry = w >>> 26;
29580 w &= 0x3ffffff;
29581 this.words[i] = w;
29582 }
29583 if (carry !== 0) {
29584 this.words[i] = carry;
29585 this.length++;
29586 }
29587 return this;
29588 };
ebd8d4e8 29589
8b095871
IC
29590 BN.prototype.isZero = function isZero () {
29591 return this.length === 1 && this.words[0] === 0;
29592 };
ebd8d4e8 29593
8b095871
IC
29594 BN.prototype.cmpn = function cmpn (num) {
29595 var negative = num < 0;
ebd8d4e8 29596
8b095871
IC
29597 if (this.negative !== 0 && !negative) return -1;
29598 if (this.negative === 0 && negative) return 1;
ab78acc6 29599
8b095871 29600 this.strip();
ab78acc6 29601
8b095871
IC
29602 var res;
29603 if (this.length > 1) {
29604 res = 1;
29605 } else {
29606 if (negative) {
29607 num = -num;
29608 }
ebd8d4e8 29609
8b095871 29610 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 29611
8b095871
IC
29612 var w = this.words[0] | 0;
29613 res = w === num ? 0 : w < num ? -1 : 1;
29614 }
29615 if (this.negative !== 0) return -res | 0;
29616 return res;
29617 };
ebd8d4e8 29618
8b095871
IC
29619 // Compare two numbers and return:
29620 // 1 - if `this` > `num`
29621 // 0 - if `this` == `num`
29622 // -1 - if `this` < `num`
29623 BN.prototype.cmp = function cmp (num) {
29624 if (this.negative !== 0 && num.negative === 0) return -1;
29625 if (this.negative === 0 && num.negative !== 0) return 1;
29626
29627 var res = this.ucmp(num);
29628 if (this.negative !== 0) return -res | 0;
29629 return res;
29630 };
ebd8d4e8 29631
8b095871
IC
29632 // Unsigned comparison
29633 BN.prototype.ucmp = function ucmp (num) {
29634 // At this point both numbers have the same sign
29635 if (this.length > num.length) return 1;
29636 if (this.length < num.length) return -1;
29637
29638 var res = 0;
29639 for (var i = this.length - 1; i >= 0; i--) {
29640 var a = this.words[i] | 0;
29641 var b = num.words[i] | 0;
29642
29643 if (a === b) continue;
29644 if (a < b) {
29645 res = -1;
29646 } else if (a > b) {
29647 res = 1;
29648 }
29649 break;
29650 }
29651 return res;
29652 };
ebd8d4e8 29653
8b095871
IC
29654 BN.prototype.gtn = function gtn (num) {
29655 return this.cmpn(num) === 1;
29656 };
ebd8d4e8 29657
8b095871
IC
29658 BN.prototype.gt = function gt (num) {
29659 return this.cmp(num) === 1;
29660 };
ebd8d4e8 29661
8b095871
IC
29662 BN.prototype.gten = function gten (num) {
29663 return this.cmpn(num) >= 0;
29664 };
ab78acc6 29665
8b095871
IC
29666 BN.prototype.gte = function gte (num) {
29667 return this.cmp(num) >= 0;
29668 };
ab78acc6 29669
8b095871
IC
29670 BN.prototype.ltn = function ltn (num) {
29671 return this.cmpn(num) === -1;
29672 };
ab78acc6 29673
8b095871
IC
29674 BN.prototype.lt = function lt (num) {
29675 return this.cmp(num) === -1;
29676 };
ebd8d4e8 29677
8b095871
IC
29678 BN.prototype.lten = function lten (num) {
29679 return this.cmpn(num) <= 0;
29680 };
ab78acc6 29681
8b095871
IC
29682 BN.prototype.lte = function lte (num) {
29683 return this.cmp(num) <= 0;
29684 };
ab78acc6 29685
8b095871
IC
29686 BN.prototype.eqn = function eqn (num) {
29687 return this.cmpn(num) === 0;
29688 };
ab78acc6 29689
8b095871
IC
29690 BN.prototype.eq = function eq (num) {
29691 return this.cmp(num) === 0;
29692 };
ebd8d4e8 29693
8b095871
IC
29694 //
29695 // A reduce context, could be using montgomery or something better, depending
29696 // on the `m` itself.
29697 //
29698 BN.red = function red (num) {
29699 return new Red(num);
29700 };
ab78acc6 29701
8b095871
IC
29702 BN.prototype.toRed = function toRed (ctx) {
29703 assert(!this.red, 'Already a number in reduction context');
29704 assert(this.negative === 0, 'red works only with positives');
29705 return ctx.convertTo(this)._forceRed(ctx);
29706 };
29707
29708 BN.prototype.fromRed = function fromRed () {
29709 assert(this.red, 'fromRed works only with numbers in reduction context');
29710 return this.red.convertFrom(this);
29711 };
29712
29713 BN.prototype._forceRed = function _forceRed (ctx) {
29714 this.red = ctx;
29715 return this;
29716 };
29717
29718 BN.prototype.forceRed = function forceRed (ctx) {
29719 assert(!this.red, 'Already a number in reduction context');
29720 return this._forceRed(ctx);
29721 };
29722
29723 BN.prototype.redAdd = function redAdd (num) {
29724 assert(this.red, 'redAdd works only with red numbers');
29725 return this.red.add(this, num);
29726 };
ebd8d4e8 29727
8b095871
IC
29728 BN.prototype.redIAdd = function redIAdd (num) {
29729 assert(this.red, 'redIAdd works only with red numbers');
29730 return this.red.iadd(this, num);
29731 };
ab78acc6 29732
8b095871
IC
29733 BN.prototype.redSub = function redSub (num) {
29734 assert(this.red, 'redSub works only with red numbers');
29735 return this.red.sub(this, num);
29736 };
ab78acc6 29737
8b095871
IC
29738 BN.prototype.redISub = function redISub (num) {
29739 assert(this.red, 'redISub works only with red numbers');
29740 return this.red.isub(this, num);
29741 };
ebd8d4e8 29742
8b095871
IC
29743 BN.prototype.redShl = function redShl (num) {
29744 assert(this.red, 'redShl works only with red numbers');
29745 return this.red.shl(this, num);
29746 };
ebd8d4e8 29747
8b095871
IC
29748 BN.prototype.redMul = function redMul (num) {
29749 assert(this.red, 'redMul works only with red numbers');
29750 this.red._verify2(this, num);
29751 return this.red.mul(this, num);
29752 };
ebd8d4e8 29753
8b095871
IC
29754 BN.prototype.redIMul = function redIMul (num) {
29755 assert(this.red, 'redMul works only with red numbers');
29756 this.red._verify2(this, num);
29757 return this.red.imul(this, num);
29758 };
ebd8d4e8 29759
8b095871
IC
29760 BN.prototype.redSqr = function redSqr () {
29761 assert(this.red, 'redSqr works only with red numbers');
29762 this.red._verify1(this);
29763 return this.red.sqr(this);
29764 };
ebd8d4e8 29765
8b095871
IC
29766 BN.prototype.redISqr = function redISqr () {
29767 assert(this.red, 'redISqr works only with red numbers');
29768 this.red._verify1(this);
29769 return this.red.isqr(this);
29770 };
ebd8d4e8 29771
8b095871
IC
29772 // Square root over p
29773 BN.prototype.redSqrt = function redSqrt () {
29774 assert(this.red, 'redSqrt works only with red numbers');
29775 this.red._verify1(this);
29776 return this.red.sqrt(this);
29777 };
ebd8d4e8 29778
8b095871
IC
29779 BN.prototype.redInvm = function redInvm () {
29780 assert(this.red, 'redInvm works only with red numbers');
29781 this.red._verify1(this);
29782 return this.red.invm(this);
29783 };
ebd8d4e8 29784
8b095871
IC
29785 // Return negative clone of `this` % `red modulo`
29786 BN.prototype.redNeg = function redNeg () {
29787 assert(this.red, 'redNeg works only with red numbers');
29788 this.red._verify1(this);
29789 return this.red.neg(this);
29790 };
ebd8d4e8 29791
8b095871
IC
29792 BN.prototype.redPow = function redPow (num) {
29793 assert(this.red && !num.red, 'redPow(normalNum)');
29794 this.red._verify1(this);
29795 return this.red.pow(this, num);
29796 };
ebd8d4e8 29797
8b095871
IC
29798 // Prime numbers with efficient reduction
29799 var primes = {
29800 k256: null,
29801 p224: null,
29802 p192: null,
29803 p25519: null
29804 };
ebd8d4e8 29805
8b095871
IC
29806 // Pseudo-Mersenne prime
29807 function MPrime (name, p) {
29808 // P = 2 ^ N - K
29809 this.name = name;
29810 this.p = new BN(p, 16);
29811 this.n = this.p.bitLength();
29812 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 29813
8b095871
IC
29814 this.tmp = this._tmp();
29815 }
ebd8d4e8 29816
8b095871
IC
29817 MPrime.prototype._tmp = function _tmp () {
29818 var tmp = new BN(null);
29819 tmp.words = new Array(Math.ceil(this.n / 13));
29820 return tmp;
29821 };
ebd8d4e8 29822
8b095871
IC
29823 MPrime.prototype.ireduce = function ireduce (num) {
29824 // Assumes that `num` is less than `P^2`
29825 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
29826 var r = num;
29827 var rlen;
ebd8d4e8 29828
8b095871
IC
29829 do {
29830 this.split(r, this.tmp);
29831 r = this.imulK(r);
29832 r = r.iadd(this.tmp);
29833 rlen = r.bitLength();
29834 } while (rlen > this.n);
29835
29836 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
29837 if (cmp === 0) {
29838 r.words[0] = 0;
29839 r.length = 1;
29840 } else if (cmp > 0) {
29841 r.isub(this.p);
29842 } else {
29843 r.strip();
29844 }
ebd8d4e8 29845
8b095871
IC
29846 return r;
29847 };
ebd8d4e8 29848
8b095871
IC
29849 MPrime.prototype.split = function split (input, out) {
29850 input.iushrn(this.n, 0, out);
29851 };
ebd8d4e8 29852
8b095871
IC
29853 MPrime.prototype.imulK = function imulK (num) {
29854 return num.imul(this.k);
29855 };
ebd8d4e8 29856
8b095871
IC
29857 function K256 () {
29858 MPrime.call(
29859 this,
29860 'k256',
29861 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
29862 }
29863 inherits(K256, MPrime);
ebd8d4e8 29864
8b095871
IC
29865 K256.prototype.split = function split (input, output) {
29866 // 256 = 9 * 26 + 22
29867 var mask = 0x3fffff;
ebd8d4e8 29868
8b095871
IC
29869 var outLen = Math.min(input.length, 9);
29870 for (var i = 0; i < outLen; i++) {
29871 output.words[i] = input.words[i];
29872 }
29873 output.length = outLen;
ebd8d4e8 29874
8b095871
IC
29875 if (input.length <= 9) {
29876 input.words[0] = 0;
29877 input.length = 1;
29878 return;
29879 }
ebd8d4e8 29880
8b095871
IC
29881 // Shift by 9 limbs
29882 var prev = input.words[9];
29883 output.words[output.length++] = prev & mask;
ebd8d4e8 29884
8b095871
IC
29885 for (i = 10; i < input.length; i++) {
29886 var next = input.words[i] | 0;
29887 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
29888 prev = next;
29889 }
29890 prev >>>= 22;
29891 input.words[i - 10] = prev;
29892 if (prev === 0 && input.length > 10) {
29893 input.length -= 10;
29894 } else {
29895 input.length -= 9;
29896 }
29897 };
ebd8d4e8 29898
8b095871
IC
29899 K256.prototype.imulK = function imulK (num) {
29900 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
29901 num.words[num.length] = 0;
29902 num.words[num.length + 1] = 0;
29903 num.length += 2;
29904
29905 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
29906 var lo = 0;
29907 for (var i = 0; i < num.length; i++) {
29908 var w = num.words[i] | 0;
29909 lo += w * 0x3d1;
29910 num.words[i] = lo & 0x3ffffff;
29911 lo = w * 0x40 + ((lo / 0x4000000) | 0);
29912 }
29913
29914 // Fast length reduction
29915 if (num.words[num.length - 1] === 0) {
29916 num.length--;
29917 if (num.words[num.length - 1] === 0) {
29918 num.length--;
29919 }
29920 }
29921 return num;
29922 };
ebd8d4e8 29923
8b095871
IC
29924 function P224 () {
29925 MPrime.call(
29926 this,
29927 'p224',
29928 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
29929 }
29930 inherits(P224, MPrime);
ebd8d4e8 29931
8b095871
IC
29932 function P192 () {
29933 MPrime.call(
29934 this,
29935 'p192',
29936 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
29937 }
29938 inherits(P192, MPrime);
ebd8d4e8 29939
8b095871
IC
29940 function P25519 () {
29941 // 2 ^ 255 - 19
29942 MPrime.call(
29943 this,
29944 '25519',
29945 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
29946 }
29947 inherits(P25519, MPrime);
ebd8d4e8 29948
8b095871
IC
29949 P25519.prototype.imulK = function imulK (num) {
29950 // K = 0x13
29951 var carry = 0;
29952 for (var i = 0; i < num.length; i++) {
29953 var hi = (num.words[i] | 0) * 0x13 + carry;
29954 var lo = hi & 0x3ffffff;
29955 hi >>>= 26;
ebd8d4e8 29956
8b095871
IC
29957 num.words[i] = lo;
29958 carry = hi;
29959 }
29960 if (carry !== 0) {
29961 num.words[num.length++] = carry;
29962 }
29963 return num;
29964 };
ebd8d4e8 29965
8b095871
IC
29966 // Exported mostly for testing purposes, use plain name instead
29967 BN._prime = function prime (name) {
29968 // Cached version of prime
29969 if (primes[name]) return primes[name];
29970
29971 var prime;
29972 if (name === 'k256') {
29973 prime = new K256();
29974 } else if (name === 'p224') {
29975 prime = new P224();
29976 } else if (name === 'p192') {
29977 prime = new P192();
29978 } else if (name === 'p25519') {
29979 prime = new P25519();
29980 } else {
29981 throw new Error('Unknown prime ' + name);
29982 }
29983 primes[name] = prime;
ab78acc6 29984
8b095871
IC
29985 return prime;
29986 };
ab78acc6 29987
8b095871
IC
29988 //
29989 // Base reduction engine
29990 //
29991 function Red (m) {
29992 if (typeof m === 'string') {
29993 var prime = BN._prime(m);
29994 this.m = prime.p;
29995 this.prime = prime;
29996 } else {
29997 assert(m.gtn(1), 'modulus must be greater than 1');
29998 this.m = m;
29999 this.prime = null;
30000 }
30001 }
ab78acc6 30002
8b095871
IC
30003 Red.prototype._verify1 = function _verify1 (a) {
30004 assert(a.negative === 0, 'red works only with positives');
30005 assert(a.red, 'red works only with red numbers');
30006 };
ab78acc6 30007
8b095871
IC
30008 Red.prototype._verify2 = function _verify2 (a, b) {
30009 assert((a.negative | b.negative) === 0, 'red works only with positives');
30010 assert(a.red && a.red === b.red,
30011 'red works only with red numbers');
30012 };
ebd8d4e8 30013
8b095871
IC
30014 Red.prototype.imod = function imod (a) {
30015 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
30016 return a.umod(this.m)._forceRed(this);
30017 };
ebd8d4e8 30018
8b095871
IC
30019 Red.prototype.neg = function neg (a) {
30020 if (a.isZero()) {
30021 return a.clone();
30022 }
ebd8d4e8 30023
8b095871
IC
30024 return this.m.sub(a)._forceRed(this);
30025 };
ab78acc6 30026
8b095871
IC
30027 Red.prototype.add = function add (a, b) {
30028 this._verify2(a, b);
ab78acc6 30029
8b095871
IC
30030 var res = a.add(b);
30031 if (res.cmp(this.m) >= 0) {
30032 res.isub(this.m);
30033 }
30034 return res._forceRed(this);
30035 };
ab78acc6 30036
8b095871
IC
30037 Red.prototype.iadd = function iadd (a, b) {
30038 this._verify2(a, b);
ab78acc6 30039
8b095871
IC
30040 var res = a.iadd(b);
30041 if (res.cmp(this.m) >= 0) {
30042 res.isub(this.m);
30043 }
30044 return res;
30045 };
ab78acc6 30046
8b095871
IC
30047 Red.prototype.sub = function sub (a, b) {
30048 this._verify2(a, b);
ab78acc6 30049
8b095871
IC
30050 var res = a.sub(b);
30051 if (res.cmpn(0) < 0) {
30052 res.iadd(this.m);
30053 }
30054 return res._forceRed(this);
30055 };
ab78acc6 30056
8b095871
IC
30057 Red.prototype.isub = function isub (a, b) {
30058 this._verify2(a, b);
ebd8d4e8 30059
8b095871
IC
30060 var res = a.isub(b);
30061 if (res.cmpn(0) < 0) {
30062 res.iadd(this.m);
30063 }
30064 return res;
30065 };
ebd8d4e8 30066
8b095871
IC
30067 Red.prototype.shl = function shl (a, num) {
30068 this._verify1(a);
30069 return this.imod(a.ushln(num));
30070 };
ebd8d4e8 30071
8b095871
IC
30072 Red.prototype.imul = function imul (a, b) {
30073 this._verify2(a, b);
30074 return this.imod(a.imul(b));
30075 };
ebd8d4e8 30076
8b095871
IC
30077 Red.prototype.mul = function mul (a, b) {
30078 this._verify2(a, b);
30079 return this.imod(a.mul(b));
30080 };
ebd8d4e8 30081
8b095871
IC
30082 Red.prototype.isqr = function isqr (a) {
30083 return this.imul(a, a.clone());
30084 };
30085
30086 Red.prototype.sqr = function sqr (a) {
30087 return this.mul(a, a);
30088 };
ebd8d4e8 30089
8b095871
IC
30090 Red.prototype.sqrt = function sqrt (a) {
30091 if (a.isZero()) return a.clone();
ebd8d4e8 30092
8b095871
IC
30093 var mod3 = this.m.andln(3);
30094 assert(mod3 % 2 === 1);
ebd8d4e8 30095
8b095871
IC
30096 // Fast case
30097 if (mod3 === 3) {
30098 var pow = this.m.add(new BN(1)).iushrn(2);
30099 return this.pow(a, pow);
30100 }
ebd8d4e8 30101
8b095871
IC
30102 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
30103 //
30104 // Find Q and S, that Q * 2 ^ S = (P - 1)
30105 var q = this.m.subn(1);
30106 var s = 0;
30107 while (!q.isZero() && q.andln(1) === 0) {
30108 s++;
30109 q.iushrn(1);
30110 }
30111 assert(!q.isZero());
ebd8d4e8 30112
8b095871
IC
30113 var one = new BN(1).toRed(this);
30114 var nOne = one.redNeg();
ebd8d4e8 30115
8b095871
IC
30116 // Find quadratic non-residue
30117 // NOTE: Max is such because of generalized Riemann hypothesis.
30118 var lpow = this.m.subn(1).iushrn(1);
30119 var z = this.m.bitLength();
30120 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 30121
8b095871
IC
30122 while (this.pow(z, lpow).cmp(nOne) !== 0) {
30123 z.redIAdd(nOne);
30124 }
ebd8d4e8 30125
8b095871
IC
30126 var c = this.pow(z, q);
30127 var r = this.pow(a, q.addn(1).iushrn(1));
30128 var t = this.pow(a, q);
30129 var m = s;
30130 while (t.cmp(one) !== 0) {
30131 var tmp = t;
30132 for (var i = 0; tmp.cmp(one) !== 0; i++) {
30133 tmp = tmp.redSqr();
30134 }
30135 assert(i < m);
30136 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 30137
8b095871
IC
30138 r = r.redMul(b);
30139 c = b.redSqr();
30140 t = t.redMul(c);
30141 m = i;
30142 }
ebd8d4e8 30143
8b095871
IC
30144 return r;
30145 };
ebd8d4e8 30146
8b095871
IC
30147 Red.prototype.invm = function invm (a) {
30148 var inv = a._invmp(this.m);
30149 if (inv.negative !== 0) {
30150 inv.negative = 0;
30151 return this.imod(inv).redNeg();
30152 } else {
30153 return this.imod(inv);
30154 }
30155 };
ebd8d4e8 30156
8b095871
IC
30157 Red.prototype.pow = function pow (a, num) {
30158 if (num.isZero()) return new BN(1);
30159 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 30160
8b095871
IC
30161 var windowSize = 4;
30162 var wnd = new Array(1 << windowSize);
30163 wnd[0] = new BN(1).toRed(this);
30164 wnd[1] = a;
30165 for (var i = 2; i < wnd.length; i++) {
30166 wnd[i] = this.mul(wnd[i - 1], a);
30167 }
ebd8d4e8 30168
8b095871
IC
30169 var res = wnd[0];
30170 var current = 0;
30171 var currentLen = 0;
30172 var start = num.bitLength() % 26;
30173 if (start === 0) {
30174 start = 26;
30175 }
ebd8d4e8 30176
8b095871
IC
30177 for (i = num.length - 1; i >= 0; i--) {
30178 var word = num.words[i];
30179 for (var j = start - 1; j >= 0; j--) {
30180 var bit = (word >> j) & 1;
30181 if (res !== wnd[0]) {
30182 res = this.sqr(res);
30183 }
ebd8d4e8 30184
8b095871
IC
30185 if (bit === 0 && current === 0) {
30186 currentLen = 0;
30187 continue;
30188 }
ebd8d4e8 30189
8b095871
IC
30190 current <<= 1;
30191 current |= bit;
30192 currentLen++;
30193 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 30194
8b095871
IC
30195 res = this.mul(res, wnd[current]);
30196 currentLen = 0;
30197 current = 0;
30198 }
30199 start = 26;
30200 }
ebd8d4e8 30201
8b095871
IC
30202 return res;
30203 };
ebd8d4e8 30204
8b095871
IC
30205 Red.prototype.convertTo = function convertTo (num) {
30206 var r = num.umod(this.m);
ebd8d4e8 30207
8b095871
IC
30208 return r === num ? r.clone() : r;
30209 };
ebd8d4e8 30210
8b095871
IC
30211 Red.prototype.convertFrom = function convertFrom (num) {
30212 var res = num.clone();
30213 res.red = null;
30214 return res;
30215 };
ebd8d4e8 30216
8b095871
IC
30217 //
30218 // Montgomery method engine
30219 //
ebd8d4e8 30220
8b095871
IC
30221 BN.mont = function mont (num) {
30222 return new Mont(num);
30223 };
ebd8d4e8 30224
8b095871
IC
30225 function Mont (m) {
30226 Red.call(this, m);
ebd8d4e8 30227
8b095871
IC
30228 this.shift = this.m.bitLength();
30229 if (this.shift % 26 !== 0) {
30230 this.shift += 26 - (this.shift % 26);
30231 }
ebd8d4e8 30232
8b095871
IC
30233 this.r = new BN(1).iushln(this.shift);
30234 this.r2 = this.imod(this.r.sqr());
30235 this.rinv = this.r._invmp(this.m);
30236
30237 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
30238 this.minv = this.minv.umod(this.r);
30239 this.minv = this.r.sub(this.minv);
ebd8d4e8 30240 }
8b095871 30241 inherits(Mont, Red);
ebd8d4e8 30242
8b095871
IC
30243 Mont.prototype.convertTo = function convertTo (num) {
30244 return this.imod(num.ushln(this.shift));
30245 };
ab78acc6 30246
8b095871
IC
30247 Mont.prototype.convertFrom = function convertFrom (num) {
30248 var r = this.imod(num.mul(this.rinv));
30249 r.red = null;
30250 return r;
30251 };
ebd8d4e8 30252
8b095871
IC
30253 Mont.prototype.imul = function imul (a, b) {
30254 if (a.isZero() || b.isZero()) {
30255 a.words[0] = 0;
30256 a.length = 1;
30257 return a;
30258 }
ebd8d4e8 30259
8b095871
IC
30260 var t = a.imul(b);
30261 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30262 var u = t.isub(c).iushrn(this.shift);
30263 var res = u;
ab78acc6 30264
8b095871
IC
30265 if (u.cmp(this.m) >= 0) {
30266 res = u.isub(this.m);
30267 } else if (u.cmpn(0) < 0) {
30268 res = u.iadd(this.m);
30269 }
ab78acc6 30270
8b095871
IC
30271 return res._forceRed(this);
30272 };
ab78acc6 30273
8b095871
IC
30274 Mont.prototype.mul = function mul (a, b) {
30275 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 30276
8b095871
IC
30277 var t = a.mul(b);
30278 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30279 var u = t.isub(c).iushrn(this.shift);
30280 var res = u;
30281 if (u.cmp(this.m) >= 0) {
30282 res = u.isub(this.m);
30283 } else if (u.cmpn(0) < 0) {
30284 res = u.iadd(this.m);
30285 }
ab78acc6 30286
8b095871
IC
30287 return res._forceRed(this);
30288 };
ab78acc6 30289
8b095871
IC
30290 Mont.prototype.invm = function invm (a) {
30291 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
30292 var res = this.imod(a._invmp(this.m).mul(this.r2));
30293 return res._forceRed(this);
30294 };
30295})(typeof module === 'undefined' || module, this);
ab78acc6 30296
8b095871
IC
30297},{}],34:[function(require,module,exports){
30298var r;
ebd8d4e8 30299
8b095871
IC
30300module.exports = function rand(len) {
30301 if (!r)
30302 r = new Rand(null);
ebd8d4e8 30303
8b095871
IC
30304 return r.generate(len);
30305};
ab78acc6 30306
8b095871
IC
30307function Rand(rand) {
30308 this.rand = rand;
ab78acc6 30309}
8b095871 30310module.exports.Rand = Rand;
ab78acc6 30311
8b095871
IC
30312Rand.prototype.generate = function generate(len) {
30313 return this._rand(len);
30314};
ab78acc6 30315
8b095871
IC
30316if (typeof self === 'object') {
30317 if (self.crypto && self.crypto.getRandomValues) {
30318 // Modern browsers
30319 Rand.prototype._rand = function _rand(n) {
30320 var arr = new Uint8Array(n);
30321 self.crypto.getRandomValues(arr);
30322 return arr;
30323 };
30324 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
30325 // IE
30326 Rand.prototype._rand = function _rand(n) {
30327 var arr = new Uint8Array(n);
30328 self.msCrypto.getRandomValues(arr);
30329 return arr;
30330 };
30331 } else {
30332 // Old junk
30333 Rand.prototype._rand = function() {
30334 throw new Error('Not implemented yet');
30335 };
30336 }
30337} else {
30338 // Node.js or Web worker with no crypto support
30339 try {
30340 var crypto = require('crypto');
ab78acc6 30341
8b095871
IC
30342 Rand.prototype._rand = function _rand(n) {
30343 return crypto.randomBytes(n);
30344 };
30345 } catch (e) {
30346 // Emulate crypto API using randy
30347 Rand.prototype._rand = function _rand(n) {
30348 var res = new Uint8Array(n);
30349 for (var i = 0; i < res.length; i++)
30350 res[i] = this.rand.getByte();
30351 return res;
30352 };
30353 }
30354}
30355
30356},{"crypto":3}],35:[function(require,module,exports){
30357(function (Buffer){
30358var Transform = require('stream').Transform
30359var inherits = require('inherits')
30360var StringDecoder = require('string_decoder').StringDecoder
30361module.exports = CipherBase
30362inherits(CipherBase, Transform)
30363function CipherBase (hashMode) {
30364 Transform.call(this)
30365 this.hashMode = typeof hashMode === 'string'
30366 if (this.hashMode) {
30367 this[hashMode] = this._finalOrDigest
30368 } else {
30369 this.final = this._finalOrDigest
30370 }
30371 this._decoder = null
30372 this._encoding = null
30373}
30374CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
30375 if (typeof data === 'string') {
30376 data = new Buffer(data, inputEnc)
30377 }
30378 var outData = this._update(data)
30379 if (this.hashMode) {
30380 return this
30381 }
30382 if (outputEnc) {
30383 outData = this._toString(outData, outputEnc)
30384 }
30385 return outData
30386}
ab78acc6 30387
8b095871 30388CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 30389
8b095871
IC
30390CipherBase.prototype.getAuthTag = function () {
30391 throw new Error('trying to get auth tag in unsupported state')
30392}
ab78acc6 30393
8b095871
IC
30394CipherBase.prototype.setAuthTag = function () {
30395 throw new Error('trying to set auth tag in unsupported state')
30396}
ab78acc6 30397
8b095871
IC
30398CipherBase.prototype.setAAD = function () {
30399 throw new Error('trying to set aad in unsupported state')
30400}
ab78acc6 30401
8b095871
IC
30402CipherBase.prototype._transform = function (data, _, next) {
30403 var err
30404 try {
30405 if (this.hashMode) {
30406 this._update(data)
30407 } else {
30408 this.push(this._update(data))
30409 }
30410 } catch (e) {
30411 err = e
30412 } finally {
30413 next(err)
30414 }
30415}
30416CipherBase.prototype._flush = function (done) {
30417 var err
30418 try {
30419 this.push(this._final())
30420 } catch (e) {
30421 err = e
30422 } finally {
30423 done(err)
30424 }
30425}
30426CipherBase.prototype._finalOrDigest = function (outputEnc) {
30427 var outData = this._final() || new Buffer('')
30428 if (outputEnc) {
30429 outData = this._toString(outData, outputEnc, true)
30430 }
30431 return outData
30432}
ebd8d4e8 30433
8b095871
IC
30434CipherBase.prototype._toString = function (value, enc, fin) {
30435 if (!this._decoder) {
30436 this._decoder = new StringDecoder(enc)
30437 this._encoding = enc
30438 }
30439 if (this._encoding !== enc) {
30440 throw new Error('can\'t switch encodings')
30441 }
30442 var out = this._decoder.write(value)
30443 if (fin) {
30444 out += this._decoder.end()
ab78acc6 30445 }
8b095871
IC
30446 return out
30447}
ab78acc6 30448
8b095871
IC
30449}).call(this,require("buffer").Buffer)
30450},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
30451(function (Buffer){
30452'use strict';
30453var inherits = require('inherits')
30454var md5 = require('./md5')
30455var rmd160 = require('ripemd160')
30456var sha = require('sha.js')
ebd8d4e8 30457
8b095871 30458var Base = require('cipher-base')
ebd8d4e8 30459
8b095871
IC
30460function HashNoConstructor(hash) {
30461 Base.call(this, 'digest')
ebd8d4e8 30462
8b095871
IC
30463 this._hash = hash
30464 this.buffers = []
30465}
ebd8d4e8 30466
8b095871 30467inherits(HashNoConstructor, Base)
ebd8d4e8 30468
8b095871
IC
30469HashNoConstructor.prototype._update = function (data) {
30470 this.buffers.push(data)
30471}
ebd8d4e8 30472
8b095871
IC
30473HashNoConstructor.prototype._final = function () {
30474 var buf = Buffer.concat(this.buffers)
30475 var r = this._hash(buf)
30476 this.buffers = null
ebd8d4e8 30477
8b095871
IC
30478 return r
30479}
ab78acc6 30480
8b095871
IC
30481function Hash(hash) {
30482 Base.call(this, 'digest')
ab78acc6 30483
8b095871
IC
30484 this._hash = hash
30485}
ab78acc6 30486
8b095871 30487inherits(Hash, Base)
ab78acc6 30488
8b095871
IC
30489Hash.prototype._update = function (data) {
30490 this._hash.update(data)
30491}
ab78acc6 30492
8b095871
IC
30493Hash.prototype._final = function () {
30494 return this._hash.digest()
30495}
ab78acc6 30496
8b095871
IC
30497module.exports = function createHash (alg) {
30498 alg = alg.toLowerCase()
30499 if ('md5' === alg) return new HashNoConstructor(md5)
30500 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
30501
30502 return new Hash(sha(alg))
ab78acc6
IC
30503}
30504
8b095871
IC
30505}).call(this,require("buffer").Buffer)
30506},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
30507(function (Buffer){
30508'use strict';
30509var intSize = 4;
30510var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
30511var chrsz = 8;
ab78acc6 30512
8b095871
IC
30513function toArray(buf, bigEndian) {
30514 if ((buf.length % intSize) !== 0) {
30515 var len = buf.length + (intSize - (buf.length % intSize));
30516 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
30517 }
30518
8b095871
IC
30519 var arr = [];
30520 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
30521 for (var i = 0; i < buf.length; i += intSize) {
30522 arr.push(fn.call(buf, i));
30523 }
30524 return arr;
ab78acc6
IC
30525}
30526
8b095871
IC
30527function toBuffer(arr, size, bigEndian) {
30528 var buf = new Buffer(size);
30529 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
30530 for (var i = 0; i < arr.length; i++) {
30531 fn.call(buf, arr[i], i * 4, true);
30532 }
30533 return buf;
30534}
ab78acc6 30535
8b095871
IC
30536function hash(buf, fn, hashSize, bigEndian) {
30537 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
30538 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
30539 return toBuffer(arr, hashSize, bigEndian);
30540}
30541exports.hash = hash;
ab78acc6 30542}).call(this,require("buffer").Buffer)
8b095871 30543},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 30544'use strict';
8b095871
IC
30545/*
30546 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
30547 * Digest Algorithm, as defined in RFC 1321.
30548 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
30549 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30550 * Distributed under the BSD License
30551 * See http://pajhome.org.uk/crypt/md5 for more info.
30552 */
ebd8d4e8 30553
8b095871 30554var helpers = require('./helpers');
ebd8d4e8 30555
8b095871
IC
30556/*
30557 * Calculate the MD5 of an array of little-endian words, and a bit length
30558 */
30559function core_md5(x, len)
30560{
30561 /* append padding */
30562 x[len >> 5] |= 0x80 << ((len) % 32);
30563 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 30564
8b095871
IC
30565 var a = 1732584193;
30566 var b = -271733879;
30567 var c = -1732584194;
30568 var d = 271733878;
ebd8d4e8 30569
8b095871
IC
30570 for(var i = 0; i < x.length; i += 16)
30571 {
30572 var olda = a;
30573 var oldb = b;
30574 var oldc = c;
30575 var oldd = d;
ebd8d4e8 30576
8b095871
IC
30577 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
30578 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
30579 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
30580 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
30581 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
30582 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
30583 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
30584 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
30585 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
30586 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
30587 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
30588 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
30589 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
30590 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
30591 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
30592 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 30593
8b095871
IC
30594 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
30595 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
30596 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
30597 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
30598 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
30599 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
30600 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
30601 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
30602 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
30603 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
30604 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
30605 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
30606 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
30607 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
30608 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
30609 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 30610
8b095871
IC
30611 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
30612 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
30613 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
30614 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
30615 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
30616 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
30617 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
30618 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
30619 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
30620 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
30621 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
30622 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
30623 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
30624 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
30625 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
30626 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 30627
8b095871
IC
30628 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
30629 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
30630 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
30631 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
30632 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
30633 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
30634 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
30635 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
30636 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
30637 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
30638 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
30639 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
30640 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
30641 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
30642 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
30643 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 30644
8b095871
IC
30645 a = safe_add(a, olda);
30646 b = safe_add(b, oldb);
30647 c = safe_add(c, oldc);
30648 d = safe_add(d, oldd);
ab78acc6 30649 }
8b095871 30650 return Array(a, b, c, d);
ebd8d4e8 30651
ab78acc6 30652}
ebd8d4e8 30653
8b095871
IC
30654/*
30655 * These functions implement the four basic operations the algorithm uses.
30656 */
30657function md5_cmn(q, a, b, x, s, t)
30658{
30659 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 30660}
8b095871
IC
30661function md5_ff(a, b, c, d, x, s, t)
30662{
30663 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 30664}
8b095871
IC
30665function md5_gg(a, b, c, d, x, s, t)
30666{
30667 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 30668}
8b095871
IC
30669function md5_hh(a, b, c, d, x, s, t)
30670{
30671 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
30672}
30673function md5_ii(a, b, c, d, x, s, t)
30674{
30675 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 30676}
ebd8d4e8 30677
8b095871
IC
30678/*
30679 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
30680 * to work around bugs in some JS interpreters.
30681 */
30682function safe_add(x, y)
30683{
30684 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
30685 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
30686 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 30687}
ebd8d4e8 30688
8b095871
IC
30689/*
30690 * Bitwise rotate a 32-bit number to the left.
30691 */
30692function bit_rol(num, cnt)
30693{
30694 return (num << cnt) | (num >>> (32 - cnt));
30695}
ebd8d4e8 30696
8b095871
IC
30697module.exports = function md5(buf) {
30698 return helpers.hash(buf, core_md5, 16);
30699};
30700},{"./helpers":37}],39:[function(require,module,exports){
30701'use strict';
ebd8d4e8 30702
8b095871 30703var elliptic = exports;
ebd8d4e8 30704
8b095871
IC
30705elliptic.version = require('../package.json').version;
30706elliptic.utils = require('./elliptic/utils');
30707elliptic.rand = require('brorand');
30708elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
30709elliptic.curve = require('./elliptic/curve');
30710elliptic.curves = require('./elliptic/curves');
ebd8d4e8 30711
8b095871
IC
30712// Protocols
30713elliptic.ec = require('./elliptic/ec');
30714elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 30715
8b095871
IC
30716},{"../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){
30717'use strict';
ebd8d4e8 30718
8b095871
IC
30719var BN = require('bn.js');
30720var elliptic = require('../../elliptic');
30721var utils = elliptic.utils;
30722var getNAF = utils.getNAF;
30723var getJSF = utils.getJSF;
30724var assert = utils.assert;
30725
30726function BaseCurve(type, conf) {
30727 this.type = type;
30728 this.p = new BN(conf.p, 16);
30729
30730 // Use Montgomery, when there is no fast reduction for the prime
30731 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
30732
30733 // Useful for many curves
30734 this.zero = new BN(0).toRed(this.red);
30735 this.one = new BN(1).toRed(this.red);
30736 this.two = new BN(2).toRed(this.red);
30737
30738 // Curve configuration, optional
30739 this.n = conf.n && new BN(conf.n, 16);
30740 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
30741
30742 // Temporary arrays
30743 this._wnafT1 = new Array(4);
30744 this._wnafT2 = new Array(4);
30745 this._wnafT3 = new Array(4);
30746 this._wnafT4 = new Array(4);
30747
30748 // Generalized Greg Maxwell's trick
30749 var adjustCount = this.n && this.p.div(this.n);
30750 if (!adjustCount || adjustCount.cmpn(100) > 0) {
30751 this.redN = null;
30752 } else {
30753 this._maxwellTrick = true;
30754 this.redN = this.n.toRed(this.red);
ebd8d4e8 30755 }
ebd8d4e8 30756}
8b095871 30757module.exports = BaseCurve;
ebd8d4e8 30758
8b095871
IC
30759BaseCurve.prototype.point = function point() {
30760 throw new Error('Not implemented');
30761};
ebd8d4e8 30762
8b095871
IC
30763BaseCurve.prototype.validate = function validate() {
30764 throw new Error('Not implemented');
30765};
ebd8d4e8 30766
8b095871
IC
30767BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
30768 assert(p.precomputed);
30769 var doubles = p._getDoubles();
ebd8d4e8 30770
8b095871
IC
30771 var naf = getNAF(k, 1);
30772 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
30773 I /= 3;
ebd8d4e8 30774
8b095871
IC
30775 // Translate into more windowed form
30776 var repr = [];
30777 for (var j = 0; j < naf.length; j += doubles.step) {
30778 var nafW = 0;
30779 for (var k = j + doubles.step - 1; k >= j; k--)
30780 nafW = (nafW << 1) + naf[k];
30781 repr.push(nafW);
30782 }
ebd8d4e8 30783
8b095871
IC
30784 var a = this.jpoint(null, null, null);
30785 var b = this.jpoint(null, null, null);
30786 for (var i = I; i > 0; i--) {
30787 for (var j = 0; j < repr.length; j++) {
30788 var nafW = repr[j];
30789 if (nafW === i)
30790 b = b.mixedAdd(doubles.points[j]);
30791 else if (nafW === -i)
30792 b = b.mixedAdd(doubles.points[j].neg());
30793 }
30794 a = a.add(b);
30795 }
30796 return a.toP();
30797};
ebd8d4e8 30798
8b095871
IC
30799BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
30800 var w = 4;
ebd8d4e8 30801
8b095871
IC
30802 // Precompute window
30803 var nafPoints = p._getNAFPoints(w);
30804 w = nafPoints.wnd;
30805 var wnd = nafPoints.points;
ebd8d4e8 30806
8b095871
IC
30807 // Get NAF form
30808 var naf = getNAF(k, w);
ebd8d4e8 30809
8b095871
IC
30810 // Add `this`*(N+1) for every w-NAF index
30811 var acc = this.jpoint(null, null, null);
30812 for (var i = naf.length - 1; i >= 0; i--) {
30813 // Count zeroes
30814 for (var k = 0; i >= 0 && naf[i] === 0; i--)
30815 k++;
30816 if (i >= 0)
30817 k++;
30818 acc = acc.dblp(k);
ebd8d4e8 30819
8b095871
IC
30820 if (i < 0)
30821 break;
30822 var z = naf[i];
30823 assert(z !== 0);
30824 if (p.type === 'affine') {
30825 // J +- P
30826 if (z > 0)
30827 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
30828 else
30829 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
30830 } else {
30831 // J +- J
30832 if (z > 0)
30833 acc = acc.add(wnd[(z - 1) >> 1]);
30834 else
30835 acc = acc.add(wnd[(-z - 1) >> 1].neg());
30836 }
ebd8d4e8 30837 }
8b095871
IC
30838 return p.type === 'affine' ? acc.toP() : acc;
30839};
ebd8d4e8 30840
8b095871
IC
30841BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
30842 points,
30843 coeffs,
30844 len,
30845 jacobianResult) {
30846 var wndWidth = this._wnafT1;
30847 var wnd = this._wnafT2;
30848 var naf = this._wnafT3;
30849
30850 // Fill all arrays
30851 var max = 0;
30852 for (var i = 0; i < len; i++) {
30853 var p = points[i];
30854 var nafPoints = p._getNAFPoints(defW);
30855 wndWidth[i] = nafPoints.wnd;
30856 wnd[i] = nafPoints.points;
30857 }
30858
30859 // Comb small window NAFs
30860 for (var i = len - 1; i >= 1; i -= 2) {
30861 var a = i - 1;
30862 var b = i;
30863 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
30864 naf[a] = getNAF(coeffs[a], wndWidth[a]);
30865 naf[b] = getNAF(coeffs[b], wndWidth[b]);
30866 max = Math.max(naf[a].length, max);
30867 max = Math.max(naf[b].length, max);
30868 continue;
30869 }
ebd8d4e8 30870
8b095871
IC
30871 var comb = [
30872 points[a], /* 1 */
30873 null, /* 3 */
30874 null, /* 5 */
30875 points[b] /* 7 */
30876 ];
30877
30878 // Try to avoid Projective points, if possible
30879 if (points[a].y.cmp(points[b].y) === 0) {
30880 comb[1] = points[a].add(points[b]);
30881 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30882 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
30883 comb[1] = points[a].toJ().mixedAdd(points[b]);
30884 comb[2] = points[a].add(points[b].neg());
30885 } else {
30886 comb[1] = points[a].toJ().mixedAdd(points[b]);
30887 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30888 }
ebd8d4e8 30889
8b095871
IC
30890 var index = [
30891 -3, /* -1 -1 */
30892 -1, /* -1 0 */
30893 -5, /* -1 1 */
30894 -7, /* 0 -1 */
30895 0, /* 0 0 */
30896 7, /* 0 1 */
30897 5, /* 1 -1 */
30898 1, /* 1 0 */
30899 3 /* 1 1 */
30900 ];
ebd8d4e8 30901
8b095871
IC
30902 var jsf = getJSF(coeffs[a], coeffs[b]);
30903 max = Math.max(jsf[0].length, max);
30904 naf[a] = new Array(max);
30905 naf[b] = new Array(max);
30906 for (var j = 0; j < max; j++) {
30907 var ja = jsf[0][j] | 0;
30908 var jb = jsf[1][j] | 0;
ebd8d4e8 30909
8b095871
IC
30910 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
30911 naf[b][j] = 0;
30912 wnd[a] = comb;
30913 }
30914 }
ebd8d4e8 30915
8b095871
IC
30916 var acc = this.jpoint(null, null, null);
30917 var tmp = this._wnafT4;
30918 for (var i = max; i >= 0; i--) {
30919 var k = 0;
ebd8d4e8 30920
8b095871
IC
30921 while (i >= 0) {
30922 var zero = true;
30923 for (var j = 0; j < len; j++) {
30924 tmp[j] = naf[j][i] | 0;
30925 if (tmp[j] !== 0)
30926 zero = false;
30927 }
30928 if (!zero)
30929 break;
30930 k++;
30931 i--;
30932 }
30933 if (i >= 0)
30934 k++;
30935 acc = acc.dblp(k);
30936 if (i < 0)
30937 break;
ebd8d4e8 30938
8b095871
IC
30939 for (var j = 0; j < len; j++) {
30940 var z = tmp[j];
30941 var p;
30942 if (z === 0)
30943 continue;
30944 else if (z > 0)
30945 p = wnd[j][(z - 1) >> 1];
30946 else if (z < 0)
30947 p = wnd[j][(-z - 1) >> 1].neg();
30948
30949 if (p.type === 'affine')
30950 acc = acc.mixedAdd(p);
30951 else
30952 acc = acc.add(p);
30953 }
30954 }
30955 // Zeroify references
30956 for (var i = 0; i < len; i++)
30957 wnd[i] = null;
ebd8d4e8 30958
8b095871
IC
30959 if (jacobianResult)
30960 return acc;
30961 else
30962 return acc.toP();
30963};
ebd8d4e8 30964
8b095871
IC
30965function BasePoint(curve, type) {
30966 this.curve = curve;
30967 this.type = type;
30968 this.precomputed = null;
30969}
30970BaseCurve.BasePoint = BasePoint;
ebd8d4e8 30971
8b095871
IC
30972BasePoint.prototype.eq = function eq(/*other*/) {
30973 throw new Error('Not implemented');
30974};
ebd8d4e8 30975
8b095871
IC
30976BasePoint.prototype.validate = function validate() {
30977 return this.curve.validate(this);
30978};
ebd8d4e8 30979
8b095871
IC
30980BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
30981 bytes = utils.toArray(bytes, enc);
ebd8d4e8 30982
8b095871 30983 var len = this.p.byteLength();
ebd8d4e8 30984
8b095871
IC
30985 // uncompressed, hybrid-odd, hybrid-even
30986 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
30987 bytes.length - 1 === 2 * len) {
30988 if (bytes[0] === 0x06)
30989 assert(bytes[bytes.length - 1] % 2 === 0);
30990 else if (bytes[0] === 0x07)
30991 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 30992
8b095871
IC
30993 var res = this.point(bytes.slice(1, 1 + len),
30994 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 30995
8b095871
IC
30996 return res;
30997 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
30998 bytes.length - 1 === len) {
30999 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 31000 }
8b095871
IC
31001 throw new Error('Unknown point format');
31002};
ebd8d4e8 31003
8b095871
IC
31004BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
31005 return this.encode(enc, true);
31006};
31007
31008BasePoint.prototype._encode = function _encode(compact) {
31009 var len = this.curve.p.byteLength();
31010 var x = this.getX().toArray('be', len);
31011
31012 if (compact)
31013 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
31014
31015 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
31016};
31017
31018BasePoint.prototype.encode = function encode(enc, compact) {
31019 return utils.encode(this._encode(compact), enc);
31020};
31021
31022BasePoint.prototype.precompute = function precompute(power) {
31023 if (this.precomputed)
31024 return this;
31025
31026 var precomputed = {
31027 doubles: null,
31028 naf: null,
31029 beta: null
31030 };
31031 precomputed.naf = this._getNAFPoints(8);
31032 precomputed.doubles = this._getDoubles(4, power);
31033 precomputed.beta = this._getBeta();
31034 this.precomputed = precomputed;
31035
31036 return this;
31037};
31038
31039BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
31040 if (!this.precomputed)
31041 return false;
31042
31043 var doubles = this.precomputed.doubles;
31044 if (!doubles)
31045 return false;
31046
31047 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
31048};
31049
31050BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
31051 if (this.precomputed && this.precomputed.doubles)
31052 return this.precomputed.doubles;
31053
31054 var doubles = [ this ];
31055 var acc = this;
31056 for (var i = 0; i < power; i += step) {
31057 for (var j = 0; j < step; j++)
31058 acc = acc.dbl();
31059 doubles.push(acc);
ebd8d4e8 31060 }
8b095871
IC
31061 return {
31062 step: step,
31063 points: doubles
31064 };
31065};
ebd8d4e8 31066
8b095871
IC
31067BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
31068 if (this.precomputed && this.precomputed.naf)
31069 return this.precomputed.naf;
ebd8d4e8 31070
8b095871
IC
31071 var res = [ this ];
31072 var max = (1 << wnd) - 1;
31073 var dbl = max === 1 ? null : this.dbl();
31074 for (var i = 1; i < max; i++)
31075 res[i] = res[i - 1].add(dbl);
31076 return {
31077 wnd: wnd,
31078 points: res
31079 };
31080};
ebd8d4e8 31081
8b095871
IC
31082BasePoint.prototype._getBeta = function _getBeta() {
31083 return null;
31084};
ebd8d4e8 31085
8b095871
IC
31086BasePoint.prototype.dblp = function dblp(k) {
31087 var r = this;
31088 for (var i = 0; i < k; i++)
31089 r = r.dbl();
31090 return r;
31091};
ebd8d4e8 31092
8b095871
IC
31093},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
31094'use strict';
ebd8d4e8 31095
8b095871
IC
31096var curve = require('../curve');
31097var elliptic = require('../../elliptic');
31098var BN = require('bn.js');
31099var inherits = require('inherits');
31100var Base = curve.base;
ebd8d4e8 31101
8b095871 31102var assert = elliptic.utils.assert;
ebd8d4e8 31103
8b095871
IC
31104function EdwardsCurve(conf) {
31105 // NOTE: Important as we are creating point in Base.call()
31106 this.twisted = (conf.a | 0) !== 1;
31107 this.mOneA = this.twisted && (conf.a | 0) === -1;
31108 this.extended = this.mOneA;
31109
31110 Base.call(this, 'edwards', conf);
31111
31112 this.a = new BN(conf.a, 16).umod(this.red.m);
31113 this.a = this.a.toRed(this.red);
31114 this.c = new BN(conf.c, 16).toRed(this.red);
31115 this.c2 = this.c.redSqr();
31116 this.d = new BN(conf.d, 16).toRed(this.red);
31117 this.dd = this.d.redAdd(this.d);
31118
31119 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
31120 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 31121}
8b095871
IC
31122inherits(EdwardsCurve, Base);
31123module.exports = EdwardsCurve;
ebd8d4e8 31124
8b095871
IC
31125EdwardsCurve.prototype._mulA = function _mulA(num) {
31126 if (this.mOneA)
31127 return num.redNeg();
31128 else
31129 return this.a.redMul(num);
31130};
ebd8d4e8 31131
8b095871
IC
31132EdwardsCurve.prototype._mulC = function _mulC(num) {
31133 if (this.oneC)
31134 return num;
31135 else
31136 return this.c.redMul(num);
31137};
ebd8d4e8 31138
8b095871
IC
31139// Just for compatibility with Short curve
31140EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
31141 return this.point(x, y, z, t);
31142};
ebd8d4e8 31143
8b095871
IC
31144EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
31145 x = new BN(x, 16);
31146 if (!x.red)
31147 x = x.toRed(this.red);
ebd8d4e8 31148
8b095871
IC
31149 var x2 = x.redSqr();
31150 var rhs = this.c2.redSub(this.a.redMul(x2));
31151 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
31152
31153 var y2 = rhs.redMul(lhs.redInvm());
31154 var y = y2.redSqrt();
31155 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31156 throw new Error('invalid point');
31157
31158 var isOdd = y.fromRed().isOdd();
31159 if (odd && !isOdd || !odd && isOdd)
31160 y = y.redNeg();
31161
31162 return this.point(x, y);
31163};
31164
31165EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
31166 y = new BN(y, 16);
31167 if (!y.red)
31168 y = y.toRed(this.red);
31169
31170 // x^2 = (y^2 - 1) / (d y^2 + 1)
31171 var y2 = y.redSqr();
31172 var lhs = y2.redSub(this.one);
31173 var rhs = y2.redMul(this.d).redAdd(this.one);
31174 var x2 = lhs.redMul(rhs.redInvm());
31175
31176 if (x2.cmp(this.zero) === 0) {
31177 if (odd)
31178 throw new Error('invalid point');
31179 else
31180 return this.point(this.zero, y);
ebd8d4e8
IC
31181 }
31182
8b095871
IC
31183 var x = x2.redSqrt();
31184 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
31185 throw new Error('invalid point');
ebd8d4e8 31186
8b095871
IC
31187 if (x.isOdd() !== odd)
31188 x = x.redNeg();
ebd8d4e8 31189
8b095871
IC
31190 return this.point(x, y);
31191};
ebd8d4e8 31192
8b095871
IC
31193EdwardsCurve.prototype.validate = function validate(point) {
31194 if (point.isInfinity())
31195 return true;
ebd8d4e8 31196
8b095871
IC
31197 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
31198 point.normalize();
ebd8d4e8 31199
8b095871
IC
31200 var x2 = point.x.redSqr();
31201 var y2 = point.y.redSqr();
31202 var lhs = x2.redMul(this.a).redAdd(y2);
31203 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 31204
8b095871
IC
31205 return lhs.cmp(rhs) === 0;
31206};
ebd8d4e8 31207
8b095871
IC
31208function Point(curve, x, y, z, t) {
31209 Base.BasePoint.call(this, curve, 'projective');
31210 if (x === null && y === null && z === null) {
31211 this.x = this.curve.zero;
31212 this.y = this.curve.one;
31213 this.z = this.curve.one;
31214 this.t = this.curve.zero;
31215 this.zOne = true;
31216 } else {
31217 this.x = new BN(x, 16);
31218 this.y = new BN(y, 16);
31219 this.z = z ? new BN(z, 16) : this.curve.one;
31220 this.t = t && new BN(t, 16);
31221 if (!this.x.red)
31222 this.x = this.x.toRed(this.curve.red);
31223 if (!this.y.red)
31224 this.y = this.y.toRed(this.curve.red);
31225 if (!this.z.red)
31226 this.z = this.z.toRed(this.curve.red);
31227 if (this.t && !this.t.red)
31228 this.t = this.t.toRed(this.curve.red);
31229 this.zOne = this.z === this.curve.one;
31230
31231 // Use extended coordinates
31232 if (this.curve.extended && !this.t) {
31233 this.t = this.x.redMul(this.y);
31234 if (!this.zOne)
31235 this.t = this.t.redMul(this.z.redInvm());
31236 }
31237 }
31238}
31239inherits(Point, Base.BasePoint);
31240
31241EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31242 return Point.fromJSON(this, obj);
31243};
31244
31245EdwardsCurve.prototype.point = function point(x, y, z, t) {
31246 return new Point(this, x, y, z, t);
31247};
31248
31249Point.fromJSON = function fromJSON(curve, obj) {
31250 return new Point(curve, obj[0], obj[1], obj[2]);
31251};
31252
31253Point.prototype.inspect = function inspect() {
31254 if (this.isInfinity())
31255 return '<EC Point Infinity>';
31256 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31257 ' y: ' + this.y.fromRed().toString(16, 2) +
31258 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31259};
31260
31261Point.prototype.isInfinity = function isInfinity() {
31262 // XXX This code assumes that zero is always zero in red
31263 return this.x.cmpn(0) === 0 &&
31264 this.y.cmp(this.z) === 0;
31265};
31266
31267Point.prototype._extDbl = function _extDbl() {
31268 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31269 // #doubling-dbl-2008-hwcd
31270 // 4M + 4S
31271
31272 // A = X1^2
31273 var a = this.x.redSqr();
31274 // B = Y1^2
31275 var b = this.y.redSqr();
31276 // C = 2 * Z1^2
31277 var c = this.z.redSqr();
31278 c = c.redIAdd(c);
31279 // D = a * A
31280 var d = this.curve._mulA(a);
31281 // E = (X1 + Y1)^2 - A - B
31282 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
31283 // G = D + B
31284 var g = d.redAdd(b);
31285 // F = G - C
31286 var f = g.redSub(c);
31287 // H = D - B
31288 var h = d.redSub(b);
31289 // X3 = E * F
31290 var nx = e.redMul(f);
31291 // Y3 = G * H
31292 var ny = g.redMul(h);
31293 // T3 = E * H
31294 var nt = e.redMul(h);
31295 // Z3 = F * G
31296 var nz = f.redMul(g);
31297 return this.curve.point(nx, ny, nz, nt);
31298};
31299
31300Point.prototype._projDbl = function _projDbl() {
31301 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31302 // #doubling-dbl-2008-bbjlp
31303 // #doubling-dbl-2007-bl
31304 // and others
31305 // Generally 3M + 4S or 2M + 4S
31306
31307 // B = (X1 + Y1)^2
31308 var b = this.x.redAdd(this.y).redSqr();
31309 // C = X1^2
31310 var c = this.x.redSqr();
31311 // D = Y1^2
31312 var d = this.y.redSqr();
31313
31314 var nx;
31315 var ny;
31316 var nz;
31317 if (this.curve.twisted) {
31318 // E = a * C
31319 var e = this.curve._mulA(c);
31320 // F = E + D
31321 var f = e.redAdd(d);
31322 if (this.zOne) {
31323 // X3 = (B - C - D) * (F - 2)
31324 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
31325 // Y3 = F * (E - D)
31326 ny = f.redMul(e.redSub(d));
31327 // Z3 = F^2 - 2 * F
31328 nz = f.redSqr().redSub(f).redSub(f);
31329 } else {
31330 // H = Z1^2
31331 var h = this.z.redSqr();
31332 // J = F - 2 * H
31333 var j = f.redSub(h).redISub(h);
31334 // X3 = (B-C-D)*J
31335 nx = b.redSub(c).redISub(d).redMul(j);
31336 // Y3 = F * (E - D)
31337 ny = f.redMul(e.redSub(d));
31338 // Z3 = F * J
31339 nz = f.redMul(j);
31340 }
31341 } else {
31342 // E = C + D
31343 var e = c.redAdd(d);
31344 // H = (c * Z1)^2
31345 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
31346 // J = E - 2 * H
31347 var j = e.redSub(h).redSub(h);
31348 // X3 = c * (B - E) * J
31349 nx = this.curve._mulC(b.redISub(e)).redMul(j);
31350 // Y3 = c * E * (C - D)
31351 ny = this.curve._mulC(e).redMul(c.redISub(d));
31352 // Z3 = E * J
31353 nz = e.redMul(j);
31354 }
31355 return this.curve.point(nx, ny, nz);
31356};
31357
31358Point.prototype.dbl = function dbl() {
31359 if (this.isInfinity())
31360 return this;
31361
31362 // Double in extended coordinates
31363 if (this.curve.extended)
31364 return this._extDbl();
31365 else
31366 return this._projDbl();
31367};
31368
31369Point.prototype._extAdd = function _extAdd(p) {
31370 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31371 // #addition-add-2008-hwcd-3
31372 // 8M
31373
31374 // A = (Y1 - X1) * (Y2 - X2)
31375 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
31376 // B = (Y1 + X1) * (Y2 + X2)
31377 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
31378 // C = T1 * k * T2
31379 var c = this.t.redMul(this.curve.dd).redMul(p.t);
31380 // D = Z1 * 2 * Z2
31381 var d = this.z.redMul(p.z.redAdd(p.z));
31382 // E = B - A
31383 var e = b.redSub(a);
31384 // F = D - C
31385 var f = d.redSub(c);
31386 // G = D + C
31387 var g = d.redAdd(c);
31388 // H = B + A
31389 var h = b.redAdd(a);
31390 // X3 = E * F
31391 var nx = e.redMul(f);
31392 // Y3 = G * H
31393 var ny = g.redMul(h);
31394 // T3 = E * H
31395 var nt = e.redMul(h);
31396 // Z3 = F * G
31397 var nz = f.redMul(g);
31398 return this.curve.point(nx, ny, nz, nt);
31399};
31400
31401Point.prototype._projAdd = function _projAdd(p) {
31402 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31403 // #addition-add-2008-bbjlp
31404 // #addition-add-2007-bl
31405 // 10M + 1S
31406
31407 // A = Z1 * Z2
31408 var a = this.z.redMul(p.z);
31409 // B = A^2
31410 var b = a.redSqr();
31411 // C = X1 * X2
31412 var c = this.x.redMul(p.x);
31413 // D = Y1 * Y2
31414 var d = this.y.redMul(p.y);
31415 // E = d * C * D
31416 var e = this.curve.d.redMul(c).redMul(d);
31417 // F = B - E
31418 var f = b.redSub(e);
31419 // G = B + E
31420 var g = b.redAdd(e);
31421 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
31422 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
31423 var nx = a.redMul(f).redMul(tmp);
31424 var ny;
31425 var nz;
31426 if (this.curve.twisted) {
31427 // Y3 = A * G * (D - a * C)
31428 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
31429 // Z3 = F * G
31430 nz = f.redMul(g);
31431 } else {
31432 // Y3 = A * G * (D - C)
31433 ny = a.redMul(g).redMul(d.redSub(c));
31434 // Z3 = c * F * G
31435 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 31436 }
8b095871
IC
31437 return this.curve.point(nx, ny, nz);
31438};
ebd8d4e8 31439
8b095871
IC
31440Point.prototype.add = function add(p) {
31441 if (this.isInfinity())
31442 return p;
31443 if (p.isInfinity())
31444 return this;
ebd8d4e8 31445
8b095871
IC
31446 if (this.curve.extended)
31447 return this._extAdd(p);
31448 else
31449 return this._projAdd(p);
31450};
ebd8d4e8 31451
8b095871
IC
31452Point.prototype.mul = function mul(k) {
31453 if (this._hasDoubles(k))
31454 return this.curve._fixedNafMul(this, k);
31455 else
31456 return this.curve._wnafMul(this, k);
31457};
ebd8d4e8 31458
8b095871
IC
31459Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
31460 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
31461};
ebd8d4e8 31462
8b095871
IC
31463Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
31464 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
31465};
ebd8d4e8 31466
8b095871
IC
31467Point.prototype.normalize = function normalize() {
31468 if (this.zOne)
31469 return this;
31470
31471 // Normalize coordinates
31472 var zi = this.z.redInvm();
31473 this.x = this.x.redMul(zi);
31474 this.y = this.y.redMul(zi);
31475 if (this.t)
31476 this.t = this.t.redMul(zi);
31477 this.z = this.curve.one;
31478 this.zOne = true;
31479 return this;
31480};
31481
31482Point.prototype.neg = function neg() {
31483 return this.curve.point(this.x.redNeg(),
31484 this.y,
31485 this.z,
31486 this.t && this.t.redNeg());
31487};
31488
31489Point.prototype.getX = function getX() {
31490 this.normalize();
31491 return this.x.fromRed();
31492};
31493
31494Point.prototype.getY = function getY() {
31495 this.normalize();
31496 return this.y.fromRed();
31497};
31498
31499Point.prototype.eq = function eq(other) {
31500 return this === other ||
31501 this.getX().cmp(other.getX()) === 0 &&
31502 this.getY().cmp(other.getY()) === 0;
31503};
31504
31505Point.prototype.eqXToP = function eqXToP(x) {
31506 var rx = x.toRed(this.curve.red).redMul(this.z);
31507 if (this.x.cmp(rx) === 0)
31508 return true;
ebd8d4e8 31509
8b095871
IC
31510 var xc = x.clone();
31511 var t = this.curve.redN.redMul(this.z);
31512 for (;;) {
31513 xc.iadd(this.curve.n);
31514 if (xc.cmp(this.curve.p) >= 0)
31515 return false;
ebd8d4e8 31516
8b095871
IC
31517 rx.redIAdd(t);
31518 if (this.x.cmp(rx) === 0)
31519 return true;
ebd8d4e8 31520 }
8b095871
IC
31521 return false;
31522};
ebd8d4e8 31523
8b095871
IC
31524// Compatibility with BaseCurve
31525Point.prototype.toP = Point.prototype.normalize;
31526Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 31527
8b095871
IC
31528},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
31529'use strict';
ebd8d4e8 31530
8b095871 31531var curve = exports;
ebd8d4e8 31532
8b095871
IC
31533curve.base = require('./base');
31534curve.short = require('./short');
31535curve.mont = require('./mont');
31536curve.edwards = require('./edwards');
ebd8d4e8 31537
8b095871
IC
31538},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
31539'use strict';
ebd8d4e8 31540
8b095871
IC
31541var curve = require('../curve');
31542var BN = require('bn.js');
31543var inherits = require('inherits');
31544var Base = curve.base;
ebd8d4e8 31545
8b095871
IC
31546var elliptic = require('../../elliptic');
31547var utils = elliptic.utils;
ebd8d4e8 31548
8b095871
IC
31549function MontCurve(conf) {
31550 Base.call(this, 'mont', conf);
ebd8d4e8 31551
8b095871
IC
31552 this.a = new BN(conf.a, 16).toRed(this.red);
31553 this.b = new BN(conf.b, 16).toRed(this.red);
31554 this.i4 = new BN(4).toRed(this.red).redInvm();
31555 this.two = new BN(2).toRed(this.red);
31556 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 31557}
8b095871
IC
31558inherits(MontCurve, Base);
31559module.exports = MontCurve;
ebd8d4e8 31560
8b095871
IC
31561MontCurve.prototype.validate = function validate(point) {
31562 var x = point.normalize().x;
31563 var x2 = x.redSqr();
31564 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
31565 var y = rhs.redSqrt();
ebd8d4e8 31566
8b095871
IC
31567 return y.redSqr().cmp(rhs) === 0;
31568};
ebd8d4e8 31569
8b095871
IC
31570function Point(curve, x, z) {
31571 Base.BasePoint.call(this, curve, 'projective');
31572 if (x === null && z === null) {
31573 this.x = this.curve.one;
31574 this.z = this.curve.zero;
31575 } else {
31576 this.x = new BN(x, 16);
31577 this.z = new BN(z, 16);
31578 if (!this.x.red)
31579 this.x = this.x.toRed(this.curve.red);
31580 if (!this.z.red)
31581 this.z = this.z.toRed(this.curve.red);
31582 }
31583}
31584inherits(Point, Base.BasePoint);
ebd8d4e8 31585
8b095871
IC
31586MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
31587 return this.point(utils.toArray(bytes, enc), 1);
31588};
ebd8d4e8 31589
8b095871
IC
31590MontCurve.prototype.point = function point(x, z) {
31591 return new Point(this, x, z);
31592};
ebd8d4e8 31593
8b095871
IC
31594MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31595 return Point.fromJSON(this, obj);
31596};
ebd8d4e8 31597
8b095871
IC
31598Point.prototype.precompute = function precompute() {
31599 // No-op
31600};
ebd8d4e8 31601
8b095871
IC
31602Point.prototype._encode = function _encode() {
31603 return this.getX().toArray('be', this.curve.p.byteLength());
31604};
ebd8d4e8 31605
8b095871
IC
31606Point.fromJSON = function fromJSON(curve, obj) {
31607 return new Point(curve, obj[0], obj[1] || curve.one);
31608};
ebd8d4e8 31609
8b095871
IC
31610Point.prototype.inspect = function inspect() {
31611 if (this.isInfinity())
31612 return '<EC Point Infinity>';
31613 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31614 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31615};
ebd8d4e8 31616
8b095871
IC
31617Point.prototype.isInfinity = function isInfinity() {
31618 // XXX This code assumes that zero is always zero in red
31619 return this.z.cmpn(0) === 0;
31620};
ebd8d4e8 31621
8b095871
IC
31622Point.prototype.dbl = function dbl() {
31623 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
31624 // 2M + 2S + 4A
31625
31626 // A = X1 + Z1
31627 var a = this.x.redAdd(this.z);
31628 // AA = A^2
31629 var aa = a.redSqr();
31630 // B = X1 - Z1
31631 var b = this.x.redSub(this.z);
31632 // BB = B^2
31633 var bb = b.redSqr();
31634 // C = AA - BB
31635 var c = aa.redSub(bb);
31636 // X3 = AA * BB
31637 var nx = aa.redMul(bb);
31638 // Z3 = C * (BB + A24 * C)
31639 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
31640 return this.curve.point(nx, nz);
31641};
ebd8d4e8 31642
8b095871
IC
31643Point.prototype.add = function add() {
31644 throw new Error('Not supported on Montgomery curve');
31645};
ebd8d4e8 31646
8b095871
IC
31647Point.prototype.diffAdd = function diffAdd(p, diff) {
31648 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
31649 // 4M + 2S + 6A
31650
31651 // A = X2 + Z2
31652 var a = this.x.redAdd(this.z);
31653 // B = X2 - Z2
31654 var b = this.x.redSub(this.z);
31655 // C = X3 + Z3
31656 var c = p.x.redAdd(p.z);
31657 // D = X3 - Z3
31658 var d = p.x.redSub(p.z);
31659 // DA = D * A
31660 var da = d.redMul(a);
31661 // CB = C * B
31662 var cb = c.redMul(b);
31663 // X5 = Z1 * (DA + CB)^2
31664 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
31665 // Z5 = X1 * (DA - CB)^2
31666 var nz = diff.x.redMul(da.redISub(cb).redSqr());
31667 return this.curve.point(nx, nz);
31668};
ebd8d4e8 31669
8b095871
IC
31670Point.prototype.mul = function mul(k) {
31671 var t = k.clone();
31672 var a = this; // (N / 2) * Q + Q
31673 var b = this.curve.point(null, null); // (N / 2) * Q
31674 var c = this; // Q
31675
31676 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
31677 bits.push(t.andln(1));
31678
31679 for (var i = bits.length - 1; i >= 0; i--) {
31680 if (bits[i] === 0) {
31681 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
31682 a = a.diffAdd(b, c);
31683 // N * Q = 2 * ((N / 2) * Q + Q))
31684 b = b.dbl();
31685 } else {
31686 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
31687 b = a.diffAdd(b, c);
31688 // N * Q + Q = 2 * ((N / 2) * Q + Q)
31689 a = a.dbl();
31690 }
ebd8d4e8 31691 }
8b095871
IC
31692 return b;
31693};
ebd8d4e8 31694
8b095871
IC
31695Point.prototype.mulAdd = function mulAdd() {
31696 throw new Error('Not supported on Montgomery curve');
31697};
ebd8d4e8 31698
8b095871
IC
31699Point.prototype.jumlAdd = function jumlAdd() {
31700 throw new Error('Not supported on Montgomery curve');
31701};
ebd8d4e8 31702
8b095871
IC
31703Point.prototype.eq = function eq(other) {
31704 return this.getX().cmp(other.getX()) === 0;
31705};
ebd8d4e8 31706
8b095871
IC
31707Point.prototype.normalize = function normalize() {
31708 this.x = this.x.redMul(this.z.redInvm());
31709 this.z = this.curve.one;
31710 return this;
31711};
ebd8d4e8 31712
8b095871
IC
31713Point.prototype.getX = function getX() {
31714 // Normalize coordinates
31715 this.normalize();
31716
31717 return this.x.fromRed();
31718};
31719
31720},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 31721'use strict';
ebd8d4e8 31722
8b095871
IC
31723var curve = require('../curve');
31724var elliptic = require('../../elliptic');
31725var BN = require('bn.js');
31726var inherits = require('inherits');
31727var Base = curve.base;
ab78acc6 31728
8b095871 31729var assert = elliptic.utils.assert;
ebd8d4e8 31730
8b095871
IC
31731function ShortCurve(conf) {
31732 Base.call(this, 'short', conf);
ebd8d4e8 31733
8b095871
IC
31734 this.a = new BN(conf.a, 16).toRed(this.red);
31735 this.b = new BN(conf.b, 16).toRed(this.red);
31736 this.tinv = this.two.redInvm();
ab78acc6 31737
8b095871
IC
31738 this.zeroA = this.a.fromRed().cmpn(0) === 0;
31739 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 31740
8b095871
IC
31741 // If the curve is endomorphic, precalculate beta and lambda
31742 this.endo = this._getEndomorphism(conf);
31743 this._endoWnafT1 = new Array(4);
31744 this._endoWnafT2 = new Array(4);
ebd8d4e8 31745}
8b095871
IC
31746inherits(ShortCurve, Base);
31747module.exports = ShortCurve;
ebd8d4e8 31748
8b095871
IC
31749ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
31750 // No efficient endomorphism
31751 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
31752 return;
ebd8d4e8 31753
8b095871
IC
31754 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
31755 var beta;
31756 var lambda;
31757 if (conf.beta) {
31758 beta = new BN(conf.beta, 16).toRed(this.red);
31759 } else {
31760 var betas = this._getEndoRoots(this.p);
31761 // Choose the smallest beta
31762 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
31763 beta = beta.toRed(this.red);
31764 }
31765 if (conf.lambda) {
31766 lambda = new BN(conf.lambda, 16);
31767 } else {
31768 // Choose the lambda that is matching selected beta
31769 var lambdas = this._getEndoRoots(this.n);
31770 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
31771 lambda = lambdas[0];
31772 } else {
31773 lambda = lambdas[1];
31774 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
31775 }
31776 }
ab78acc6 31777
8b095871
IC
31778 // Get basis vectors, used for balanced length-two representation
31779 var basis;
31780 if (conf.basis) {
31781 basis = conf.basis.map(function(vec) {
31782 return {
31783 a: new BN(vec.a, 16),
31784 b: new BN(vec.b, 16)
31785 };
31786 });
31787 } else {
31788 basis = this._getEndoBasis(lambda);
31789 }
ab78acc6 31790
8b095871
IC
31791 return {
31792 beta: beta,
31793 lambda: lambda,
31794 basis: basis
31795 };
31796};
ab78acc6 31797
8b095871
IC
31798ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
31799 // Find roots of for x^2 + x + 1 in F
31800 // Root = (-1 +- Sqrt(-3)) / 2
31801 //
31802 var red = num === this.p ? this.red : BN.mont(num);
31803 var tinv = new BN(2).toRed(red).redInvm();
31804 var ntinv = tinv.redNeg();
ab78acc6 31805
8b095871 31806 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 31807
8b095871
IC
31808 var l1 = ntinv.redAdd(s).fromRed();
31809 var l2 = ntinv.redSub(s).fromRed();
31810 return [ l1, l2 ];
31811};
ab78acc6 31812
8b095871
IC
31813ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
31814 // aprxSqrt >= sqrt(this.n)
31815 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
31816
31817 // 3.74
31818 // Run EGCD, until r(L + 1) < aprxSqrt
31819 var u = lambda;
31820 var v = this.n.clone();
31821 var x1 = new BN(1);
31822 var y1 = new BN(0);
31823 var x2 = new BN(0);
31824 var y2 = new BN(1);
31825
31826 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
31827 var a0;
31828 var b0;
31829 // First vector
31830 var a1;
31831 var b1;
31832 // Second vector
31833 var a2;
31834 var b2;
31835
31836 var prevR;
31837 var i = 0;
31838 var r;
31839 var x;
31840 while (u.cmpn(0) !== 0) {
31841 var q = v.div(u);
31842 r = v.sub(q.mul(u));
31843 x = x2.sub(q.mul(x1));
31844 var y = y2.sub(q.mul(y1));
31845
31846 if (!a1 && r.cmp(aprxSqrt) < 0) {
31847 a0 = prevR.neg();
31848 b0 = x1;
31849 a1 = r.neg();
31850 b1 = x;
31851 } else if (a1 && ++i === 2) {
31852 break;
ab78acc6 31853 }
8b095871 31854 prevR = r;
ab78acc6 31855
8b095871
IC
31856 v = u;
31857 u = r;
31858 x2 = x1;
31859 x1 = x;
31860 y2 = y1;
31861 y1 = y;
ebd8d4e8 31862 }
8b095871
IC
31863 a2 = r.neg();
31864 b2 = x;
ab78acc6 31865
8b095871
IC
31866 var len1 = a1.sqr().add(b1.sqr());
31867 var len2 = a2.sqr().add(b2.sqr());
31868 if (len2.cmp(len1) >= 0) {
31869 a2 = a0;
31870 b2 = b0;
31871 }
ebd8d4e8 31872
8b095871
IC
31873 // Normalize signs
31874 if (a1.negative) {
31875 a1 = a1.neg();
31876 b1 = b1.neg();
31877 }
31878 if (a2.negative) {
31879 a2 = a2.neg();
31880 b2 = b2.neg();
31881 }
ebd8d4e8 31882
8b095871
IC
31883 return [
31884 { a: a1, b: b1 },
31885 { a: a2, b: b2 }
31886 ];
31887};
ab78acc6 31888
8b095871
IC
31889ShortCurve.prototype._endoSplit = function _endoSplit(k) {
31890 var basis = this.endo.basis;
31891 var v1 = basis[0];
31892 var v2 = basis[1];
ab78acc6 31893
8b095871
IC
31894 var c1 = v2.b.mul(k).divRound(this.n);
31895 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 31896
8b095871
IC
31897 var p1 = c1.mul(v1.a);
31898 var p2 = c2.mul(v2.a);
31899 var q1 = c1.mul(v1.b);
31900 var q2 = c2.mul(v2.b);
ab78acc6 31901
8b095871
IC
31902 // Calculate answer
31903 var k1 = k.sub(p1).sub(p2);
31904 var k2 = q1.add(q2).neg();
31905 return { k1: k1, k2: k2 };
31906};
ab78acc6 31907
8b095871
IC
31908ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
31909 x = new BN(x, 16);
31910 if (!x.red)
31911 x = x.toRed(this.red);
ab78acc6 31912
8b095871
IC
31913 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
31914 var y = y2.redSqrt();
31915 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31916 throw new Error('invalid point');
ab78acc6 31917
8b095871
IC
31918 // XXX Is there any way to tell if the number is odd without converting it
31919 // to non-red form?
31920 var isOdd = y.fromRed().isOdd();
31921 if (odd && !isOdd || !odd && isOdd)
31922 y = y.redNeg();
ab78acc6 31923
8b095871
IC
31924 return this.point(x, y);
31925};
ab78acc6 31926
8b095871
IC
31927ShortCurve.prototype.validate = function validate(point) {
31928 if (point.inf)
31929 return true;
ab78acc6 31930
8b095871
IC
31931 var x = point.x;
31932 var y = point.y;
ab78acc6 31933
8b095871
IC
31934 var ax = this.a.redMul(x);
31935 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
31936 return y.redSqr().redISub(rhs).cmpn(0) === 0;
31937};
ab78acc6 31938
8b095871
IC
31939ShortCurve.prototype._endoWnafMulAdd =
31940 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
31941 var npoints = this._endoWnafT1;
31942 var ncoeffs = this._endoWnafT2;
31943 for (var i = 0; i < points.length; i++) {
31944 var split = this._endoSplit(coeffs[i]);
31945 var p = points[i];
31946 var beta = p._getBeta();
ab78acc6 31947
8b095871
IC
31948 if (split.k1.negative) {
31949 split.k1.ineg();
31950 p = p.neg(true);
31951 }
31952 if (split.k2.negative) {
31953 split.k2.ineg();
31954 beta = beta.neg(true);
ab78acc6 31955 }
ab78acc6 31956
8b095871
IC
31957 npoints[i * 2] = p;
31958 npoints[i * 2 + 1] = beta;
31959 ncoeffs[i * 2] = split.k1;
31960 ncoeffs[i * 2 + 1] = split.k2;
31961 }
31962 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 31963
8b095871
IC
31964 // Clean-up references to points and coefficients
31965 for (var j = 0; j < i * 2; j++) {
31966 npoints[j] = null;
31967 ncoeffs[j] = null;
31968 }
31969 return res;
31970};
31971
31972function Point(curve, x, y, isRed) {
31973 Base.BasePoint.call(this, curve, 'affine');
31974 if (x === null && y === null) {
31975 this.x = null;
31976 this.y = null;
31977 this.inf = true;
31978 } else {
31979 this.x = new BN(x, 16);
31980 this.y = new BN(y, 16);
31981 // Force redgomery representation when loading from JSON
31982 if (isRed) {
31983 this.x.forceRed(this.curve.red);
31984 this.y.forceRed(this.curve.red);
ab78acc6 31985 }
8b095871
IC
31986 if (!this.x.red)
31987 this.x = this.x.toRed(this.curve.red);
31988 if (!this.y.red)
31989 this.y = this.y.toRed(this.curve.red);
31990 this.inf = false;
31991 }
31992}
31993inherits(Point, Base.BasePoint);
ab78acc6 31994
8b095871
IC
31995ShortCurve.prototype.point = function point(x, y, isRed) {
31996 return new Point(this, x, y, isRed);
31997};
ab78acc6 31998
8b095871
IC
31999ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
32000 return Point.fromJSON(this, obj, red);
32001};
ab78acc6 32002
8b095871
IC
32003Point.prototype._getBeta = function _getBeta() {
32004 if (!this.curve.endo)
32005 return;
ab78acc6 32006
8b095871
IC
32007 var pre = this.precomputed;
32008 if (pre && pre.beta)
32009 return pre.beta;
ab78acc6 32010
8b095871
IC
32011 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
32012 if (pre) {
32013 var curve = this.curve;
32014 var endoMul = function(p) {
32015 return curve.point(p.x.redMul(curve.endo.beta), p.y);
32016 };
32017 pre.beta = beta;
32018 beta.precomputed = {
32019 beta: null,
32020 naf: pre.naf && {
32021 wnd: pre.naf.wnd,
32022 points: pre.naf.points.map(endoMul)
32023 },
32024 doubles: pre.doubles && {
32025 step: pre.doubles.step,
32026 points: pre.doubles.points.map(endoMul)
32027 }
ab78acc6 32028 };
ab78acc6 32029 }
8b095871 32030 return beta;
ab78acc6
IC
32031};
32032
8b095871
IC
32033Point.prototype.toJSON = function toJSON() {
32034 if (!this.precomputed)
32035 return [ this.x, this.y ];
ab78acc6 32036
8b095871
IC
32037 return [ this.x, this.y, this.precomputed && {
32038 doubles: this.precomputed.doubles && {
32039 step: this.precomputed.doubles.step,
32040 points: this.precomputed.doubles.points.slice(1)
32041 },
32042 naf: this.precomputed.naf && {
32043 wnd: this.precomputed.naf.wnd,
32044 points: this.precomputed.naf.points.slice(1)
32045 }
32046 } ];
32047};
ab78acc6 32048
8b095871
IC
32049Point.fromJSON = function fromJSON(curve, obj, red) {
32050 if (typeof obj === 'string')
32051 obj = JSON.parse(obj);
32052 var res = curve.point(obj[0], obj[1], red);
32053 if (!obj[2])
32054 return res;
ab78acc6 32055
8b095871
IC
32056 function obj2point(obj) {
32057 return curve.point(obj[0], obj[1], red);
32058 }
32059
32060 var pre = obj[2];
32061 res.precomputed = {
32062 beta: null,
32063 doubles: pre.doubles && {
32064 step: pre.doubles.step,
32065 points: [ res ].concat(pre.doubles.points.map(obj2point))
32066 },
32067 naf: pre.naf && {
32068 wnd: pre.naf.wnd,
32069 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 32070 }
8b095871
IC
32071 };
32072 return res;
32073};
ab78acc6 32074
8b095871
IC
32075Point.prototype.inspect = function inspect() {
32076 if (this.isInfinity())
32077 return '<EC Point Infinity>';
32078 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
32079 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
32080};
ab78acc6 32081
8b095871
IC
32082Point.prototype.isInfinity = function isInfinity() {
32083 return this.inf;
32084};
ebd8d4e8 32085
8b095871
IC
32086Point.prototype.add = function add(p) {
32087 // O + P = P
32088 if (this.inf)
32089 return p;
ab78acc6 32090
8b095871
IC
32091 // P + O = P
32092 if (p.inf)
32093 return this;
ab78acc6 32094
8b095871
IC
32095 // P + P = 2P
32096 if (this.eq(p))
32097 return this.dbl();
ab78acc6 32098
8b095871
IC
32099 // P + (-P) = O
32100 if (this.neg().eq(p))
32101 return this.curve.point(null, null);
ab78acc6 32102
8b095871
IC
32103 // P + Q = O
32104 if (this.x.cmp(p.x) === 0)
32105 return this.curve.point(null, null);
ebd8d4e8 32106
8b095871
IC
32107 var c = this.y.redSub(p.y);
32108 if (c.cmpn(0) !== 0)
32109 c = c.redMul(this.x.redSub(p.x).redInvm());
32110 var nx = c.redSqr().redISub(this.x).redISub(p.x);
32111 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32112 return this.curve.point(nx, ny);
32113};
ab78acc6 32114
8b095871
IC
32115Point.prototype.dbl = function dbl() {
32116 if (this.inf)
32117 return this;
ebd8d4e8 32118
8b095871
IC
32119 // 2P = O
32120 var ys1 = this.y.redAdd(this.y);
32121 if (ys1.cmpn(0) === 0)
32122 return this.curve.point(null, null);
ebd8d4e8 32123
8b095871 32124 var a = this.curve.a;
ebd8d4e8 32125
8b095871
IC
32126 var x2 = this.x.redSqr();
32127 var dyinv = ys1.redInvm();
32128 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 32129
8b095871
IC
32130 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
32131 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32132 return this.curve.point(nx, ny);
32133};
ebd8d4e8 32134
8b095871
IC
32135Point.prototype.getX = function getX() {
32136 return this.x.fromRed();
32137};
ab78acc6 32138
8b095871
IC
32139Point.prototype.getY = function getY() {
32140 return this.y.fromRed();
32141};
ebd8d4e8 32142
8b095871
IC
32143Point.prototype.mul = function mul(k) {
32144 k = new BN(k, 16);
ebd8d4e8 32145
8b095871
IC
32146 if (this._hasDoubles(k))
32147 return this.curve._fixedNafMul(this, k);
32148 else if (this.curve.endo)
32149 return this.curve._endoWnafMulAdd([ this ], [ k ]);
32150 else
32151 return this.curve._wnafMul(this, k);
32152};
ebd8d4e8 32153
8b095871
IC
32154Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
32155 var points = [ this, p2 ];
32156 var coeffs = [ k1, k2 ];
32157 if (this.curve.endo)
32158 return this.curve._endoWnafMulAdd(points, coeffs);
32159 else
32160 return this.curve._wnafMulAdd(1, points, coeffs, 2);
32161};
ebd8d4e8 32162
8b095871
IC
32163Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
32164 var points = [ this, p2 ];
32165 var coeffs = [ k1, k2 ];
32166 if (this.curve.endo)
32167 return this.curve._endoWnafMulAdd(points, coeffs, true);
32168 else
32169 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
32170};
ebd8d4e8 32171
8b095871
IC
32172Point.prototype.eq = function eq(p) {
32173 return this === p ||
32174 this.inf === p.inf &&
32175 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
32176};
ebd8d4e8 32177
8b095871
IC
32178Point.prototype.neg = function neg(_precompute) {
32179 if (this.inf)
32180 return this;
ebd8d4e8 32181
8b095871
IC
32182 var res = this.curve.point(this.x, this.y.redNeg());
32183 if (_precompute && this.precomputed) {
32184 var pre = this.precomputed;
32185 var negate = function(p) {
32186 return p.neg();
32187 };
32188 res.precomputed = {
32189 naf: pre.naf && {
32190 wnd: pre.naf.wnd,
32191 points: pre.naf.points.map(negate)
32192 },
32193 doubles: pre.doubles && {
32194 step: pre.doubles.step,
32195 points: pre.doubles.points.map(negate)
32196 }
32197 };
32198 }
32199 return res;
32200};
ebd8d4e8 32201
8b095871
IC
32202Point.prototype.toJ = function toJ() {
32203 if (this.inf)
32204 return this.curve.jpoint(null, null, null);
ebd8d4e8 32205
8b095871
IC
32206 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
32207 return res;
32208};
ebd8d4e8 32209
8b095871
IC
32210function JPoint(curve, x, y, z) {
32211 Base.BasePoint.call(this, curve, 'jacobian');
32212 if (x === null && y === null && z === null) {
32213 this.x = this.curve.one;
32214 this.y = this.curve.one;
32215 this.z = new BN(0);
32216 } else {
32217 this.x = new BN(x, 16);
32218 this.y = new BN(y, 16);
32219 this.z = new BN(z, 16);
32220 }
32221 if (!this.x.red)
32222 this.x = this.x.toRed(this.curve.red);
32223 if (!this.y.red)
32224 this.y = this.y.toRed(this.curve.red);
32225 if (!this.z.red)
32226 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 32227
8b095871 32228 this.zOne = this.z === this.curve.one;
ab78acc6 32229}
8b095871 32230inherits(JPoint, Base.BasePoint);
ab78acc6 32231
8b095871
IC
32232ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
32233 return new JPoint(this, x, y, z);
32234};
ab78acc6 32235
8b095871
IC
32236JPoint.prototype.toP = function toP() {
32237 if (this.isInfinity())
32238 return this.curve.point(null, null);
ab78acc6 32239
8b095871
IC
32240 var zinv = this.z.redInvm();
32241 var zinv2 = zinv.redSqr();
32242 var ax = this.x.redMul(zinv2);
32243 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 32244
8b095871
IC
32245 return this.curve.point(ax, ay);
32246};
ab78acc6 32247
8b095871
IC
32248JPoint.prototype.neg = function neg() {
32249 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
32250};
ab78acc6 32251
8b095871
IC
32252JPoint.prototype.add = function add(p) {
32253 // O + P = P
32254 if (this.isInfinity())
32255 return p;
ab78acc6 32256
8b095871
IC
32257 // P + O = P
32258 if (p.isInfinity())
32259 return this;
ab78acc6 32260
8b095871
IC
32261 // 12M + 4S + 7A
32262 var pz2 = p.z.redSqr();
32263 var z2 = this.z.redSqr();
32264 var u1 = this.x.redMul(pz2);
32265 var u2 = p.x.redMul(z2);
32266 var s1 = this.y.redMul(pz2.redMul(p.z));
32267 var s2 = p.y.redMul(z2.redMul(this.z));
32268
32269 var h = u1.redSub(u2);
32270 var r = s1.redSub(s2);
32271 if (h.cmpn(0) === 0) {
32272 if (r.cmpn(0) !== 0)
32273 return this.curve.jpoint(null, null, null);
32274 else
32275 return this.dbl();
32276 }
ab78acc6 32277
8b095871
IC
32278 var h2 = h.redSqr();
32279 var h3 = h2.redMul(h);
32280 var v = u1.redMul(h2);
ab78acc6 32281
8b095871
IC
32282 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32283 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32284 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 32285
8b095871
IC
32286 return this.curve.jpoint(nx, ny, nz);
32287};
ab78acc6 32288
8b095871
IC
32289JPoint.prototype.mixedAdd = function mixedAdd(p) {
32290 // O + P = P
32291 if (this.isInfinity())
32292 return p.toJ();
ab78acc6 32293
8b095871
IC
32294 // P + O = P
32295 if (p.isInfinity())
32296 return this;
ab78acc6 32297
8b095871
IC
32298 // 8M + 3S + 7A
32299 var z2 = this.z.redSqr();
32300 var u1 = this.x;
32301 var u2 = p.x.redMul(z2);
32302 var s1 = this.y;
32303 var s2 = p.y.redMul(z2).redMul(this.z);
32304
32305 var h = u1.redSub(u2);
32306 var r = s1.redSub(s2);
32307 if (h.cmpn(0) === 0) {
32308 if (r.cmpn(0) !== 0)
32309 return this.curve.jpoint(null, null, null);
32310 else
32311 return this.dbl();
ab78acc6
IC
32312 }
32313
8b095871
IC
32314 var h2 = h.redSqr();
32315 var h3 = h2.redMul(h);
32316 var v = u1.redMul(h2);
ab78acc6 32317
8b095871
IC
32318 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32319 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32320 var nz = this.z.redMul(h);
ab78acc6 32321
8b095871
IC
32322 return this.curve.jpoint(nx, ny, nz);
32323};
ab78acc6 32324
8b095871
IC
32325JPoint.prototype.dblp = function dblp(pow) {
32326 if (pow === 0)
32327 return this;
32328 if (this.isInfinity())
32329 return this;
32330 if (!pow)
32331 return this.dbl();
32332
32333 if (this.curve.zeroA || this.curve.threeA) {
32334 var r = this;
32335 for (var i = 0; i < pow; i++)
32336 r = r.dbl();
32337 return r;
32338 }
32339
32340 // 1M + 2S + 1A + N * (4S + 5M + 8A)
32341 // N = 1 => 6M + 6S + 9A
32342 var a = this.curve.a;
32343 var tinv = this.curve.tinv;
32344
32345 var jx = this.x;
32346 var jy = this.y;
32347 var jz = this.z;
32348 var jz4 = jz.redSqr().redSqr();
32349
32350 // Reuse results
32351 var jyd = jy.redAdd(jy);
32352 for (var i = 0; i < pow; i++) {
32353 var jx2 = jx.redSqr();
32354 var jyd2 = jyd.redSqr();
32355 var jyd4 = jyd2.redSqr();
32356 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
32357
32358 var t1 = jx.redMul(jyd2);
32359 var nx = c.redSqr().redISub(t1.redAdd(t1));
32360 var t2 = t1.redISub(nx);
32361 var dny = c.redMul(t2);
32362 dny = dny.redIAdd(dny).redISub(jyd4);
32363 var nz = jyd.redMul(jz);
32364 if (i + 1 < pow)
32365 jz4 = jz4.redMul(jyd4);
32366
32367 jx = nx;
32368 jz = nz;
32369 jyd = dny;
32370 }
32371
32372 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
32373};
ab78acc6 32374
8b095871
IC
32375JPoint.prototype.dbl = function dbl() {
32376 if (this.isInfinity())
32377 return this;
ab78acc6 32378
8b095871
IC
32379 if (this.curve.zeroA)
32380 return this._zeroDbl();
32381 else if (this.curve.threeA)
32382 return this._threeDbl();
32383 else
32384 return this._dbl();
32385};
ab78acc6 32386
8b095871
IC
32387JPoint.prototype._zeroDbl = function _zeroDbl() {
32388 var nx;
32389 var ny;
32390 var nz;
32391 // Z = 1
32392 if (this.zOne) {
32393 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32394 // #doubling-mdbl-2007-bl
32395 // 1M + 5S + 14A
32396
32397 // XX = X1^2
32398 var xx = this.x.redSqr();
32399 // YY = Y1^2
32400 var yy = this.y.redSqr();
32401 // YYYY = YY^2
32402 var yyyy = yy.redSqr();
32403 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32404 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32405 s = s.redIAdd(s);
32406 // M = 3 * XX + a; a = 0
32407 var m = xx.redAdd(xx).redIAdd(xx);
32408 // T = M ^ 2 - 2*S
32409 var t = m.redSqr().redISub(s).redISub(s);
32410
32411 // 8 * YYYY
32412 var yyyy8 = yyyy.redIAdd(yyyy);
32413 yyyy8 = yyyy8.redIAdd(yyyy8);
32414 yyyy8 = yyyy8.redIAdd(yyyy8);
32415
32416 // X3 = T
32417 nx = t;
32418 // Y3 = M * (S - T) - 8 * YYYY
32419 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32420 // Z3 = 2*Y1
32421 nz = this.y.redAdd(this.y);
32422 } else {
32423 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32424 // #doubling-dbl-2009-l
32425 // 2M + 5S + 13A
32426
32427 // A = X1^2
32428 var a = this.x.redSqr();
32429 // B = Y1^2
32430 var b = this.y.redSqr();
32431 // C = B^2
32432 var c = b.redSqr();
32433 // D = 2 * ((X1 + B)^2 - A - C)
32434 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
32435 d = d.redIAdd(d);
32436 // E = 3 * A
32437 var e = a.redAdd(a).redIAdd(a);
32438 // F = E^2
32439 var f = e.redSqr();
32440
32441 // 8 * C
32442 var c8 = c.redIAdd(c);
32443 c8 = c8.redIAdd(c8);
32444 c8 = c8.redIAdd(c8);
32445
32446 // X3 = F - 2 * D
32447 nx = f.redISub(d).redISub(d);
32448 // Y3 = E * (D - X3) - 8 * C
32449 ny = e.redMul(d.redISub(nx)).redISub(c8);
32450 // Z3 = 2 * Y1 * Z1
32451 nz = this.y.redMul(this.z);
32452 nz = nz.redIAdd(nz);
32453 }
32454
32455 return this.curve.jpoint(nx, ny, nz);
32456};
ab78acc6 32457
8b095871
IC
32458JPoint.prototype._threeDbl = function _threeDbl() {
32459 var nx;
32460 var ny;
32461 var nz;
32462 // Z = 1
32463 if (this.zOne) {
32464 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
32465 // #doubling-mdbl-2007-bl
32466 // 1M + 5S + 15A
32467
32468 // XX = X1^2
32469 var xx = this.x.redSqr();
32470 // YY = Y1^2
32471 var yy = this.y.redSqr();
32472 // YYYY = YY^2
32473 var yyyy = yy.redSqr();
32474 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32475 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32476 s = s.redIAdd(s);
32477 // M = 3 * XX + a
32478 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
32479 // T = M^2 - 2 * S
32480 var t = m.redSqr().redISub(s).redISub(s);
32481 // X3 = T
32482 nx = t;
32483 // Y3 = M * (S - T) - 8 * YYYY
32484 var yyyy8 = yyyy.redIAdd(yyyy);
32485 yyyy8 = yyyy8.redIAdd(yyyy8);
32486 yyyy8 = yyyy8.redIAdd(yyyy8);
32487 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32488 // Z3 = 2 * Y1
32489 nz = this.y.redAdd(this.y);
32490 } else {
32491 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
32492 // 3M + 5S
32493
32494 // delta = Z1^2
32495 var delta = this.z.redSqr();
32496 // gamma = Y1^2
32497 var gamma = this.y.redSqr();
32498 // beta = X1 * gamma
32499 var beta = this.x.redMul(gamma);
32500 // alpha = 3 * (X1 - delta) * (X1 + delta)
32501 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
32502 alpha = alpha.redAdd(alpha).redIAdd(alpha);
32503 // X3 = alpha^2 - 8 * beta
32504 var beta4 = beta.redIAdd(beta);
32505 beta4 = beta4.redIAdd(beta4);
32506 var beta8 = beta4.redAdd(beta4);
32507 nx = alpha.redSqr().redISub(beta8);
32508 // Z3 = (Y1 + Z1)^2 - gamma - delta
32509 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
32510 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
32511 var ggamma8 = gamma.redSqr();
32512 ggamma8 = ggamma8.redIAdd(ggamma8);
32513 ggamma8 = ggamma8.redIAdd(ggamma8);
32514 ggamma8 = ggamma8.redIAdd(ggamma8);
32515 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
32516 }
32517
32518 return this.curve.jpoint(nx, ny, nz);
32519};
ab78acc6 32520
8b095871
IC
32521JPoint.prototype._dbl = function _dbl() {
32522 var a = this.curve.a;
ab78acc6 32523
8b095871
IC
32524 // 4M + 6S + 10A
32525 var jx = this.x;
32526 var jy = this.y;
32527 var jz = this.z;
32528 var jz4 = jz.redSqr().redSqr();
ab78acc6 32529
8b095871
IC
32530 var jx2 = jx.redSqr();
32531 var jy2 = jy.redSqr();
ebd8d4e8 32532
8b095871 32533 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 32534
8b095871
IC
32535 var jxd4 = jx.redAdd(jx);
32536 jxd4 = jxd4.redIAdd(jxd4);
32537 var t1 = jxd4.redMul(jy2);
32538 var nx = c.redSqr().redISub(t1.redAdd(t1));
32539 var t2 = t1.redISub(nx);
ebd8d4e8 32540
8b095871
IC
32541 var jyd8 = jy2.redSqr();
32542 jyd8 = jyd8.redIAdd(jyd8);
32543 jyd8 = jyd8.redIAdd(jyd8);
32544 jyd8 = jyd8.redIAdd(jyd8);
32545 var ny = c.redMul(t2).redISub(jyd8);
32546 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 32547
8b095871
IC
32548 return this.curve.jpoint(nx, ny, nz);
32549};
ebd8d4e8 32550
8b095871
IC
32551JPoint.prototype.trpl = function trpl() {
32552 if (!this.curve.zeroA)
32553 return this.dbl().add(this);
32554
32555 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
32556 // 5M + 10S + ...
32557
32558 // XX = X1^2
32559 var xx = this.x.redSqr();
32560 // YY = Y1^2
32561 var yy = this.y.redSqr();
32562 // ZZ = Z1^2
32563 var zz = this.z.redSqr();
32564 // YYYY = YY^2
32565 var yyyy = yy.redSqr();
32566 // M = 3 * XX + a * ZZ2; a = 0
32567 var m = xx.redAdd(xx).redIAdd(xx);
32568 // MM = M^2
32569 var mm = m.redSqr();
32570 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
32571 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32572 e = e.redIAdd(e);
32573 e = e.redAdd(e).redIAdd(e);
32574 e = e.redISub(mm);
32575 // EE = E^2
32576 var ee = e.redSqr();
32577 // T = 16*YYYY
32578 var t = yyyy.redIAdd(yyyy);
32579 t = t.redIAdd(t);
32580 t = t.redIAdd(t);
32581 t = t.redIAdd(t);
32582 // U = (M + E)^2 - MM - EE - T
32583 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
32584 // X3 = 4 * (X1 * EE - 4 * YY * U)
32585 var yyu4 = yy.redMul(u);
32586 yyu4 = yyu4.redIAdd(yyu4);
32587 yyu4 = yyu4.redIAdd(yyu4);
32588 var nx = this.x.redMul(ee).redISub(yyu4);
32589 nx = nx.redIAdd(nx);
32590 nx = nx.redIAdd(nx);
32591 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
32592 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
32593 ny = ny.redIAdd(ny);
32594 ny = ny.redIAdd(ny);
32595 ny = ny.redIAdd(ny);
32596 // Z3 = (Z1 + E)^2 - ZZ - EE
32597 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
32598
32599 return this.curve.jpoint(nx, ny, nz);
32600};
ebd8d4e8 32601
8b095871
IC
32602JPoint.prototype.mul = function mul(k, kbase) {
32603 k = new BN(k, kbase);
ebd8d4e8 32604
8b095871
IC
32605 return this.curve._wnafMul(this, k);
32606};
ebd8d4e8 32607
8b095871
IC
32608JPoint.prototype.eq = function eq(p) {
32609 if (p.type === 'affine')
32610 return this.eq(p.toJ());
ebd8d4e8 32611
8b095871
IC
32612 if (this === p)
32613 return true;
ebd8d4e8 32614
8b095871
IC
32615 // x1 * z2^2 == x2 * z1^2
32616 var z2 = this.z.redSqr();
32617 var pz2 = p.z.redSqr();
32618 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
32619 return false;
ebd8d4e8 32620
8b095871
IC
32621 // y1 * z2^3 == y2 * z1^3
32622 var z3 = z2.redMul(this.z);
32623 var pz3 = pz2.redMul(p.z);
32624 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
32625};
ab78acc6 32626
8b095871
IC
32627JPoint.prototype.eqXToP = function eqXToP(x) {
32628 var zs = this.z.redSqr();
32629 var rx = x.toRed(this.curve.red).redMul(zs);
32630 if (this.x.cmp(rx) === 0)
32631 return true;
ebd8d4e8 32632
8b095871
IC
32633 var xc = x.clone();
32634 var t = this.curve.redN.redMul(zs);
32635 for (;;) {
32636 xc.iadd(this.curve.n);
32637 if (xc.cmp(this.curve.p) >= 0)
32638 return false;
ebd8d4e8 32639
8b095871
IC
32640 rx.redIAdd(t);
32641 if (this.x.cmp(rx) === 0)
32642 return true;
32643 }
32644 return false;
32645};
ebd8d4e8 32646
8b095871
IC
32647JPoint.prototype.inspect = function inspect() {
32648 if (this.isInfinity())
32649 return '<EC JPoint Infinity>';
32650 return '<EC JPoint x: ' + this.x.toString(16, 2) +
32651 ' y: ' + this.y.toString(16, 2) +
32652 ' z: ' + this.z.toString(16, 2) + '>';
32653};
ebd8d4e8 32654
8b095871
IC
32655JPoint.prototype.isInfinity = function isInfinity() {
32656 // XXX This code assumes that zero is always zero in red
32657 return this.z.cmpn(0) === 0;
32658};
ebd8d4e8 32659
8b095871
IC
32660},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
32661'use strict';
ebd8d4e8 32662
8b095871 32663var curves = exports;
ebd8d4e8 32664
8b095871
IC
32665var hash = require('hash.js');
32666var elliptic = require('../elliptic');
ebd8d4e8 32667
8b095871 32668var assert = elliptic.utils.assert;
ebd8d4e8 32669
8b095871
IC
32670function PresetCurve(options) {
32671 if (options.type === 'short')
32672 this.curve = new elliptic.curve.short(options);
32673 else if (options.type === 'edwards')
32674 this.curve = new elliptic.curve.edwards(options);
32675 else
32676 this.curve = new elliptic.curve.mont(options);
32677 this.g = this.curve.g;
32678 this.n = this.curve.n;
32679 this.hash = options.hash;
32680
32681 assert(this.g.validate(), 'Invalid curve');
32682 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
32683}
32684curves.PresetCurve = PresetCurve;
32685
32686function defineCurve(name, options) {
32687 Object.defineProperty(curves, name, {
32688 configurable: true,
32689 enumerable: true,
32690 get: function() {
32691 var curve = new PresetCurve(options);
32692 Object.defineProperty(curves, name, {
32693 configurable: true,
32694 enumerable: true,
32695 value: curve
32696 });
32697 return curve;
32698 }
32699 });
ebd8d4e8
IC
32700}
32701
8b095871
IC
32702defineCurve('p192', {
32703 type: 'short',
32704 prime: 'p192',
32705 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
32706 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
32707 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
32708 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
32709 hash: hash.sha256,
32710 gRed: false,
32711 g: [
32712 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
32713 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
32714 ]
32715});
ebd8d4e8 32716
8b095871
IC
32717defineCurve('p224', {
32718 type: 'short',
32719 prime: 'p224',
32720 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
32721 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
32722 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
32723 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
32724 hash: hash.sha256,
32725 gRed: false,
32726 g: [
32727 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
32728 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
32729 ]
32730});
ebd8d4e8 32731
8b095871
IC
32732defineCurve('p256', {
32733 type: 'short',
32734 prime: null,
32735 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
32736 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
32737 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
32738 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
32739 hash: hash.sha256,
32740 gRed: false,
32741 g: [
32742 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
32743 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
32744 ]
32745});
ebd8d4e8 32746
8b095871
IC
32747defineCurve('p384', {
32748 type: 'short',
32749 prime: null,
32750 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32751 'fffffffe ffffffff 00000000 00000000 ffffffff',
32752 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32753 'fffffffe ffffffff 00000000 00000000 fffffffc',
32754 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
32755 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
32756 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
32757 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
32758 hash: hash.sha384,
32759 gRed: false,
32760 g: [
32761 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
32762 '5502f25d bf55296c 3a545e38 72760ab7',
32763 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
32764 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
32765 ]
32766});
ebd8d4e8 32767
8b095871
IC
32768defineCurve('p521', {
32769 type: 'short',
32770 prime: null,
32771 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32772 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32773 'ffffffff ffffffff ffffffff ffffffff ffffffff',
32774 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32775 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32776 'ffffffff ffffffff ffffffff ffffffff fffffffc',
32777 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
32778 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
32779 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
32780 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32781 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
32782 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
32783 hash: hash.sha512,
32784 gRed: false,
32785 g: [
32786 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
32787 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
32788 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
32789 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
32790 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
32791 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
32792 ]
32793});
ebd8d4e8 32794
8b095871
IC
32795defineCurve('curve25519', {
32796 type: 'mont',
32797 prime: 'p25519',
32798 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32799 a: '76d06',
32800 b: '1',
32801 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32802 hash: hash.sha256,
32803 gRed: false,
32804 g: [
32805 '9'
32806 ]
32807});
ebd8d4e8 32808
8b095871
IC
32809defineCurve('ed25519', {
32810 type: 'edwards',
32811 prime: 'p25519',
32812 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32813 a: '-1',
32814 c: '1',
32815 // -121665 * (121666^(-1)) (mod P)
32816 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
32817 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32818 hash: hash.sha256,
32819 gRed: false,
32820 g: [
32821 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
32822
32823 // 4/5
32824 '6666666666666666666666666666666666666666666666666666666666666658'
32825 ]
32826});
ebd8d4e8 32827
8b095871
IC
32828var pre;
32829try {
32830 pre = require('./precomputed/secp256k1');
32831} catch (e) {
32832 pre = undefined;
32833}
32834
32835defineCurve('secp256k1', {
32836 type: 'short',
32837 prime: 'k256',
32838 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
32839 a: '0',
32840 b: '7',
32841 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
32842 h: '1',
32843 hash: hash.sha256,
32844
32845 // Precomputed endomorphism
32846 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
32847 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
32848 basis: [
32849 {
32850 a: '3086d221a7d46bcde86c90e49284eb15',
32851 b: '-e4437ed6010e88286f547fa90abfe4c3'
32852 },
32853 {
32854 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
32855 b: '3086d221a7d46bcde86c90e49284eb15'
32856 }
32857 ],
ebd8d4e8 32858
8b095871
IC
32859 gRed: false,
32860 g: [
32861 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
32862 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
32863 pre
32864 ]
32865});
ebd8d4e8 32866
8b095871
IC
32867},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
32868'use strict';
ebd8d4e8 32869
8b095871
IC
32870var BN = require('bn.js');
32871var elliptic = require('../../elliptic');
32872var utils = elliptic.utils;
32873var assert = utils.assert;
ebd8d4e8 32874
8b095871
IC
32875var KeyPair = require('./key');
32876var Signature = require('./signature');
ebd8d4e8 32877
8b095871
IC
32878function EC(options) {
32879 if (!(this instanceof EC))
32880 return new EC(options);
ebd8d4e8 32881
8b095871
IC
32882 // Shortcut `elliptic.ec(curve-name)`
32883 if (typeof options === 'string') {
32884 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
32885
32886 options = elliptic.curves[options];
ebd8d4e8
IC
32887 }
32888
8b095871
IC
32889 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
32890 if (options instanceof elliptic.curves.PresetCurve)
32891 options = { curve: options };
ebd8d4e8 32892
8b095871
IC
32893 this.curve = options.curve.curve;
32894 this.n = this.curve.n;
32895 this.nh = this.n.ushrn(1);
32896 this.g = this.curve.g;
ebd8d4e8 32897
8b095871
IC
32898 // Point on curve
32899 this.g = options.curve.g;
32900 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 32901
8b095871
IC
32902 // Hash for function for DRBG
32903 this.hash = options.hash || options.curve.hash;
ebd8d4e8 32904}
8b095871 32905module.exports = EC;
ebd8d4e8 32906
8b095871
IC
32907EC.prototype.keyPair = function keyPair(options) {
32908 return new KeyPair(this, options);
32909};
32910
32911EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
32912 return KeyPair.fromPrivate(this, priv, enc);
32913};
32914
32915EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
32916 return KeyPair.fromPublic(this, pub, enc);
32917};
32918
32919EC.prototype.genKeyPair = function genKeyPair(options) {
32920 if (!options)
32921 options = {};
32922
32923 // Instantiate Hmac_DRBG
32924 var drbg = new elliptic.hmacDRBG({
32925 hash: this.hash,
32926 pers: options.pers,
32927 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
32928 nonce: this.n.toArray()
32929 });
ebd8d4e8 32930
8b095871
IC
32931 var bytes = this.n.byteLength();
32932 var ns2 = this.n.sub(new BN(2));
32933 do {
32934 var priv = new BN(drbg.generate(bytes));
32935 if (priv.cmp(ns2) > 0)
32936 continue;
ebd8d4e8 32937
8b095871
IC
32938 priv.iaddn(1);
32939 return this.keyFromPrivate(priv);
32940 } while (true);
32941};
ebd8d4e8 32942
8b095871
IC
32943EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
32944 var delta = msg.byteLength() * 8 - this.n.bitLength();
32945 if (delta > 0)
32946 msg = msg.ushrn(delta);
32947 if (!truncOnly && msg.cmp(this.n) >= 0)
32948 return msg.sub(this.n);
32949 else
32950 return msg;
32951};
ebd8d4e8 32952
8b095871
IC
32953EC.prototype.sign = function sign(msg, key, enc, options) {
32954 if (typeof enc === 'object') {
32955 options = enc;
32956 enc = null;
ebd8d4e8 32957 }
8b095871
IC
32958 if (!options)
32959 options = {};
ebd8d4e8 32960
8b095871
IC
32961 key = this.keyFromPrivate(key, enc);
32962 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 32963
8b095871
IC
32964 // Zero-extend key to provide enough entropy
32965 var bytes = this.n.byteLength();
32966 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 32967
8b095871
IC
32968 // Zero-extend nonce to have the same byte size as N
32969 var nonce = msg.toArray('be', bytes);
ab78acc6 32970
8b095871
IC
32971 // Instantiate Hmac_DRBG
32972 var drbg = new elliptic.hmacDRBG({
32973 hash: this.hash,
32974 entropy: bkey,
32975 nonce: nonce,
32976 pers: options.pers,
32977 persEnc: options.persEnc
32978 });
ab78acc6 32979
8b095871
IC
32980 // Number of bytes to generate
32981 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 32982
8b095871
IC
32983 for (var iter = 0; true; iter++) {
32984 var k = options.k ?
32985 options.k(iter) :
32986 new BN(drbg.generate(this.n.byteLength()));
32987 k = this._truncateToN(k, true);
32988 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
32989 continue;
ebd8d4e8 32990
8b095871
IC
32991 var kp = this.g.mul(k);
32992 if (kp.isInfinity())
32993 continue;
ebd8d4e8 32994
8b095871
IC
32995 var kpX = kp.getX();
32996 var r = kpX.umod(this.n);
32997 if (r.cmpn(0) === 0)
32998 continue;
ebd8d4e8 32999
8b095871
IC
33000 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
33001 s = s.umod(this.n);
33002 if (s.cmpn(0) === 0)
33003 continue;
ebd8d4e8 33004
8b095871
IC
33005 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
33006 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 33007
8b095871
IC
33008 // Use complement of `s`, if it is > `n / 2`
33009 if (options.canonical && s.cmp(this.nh) > 0) {
33010 s = this.n.sub(s);
33011 recoveryParam ^= 1;
33012 }
ebd8d4e8 33013
8b095871
IC
33014 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
33015 }
33016};
ebd8d4e8 33017
8b095871
IC
33018EC.prototype.verify = function verify(msg, signature, key, enc) {
33019 msg = this._truncateToN(new BN(msg, 16));
33020 key = this.keyFromPublic(key, enc);
33021 signature = new Signature(signature, 'hex');
ebd8d4e8 33022
8b095871
IC
33023 // Perform primitive values validation
33024 var r = signature.r;
33025 var s = signature.s;
33026 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
33027 return false;
33028 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
33029 return false;
ebd8d4e8 33030
8b095871
IC
33031 // Validate signature
33032 var sinv = s.invm(this.n);
33033 var u1 = sinv.mul(msg).umod(this.n);
33034 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 33035
8b095871
IC
33036 if (!this.curve._maxwellTrick) {
33037 var p = this.g.mulAdd(u1, key.getPublic(), u2);
33038 if (p.isInfinity())
33039 return false;
ebd8d4e8 33040
8b095871
IC
33041 return p.getX().umod(this.n).cmp(r) === 0;
33042 }
ab78acc6 33043
8b095871
IC
33044 // NOTE: Greg Maxwell's trick, inspired by:
33045 // https://git.io/vad3K
ebd8d4e8 33046
8b095871
IC
33047 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
33048 if (p.isInfinity())
33049 return false;
ab78acc6 33050
8b095871
IC
33051 // Compare `p.x` of Jacobian point with `r`,
33052 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
33053 // inverse of `p.z^2`
33054 return p.eqXToP(r);
33055};
ab78acc6 33056
8b095871
IC
33057EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
33058 assert((3 & j) === j, 'The recovery param is more than two bits');
33059 signature = new Signature(signature, enc);
ab78acc6 33060
8b095871
IC
33061 var n = this.n;
33062 var e = new BN(msg);
33063 var r = signature.r;
33064 var s = signature.s;
ab78acc6 33065
8b095871
IC
33066 // A set LSB signifies that the y-coordinate is odd
33067 var isYOdd = j & 1;
33068 var isSecondKey = j >> 1;
33069 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
33070 throw new Error('Unable to find sencond key candinate');
33071
33072 // 1.1. Let x = r + jn.
33073 if (isSecondKey)
33074 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
33075 else
33076 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 33077
8b095871
IC
33078 var rInv = signature.r.invm(n);
33079 var s1 = n.sub(e).mul(rInv).umod(n);
33080 var s2 = s.mul(rInv).umod(n);
ab78acc6 33081
8b095871
IC
33082 // 1.6.1 Compute Q = r^-1 (sR - eG)
33083 // Q = r^-1 (sR + -eG)
33084 return this.g.mulAdd(s1, r, s2);
33085};
ab78acc6 33086
8b095871
IC
33087EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
33088 signature = new Signature(signature, enc);
33089 if (signature.recoveryParam !== null)
33090 return signature.recoveryParam;
ab78acc6 33091
8b095871
IC
33092 for (var i = 0; i < 4; i++) {
33093 var Qprime;
33094 try {
33095 Qprime = this.recoverPubKey(e, signature, i);
33096 } catch (e) {
33097 continue;
ab78acc6 33098 }
ab78acc6 33099
8b095871
IC
33100 if (Qprime.eq(Q))
33101 return i;
33102 }
33103 throw new Error('Unable to find valid recovery factor');
33104};
ebd8d4e8 33105
8b095871
IC
33106},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
33107'use strict';
ebd8d4e8 33108
8b095871
IC
33109var BN = require('bn.js');
33110var elliptic = require('../../elliptic');
33111var utils = elliptic.utils;
33112var assert = utils.assert;
ebd8d4e8 33113
8b095871
IC
33114function KeyPair(ec, options) {
33115 this.ec = ec;
33116 this.priv = null;
33117 this.pub = null;
ebd8d4e8 33118
8b095871
IC
33119 // KeyPair(ec, { priv: ..., pub: ... })
33120 if (options.priv)
33121 this._importPrivate(options.priv, options.privEnc);
33122 if (options.pub)
33123 this._importPublic(options.pub, options.pubEnc);
33124}
33125module.exports = KeyPair;
ebd8d4e8 33126
8b095871
IC
33127KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
33128 if (pub instanceof KeyPair)
33129 return pub;
ebd8d4e8 33130
8b095871
IC
33131 return new KeyPair(ec, {
33132 pub: pub,
33133 pubEnc: enc
33134 });
33135};
ebd8d4e8 33136
8b095871
IC
33137KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
33138 if (priv instanceof KeyPair)
33139 return priv;
ebd8d4e8 33140
8b095871
IC
33141 return new KeyPair(ec, {
33142 priv: priv,
33143 privEnc: enc
33144 });
33145};
ebd8d4e8 33146
8b095871
IC
33147KeyPair.prototype.validate = function validate() {
33148 var pub = this.getPublic();
ebd8d4e8 33149
8b095871
IC
33150 if (pub.isInfinity())
33151 return { result: false, reason: 'Invalid public key' };
33152 if (!pub.validate())
33153 return { result: false, reason: 'Public key is not a point' };
33154 if (!pub.mul(this.ec.curve.n).isInfinity())
33155 return { result: false, reason: 'Public key * N != O' };
ab78acc6 33156
8b095871
IC
33157 return { result: true, reason: null };
33158};
ebd8d4e8 33159
8b095871
IC
33160KeyPair.prototype.getPublic = function getPublic(compact, enc) {
33161 // compact is optional argument
33162 if (typeof compact === 'string') {
33163 enc = compact;
33164 compact = null;
ebd8d4e8
IC
33165 }
33166
8b095871
IC
33167 if (!this.pub)
33168 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 33169
8b095871
IC
33170 if (!enc)
33171 return this.pub;
ebd8d4e8 33172
8b095871
IC
33173 return this.pub.encode(enc, compact);
33174};
ebd8d4e8 33175
8b095871
IC
33176KeyPair.prototype.getPrivate = function getPrivate(enc) {
33177 if (enc === 'hex')
33178 return this.priv.toString(16, 2);
33179 else
33180 return this.priv;
33181};
ab78acc6 33182
8b095871
IC
33183KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
33184 this.priv = new BN(key, enc || 16);
ab78acc6 33185
8b095871
IC
33186 // Ensure that the priv won't be bigger than n, otherwise we may fail
33187 // in fixed multiplication method
33188 this.priv = this.priv.umod(this.ec.curve.n);
33189};
ab78acc6 33190
8b095871
IC
33191KeyPair.prototype._importPublic = function _importPublic(key, enc) {
33192 if (key.x || key.y) {
33193 // Montgomery points only have an `x` coordinate.
33194 // Weierstrass/Edwards points on the other hand have both `x` and
33195 // `y` coordinates.
33196 if (this.ec.curve.type === 'mont') {
33197 assert(key.x, 'Need x coordinate');
33198 } else if (this.ec.curve.type === 'short' ||
33199 this.ec.curve.type === 'edwards') {
33200 assert(key.x && key.y, 'Need both x and y coordinate');
33201 }
33202 this.pub = this.ec.curve.point(key.x, key.y);
33203 return;
33204 }
33205 this.pub = this.ec.curve.decodePoint(key, enc);
33206};
ebd8d4e8 33207
8b095871
IC
33208// ECDH
33209KeyPair.prototype.derive = function derive(pub) {
33210 return pub.mul(this.priv).getX();
33211};
ebd8d4e8 33212
8b095871
IC
33213// ECDSA
33214KeyPair.prototype.sign = function sign(msg, enc, options) {
33215 return this.ec.sign(msg, this, enc, options);
33216};
ebd8d4e8 33217
8b095871
IC
33218KeyPair.prototype.verify = function verify(msg, signature) {
33219 return this.ec.verify(msg, signature, this);
33220};
ebd8d4e8 33221
8b095871
IC
33222KeyPair.prototype.inspect = function inspect() {
33223 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
33224 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
33225};
ebd8d4e8 33226
8b095871
IC
33227},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
33228'use strict';
ebd8d4e8 33229
8b095871 33230var BN = require('bn.js');
ebd8d4e8 33231
8b095871
IC
33232var elliptic = require('../../elliptic');
33233var utils = elliptic.utils;
33234var assert = utils.assert;
ebd8d4e8 33235
8b095871
IC
33236function Signature(options, enc) {
33237 if (options instanceof Signature)
33238 return options;
ebd8d4e8 33239
8b095871
IC
33240 if (this._importDER(options, enc))
33241 return;
ebd8d4e8 33242
8b095871
IC
33243 assert(options.r && options.s, 'Signature without r or s');
33244 this.r = new BN(options.r, 16);
33245 this.s = new BN(options.s, 16);
33246 if (options.recoveryParam === undefined)
33247 this.recoveryParam = null;
33248 else
33249 this.recoveryParam = options.recoveryParam;
33250}
33251module.exports = Signature;
33252
33253function Position() {
33254 this.place = 0;
33255}
33256
33257function getLength(buf, p) {
33258 var initial = buf[p.place++];
33259 if (!(initial & 0x80)) {
33260 return initial;
33261 }
33262 var octetLen = initial & 0xf;
33263 var val = 0;
33264 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
33265 val <<= 8;
33266 val |= buf[off];
33267 }
33268 p.place = off;
33269 return val;
33270}
33271
33272function rmPadding(buf) {
33273 var i = 0;
33274 var len = buf.length - 1;
33275 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
33276 i++;
33277 }
33278 if (i === 0) {
33279 return buf;
33280 }
33281 return buf.slice(i);
33282}
ebd8d4e8 33283
8b095871
IC
33284Signature.prototype._importDER = function _importDER(data, enc) {
33285 data = utils.toArray(data, enc);
33286 var p = new Position();
33287 if (data[p.place++] !== 0x30) {
33288 return false;
33289 }
33290 var len = getLength(data, p);
33291 if ((len + p.place) !== data.length) {
33292 return false;
33293 }
33294 if (data[p.place++] !== 0x02) {
33295 return false;
33296 }
33297 var rlen = getLength(data, p);
33298 var r = data.slice(p.place, rlen + p.place);
33299 p.place += rlen;
33300 if (data[p.place++] !== 0x02) {
33301 return false;
33302 }
33303 var slen = getLength(data, p);
33304 if (data.length !== slen + p.place) {
33305 return false;
33306 }
33307 var s = data.slice(p.place, slen + p.place);
33308 if (r[0] === 0 && (r[1] & 0x80)) {
33309 r = r.slice(1);
33310 }
33311 if (s[0] === 0 && (s[1] & 0x80)) {
33312 s = s.slice(1);
33313 }
ab78acc6 33314
8b095871
IC
33315 this.r = new BN(r);
33316 this.s = new BN(s);
33317 this.recoveryParam = null;
ebd8d4e8 33318
8b095871
IC
33319 return true;
33320};
ab78acc6 33321
8b095871
IC
33322function constructLength(arr, len) {
33323 if (len < 0x80) {
33324 arr.push(len);
33325 return;
33326 }
33327 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
33328 arr.push(octets | 0x80);
33329 while (--octets) {
33330 arr.push((len >>> (octets << 3)) & 0xff);
33331 }
33332 arr.push(len);
33333}
33334
33335Signature.prototype.toDER = function toDER(enc) {
33336 var r = this.r.toArray();
33337 var s = this.s.toArray();
33338
33339 // Pad values
33340 if (r[0] & 0x80)
33341 r = [ 0 ].concat(r);
33342 // Pad values
33343 if (s[0] & 0x80)
33344 s = [ 0 ].concat(s);
33345
33346 r = rmPadding(r);
33347 s = rmPadding(s);
33348
33349 while (!s[0] && !(s[1] & 0x80)) {
33350 s = s.slice(1);
33351 }
33352 var arr = [ 0x02 ];
33353 constructLength(arr, r.length);
33354 arr = arr.concat(r);
33355 arr.push(0x02);
33356 constructLength(arr, s.length);
33357 var backHalf = arr.concat(s);
33358 var res = [ 0x30 ];
33359 constructLength(res, backHalf.length);
33360 res = res.concat(backHalf);
33361 return utils.encode(res, enc);
33362};
ab78acc6 33363
8b095871
IC
33364},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
33365'use strict';
ebd8d4e8 33366
8b095871
IC
33367var hash = require('hash.js');
33368var elliptic = require('../../elliptic');
33369var utils = elliptic.utils;
33370var assert = utils.assert;
33371var parseBytes = utils.parseBytes;
33372var KeyPair = require('./key');
33373var Signature = require('./signature');
ab78acc6 33374
8b095871
IC
33375function EDDSA(curve) {
33376 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 33377
8b095871
IC
33378 if (!(this instanceof EDDSA))
33379 return new EDDSA(curve);
ab78acc6 33380
8b095871
IC
33381 var curve = elliptic.curves[curve].curve;
33382 this.curve = curve;
33383 this.g = curve.g;
33384 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 33385
8b095871
IC
33386 this.pointClass = curve.point().constructor;
33387 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
33388 this.hash = hash.sha512;
33389}
ebd8d4e8 33390
8b095871 33391module.exports = EDDSA;
ebd8d4e8 33392
8b095871
IC
33393/**
33394* @param {Array|String} message - message bytes
33395* @param {Array|String|KeyPair} secret - secret bytes or a keypair
33396* @returns {Signature} - signature
33397*/
33398EDDSA.prototype.sign = function sign(message, secret) {
33399 message = parseBytes(message);
33400 var key = this.keyFromSecret(secret);
33401 var r = this.hashInt(key.messagePrefix(), message);
33402 var R = this.g.mul(r);
33403 var Rencoded = this.encodePoint(R);
33404 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
33405 .mul(key.priv());
33406 var S = r.add(s_).umod(this.curve.n);
33407 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
33408};
ebd8d4e8 33409
8b095871
IC
33410/**
33411* @param {Array} message - message bytes
33412* @param {Array|String|Signature} sig - sig bytes
33413* @param {Array|String|Point|KeyPair} pub - public key
33414* @returns {Boolean} - true if public key matches sig of message
33415*/
33416EDDSA.prototype.verify = function verify(message, sig, pub) {
33417 message = parseBytes(message);
33418 sig = this.makeSignature(sig);
33419 var key = this.keyFromPublic(pub);
33420 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
33421 var SG = this.g.mul(sig.S());
33422 var RplusAh = sig.R().add(key.pub().mul(h));
33423 return RplusAh.eq(SG);
33424};
ebd8d4e8 33425
8b095871
IC
33426EDDSA.prototype.hashInt = function hashInt() {
33427 var hash = this.hash();
33428 for (var i = 0; i < arguments.length; i++)
33429 hash.update(arguments[i]);
33430 return utils.intFromLE(hash.digest()).umod(this.curve.n);
33431};
ebd8d4e8 33432
8b095871
IC
33433EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
33434 return KeyPair.fromPublic(this, pub);
33435};
ebd8d4e8 33436
8b095871
IC
33437EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
33438 return KeyPair.fromSecret(this, secret);
33439};
33440
33441EDDSA.prototype.makeSignature = function makeSignature(sig) {
33442 if (sig instanceof Signature)
33443 return sig;
33444 return new Signature(this, sig);
33445};
ebd8d4e8
IC
33446
33447/**
8b095871
IC
33448* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
33449*
33450* EDDSA defines methods for encoding and decoding points and integers. These are
33451* helper convenience methods, that pass along to utility functions implied
33452* parameters.
33453*
33454*/
33455EDDSA.prototype.encodePoint = function encodePoint(point) {
33456 var enc = point.getY().toArray('le', this.encodingLength);
33457 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
33458 return enc;
33459};
ebd8d4e8 33460
8b095871
IC
33461EDDSA.prototype.decodePoint = function decodePoint(bytes) {
33462 bytes = utils.parseBytes(bytes);
ebd8d4e8 33463
8b095871
IC
33464 var lastIx = bytes.length - 1;
33465 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
33466 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 33467
8b095871
IC
33468 var y = utils.intFromLE(normed);
33469 return this.curve.pointFromY(y, xIsOdd);
33470};
ebd8d4e8 33471
8b095871
IC
33472EDDSA.prototype.encodeInt = function encodeInt(num) {
33473 return num.toArray('le', this.encodingLength);
33474};
ebd8d4e8 33475
8b095871
IC
33476EDDSA.prototype.decodeInt = function decodeInt(bytes) {
33477 return utils.intFromLE(bytes);
33478};
ebd8d4e8 33479
8b095871
IC
33480EDDSA.prototype.isPoint = function isPoint(val) {
33481 return val instanceof this.pointClass;
33482};
ebd8d4e8 33483
8b095871
IC
33484},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
33485'use strict';
ebd8d4e8 33486
8b095871
IC
33487var elliptic = require('../../elliptic');
33488var utils = elliptic.utils;
33489var assert = utils.assert;
33490var parseBytes = utils.parseBytes;
33491var cachedProperty = utils.cachedProperty;
ebd8d4e8 33492
8b095871
IC
33493/**
33494* @param {EDDSA} eddsa - instance
33495* @param {Object} params - public/private key parameters
33496*
33497* @param {Array<Byte>} [params.secret] - secret seed bytes
33498* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
33499* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
33500*
33501*/
33502function KeyPair(eddsa, params) {
33503 this.eddsa = eddsa;
33504 this._secret = parseBytes(params.secret);
33505 if (eddsa.isPoint(params.pub))
33506 this._pub = params.pub;
33507 else
33508 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
33509}
33510
8b095871
IC
33511KeyPair.fromPublic = function fromPublic(eddsa, pub) {
33512 if (pub instanceof KeyPair)
33513 return pub;
33514 return new KeyPair(eddsa, { pub: pub });
33515};
ebd8d4e8 33516
8b095871
IC
33517KeyPair.fromSecret = function fromSecret(eddsa, secret) {
33518 if (secret instanceof KeyPair)
33519 return secret;
33520 return new KeyPair(eddsa, { secret: secret });
33521};
ebd8d4e8 33522
8b095871
IC
33523KeyPair.prototype.secret = function secret() {
33524 return this._secret;
33525};
ebd8d4e8 33526
8b095871
IC
33527cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
33528 return this.eddsa.encodePoint(this.pub());
33529});
ebd8d4e8 33530
8b095871
IC
33531cachedProperty(KeyPair, 'pub', function pub() {
33532 if (this._pubBytes)
33533 return this.eddsa.decodePoint(this._pubBytes);
33534 return this.eddsa.g.mul(this.priv());
33535});
ebd8d4e8 33536
8b095871
IC
33537cachedProperty(KeyPair, 'privBytes', function privBytes() {
33538 var eddsa = this.eddsa;
33539 var hash = this.hash();
33540 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 33541
8b095871
IC
33542 var a = hash.slice(0, eddsa.encodingLength);
33543 a[0] &= 248;
33544 a[lastIx] &= 127;
33545 a[lastIx] |= 64;
ebd8d4e8 33546
8b095871
IC
33547 return a;
33548});
ebd8d4e8 33549
8b095871
IC
33550cachedProperty(KeyPair, 'priv', function priv() {
33551 return this.eddsa.decodeInt(this.privBytes());
33552});
ebd8d4e8 33553
8b095871
IC
33554cachedProperty(KeyPair, 'hash', function hash() {
33555 return this.eddsa.hash().update(this.secret()).digest();
33556});
ebd8d4e8 33557
8b095871
IC
33558cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
33559 return this.hash().slice(this.eddsa.encodingLength);
33560});
ebd8d4e8 33561
8b095871
IC
33562KeyPair.prototype.sign = function sign(message) {
33563 assert(this._secret, 'KeyPair can only verify');
33564 return this.eddsa.sign(message, this);
33565};
ebd8d4e8 33566
8b095871
IC
33567KeyPair.prototype.verify = function verify(message, sig) {
33568 return this.eddsa.verify(message, sig, this);
33569};
ebd8d4e8 33570
8b095871
IC
33571KeyPair.prototype.getSecret = function getSecret(enc) {
33572 assert(this._secret, 'KeyPair is public only');
33573 return utils.encode(this.secret(), enc);
33574};
ebd8d4e8 33575
8b095871
IC
33576KeyPair.prototype.getPublic = function getPublic(enc) {
33577 return utils.encode(this.pubBytes(), enc);
33578};
ebd8d4e8 33579
8b095871 33580module.exports = KeyPair;
ebd8d4e8 33581
8b095871
IC
33582},{"../../elliptic":39}],51:[function(require,module,exports){
33583'use strict';
ebd8d4e8 33584
8b095871
IC
33585var BN = require('bn.js');
33586var elliptic = require('../../elliptic');
33587var utils = elliptic.utils;
33588var assert = utils.assert;
33589var cachedProperty = utils.cachedProperty;
33590var parseBytes = utils.parseBytes;
ebd8d4e8 33591
8b095871
IC
33592/**
33593* @param {EDDSA} eddsa - eddsa instance
33594* @param {Array<Bytes>|Object} sig -
33595* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
33596* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
33597* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
33598* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
33599*/
33600function Signature(eddsa, sig) {
33601 this.eddsa = eddsa;
ebd8d4e8 33602
8b095871
IC
33603 if (typeof sig !== 'object')
33604 sig = parseBytes(sig);
ebd8d4e8 33605
8b095871
IC
33606 if (Array.isArray(sig)) {
33607 sig = {
33608 R: sig.slice(0, eddsa.encodingLength),
33609 S: sig.slice(eddsa.encodingLength)
33610 };
ab78acc6 33611 }
ebd8d4e8 33612
8b095871 33613 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 33614
8b095871
IC
33615 if (eddsa.isPoint(sig.R))
33616 this._R = sig.R;
33617 if (sig.S instanceof BN)
33618 this._S = sig.S;
33619
33620 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
33621 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
33622}
33623
8b095871
IC
33624cachedProperty(Signature, 'S', function S() {
33625 return this.eddsa.decodeInt(this.Sencoded());
33626});
ab78acc6 33627
8b095871
IC
33628cachedProperty(Signature, 'R', function R() {
33629 return this.eddsa.decodePoint(this.Rencoded());
33630});
ebd8d4e8 33631
8b095871
IC
33632cachedProperty(Signature, 'Rencoded', function Rencoded() {
33633 return this.eddsa.encodePoint(this.R());
33634});
ebd8d4e8 33635
8b095871
IC
33636cachedProperty(Signature, 'Sencoded', function Sencoded() {
33637 return this.eddsa.encodeInt(this.S());
33638});
ebd8d4e8 33639
8b095871
IC
33640Signature.prototype.toBytes = function toBytes() {
33641 return this.Rencoded().concat(this.Sencoded());
33642};
ebd8d4e8 33643
8b095871
IC
33644Signature.prototype.toHex = function toHex() {
33645 return utils.encode(this.toBytes(), 'hex').toUpperCase();
33646};
ebd8d4e8 33647
8b095871 33648module.exports = Signature;
ebd8d4e8 33649
8b095871
IC
33650},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
33651'use strict';
ebd8d4e8 33652
8b095871
IC
33653var hash = require('hash.js');
33654var elliptic = require('../elliptic');
33655var utils = elliptic.utils;
33656var assert = utils.assert;
ebd8d4e8 33657
8b095871
IC
33658function HmacDRBG(options) {
33659 if (!(this instanceof HmacDRBG))
33660 return new HmacDRBG(options);
33661 this.hash = options.hash;
33662 this.predResist = !!options.predResist;
ab78acc6 33663
8b095871
IC
33664 this.outLen = this.hash.outSize;
33665 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 33666
8b095871
IC
33667 this.reseed = null;
33668 this.reseedInterval = null;
33669 this.K = null;
33670 this.V = null;
ebd8d4e8 33671
8b095871
IC
33672 var entropy = utils.toArray(options.entropy, options.entropyEnc);
33673 var nonce = utils.toArray(options.nonce, options.nonceEnc);
33674 var pers = utils.toArray(options.pers, options.persEnc);
33675 assert(entropy.length >= (this.minEntropy / 8),
33676 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
33677 this._init(entropy, nonce, pers);
ebd8d4e8 33678}
8b095871 33679module.exports = HmacDRBG;
ebd8d4e8 33680
8b095871
IC
33681HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
33682 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 33683
8b095871
IC
33684 this.K = new Array(this.outLen / 8);
33685 this.V = new Array(this.outLen / 8);
33686 for (var i = 0; i < this.V.length; i++) {
33687 this.K[i] = 0x00;
33688 this.V[i] = 0x01;
33689 }
ebd8d4e8 33690
8b095871
IC
33691 this._update(seed);
33692 this.reseed = 1;
33693 this.reseedInterval = 0x1000000000000; // 2^48
33694};
ebd8d4e8 33695
8b095871
IC
33696HmacDRBG.prototype._hmac = function hmac() {
33697 return new hash.hmac(this.hash, this.K);
33698};
ebd8d4e8 33699
8b095871
IC
33700HmacDRBG.prototype._update = function update(seed) {
33701 var kmac = this._hmac()
33702 .update(this.V)
33703 .update([ 0x00 ]);
33704 if (seed)
33705 kmac = kmac.update(seed);
33706 this.K = kmac.digest();
33707 this.V = this._hmac().update(this.V).digest();
33708 if (!seed)
33709 return;
33710
33711 this.K = this._hmac()
33712 .update(this.V)
33713 .update([ 0x01 ])
33714 .update(seed)
33715 .digest();
33716 this.V = this._hmac().update(this.V).digest();
33717};
33718
33719HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
33720 // Optional entropy enc
33721 if (typeof entropyEnc !== 'string') {
33722 addEnc = add;
33723 add = entropyEnc;
33724 entropyEnc = null;
ebd8d4e8 33725 }
ebd8d4e8 33726
8b095871
IC
33727 entropy = utils.toBuffer(entropy, entropyEnc);
33728 add = utils.toBuffer(add, addEnc);
ebd8d4e8 33729
8b095871
IC
33730 assert(entropy.length >= (this.minEntropy / 8),
33731 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 33732
8b095871
IC
33733 this._update(entropy.concat(add || []));
33734 this.reseed = 1;
33735};
ebd8d4e8 33736
8b095871
IC
33737HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
33738 if (this.reseed > this.reseedInterval)
33739 throw new Error('Reseed is required');
ebd8d4e8 33740
8b095871
IC
33741 // Optional encoding
33742 if (typeof enc !== 'string') {
33743 addEnc = add;
33744 add = enc;
33745 enc = null;
33746 }
ebd8d4e8 33747
8b095871
IC
33748 // Optional additional data
33749 if (add) {
33750 add = utils.toArray(add, addEnc);
33751 this._update(add);
ebd8d4e8
IC
33752 }
33753
8b095871
IC
33754 var temp = [];
33755 while (temp.length < len) {
33756 this.V = this._hmac().update(this.V).digest();
33757 temp = temp.concat(this.V);
ebd8d4e8
IC
33758 }
33759
8b095871
IC
33760 var res = temp.slice(0, len);
33761 this._update(add);
33762 this.reseed++;
33763 return utils.encode(res, enc);
33764};
ebd8d4e8 33765
8b095871
IC
33766},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
33767module.exports = {
33768 doubles: {
33769 step: 4,
33770 points: [
33771 [
33772 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
33773 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
33774 ],
33775 [
33776 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
33777 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
33778 ],
33779 [
33780 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
33781 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
33782 ],
33783 [
33784 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
33785 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
33786 ],
33787 [
33788 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
33789 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
33790 ],
33791 [
33792 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
33793 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
33794 ],
33795 [
33796 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
33797 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
33798 ],
33799 [
33800 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
33801 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
33802 ],
33803 [
33804 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
33805 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
33806 ],
33807 [
33808 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
33809 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
33810 ],
33811 [
33812 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
33813 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
33814 ],
33815 [
33816 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
33817 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
33818 ],
33819 [
33820 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
33821 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
33822 ],
33823 [
33824 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
33825 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
33826 ],
33827 [
33828 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
33829 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
33830 ],
33831 [
33832 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
33833 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
33834 ],
33835 [
33836 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
33837 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
33838 ],
33839 [
33840 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
33841 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
33842 ],
33843 [
33844 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
33845 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
33846 ],
33847 [
33848 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
33849 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
33850 ],
33851 [
33852 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
33853 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
33854 ],
33855 [
33856 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
33857 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
33858 ],
33859 [
33860 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
33861 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
33862 ],
33863 [
33864 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
33865 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
33866 ],
33867 [
33868 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
33869 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
33870 ],
33871 [
33872 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
33873 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
33874 ],
33875 [
33876 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
33877 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
33878 ],
33879 [
33880 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
33881 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
33882 ],
33883 [
33884 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
33885 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
33886 ],
33887 [
33888 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
33889 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
33890 ],
33891 [
33892 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
33893 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
33894 ],
33895 [
33896 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
33897 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
33898 ],
33899 [
33900 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
33901 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
33902 ],
33903 [
33904 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
33905 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
33906 ],
33907 [
33908 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
33909 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
33910 ],
33911 [
33912 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
33913 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
33914 ],
33915 [
33916 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
33917 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
33918 ],
33919 [
33920 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
33921 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
33922 ],
33923 [
33924 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
33925 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
33926 ],
33927 [
33928 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
33929 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
33930 ],
33931 [
33932 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
33933 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
33934 ],
33935 [
33936 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
33937 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
33938 ],
33939 [
33940 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
33941 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
33942 ],
33943 [
33944 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
33945 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
33946 ],
33947 [
33948 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
33949 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
33950 ],
33951 [
33952 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
33953 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
33954 ],
33955 [
33956 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
33957 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
33958 ],
33959 [
33960 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
33961 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
33962 ],
33963 [
33964 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
33965 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
33966 ],
33967 [
33968 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
33969 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
33970 ],
33971 [
33972 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
33973 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
33974 ],
33975 [
33976 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
33977 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
33978 ],
33979 [
33980 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
33981 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
33982 ],
33983 [
33984 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
33985 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
33986 ],
33987 [
33988 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
33989 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
33990 ],
33991 [
33992 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
33993 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
33994 ],
33995 [
33996 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
33997 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
33998 ],
33999 [
34000 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
34001 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
34002 ],
34003 [
34004 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
34005 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
34006 ],
34007 [
34008 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
34009 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
34010 ],
34011 [
34012 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
34013 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
34014 ],
34015 [
34016 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
34017 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
34018 ],
34019 [
34020 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
34021 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
34022 ],
34023 [
34024 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
34025 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
34026 ],
34027 [
34028 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
34029 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
34030 ]
34031 ]
34032 },
34033 naf: {
34034 wnd: 7,
34035 points: [
34036 [
34037 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
34038 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
34039 ],
34040 [
34041 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
34042 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
34043 ],
34044 [
34045 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
34046 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
34047 ],
34048 [
34049 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
34050 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
34051 ],
34052 [
34053 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
34054 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
34055 ],
34056 [
34057 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
34058 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
34059 ],
34060 [
34061 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
34062 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
34063 ],
34064 [
34065 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
34066 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
34067 ],
34068 [
34069 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
34070 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
34071 ],
34072 [
34073 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
34074 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
34075 ],
34076 [
34077 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
34078 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
34079 ],
34080 [
34081 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
34082 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
34083 ],
34084 [
34085 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
34086 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
34087 ],
34088 [
34089 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
34090 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
34091 ],
34092 [
34093 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
34094 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
34095 ],
34096 [
34097 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
34098 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
34099 ],
34100 [
34101 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
34102 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
34103 ],
34104 [
34105 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
34106 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
34107 ],
34108 [
34109 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
34110 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
34111 ],
34112 [
34113 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
34114 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
34115 ],
34116 [
34117 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
34118 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
34119 ],
34120 [
34121 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
34122 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
34123 ],
34124 [
34125 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
34126 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
34127 ],
34128 [
34129 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
34130 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
34131 ],
34132 [
34133 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
34134 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
34135 ],
34136 [
34137 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
34138 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
34139 ],
34140 [
34141 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
34142 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
34143 ],
34144 [
34145 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
34146 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
34147 ],
34148 [
34149 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
34150 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
34151 ],
34152 [
34153 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
34154 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
34155 ],
34156 [
34157 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
34158 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
34159 ],
34160 [
34161 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
34162 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
34163 ],
34164 [
34165 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
34166 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
34167 ],
34168 [
34169 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
34170 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
34171 ],
34172 [
34173 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
34174 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
34175 ],
34176 [
34177 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
34178 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
34179 ],
34180 [
34181 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
34182 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
34183 ],
34184 [
34185 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
34186 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
34187 ],
34188 [
34189 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
34190 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
34191 ],
34192 [
34193 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
34194 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
34195 ],
34196 [
34197 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
34198 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
34199 ],
34200 [
34201 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
34202 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
34203 ],
34204 [
34205 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
34206 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
34207 ],
34208 [
34209 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
34210 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
34211 ],
34212 [
34213 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
34214 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
34215 ],
34216 [
34217 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
34218 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
34219 ],
34220 [
34221 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
34222 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
34223 ],
34224 [
34225 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
34226 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
34227 ],
34228 [
34229 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
34230 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
34231 ],
34232 [
34233 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
34234 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
34235 ],
34236 [
34237 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
34238 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
34239 ],
34240 [
34241 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
34242 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
34243 ],
34244 [
34245 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
34246 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
34247 ],
34248 [
34249 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
34250 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
34251 ],
34252 [
34253 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
34254 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
34255 ],
34256 [
34257 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
34258 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
34259 ],
34260 [
34261 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
34262 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
34263 ],
34264 [
34265 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
34266 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
34267 ],
34268 [
34269 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
34270 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
34271 ],
34272 [
34273 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
34274 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
34275 ],
34276 [
34277 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
34278 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
34279 ],
34280 [
34281 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
34282 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
34283 ],
34284 [
34285 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
34286 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
34287 ],
34288 [
34289 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
34290 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
34291 ],
34292 [
34293 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
34294 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
34295 ],
34296 [
34297 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
34298 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
34299 ],
34300 [
34301 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
34302 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
34303 ],
34304 [
34305 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
34306 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
34307 ],
34308 [
34309 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
34310 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
34311 ],
34312 [
34313 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
34314 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
34315 ],
34316 [
34317 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
34318 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
34319 ],
34320 [
34321 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
34322 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
34323 ],
34324 [
34325 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
34326 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
34327 ],
34328 [
34329 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
34330 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
34331 ],
34332 [
34333 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
34334 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
34335 ],
34336 [
34337 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
34338 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
34339 ],
34340 [
34341 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
34342 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
34343 ],
34344 [
34345 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
34346 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
34347 ],
34348 [
34349 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
34350 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
34351 ],
34352 [
34353 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
34354 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
34355 ],
34356 [
34357 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
34358 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
34359 ],
34360 [
34361 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
34362 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
34363 ],
34364 [
34365 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
34366 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
34367 ],
34368 [
34369 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
34370 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
34371 ],
34372 [
34373 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
34374 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
34375 ],
34376 [
34377 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
34378 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
34379 ],
34380 [
34381 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
34382 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
34383 ],
34384 [
34385 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
34386 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
34387 ],
34388 [
34389 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
34390 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
34391 ],
34392 [
34393 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
34394 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
34395 ],
34396 [
34397 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
34398 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
34399 ],
34400 [
34401 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
34402 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
34403 ],
34404 [
34405 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
34406 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
34407 ],
34408 [
34409 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
34410 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
34411 ],
34412 [
34413 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
34414 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
34415 ],
34416 [
34417 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
34418 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
34419 ],
34420 [
34421 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
34422 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
34423 ],
34424 [
34425 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
34426 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
34427 ],
34428 [
34429 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
34430 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
34431 ],
34432 [
34433 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
34434 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
34435 ],
34436 [
34437 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
34438 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
34439 ],
34440 [
34441 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
34442 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
34443 ],
34444 [
34445 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
34446 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
34447 ],
34448 [
34449 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
34450 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
34451 ],
34452 [
34453 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
34454 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
34455 ],
34456 [
34457 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
34458 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
34459 ],
34460 [
34461 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
34462 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
34463 ],
34464 [
34465 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
34466 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
34467 ],
34468 [
34469 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
34470 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
34471 ],
34472 [
34473 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
34474 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
34475 ],
34476 [
34477 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
34478 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
34479 ],
34480 [
34481 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
34482 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
34483 ],
34484 [
34485 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
34486 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
34487 ],
34488 [
34489 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
34490 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
34491 ],
34492 [
34493 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
34494 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
34495 ],
34496 [
34497 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
34498 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
34499 ],
34500 [
34501 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
34502 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
34503 ],
34504 [
34505 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
34506 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
34507 ],
34508 [
34509 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
34510 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
34511 ],
34512 [
34513 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
34514 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
34515 ],
34516 [
34517 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
34518 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
34519 ],
34520 [
34521 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
34522 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
34523 ],
34524 [
34525 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
34526 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
34527 ],
34528 [
34529 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
34530 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
34531 ],
34532 [
34533 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
34534 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
34535 ],
34536 [
34537 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
34538 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
34539 ],
34540 [
34541 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
34542 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
34543 ]
34544 ]
34545 }
34546};
ebd8d4e8 34547
8b095871
IC
34548},{}],54:[function(require,module,exports){
34549'use strict';
ebd8d4e8 34550
8b095871
IC
34551var utils = exports;
34552var BN = require('bn.js');
ebd8d4e8 34553
8b095871
IC
34554utils.assert = function assert(val, msg) {
34555 if (!val)
34556 throw new Error(msg || 'Assertion failed');
34557};
ebd8d4e8 34558
8b095871
IC
34559function toArray(msg, enc) {
34560 if (Array.isArray(msg))
34561 return msg.slice();
34562 if (!msg)
34563 return [];
34564 var res = [];
34565 if (typeof msg !== 'string') {
34566 for (var i = 0; i < msg.length; i++)
34567 res[i] = msg[i] | 0;
34568 return res;
34569 }
34570 if (!enc) {
34571 for (var i = 0; i < msg.length; i++) {
34572 var c = msg.charCodeAt(i);
34573 var hi = c >> 8;
34574 var lo = c & 0xff;
34575 if (hi)
34576 res.push(hi, lo);
34577 else
34578 res.push(lo);
34579 }
34580 } else if (enc === 'hex') {
34581 msg = msg.replace(/[^a-z0-9]+/ig, '');
34582 if (msg.length % 2 !== 0)
34583 msg = '0' + msg;
34584 for (var i = 0; i < msg.length; i += 2)
34585 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 34586 }
8b095871 34587 return res;
ebd8d4e8 34588}
8b095871 34589utils.toArray = toArray;
ebd8d4e8 34590
8b095871
IC
34591function zero2(word) {
34592 if (word.length === 1)
34593 return '0' + word;
34594 else
34595 return word;
34596}
34597utils.zero2 = zero2;
ab78acc6 34598
8b095871
IC
34599function toHex(msg) {
34600 var res = '';
34601 for (var i = 0; i < msg.length; i++)
34602 res += zero2(msg[i].toString(16));
34603 return res;
34604}
34605utils.toHex = toHex;
ebd8d4e8 34606
8b095871
IC
34607utils.encode = function encode(arr, enc) {
34608 if (enc === 'hex')
34609 return toHex(arr);
34610 else
34611 return arr;
34612};
ebd8d4e8 34613
8b095871
IC
34614// Represent num in a w-NAF form
34615function getNAF(num, w) {
34616 var naf = [];
34617 var ws = 1 << (w + 1);
34618 var k = num.clone();
34619 while (k.cmpn(1) >= 0) {
34620 var z;
34621 if (k.isOdd()) {
34622 var mod = k.andln(ws - 1);
34623 if (mod > (ws >> 1) - 1)
34624 z = (ws >> 1) - mod;
34625 else
34626 z = mod;
34627 k.isubn(z);
34628 } else {
34629 z = 0;
34630 }
34631 naf.push(z);
34632
34633 // Optimization, shift by word if possible
34634 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
34635 for (var i = 1; i < shift; i++)
34636 naf.push(0);
34637 k.iushrn(shift);
34638 }
34639
34640 return naf;
34641}
34642utils.getNAF = getNAF;
34643
34644// Represent k1, k2 in a Joint Sparse Form
34645function getJSF(k1, k2) {
34646 var jsf = [
34647 [],
34648 []
34649 ];
34650
34651 k1 = k1.clone();
34652 k2 = k2.clone();
34653 var d1 = 0;
34654 var d2 = 0;
34655 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
34656
34657 // First phase
34658 var m14 = (k1.andln(3) + d1) & 3;
34659 var m24 = (k2.andln(3) + d2) & 3;
34660 if (m14 === 3)
34661 m14 = -1;
34662 if (m24 === 3)
34663 m24 = -1;
34664 var u1;
34665 if ((m14 & 1) === 0) {
34666 u1 = 0;
34667 } else {
34668 var m8 = (k1.andln(7) + d1) & 7;
34669 if ((m8 === 3 || m8 === 5) && m24 === 2)
34670 u1 = -m14;
34671 else
34672 u1 = m14;
34673 }
34674 jsf[0].push(u1);
ebd8d4e8 34675
8b095871
IC
34676 var u2;
34677 if ((m24 & 1) === 0) {
34678 u2 = 0;
34679 } else {
34680 var m8 = (k2.andln(7) + d2) & 7;
34681 if ((m8 === 3 || m8 === 5) && m14 === 2)
34682 u2 = -m24;
34683 else
34684 u2 = m24;
34685 }
34686 jsf[1].push(u2);
ebd8d4e8 34687
8b095871
IC
34688 // Second phase
34689 if (2 * d1 === u1 + 1)
34690 d1 = 1 - d1;
34691 if (2 * d2 === u2 + 1)
34692 d2 = 1 - d2;
34693 k1.iushrn(1);
34694 k2.iushrn(1);
34695 }
ebd8d4e8 34696
8b095871
IC
34697 return jsf;
34698}
34699utils.getJSF = getJSF;
ab78acc6 34700
8b095871
IC
34701function cachedProperty(obj, name, computer) {
34702 var key = '_' + name;
34703 obj.prototype[name] = function cachedProperty() {
34704 return this[key] !== undefined ? this[key] :
34705 this[key] = computer.call(this);
34706 };
34707}
34708utils.cachedProperty = cachedProperty;
ebd8d4e8 34709
8b095871
IC
34710function parseBytes(bytes) {
34711 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
34712 bytes;
34713}
34714utils.parseBytes = parseBytes;
ebd8d4e8 34715
8b095871
IC
34716function intFromLE(bytes) {
34717 return new BN(bytes, 'hex', 'le');
34718}
34719utils.intFromLE = intFromLE;
ebd8d4e8 34720
8b095871
IC
34721
34722},{"bn.js":33}],55:[function(require,module,exports){
34723module.exports={
34724 "_args": [
34725 [
34726 {
34727 "raw": "elliptic@^6.2.3",
34728 "scope": null,
34729 "escapedName": "elliptic",
34730 "name": "elliptic",
34731 "rawSpec": "^6.2.3",
34732 "spec": ">=6.2.3 <7.0.0",
34733 "type": "range"
34734 },
34735 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
34736 ]
34737 ],
34738 "_from": "elliptic@>=6.2.3 <7.0.0",
34739 "_id": "elliptic@6.3.3",
34740 "_inCache": true,
34741 "_location": "/elliptic",
34742 "_nodeVersion": "7.0.0",
34743 "_npmOperationalInternal": {
34744 "host": "packages-18-east.internal.npmjs.com",
34745 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
34746 },
34747 "_npmUser": {
34748 "name": "indutny",
34749 "email": "fedor@indutny.com"
34750 },
34751 "_npmVersion": "3.10.8",
34752 "_phantomChildren": {},
34753 "_requested": {
34754 "raw": "elliptic@^6.2.3",
34755 "scope": null,
34756 "escapedName": "elliptic",
34757 "name": "elliptic",
34758 "rawSpec": "^6.2.3",
34759 "spec": ">=6.2.3 <7.0.0",
34760 "type": "range"
34761 },
34762 "_requiredBy": [
34763 "/browserify-sign",
34764 "/create-ecdh",
34765 "/secp256k1"
34766 ],
34767 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
34768 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34769 "_shrinkwrap": null,
34770 "_spec": "elliptic@^6.2.3",
34771 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
34772 "author": {
34773 "name": "Fedor Indutny",
34774 "email": "fedor@indutny.com"
34775 },
34776 "bugs": {
34777 "url": "https://github.com/indutny/elliptic/issues"
34778 },
34779 "dependencies": {
34780 "bn.js": "^4.4.0",
34781 "brorand": "^1.0.1",
34782 "hash.js": "^1.0.0",
34783 "inherits": "^2.0.1"
34784 },
34785 "description": "EC cryptography",
34786 "devDependencies": {
34787 "brfs": "^1.4.3",
34788 "coveralls": "^2.11.3",
34789 "grunt": "^0.4.5",
34790 "grunt-browserify": "^5.0.0",
34791 "grunt-cli": "^1.2.0",
34792 "grunt-contrib-connect": "^1.0.0",
34793 "grunt-contrib-copy": "^1.0.0",
34794 "grunt-contrib-uglify": "^1.0.1",
34795 "grunt-mocha-istanbul": "^3.0.1",
34796 "grunt-saucelabs": "^8.6.2",
34797 "istanbul": "^0.4.2",
34798 "jscs": "^2.9.0",
34799 "jshint": "^2.6.0",
34800 "mocha": "^2.1.0"
34801 },
34802 "directories": {},
34803 "dist": {
34804 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34805 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
34806 },
34807 "files": [
34808 "lib"
34809 ],
34810 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
34811 "homepage": "https://github.com/indutny/elliptic",
34812 "keywords": [
34813 "EC",
34814 "Elliptic",
34815 "curve",
34816 "Cryptography"
34817 ],
34818 "license": "MIT",
34819 "main": "lib/elliptic.js",
34820 "maintainers": [
34821 {
34822 "name": "indutny",
34823 "email": "fedor@indutny.com"
34824 }
34825 ],
34826 "name": "elliptic",
34827 "optionalDependencies": {},
34828 "readme": "ERROR: No README data found!",
34829 "repository": {
34830 "type": "git",
34831 "url": "git+ssh://git@github.com/indutny/elliptic.git"
34832 },
34833 "scripts": {
34834 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34835 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34836 "lint": "npm run jscs && npm run jshint",
34837 "test": "npm run lint && npm run unit",
34838 "unit": "istanbul test _mocha --reporter=spec test/index.js",
34839 "version": "grunt dist && git add dist/"
34840 },
34841 "version": "6.3.3"
ebd8d4e8
IC
34842}
34843
8b095871
IC
34844},{}],56:[function(require,module,exports){
34845(function (Buffer){
34846'use strict';
ab78acc6 34847
8b095871
IC
34848var isHexPrefixed = require('is-hex-prefixed');
34849var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 34850
8b095871
IC
34851/**
34852 * Pads a `String` to have an even length
34853 * @param {String} value
34854 * @return {String} output
34855 */
34856function padToEven(value) {
34857 var a = value; // eslint-disable-line
34858
34859 if (typeof a !== 'string') {
34860 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
34861 }
34862
34863 if (a.length % 2) {
34864 a = '0' + a;
34865 }
34866
34867 return a;
ebd8d4e8
IC
34868}
34869
8b095871
IC
34870/**
34871 * Converts a `Number` into a hex `String`
34872 * @param {Number} i
34873 * @return {String}
34874 */
34875function intToHex(i) {
34876 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 34877
8b095871
IC
34878 return '0x' + padToEven(hex);
34879}
ab78acc6 34880
8b095871
IC
34881/**
34882 * Converts an `Number` to a `Buffer`
34883 * @param {Number} i
34884 * @return {Buffer}
34885 */
34886function intToBuffer(i) {
34887 var hex = intToHex(i);
ab78acc6 34888
8b095871
IC
34889 return new Buffer(hex.slice(2), 'hex');
34890}
ebd8d4e8 34891
8b095871
IC
34892/**
34893 * Get the binary size of a string
34894 * @param {String} str
34895 * @return {Number}
34896 */
34897function getBinarySize(str) {
34898 if (typeof str !== 'string') {
34899 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
34900 }
ebd8d4e8 34901
8b095871
IC
34902 return Buffer.byteLength(str, 'utf8');
34903}
34904
34905/**
34906 * Returns TRUE if the first specified array contains all elements
34907 * from the second one. FALSE otherwise.
34908 *
34909 * @param {array} superset
34910 * @param {array} subset
34911 *
34912 * @returns {boolean}
34913 */
34914function arrayContainsArray(superset, subset, some) {
34915 if (Array.isArray(superset) !== true) {
34916 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
34917 }
34918 if (Array.isArray(subset) !== true) {
34919 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
34920 }
34921
8b095871
IC
34922 return subset[Boolean(some) && 'some' || 'every'](function (value) {
34923 return superset.indexOf(value) >= 0;
34924 });
ebd8d4e8
IC
34925}
34926
8b095871
IC
34927/**
34928 * Should be called to get utf8 from it's hex representation
34929 *
34930 * @method toUtf8
34931 * @param {String} string in hex
34932 * @returns {String} ascii string representation of hex value
34933 */
34934function toUtf8(hex) {
34935 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 34936
8b095871
IC
34937 return bufferValue.toString('utf8');
34938}
ab78acc6 34939
8b095871
IC
34940/**
34941 * Should be called to get ascii from it's hex representation
34942 *
34943 * @method toAscii
34944 * @param {String} string in hex
34945 * @returns {String} ascii string representation of hex value
34946 */
34947function toAscii(hex) {
34948 var str = ''; // eslint-disable-line
34949 var i = 0,
34950 l = hex.length; // eslint-disable-line
ebd8d4e8 34951
8b095871
IC
34952 if (hex.substring(0, 2) === '0x') {
34953 i = 2;
34954 }
ebd8d4e8 34955
8b095871
IC
34956 for (; i < l; i += 2) {
34957 var code = parseInt(hex.substr(i, 2), 16);
34958 str += String.fromCharCode(code);
ebd8d4e8 34959 }
8b095871
IC
34960
34961 return str;
ebd8d4e8
IC
34962}
34963
8b095871
IC
34964/**
34965 * Should be called to get hex representation (prefixed by 0x) of utf8 string
34966 *
34967 * @method fromUtf8
34968 * @param {String} string
34969 * @param {Number} optional padding
34970 * @returns {String} hex representation of input string
34971 */
34972function fromUtf8(stringValue) {
34973 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 34974
8b095871
IC
34975 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
34976}
ab78acc6 34977
8b095871
IC
34978/**
34979 * Should be called to get hex representation (prefixed by 0x) of ascii string
34980 *
34981 * @method fromAscii
34982 * @param {String} string
34983 * @param {Number} optional padding
34984 * @returns {String} hex representation of input string
34985 */
34986function fromAscii(stringValue) {
34987 var hex = ''; // eslint-disable-line
34988 for (var i = 0; i < stringValue.length; i++) {
34989 // eslint-disable-line
34990 var code = stringValue.charCodeAt(i);
34991 var n = code.toString(16);
34992 hex += n.length < 2 ? '0' + n : n;
34993 }
ab78acc6 34994
8b095871
IC
34995 return '0x' + hex;
34996}
ebd8d4e8 34997
8b095871
IC
34998/**
34999 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
35000 *
35001 * @method getKeys get specific key from inner object array of objects
35002 * @param {String} params
35003 * @param {String} key
35004 * @param {Boolean} allowEmpty
35005 * @returns {Array} output just a simple array of output keys
35006 */
35007function getKeys(params, key, allowEmpty) {
35008 if (!Array.isArray(params)) {
35009 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
35010 }
35011 if (typeof key !== 'string') {
35012 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
35013 }
ebd8d4e8 35014
8b095871 35015 var result = []; // eslint-disable-line
ebd8d4e8 35016
8b095871
IC
35017 for (var i = 0; i < params.length; i++) {
35018 // eslint-disable-line
35019 var value = params[i][key]; // eslint-disable-line
35020 if (allowEmpty && !value) {
35021 value = '';
35022 } else if (typeof value !== 'string') {
35023 throw new Error('invalid abi');
35024 }
35025 result.push(value);
35026 }
ebd8d4e8 35027
8b095871 35028 return result;
ebd8d4e8
IC
35029}
35030
8b095871
IC
35031/**
35032 * Is the string a hex string.
35033 *
35034 * @method check if string is hex string of specific length
35035 * @param {String} value
35036 * @param {Number} length
35037 * @returns {Boolean} output the string is a hex string
35038 */
35039function isHexString(value, length) {
35040 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
35041 return false;
ab78acc6
IC
35042 }
35043
8b095871
IC
35044 if (length && value.length !== 2 + 2 * length) {
35045 return false;
35046 }
ebd8d4e8 35047
8b095871
IC
35048 return true;
35049}
ab78acc6 35050
8b095871
IC
35051module.exports = {
35052 arrayContainsArray: arrayContainsArray,
35053 intToBuffer: intToBuffer,
35054 getBinarySize: getBinarySize,
35055 isHexPrefixed: isHexPrefixed,
35056 stripHexPrefix: stripHexPrefix,
35057 padToEven: padToEven,
35058 intToHex: intToHex,
35059 fromAscii: fromAscii,
35060 fromUtf8: fromUtf8,
35061 toAscii: toAscii,
35062 toUtf8: toUtf8,
35063 getKeys: getKeys,
35064 isHexString: isHexString
35065};
35066}).call(this,require("buffer").Buffer)
35067},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
35068var hash = exports;
35069
35070hash.utils = require('./hash/utils');
35071hash.common = require('./hash/common');
35072hash.sha = require('./hash/sha');
35073hash.ripemd = require('./hash/ripemd');
35074hash.hmac = require('./hash/hmac');
35075
35076// Proxy hash functions to the main object
35077hash.sha1 = hash.sha.sha1;
35078hash.sha256 = hash.sha.sha256;
35079hash.sha224 = hash.sha.sha224;
35080hash.sha384 = hash.sha.sha384;
35081hash.sha512 = hash.sha.sha512;
35082hash.ripemd160 = hash.ripemd.ripemd160;
35083
35084},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
35085var hash = require('../hash');
35086var utils = hash.utils;
35087var assert = utils.assert;
35088
35089function BlockHash() {
35090 this.pending = null;
35091 this.pendingTotal = 0;
35092 this.blockSize = this.constructor.blockSize;
35093 this.outSize = this.constructor.outSize;
35094 this.hmacStrength = this.constructor.hmacStrength;
35095 this.padLength = this.constructor.padLength / 8;
35096 this.endian = 'big';
35097
35098 this._delta8 = this.blockSize / 8;
35099 this._delta32 = this.blockSize / 32;
35100}
35101exports.BlockHash = BlockHash;
35102
35103BlockHash.prototype.update = function update(msg, enc) {
35104 // Convert message to array, pad it, and join into 32bit blocks
35105 msg = utils.toArray(msg, enc);
35106 if (!this.pending)
35107 this.pending = msg;
35108 else
35109 this.pending = this.pending.concat(msg);
35110 this.pendingTotal += msg.length;
ab78acc6 35111
8b095871
IC
35112 // Enough data, try updating
35113 if (this.pending.length >= this._delta8) {
35114 msg = this.pending;
ebd8d4e8 35115
8b095871
IC
35116 // Process pending data in blocks
35117 var r = msg.length % this._delta8;
35118 this.pending = msg.slice(msg.length - r, msg.length);
35119 if (this.pending.length === 0)
35120 this.pending = null;
ebd8d4e8 35121
8b095871
IC
35122 msg = utils.join32(msg, 0, msg.length - r, this.endian);
35123 for (var i = 0; i < msg.length; i += this._delta32)
35124 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
35125 }
35126
8b095871
IC
35127 return this;
35128};
ebd8d4e8 35129
8b095871
IC
35130BlockHash.prototype.digest = function digest(enc) {
35131 this.update(this._pad());
35132 assert(this.pending === null);
ebd8d4e8 35133
8b095871
IC
35134 return this._digest(enc);
35135};
ebd8d4e8 35136
8b095871
IC
35137BlockHash.prototype._pad = function pad() {
35138 var len = this.pendingTotal;
35139 var bytes = this._delta8;
35140 var k = bytes - ((len + this.padLength) % bytes);
35141 var res = new Array(k + this.padLength);
35142 res[0] = 0x80;
35143 for (var i = 1; i < k; i++)
35144 res[i] = 0;
35145
35146 // Append length
35147 len <<= 3;
35148 if (this.endian === 'big') {
35149 for (var t = 8; t < this.padLength; t++)
35150 res[i++] = 0;
35151
35152 res[i++] = 0;
35153 res[i++] = 0;
35154 res[i++] = 0;
35155 res[i++] = 0;
35156 res[i++] = (len >>> 24) & 0xff;
35157 res[i++] = (len >>> 16) & 0xff;
35158 res[i++] = (len >>> 8) & 0xff;
35159 res[i++] = len & 0xff;
ebd8d4e8 35160 } else {
8b095871
IC
35161 res[i++] = len & 0xff;
35162 res[i++] = (len >>> 8) & 0xff;
35163 res[i++] = (len >>> 16) & 0xff;
35164 res[i++] = (len >>> 24) & 0xff;
35165 res[i++] = 0;
35166 res[i++] = 0;
35167 res[i++] = 0;
35168 res[i++] = 0;
ebd8d4e8 35169
8b095871
IC
35170 for (var t = 8; t < this.padLength; t++)
35171 res[i++] = 0;
ebd8d4e8
IC
35172 }
35173
8b095871
IC
35174 return res;
35175};
ebd8d4e8 35176
8b095871
IC
35177},{"../hash":57}],59:[function(require,module,exports){
35178var hmac = exports;
ebd8d4e8 35179
8b095871
IC
35180var hash = require('../hash');
35181var utils = hash.utils;
35182var assert = utils.assert;
ebd8d4e8 35183
8b095871
IC
35184function Hmac(hash, key, enc) {
35185 if (!(this instanceof Hmac))
35186 return new Hmac(hash, key, enc);
35187 this.Hash = hash;
35188 this.blockSize = hash.blockSize / 8;
35189 this.outSize = hash.outSize / 8;
35190 this.inner = null;
35191 this.outer = null;
ebd8d4e8 35192
8b095871 35193 this._init(utils.toArray(key, enc));
ebd8d4e8 35194}
8b095871 35195module.exports = Hmac;
ebd8d4e8 35196
8b095871
IC
35197Hmac.prototype._init = function init(key) {
35198 // Shorten key, if needed
35199 if (key.length > this.blockSize)
35200 key = new this.Hash().update(key).digest();
35201 assert(key.length <= this.blockSize);
ebd8d4e8 35202
8b095871
IC
35203 // Add padding to key
35204 for (var i = key.length; i < this.blockSize; i++)
35205 key.push(0);
ab78acc6 35206
8b095871
IC
35207 for (var i = 0; i < key.length; i++)
35208 key[i] ^= 0x36;
35209 this.inner = new this.Hash().update(key);
ab78acc6 35210
8b095871
IC
35211 // 0x36 ^ 0x5c = 0x6a
35212 for (var i = 0; i < key.length; i++)
35213 key[i] ^= 0x6a;
35214 this.outer = new this.Hash().update(key);
35215};
ebd8d4e8 35216
8b095871
IC
35217Hmac.prototype.update = function update(msg, enc) {
35218 this.inner.update(msg, enc);
35219 return this;
35220};
ab78acc6 35221
8b095871
IC
35222Hmac.prototype.digest = function digest(enc) {
35223 this.outer.update(this.inner.digest());
35224 return this.outer.digest(enc);
35225};
ab78acc6 35226
8b095871
IC
35227},{"../hash":57}],60:[function(require,module,exports){
35228var hash = require('../hash');
35229var utils = hash.utils;
35230
35231var rotl32 = utils.rotl32;
35232var sum32 = utils.sum32;
35233var sum32_3 = utils.sum32_3;
35234var sum32_4 = utils.sum32_4;
35235var BlockHash = hash.common.BlockHash;
35236
35237function RIPEMD160() {
35238 if (!(this instanceof RIPEMD160))
35239 return new RIPEMD160();
35240
35241 BlockHash.call(this);
35242
35243 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
35244 this.endian = 'little';
35245}
35246utils.inherits(RIPEMD160, BlockHash);
35247exports.ripemd160 = RIPEMD160;
35248
35249RIPEMD160.blockSize = 512;
35250RIPEMD160.outSize = 160;
35251RIPEMD160.hmacStrength = 192;
35252RIPEMD160.padLength = 64;
35253
35254RIPEMD160.prototype._update = function update(msg, start) {
35255 var A = this.h[0];
35256 var B = this.h[1];
35257 var C = this.h[2];
35258 var D = this.h[3];
35259 var E = this.h[4];
35260 var Ah = A;
35261 var Bh = B;
35262 var Ch = C;
35263 var Dh = D;
35264 var Eh = E;
35265 for (var j = 0; j < 80; j++) {
35266 var T = sum32(
35267 rotl32(
35268 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
35269 s[j]),
35270 E);
35271 A = E;
35272 E = D;
35273 D = rotl32(C, 10);
35274 C = B;
35275 B = T;
35276 T = sum32(
35277 rotl32(
35278 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
35279 sh[j]),
35280 Eh);
35281 Ah = Eh;
35282 Eh = Dh;
35283 Dh = rotl32(Ch, 10);
35284 Ch = Bh;
35285 Bh = T;
35286 }
35287 T = sum32_3(this.h[1], C, Dh);
35288 this.h[1] = sum32_3(this.h[2], D, Eh);
35289 this.h[2] = sum32_3(this.h[3], E, Ah);
35290 this.h[3] = sum32_3(this.h[4], A, Bh);
35291 this.h[4] = sum32_3(this.h[0], B, Ch);
35292 this.h[0] = T;
35293};
ebd8d4e8 35294
8b095871
IC
35295RIPEMD160.prototype._digest = function digest(enc) {
35296 if (enc === 'hex')
35297 return utils.toHex32(this.h, 'little');
35298 else
35299 return utils.split32(this.h, 'little');
35300};
ebd8d4e8 35301
8b095871
IC
35302function f(j, x, y, z) {
35303 if (j <= 15)
35304 return x ^ y ^ z;
35305 else if (j <= 31)
35306 return (x & y) | ((~x) & z);
35307 else if (j <= 47)
35308 return (x | (~y)) ^ z;
35309 else if (j <= 63)
35310 return (x & z) | (y & (~z));
35311 else
35312 return x ^ (y | (~z));
35313}
35314
35315function K(j) {
35316 if (j <= 15)
35317 return 0x00000000;
35318 else if (j <= 31)
35319 return 0x5a827999;
35320 else if (j <= 47)
35321 return 0x6ed9eba1;
35322 else if (j <= 63)
35323 return 0x8f1bbcdc;
35324 else
35325 return 0xa953fd4e;
35326}
35327
35328function Kh(j) {
35329 if (j <= 15)
35330 return 0x50a28be6;
35331 else if (j <= 31)
35332 return 0x5c4dd124;
35333 else if (j <= 47)
35334 return 0x6d703ef3;
35335 else if (j <= 63)
35336 return 0x7a6d76e9;
35337 else
35338 return 0x00000000;
35339}
ebd8d4e8 35340
8b095871
IC
35341var r = [
35342 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
35343 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
35344 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
35345 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
35346 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
35347];
ebd8d4e8 35348
8b095871
IC
35349var rh = [
35350 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
35351 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
35352 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
35353 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
35354 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
35355];
ebd8d4e8 35356
8b095871
IC
35357var s = [
35358 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
35359 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
35360 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
35361 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
35362 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
35363];
ebd8d4e8 35364
8b095871
IC
35365var sh = [
35366 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
35367 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
35368 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
35369 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
35370 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
35371];
ebd8d4e8 35372
8b095871
IC
35373},{"../hash":57}],61:[function(require,module,exports){
35374var hash = require('../hash');
35375var utils = hash.utils;
35376var assert = utils.assert;
35377
35378var rotr32 = utils.rotr32;
35379var rotl32 = utils.rotl32;
35380var sum32 = utils.sum32;
35381var sum32_4 = utils.sum32_4;
35382var sum32_5 = utils.sum32_5;
35383var rotr64_hi = utils.rotr64_hi;
35384var rotr64_lo = utils.rotr64_lo;
35385var shr64_hi = utils.shr64_hi;
35386var shr64_lo = utils.shr64_lo;
35387var sum64 = utils.sum64;
35388var sum64_hi = utils.sum64_hi;
35389var sum64_lo = utils.sum64_lo;
35390var sum64_4_hi = utils.sum64_4_hi;
35391var sum64_4_lo = utils.sum64_4_lo;
35392var sum64_5_hi = utils.sum64_5_hi;
35393var sum64_5_lo = utils.sum64_5_lo;
35394var BlockHash = hash.common.BlockHash;
35395
35396var sha256_K = [
35397 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
35398 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
35399 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
35400 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
35401 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
35402 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
35403 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
35404 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
35405 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
35406 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
35407 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
35408 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
35409 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
35410 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
35411 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
35412 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
35413];
ebd8d4e8 35414
8b095871
IC
35415var sha512_K = [
35416 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35417 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35418 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35419 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35420 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35421 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35422 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35423 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35424 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35425 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35426 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35427 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35428 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35429 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35430 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35431 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35432 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35433 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35434 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35435 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35436 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35437 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35438 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35439 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35440 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35441 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35442 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35443 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35444 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35445 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35446 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35447 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35448 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35449 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35450 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35451 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35452 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
35453 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
35454 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
35455 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
35456];
ebd8d4e8 35457
8b095871
IC
35458var sha1_K = [
35459 0x5A827999, 0x6ED9EBA1,
35460 0x8F1BBCDC, 0xCA62C1D6
35461];
ebd8d4e8 35462
8b095871
IC
35463function SHA256() {
35464 if (!(this instanceof SHA256))
35465 return new SHA256();
35466
35467 BlockHash.call(this);
35468 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
35469 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
35470 this.k = sha256_K;
35471 this.W = new Array(64);
35472}
35473utils.inherits(SHA256, BlockHash);
35474exports.sha256 = SHA256;
35475
35476SHA256.blockSize = 512;
35477SHA256.outSize = 256;
35478SHA256.hmacStrength = 192;
35479SHA256.padLength = 64;
35480
35481SHA256.prototype._update = function _update(msg, start) {
35482 var W = this.W;
35483
35484 for (var i = 0; i < 16; i++)
35485 W[i] = msg[start + i];
35486 for (; i < W.length; i++)
35487 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
35488
35489 var a = this.h[0];
35490 var b = this.h[1];
35491 var c = this.h[2];
35492 var d = this.h[3];
35493 var e = this.h[4];
35494 var f = this.h[5];
35495 var g = this.h[6];
35496 var h = this.h[7];
35497
35498 assert(this.k.length === W.length);
35499 for (var i = 0; i < W.length; i++) {
35500 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
35501 var T2 = sum32(s0_256(a), maj32(a, b, c));
35502 h = g;
35503 g = f;
35504 f = e;
35505 e = sum32(d, T1);
35506 d = c;
35507 c = b;
35508 b = a;
35509 a = sum32(T1, T2);
35510 }
35511
35512 this.h[0] = sum32(this.h[0], a);
35513 this.h[1] = sum32(this.h[1], b);
35514 this.h[2] = sum32(this.h[2], c);
35515 this.h[3] = sum32(this.h[3], d);
35516 this.h[4] = sum32(this.h[4], e);
35517 this.h[5] = sum32(this.h[5], f);
35518 this.h[6] = sum32(this.h[6], g);
35519 this.h[7] = sum32(this.h[7], h);
35520};
ebd8d4e8 35521
8b095871
IC
35522SHA256.prototype._digest = function digest(enc) {
35523 if (enc === 'hex')
35524 return utils.toHex32(this.h, 'big');
35525 else
35526 return utils.split32(this.h, 'big');
35527};
ebd8d4e8 35528
8b095871
IC
35529function SHA224() {
35530 if (!(this instanceof SHA224))
35531 return new SHA224();
ebd8d4e8 35532
8b095871
IC
35533 SHA256.call(this);
35534 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
35535 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
35536}
35537utils.inherits(SHA224, SHA256);
35538exports.sha224 = SHA224;
ebd8d4e8 35539
8b095871
IC
35540SHA224.blockSize = 512;
35541SHA224.outSize = 224;
35542SHA224.hmacStrength = 192;
35543SHA224.padLength = 64;
ebd8d4e8 35544
8b095871
IC
35545SHA224.prototype._digest = function digest(enc) {
35546 // Just truncate output
35547 if (enc === 'hex')
35548 return utils.toHex32(this.h.slice(0, 7), 'big');
35549 else
35550 return utils.split32(this.h.slice(0, 7), 'big');
35551};
35552
35553function SHA512() {
35554 if (!(this instanceof SHA512))
35555 return new SHA512();
35556
35557 BlockHash.call(this);
35558 this.h = [ 0x6a09e667, 0xf3bcc908,
35559 0xbb67ae85, 0x84caa73b,
35560 0x3c6ef372, 0xfe94f82b,
35561 0xa54ff53a, 0x5f1d36f1,
35562 0x510e527f, 0xade682d1,
35563 0x9b05688c, 0x2b3e6c1f,
35564 0x1f83d9ab, 0xfb41bd6b,
35565 0x5be0cd19, 0x137e2179 ];
35566 this.k = sha512_K;
35567 this.W = new Array(160);
35568}
35569utils.inherits(SHA512, BlockHash);
35570exports.sha512 = SHA512;
35571
35572SHA512.blockSize = 1024;
35573SHA512.outSize = 512;
35574SHA512.hmacStrength = 192;
35575SHA512.padLength = 128;
35576
35577SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
35578 var W = this.W;
35579
35580 // 32 x 32bit words
35581 for (var i = 0; i < 32; i++)
35582 W[i] = msg[start + i];
35583 for (; i < W.length; i += 2) {
35584 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
35585 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
35586 var c1_hi = W[i - 14]; // i - 7
35587 var c1_lo = W[i - 13];
35588 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
35589 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
35590 var c3_hi = W[i - 32]; // i - 16
35591 var c3_lo = W[i - 31];
35592
35593 W[i] = sum64_4_hi(c0_hi, c0_lo,
35594 c1_hi, c1_lo,
35595 c2_hi, c2_lo,
35596 c3_hi, c3_lo);
35597 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
35598 c1_hi, c1_lo,
35599 c2_hi, c2_lo,
35600 c3_hi, c3_lo);
ebd8d4e8 35601 }
8b095871
IC
35602};
35603
35604SHA512.prototype._update = function _update(msg, start) {
35605 this._prepareBlock(msg, start);
35606
35607 var W = this.W;
35608
35609 var ah = this.h[0];
35610 var al = this.h[1];
35611 var bh = this.h[2];
35612 var bl = this.h[3];
35613 var ch = this.h[4];
35614 var cl = this.h[5];
35615 var dh = this.h[6];
35616 var dl = this.h[7];
35617 var eh = this.h[8];
35618 var el = this.h[9];
35619 var fh = this.h[10];
35620 var fl = this.h[11];
35621 var gh = this.h[12];
35622 var gl = this.h[13];
35623 var hh = this.h[14];
35624 var hl = this.h[15];
35625
35626 assert(this.k.length === W.length);
35627 for (var i = 0; i < W.length; i += 2) {
35628 var c0_hi = hh;
35629 var c0_lo = hl;
35630 var c1_hi = s1_512_hi(eh, el);
35631 var c1_lo = s1_512_lo(eh, el);
35632 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
35633 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
35634 var c3_hi = this.k[i];
35635 var c3_lo = this.k[i + 1];
35636 var c4_hi = W[i];
35637 var c4_lo = W[i + 1];
35638
35639 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
35640 c1_hi, c1_lo,
35641 c2_hi, c2_lo,
35642 c3_hi, c3_lo,
35643 c4_hi, c4_lo);
35644 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
35645 c1_hi, c1_lo,
35646 c2_hi, c2_lo,
35647 c3_hi, c3_lo,
35648 c4_hi, c4_lo);
35649
35650 var c0_hi = s0_512_hi(ah, al);
35651 var c0_lo = s0_512_lo(ah, al);
35652 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
35653 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
35654
35655 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
35656 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
35657
35658 hh = gh;
35659 hl = gl;
35660
35661 gh = fh;
35662 gl = fl;
35663
35664 fh = eh;
35665 fl = el;
35666
35667 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
35668 el = sum64_lo(dl, dl, T1_hi, T1_lo);
35669
35670 dh = ch;
35671 dl = cl;
35672
35673 ch = bh;
35674 cl = bl;
35675
35676 bh = ah;
35677 bl = al;
35678
35679 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
35680 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
35681 }
35682
35683 sum64(this.h, 0, ah, al);
35684 sum64(this.h, 2, bh, bl);
35685 sum64(this.h, 4, ch, cl);
35686 sum64(this.h, 6, dh, dl);
35687 sum64(this.h, 8, eh, el);
35688 sum64(this.h, 10, fh, fl);
35689 sum64(this.h, 12, gh, gl);
35690 sum64(this.h, 14, hh, hl);
35691};
35692
35693SHA512.prototype._digest = function digest(enc) {
35694 if (enc === 'hex')
35695 return utils.toHex32(this.h, 'big');
35696 else
35697 return utils.split32(this.h, 'big');
35698};
35699
35700function SHA384() {
35701 if (!(this instanceof SHA384))
35702 return new SHA384();
35703
35704 SHA512.call(this);
35705 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
35706 0x629a292a, 0x367cd507,
35707 0x9159015a, 0x3070dd17,
35708 0x152fecd8, 0xf70e5939,
35709 0x67332667, 0xffc00b31,
35710 0x8eb44a87, 0x68581511,
35711 0xdb0c2e0d, 0x64f98fa7,
35712 0x47b5481d, 0xbefa4fa4 ];
35713}
35714utils.inherits(SHA384, SHA512);
35715exports.sha384 = SHA384;
35716
35717SHA384.blockSize = 1024;
35718SHA384.outSize = 384;
35719SHA384.hmacStrength = 192;
35720SHA384.padLength = 128;
35721
35722SHA384.prototype._digest = function digest(enc) {
35723 if (enc === 'hex')
35724 return utils.toHex32(this.h.slice(0, 12), 'big');
35725 else
35726 return utils.split32(this.h.slice(0, 12), 'big');
35727};
ebd8d4e8 35728
8b095871
IC
35729function SHA1() {
35730 if (!(this instanceof SHA1))
35731 return new SHA1();
ebd8d4e8 35732
8b095871
IC
35733 BlockHash.call(this);
35734 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
35735 0x10325476, 0xc3d2e1f0 ];
35736 this.W = new Array(80);
35737}
ebd8d4e8 35738
8b095871
IC
35739utils.inherits(SHA1, BlockHash);
35740exports.sha1 = SHA1;
ebd8d4e8 35741
8b095871
IC
35742SHA1.blockSize = 512;
35743SHA1.outSize = 160;
35744SHA1.hmacStrength = 80;
35745SHA1.padLength = 64;
ebd8d4e8 35746
8b095871
IC
35747SHA1.prototype._update = function _update(msg, start) {
35748 var W = this.W;
ebd8d4e8 35749
8b095871
IC
35750 for (var i = 0; i < 16; i++)
35751 W[i] = msg[start + i];
ebd8d4e8 35752
8b095871
IC
35753 for(; i < W.length; i++)
35754 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 35755
8b095871
IC
35756 var a = this.h[0];
35757 var b = this.h[1];
35758 var c = this.h[2];
35759 var d = this.h[3];
35760 var e = this.h[4];
ebd8d4e8 35761
8b095871
IC
35762 for (var i = 0; i < W.length; i++) {
35763 var s = ~~(i / 20);
35764 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
35765 e = d;
35766 d = c;
35767 c = rotl32(b, 30);
35768 b = a;
35769 a = t;
ebd8d4e8
IC
35770 }
35771
8b095871
IC
35772 this.h[0] = sum32(this.h[0], a);
35773 this.h[1] = sum32(this.h[1], b);
35774 this.h[2] = sum32(this.h[2], c);
35775 this.h[3] = sum32(this.h[3], d);
35776 this.h[4] = sum32(this.h[4], e);
35777};
ebd8d4e8 35778
8b095871
IC
35779SHA1.prototype._digest = function digest(enc) {
35780 if (enc === 'hex')
35781 return utils.toHex32(this.h, 'big');
35782 else
35783 return utils.split32(this.h, 'big');
35784};
35785
35786function ch32(x, y, z) {
35787 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
35788}
35789
8b095871
IC
35790function maj32(x, y, z) {
35791 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
35792}
35793
8b095871
IC
35794function p32(x, y, z) {
35795 return x ^ y ^ z;
35796}
ebd8d4e8 35797
8b095871
IC
35798function s0_256(x) {
35799 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
35800}
ebd8d4e8 35801
8b095871
IC
35802function s1_256(x) {
35803 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
35804}
35805
8b095871
IC
35806function g0_256(x) {
35807 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
35808}
ab78acc6 35809
8b095871
IC
35810function g1_256(x) {
35811 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
35812}
ab78acc6 35813
8b095871
IC
35814function ft_1(s, x, y, z) {
35815 if (s === 0)
35816 return ch32(x, y, z);
35817 if (s === 1 || s === 3)
35818 return p32(x, y, z);
35819 if (s === 2)
35820 return maj32(x, y, z);
35821}
ebd8d4e8 35822
8b095871
IC
35823function ch64_hi(xh, xl, yh, yl, zh, zl) {
35824 var r = (xh & yh) ^ ((~xh) & zh);
35825 if (r < 0)
35826 r += 0x100000000;
35827 return r;
35828}
ebd8d4e8 35829
8b095871
IC
35830function ch64_lo(xh, xl, yh, yl, zh, zl) {
35831 var r = (xl & yl) ^ ((~xl) & zl);
35832 if (r < 0)
35833 r += 0x100000000;
35834 return r;
ebd8d4e8
IC
35835}
35836
8b095871
IC
35837function maj64_hi(xh, xl, yh, yl, zh, zl) {
35838 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
35839 if (r < 0)
35840 r += 0x100000000;
35841 return r;
35842}
ebd8d4e8 35843
8b095871
IC
35844function maj64_lo(xh, xl, yh, yl, zh, zl) {
35845 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
35846 if (r < 0)
35847 r += 0x100000000;
35848 return r;
35849}
ebd8d4e8 35850
8b095871
IC
35851function s0_512_hi(xh, xl) {
35852 var c0_hi = rotr64_hi(xh, xl, 28);
35853 var c1_hi = rotr64_hi(xl, xh, 2); // 34
35854 var c2_hi = rotr64_hi(xl, xh, 7); // 39
35855
35856 var r = c0_hi ^ c1_hi ^ c2_hi;
35857 if (r < 0)
35858 r += 0x100000000;
35859 return r;
ebd8d4e8
IC
35860}
35861
8b095871
IC
35862function s0_512_lo(xh, xl) {
35863 var c0_lo = rotr64_lo(xh, xl, 28);
35864 var c1_lo = rotr64_lo(xl, xh, 2); // 34
35865 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 35866
8b095871
IC
35867 var r = c0_lo ^ c1_lo ^ c2_lo;
35868 if (r < 0)
35869 r += 0x100000000;
35870 return r;
35871}
ebd8d4e8 35872
8b095871
IC
35873function s1_512_hi(xh, xl) {
35874 var c0_hi = rotr64_hi(xh, xl, 14);
35875 var c1_hi = rotr64_hi(xh, xl, 18);
35876 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 35877
8b095871
IC
35878 var r = c0_hi ^ c1_hi ^ c2_hi;
35879 if (r < 0)
35880 r += 0x100000000;
35881 return r;
ebd8d4e8
IC
35882}
35883
8b095871
IC
35884function s1_512_lo(xh, xl) {
35885 var c0_lo = rotr64_lo(xh, xl, 14);
35886 var c1_lo = rotr64_lo(xh, xl, 18);
35887 var c2_lo = rotr64_lo(xl, xh, 9); // 41
35888
35889 var r = c0_lo ^ c1_lo ^ c2_lo;
35890 if (r < 0)
35891 r += 0x100000000;
35892 return r;
ebd8d4e8
IC
35893}
35894
8b095871
IC
35895function g0_512_hi(xh, xl) {
35896 var c0_hi = rotr64_hi(xh, xl, 1);
35897 var c1_hi = rotr64_hi(xh, xl, 8);
35898 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 35899
8b095871
IC
35900 var r = c0_hi ^ c1_hi ^ c2_hi;
35901 if (r < 0)
35902 r += 0x100000000;
35903 return r;
35904}
35905
35906function g0_512_lo(xh, xl) {
35907 var c0_lo = rotr64_lo(xh, xl, 1);
35908 var c1_lo = rotr64_lo(xh, xl, 8);
35909 var c2_lo = shr64_lo(xh, xl, 7);
35910
35911 var r = c0_lo ^ c1_lo ^ c2_lo;
35912 if (r < 0)
35913 r += 0x100000000;
35914 return r;
35915}
35916
35917function g1_512_hi(xh, xl) {
35918 var c0_hi = rotr64_hi(xh, xl, 19);
35919 var c1_hi = rotr64_hi(xl, xh, 29); // 61
35920 var c2_hi = shr64_hi(xh, xl, 6);
35921
35922 var r = c0_hi ^ c1_hi ^ c2_hi;
35923 if (r < 0)
35924 r += 0x100000000;
35925 return r;
35926}
35927
35928function g1_512_lo(xh, xl) {
35929 var c0_lo = rotr64_lo(xh, xl, 19);
35930 var c1_lo = rotr64_lo(xl, xh, 29); // 61
35931 var c2_lo = shr64_lo(xh, xl, 6);
35932
35933 var r = c0_lo ^ c1_lo ^ c2_lo;
35934 if (r < 0)
35935 r += 0x100000000;
35936 return r;
35937}
35938
35939},{"../hash":57}],62:[function(require,module,exports){
35940var utils = exports;
35941var inherits = require('inherits');
35942
35943function toArray(msg, enc) {
35944 if (Array.isArray(msg))
35945 return msg.slice();
35946 if (!msg)
35947 return [];
35948 var res = [];
35949 if (typeof msg === 'string') {
35950 if (!enc) {
35951 for (var i = 0; i < msg.length; i++) {
35952 var c = msg.charCodeAt(i);
35953 var hi = c >> 8;
35954 var lo = c & 0xff;
35955 if (hi)
35956 res.push(hi, lo);
35957 else
35958 res.push(lo);
35959 }
35960 } else if (enc === 'hex') {
35961 msg = msg.replace(/[^a-z0-9]+/ig, '');
35962 if (msg.length % 2 !== 0)
35963 msg = '0' + msg;
35964 for (var i = 0; i < msg.length; i += 2)
35965 res.push(parseInt(msg[i] + msg[i + 1], 16));
35966 }
35967 } else {
35968 for (var i = 0; i < msg.length; i++)
35969 res[i] = msg[i] | 0;
ebd8d4e8 35970 }
8b095871 35971 return res;
ebd8d4e8 35972}
8b095871 35973utils.toArray = toArray;
ebd8d4e8 35974
8b095871
IC
35975function toHex(msg) {
35976 var res = '';
35977 for (var i = 0; i < msg.length; i++)
35978 res += zero2(msg[i].toString(16));
35979 return res;
35980}
35981utils.toHex = toHex;
ebd8d4e8 35982
8b095871
IC
35983function htonl(w) {
35984 var res = (w >>> 24) |
35985 ((w >>> 8) & 0xff00) |
35986 ((w << 8) & 0xff0000) |
35987 ((w & 0xff) << 24);
35988 return res >>> 0;
35989}
35990utils.htonl = htonl;
ebd8d4e8 35991
8b095871
IC
35992function toHex32(msg, endian) {
35993 var res = '';
35994 for (var i = 0; i < msg.length; i++) {
35995 var w = msg[i];
35996 if (endian === 'little')
35997 w = htonl(w);
35998 res += zero8(w.toString(16));
35999 }
36000 return res;
36001}
36002utils.toHex32 = toHex32;
ebd8d4e8 36003
8b095871
IC
36004function zero2(word) {
36005 if (word.length === 1)
36006 return '0' + word;
36007 else
36008 return word;
36009}
36010utils.zero2 = zero2;
36011
36012function zero8(word) {
36013 if (word.length === 7)
36014 return '0' + word;
36015 else if (word.length === 6)
36016 return '00' + word;
36017 else if (word.length === 5)
36018 return '000' + word;
36019 else if (word.length === 4)
36020 return '0000' + word;
36021 else if (word.length === 3)
36022 return '00000' + word;
36023 else if (word.length === 2)
36024 return '000000' + word;
36025 else if (word.length === 1)
36026 return '0000000' + word;
36027 else
36028 return word;
36029}
36030utils.zero8 = zero8;
36031
36032function join32(msg, start, end, endian) {
36033 var len = end - start;
36034 assert(len % 4 === 0);
36035 var res = new Array(len / 4);
36036 for (var i = 0, k = start; i < res.length; i++, k += 4) {
36037 var w;
36038 if (endian === 'big')
36039 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
36040 else
36041 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
36042 res[i] = w >>> 0;
36043 }
36044 return res;
36045}
36046utils.join32 = join32;
36047
36048function split32(msg, endian) {
36049 var res = new Array(msg.length * 4);
36050 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
36051 var m = msg[i];
36052 if (endian === 'big') {
36053 res[k] = m >>> 24;
36054 res[k + 1] = (m >>> 16) & 0xff;
36055 res[k + 2] = (m >>> 8) & 0xff;
36056 res[k + 3] = m & 0xff;
36057 } else {
36058 res[k + 3] = m >>> 24;
36059 res[k + 2] = (m >>> 16) & 0xff;
36060 res[k + 1] = (m >>> 8) & 0xff;
36061 res[k] = m & 0xff;
36062 }
ebd8d4e8 36063 }
8b095871 36064 return res;
ebd8d4e8 36065}
8b095871 36066utils.split32 = split32;
ebd8d4e8 36067
8b095871
IC
36068function rotr32(w, b) {
36069 return (w >>> b) | (w << (32 - b));
36070}
36071utils.rotr32 = rotr32;
ebd8d4e8 36072
8b095871
IC
36073function rotl32(w, b) {
36074 return (w << b) | (w >>> (32 - b));
36075}
36076utils.rotl32 = rotl32;
ebd8d4e8 36077
8b095871
IC
36078function sum32(a, b) {
36079 return (a + b) >>> 0;
36080}
36081utils.sum32 = sum32;
ebd8d4e8 36082
8b095871
IC
36083function sum32_3(a, b, c) {
36084 return (a + b + c) >>> 0;
36085}
36086utils.sum32_3 = sum32_3;
ebd8d4e8 36087
8b095871
IC
36088function sum32_4(a, b, c, d) {
36089 return (a + b + c + d) >>> 0;
36090}
36091utils.sum32_4 = sum32_4;
ebd8d4e8 36092
8b095871
IC
36093function sum32_5(a, b, c, d, e) {
36094 return (a + b + c + d + e) >>> 0;
36095}
36096utils.sum32_5 = sum32_5;
ebd8d4e8 36097
8b095871
IC
36098function assert(cond, msg) {
36099 if (!cond)
36100 throw new Error(msg || 'Assertion failed');
36101}
36102utils.assert = assert;
ab78acc6 36103
8b095871 36104utils.inherits = inherits;
ab78acc6 36105
8b095871
IC
36106function sum64(buf, pos, ah, al) {
36107 var bh = buf[pos];
36108 var bl = buf[pos + 1];
ab78acc6 36109
8b095871
IC
36110 var lo = (al + bl) >>> 0;
36111 var hi = (lo < al ? 1 : 0) + ah + bh;
36112 buf[pos] = hi >>> 0;
36113 buf[pos + 1] = lo;
36114}
36115exports.sum64 = sum64;
ebd8d4e8 36116
8b095871
IC
36117function sum64_hi(ah, al, bh, bl) {
36118 var lo = (al + bl) >>> 0;
36119 var hi = (lo < al ? 1 : 0) + ah + bh;
36120 return hi >>> 0;
36121};
36122exports.sum64_hi = sum64_hi;
ebd8d4e8 36123
8b095871
IC
36124function sum64_lo(ah, al, bh, bl) {
36125 var lo = al + bl;
36126 return lo >>> 0;
36127};
36128exports.sum64_lo = sum64_lo;
36129
36130function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
36131 var carry = 0;
36132 var lo = al;
36133 lo = (lo + bl) >>> 0;
36134 carry += lo < al ? 1 : 0;
36135 lo = (lo + cl) >>> 0;
36136 carry += lo < cl ? 1 : 0;
36137 lo = (lo + dl) >>> 0;
36138 carry += lo < dl ? 1 : 0;
36139
36140 var hi = ah + bh + ch + dh + carry;
36141 return hi >>> 0;
36142};
36143exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 36144
8b095871
IC
36145function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
36146 var lo = al + bl + cl + dl;
36147 return lo >>> 0;
36148};
36149exports.sum64_4_lo = sum64_4_lo;
36150
36151function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36152 var carry = 0;
36153 var lo = al;
36154 lo = (lo + bl) >>> 0;
36155 carry += lo < al ? 1 : 0;
36156 lo = (lo + cl) >>> 0;
36157 carry += lo < cl ? 1 : 0;
36158 lo = (lo + dl) >>> 0;
36159 carry += lo < dl ? 1 : 0;
36160 lo = (lo + el) >>> 0;
36161 carry += lo < el ? 1 : 0;
36162
36163 var hi = ah + bh + ch + dh + eh + carry;
36164 return hi >>> 0;
36165};
36166exports.sum64_5_hi = sum64_5_hi;
36167
36168function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36169 var lo = al + bl + cl + dl + el;
36170
36171 return lo >>> 0;
36172};
36173exports.sum64_5_lo = sum64_5_lo;
36174
36175function rotr64_hi(ah, al, num) {
36176 var r = (al << (32 - num)) | (ah >>> num);
36177 return r >>> 0;
36178};
36179exports.rotr64_hi = rotr64_hi;
36180
36181function rotr64_lo(ah, al, num) {
36182 var r = (ah << (32 - num)) | (al >>> num);
36183 return r >>> 0;
36184};
36185exports.rotr64_lo = rotr64_lo;
36186
36187function shr64_hi(ah, al, num) {
36188 return ah >>> num;
36189};
36190exports.shr64_hi = shr64_hi;
36191
36192function shr64_lo(ah, al, num) {
36193 var r = (ah << (32 - num)) | (al >>> num);
36194 return r >>> 0;
36195};
36196exports.shr64_lo = shr64_lo;
36197
36198},{"inherits":63}],63:[function(require,module,exports){
36199arguments[4][9][0].apply(exports,arguments)
36200},{"dup":9}],64:[function(require,module,exports){
36201/**
36202 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
36203 * @param {String} str the string input value
36204 * @return {Boolean} a boolean if it is or is not hex prefixed
36205 * @throws if the str input is not a string
36206 */
36207module.exports = function isHexPrefixed(str) {
36208 if (typeof str !== 'string') {
36209 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
36210 }
36211
36212 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
36213}
36214
8b095871
IC
36215},{}],65:[function(require,module,exports){
36216'use strict'
36217module.exports = require('./lib/api')(require('./lib/keccak'))
36218
36219},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
36220'use strict'
36221var createKeccak = require('./keccak')
36222var createShake = require('./shake')
36223
36224module.exports = function (KeccakState) {
36225 var Keccak = createKeccak(KeccakState)
36226 var Shake = createShake(KeccakState)
36227
36228 return function (algorithm, options) {
36229 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
36230 switch (hash) {
36231 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
36232 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
36233 case 'keccak384': return new Keccak(832, 768, null, 384, options)
36234 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
36235
36236 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
36237 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
36238 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
36239 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
36240
36241 case 'shake128': return new Shake(1344, 256, 0x1f, options)
36242 case 'shake256': return new Shake(1088, 512, 0x1f, options)
36243
36244 default: throw new Error('Invald algorithm: ' + algorithm)
36245 }
36246 }
36247}
36248
36249},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 36250(function (Buffer){
8b095871
IC
36251'use strict'
36252var Transform = require('stream').Transform
36253var inherits = require('inherits')
36254
36255module.exports = function (KeccakState) {
36256 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
36257 Transform.call(this, options)
36258
36259 this._rate = rate
36260 this._capacity = capacity
36261 this._delimitedSuffix = delimitedSuffix
36262 this._hashBitLength = hashBitLength
36263 this._options = options
36264
36265 this._state = new KeccakState()
36266 this._state.initialize(rate, capacity)
36267 this._finalized = false
36268 }
36269
36270 inherits(Keccak, Transform)
36271
36272 Keccak.prototype._transform = function (chunk, encoding, callback) {
36273 var error = null
36274 try {
36275 this.update(chunk, encoding)
36276 } catch (err) {
36277 error = err
36278 }
36279
36280 callback(error)
36281 }
36282
36283 Keccak.prototype._flush = function (callback) {
36284 var error = null
36285 try {
36286 this.push(this.digest())
36287 } catch (err) {
36288 error = err
36289 }
36290
36291 callback(error)
36292 }
36293
36294 Keccak.prototype.update = function (data, encoding) {
36295 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36296 if (this._finalized) throw new Error('Digest already called')
36297 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36298
36299 this._state.absorb(data)
36300
36301 return this
36302 }
36303
36304 Keccak.prototype.digest = function (encoding) {
36305 if (this._finalized) throw new Error('Digest already called')
36306 this._finalized = true
36307
36308 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
36309 var digest = this._state.squeeze(this._hashBitLength / 8)
36310 if (encoding !== undefined) digest = digest.toString(encoding)
36311
36312 this._resetState()
36313
36314 return digest
36315 }
36316
36317 // remove result from memory
36318 Keccak.prototype._resetState = function () {
36319 this._state.initialize(this._rate, this._capacity)
36320 return this
36321 }
36322
36323 // because sometimes we need hash right now and little later
36324 Keccak.prototype._clone = function () {
36325 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
36326 this._state.copy(clone._state)
36327 clone._finalized = this._finalized
36328
36329 return clone
36330 }
36331
36332 return Keccak
36333}
36334
36335}).call(this,require("buffer").Buffer)
36336},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
36337(function (Buffer){
36338'use strict'
36339var Transform = require('stream').Transform
36340var inherits = require('inherits')
36341
36342module.exports = function (KeccakState) {
36343 function Shake (rate, capacity, delimitedSuffix, options) {
36344 Transform.call(this, options)
36345
36346 this._rate = rate
36347 this._capacity = capacity
36348 this._delimitedSuffix = delimitedSuffix
36349 this._options = options
36350
36351 this._state = new KeccakState()
36352 this._state.initialize(rate, capacity)
36353 this._finalized = false
36354 }
36355
36356 inherits(Shake, Transform)
36357
36358 Shake.prototype._transform = function (chunk, encoding, callback) {
36359 var error = null
36360 try {
36361 this.update(chunk, encoding)
36362 } catch (err) {
36363 error = err
36364 }
ebd8d4e8 36365
8b095871
IC
36366 callback(error)
36367 }
ebd8d4e8 36368
8b095871 36369 Shake.prototype._flush = function () {}
ebd8d4e8 36370
8b095871
IC
36371 Shake.prototype._read = function (size) {
36372 this.push(this.squeeze(size))
36373 }
ebd8d4e8 36374
8b095871
IC
36375 Shake.prototype.update = function (data, encoding) {
36376 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36377 if (this._finalized) throw new Error('Squeeze already called')
36378 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36379
36380 this._state.absorb(data)
36381
36382 return this
36383 }
36384
36385 Shake.prototype.squeeze = function (dataByteLength, encoding) {
36386 if (!this._finalized) {
36387 this._finalized = true
36388 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 36389 }
ebd8d4e8 36390
8b095871
IC
36391 var data = this._state.squeeze(dataByteLength)
36392 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 36393
8b095871
IC
36394 return data
36395 }
ebd8d4e8 36396
8b095871
IC
36397 Shake.prototype._resetState = function () {
36398 this._state.initialize(this._rate, this._capacity)
36399 return this
36400 }
ebd8d4e8 36401
8b095871
IC
36402 Shake.prototype._clone = function () {
36403 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
36404 this._state.copy(clone._state)
36405 clone._finalized = this._finalized
ab78acc6 36406
8b095871
IC
36407 return clone
36408 }
ebd8d4e8 36409
8b095871
IC
36410 return Shake
36411}
ab78acc6 36412
8b095871
IC
36413}).call(this,require("buffer").Buffer)
36414},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
36415'use strict'
36416var 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]
36417
36418exports.p1600 = function (s) {
36419 for (var round = 0; round < 24; ++round) {
36420 // theta
36421 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
36422 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
36423 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
36424 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
36425 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
36426 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
36427 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
36428 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
36429 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
36430 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
36431
36432 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
36433 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
36434 var t1slo0 = s[0] ^ lo
36435 var t1shi0 = s[1] ^ hi
36436 var t1slo5 = s[10] ^ lo
36437 var t1shi5 = s[11] ^ hi
36438 var t1slo10 = s[20] ^ lo
36439 var t1shi10 = s[21] ^ hi
36440 var t1slo15 = s[30] ^ lo
36441 var t1shi15 = s[31] ^ hi
36442 var t1slo20 = s[40] ^ lo
36443 var t1shi20 = s[41] ^ hi
36444 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
36445 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
36446 var t1slo1 = s[2] ^ lo
36447 var t1shi1 = s[3] ^ hi
36448 var t1slo6 = s[12] ^ lo
36449 var t1shi6 = s[13] ^ hi
36450 var t1slo11 = s[22] ^ lo
36451 var t1shi11 = s[23] ^ hi
36452 var t1slo16 = s[32] ^ lo
36453 var t1shi16 = s[33] ^ hi
36454 var t1slo21 = s[42] ^ lo
36455 var t1shi21 = s[43] ^ hi
36456 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
36457 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
36458 var t1slo2 = s[4] ^ lo
36459 var t1shi2 = s[5] ^ hi
36460 var t1slo7 = s[14] ^ lo
36461 var t1shi7 = s[15] ^ hi
36462 var t1slo12 = s[24] ^ lo
36463 var t1shi12 = s[25] ^ hi
36464 var t1slo17 = s[34] ^ lo
36465 var t1shi17 = s[35] ^ hi
36466 var t1slo22 = s[44] ^ lo
36467 var t1shi22 = s[45] ^ hi
36468 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
36469 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
36470 var t1slo3 = s[6] ^ lo
36471 var t1shi3 = s[7] ^ hi
36472 var t1slo8 = s[16] ^ lo
36473 var t1shi8 = s[17] ^ hi
36474 var t1slo13 = s[26] ^ lo
36475 var t1shi13 = s[27] ^ hi
36476 var t1slo18 = s[36] ^ lo
36477 var t1shi18 = s[37] ^ hi
36478 var t1slo23 = s[46] ^ lo
36479 var t1shi23 = s[47] ^ hi
36480 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
36481 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
36482 var t1slo4 = s[8] ^ lo
36483 var t1shi4 = s[9] ^ hi
36484 var t1slo9 = s[18] ^ lo
36485 var t1shi9 = s[19] ^ hi
36486 var t1slo14 = s[28] ^ lo
36487 var t1shi14 = s[29] ^ hi
36488 var t1slo19 = s[38] ^ lo
36489 var t1shi19 = s[39] ^ hi
36490 var t1slo24 = s[48] ^ lo
36491 var t1shi24 = s[49] ^ hi
36492
36493 // rho & pi
36494 var t2slo0 = t1slo0
36495 var t2shi0 = t1shi0
36496 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
36497 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
36498 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
36499 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
36500 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
36501 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
36502 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
36503 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
36504 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
36505 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
36506 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
36507 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
36508 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
36509 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
36510 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
36511 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
36512 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
36513 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
36514 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
36515 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
36516 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
36517 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
36518 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
36519 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
36520 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
36521 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
36522 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
36523 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
36524 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
36525 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
36526 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
36527 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
36528 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
36529 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
36530 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
36531 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
36532 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
36533 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
36534 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
36535 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
36536 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
36537 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
36538 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
36539 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
36540 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
36541 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
36542 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
36543 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
36544
36545 // chi
36546 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
36547 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
36548 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
36549 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
36550 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
36551 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
36552 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
36553 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
36554 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
36555 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
36556 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
36557 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
36558 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
36559 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
36560 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
36561 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
36562 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
36563 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
36564 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
36565 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
36566 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
36567 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
36568 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
36569 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
36570 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
36571 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
36572 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
36573 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
36574 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
36575 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
36576 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
36577 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
36578 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
36579 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
36580 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
36581 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
36582 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
36583 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
36584 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
36585 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
36586 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
36587 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
36588 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
36589 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
36590 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
36591 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
36592 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
36593 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
36594 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
36595 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
36596
36597 // iota
36598 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
36599 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
36600 }
36601}
36602
36603},{}],70:[function(require,module,exports){
36604(function (Buffer){
36605'use strict'
36606var keccakState = require('./keccak-state-unroll')
ebd8d4e8 36607
8b095871
IC
36608function Keccak () {
36609 // much faster than `new Array(50)`
36610 this.state = [
36611 0, 0, 0, 0, 0,
36612 0, 0, 0, 0, 0,
36613 0, 0, 0, 0, 0,
36614 0, 0, 0, 0, 0,
36615 0, 0, 0, 0, 0
36616 ]
ebd8d4e8 36617
8b095871
IC
36618 this.blockSize = null
36619 this.count = 0
36620 this.squeezing = false
36621}
ebd8d4e8 36622
8b095871
IC
36623Keccak.prototype.initialize = function (rate, capacity) {
36624 for (var i = 0; i < 50; ++i) this.state[i] = 0
36625 this.blockSize = rate / 8
36626 this.count = 0
36627 this.squeezing = false
36628}
36629
36630Keccak.prototype.absorb = function (data) {
36631 for (var i = 0; i < data.length; ++i) {
36632 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
36633 this.count += 1
36634 if (this.count === this.blockSize) {
36635 keccakState.p1600(this.state)
36636 this.count = 0
ebd8d4e8
IC
36637 }
36638 }
8b095871 36639}
ebd8d4e8 36640
8b095871
IC
36641Keccak.prototype.absorbLastFewBits = function (bits) {
36642 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
36643 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
36644 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
36645 keccakState.p1600(this.state)
36646 this.count = 0
36647 this.squeezing = true
ebd8d4e8
IC
36648}
36649
8b095871
IC
36650Keccak.prototype.squeeze = function (length) {
36651 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 36652
8b095871
IC
36653 var output = Buffer.allocUnsafe(length)
36654 for (var i = 0; i < length; ++i) {
36655 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
36656 this.count += 1
36657 if (this.count === this.blockSize) {
36658 keccakState.p1600(this.state)
36659 this.count = 0
ebd8d4e8 36660 }
8b095871 36661 }
ebd8d4e8 36662
8b095871
IC
36663 return output
36664}
ebd8d4e8 36665
8b095871
IC
36666Keccak.prototype.copy = function (dest) {
36667 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
36668 dest.blockSize = this.blockSize
36669 dest.count = this.count
36670 dest.squeezing = this.squeezing
36671}
ebd8d4e8 36672
8b095871 36673module.exports = Keccak
ebd8d4e8 36674
8b095871
IC
36675}).call(this,require("buffer").Buffer)
36676},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
36677(function (Buffer){
36678/*
36679CryptoJS v3.1.2
36680code.google.com/p/crypto-js
36681(c) 2009-2013 by Jeff Mott. All rights reserved.
36682code.google.com/p/crypto-js/wiki/License
36683*/
36684/** @preserve
36685(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 36686
8b095871 36687Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 36688
8b095871
IC
36689 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
36690 - 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.
36691
36692THIS 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.
36693*/
36694
36695// constants table
36696var zl = [
36697 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
36698 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
36699 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
36700 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
36701 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
36702]
36703
36704var zr = [
36705 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
36706 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
36707 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
36708 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
36709 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
36710]
36711
36712var sl = [
36713 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
36714 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
36715 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
36716 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
36717 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
36718]
36719
36720var sr = [
36721 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
36722 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
36723 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
36724 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
36725 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
36726]
36727
36728var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
36729var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
36730
36731function bytesToWords (bytes) {
36732 var words = []
36733 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
36734 words[b >>> 5] |= bytes[i] << (24 - b % 32)
36735 }
36736 return words
ebd8d4e8
IC
36737}
36738
8b095871
IC
36739function wordsToBytes (words) {
36740 var bytes = []
36741 for (var b = 0; b < words.length * 32; b += 8) {
36742 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
36743 }
36744 return bytes
ebd8d4e8
IC
36745}
36746
8b095871
IC
36747function processBlock (H, M, offset) {
36748 // swap endian
36749 for (var i = 0; i < 16; i++) {
36750 var offset_i = offset + i
36751 var M_offset_i = M[offset_i]
ebd8d4e8 36752
8b095871
IC
36753 // Swap
36754 M[offset_i] = (
36755 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
36756 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
36757 )
36758 }
ebd8d4e8 36759
8b095871
IC
36760 // Working variables
36761 var al, bl, cl, dl, el
36762 var ar, br, cr, dr, er
36763
36764 ar = al = H[0]
36765 br = bl = H[1]
36766 cr = cl = H[2]
36767 dr = dl = H[3]
36768 er = el = H[4]
36769
36770 // computation
36771 var t
36772 for (i = 0; i < 80; i += 1) {
36773 t = (al + M[offset + zl[i]]) | 0
36774 if (i < 16) {
36775 t += f1(bl, cl, dl) + hl[0]
36776 } else if (i < 32) {
36777 t += f2(bl, cl, dl) + hl[1]
36778 } else if (i < 48) {
36779 t += f3(bl, cl, dl) + hl[2]
36780 } else if (i < 64) {
36781 t += f4(bl, cl, dl) + hl[3]
36782 } else {// if (i<80) {
36783 t += f5(bl, cl, dl) + hl[4]
36784 }
36785 t = t | 0
36786 t = rotl(t, sl[i])
36787 t = (t + el) | 0
36788 al = el
36789 el = dl
36790 dl = rotl(cl, 10)
36791 cl = bl
36792 bl = t
36793
36794 t = (ar + M[offset + zr[i]]) | 0
36795 if (i < 16) {
36796 t += f5(br, cr, dr) + hr[0]
36797 } else if (i < 32) {
36798 t += f4(br, cr, dr) + hr[1]
36799 } else if (i < 48) {
36800 t += f3(br, cr, dr) + hr[2]
36801 } else if (i < 64) {
36802 t += f2(br, cr, dr) + hr[3]
36803 } else {// if (i<80) {
36804 t += f1(br, cr, dr) + hr[4]
36805 }
36806
36807 t = t | 0
36808 t = rotl(t, sr[i])
36809 t = (t + er) | 0
36810 ar = er
36811 er = dr
36812 dr = rotl(cr, 10)
36813 cr = br
36814 br = t
36815 }
36816
36817 // intermediate hash value
36818 t = (H[1] + cl + dr) | 0
36819 H[1] = (H[2] + dl + er) | 0
36820 H[2] = (H[3] + el + ar) | 0
36821 H[3] = (H[4] + al + br) | 0
36822 H[4] = (H[0] + bl + cr) | 0
36823 H[0] = t
ebd8d4e8
IC
36824}
36825
8b095871
IC
36826function f1 (x, y, z) {
36827 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
36828}
36829
8b095871
IC
36830function f2 (x, y, z) {
36831 return (((x) & (y)) | ((~x) & (z)))
36832}
ebd8d4e8 36833
8b095871
IC
36834function f3 (x, y, z) {
36835 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
36836}
36837
8b095871
IC
36838function f4 (x, y, z) {
36839 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
36840}
36841
8b095871
IC
36842function f5 (x, y, z) {
36843 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
36844}
36845
8b095871
IC
36846function rotl (x, n) {
36847 return (x << n) | (x >>> (32 - n))
36848}
ebd8d4e8 36849
8b095871
IC
36850function ripemd160 (message) {
36851 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 36852
8b095871
IC
36853 if (typeof message === 'string') {
36854 message = new Buffer(message, 'utf8')
36855 }
ebd8d4e8 36856
8b095871 36857 var m = bytesToWords(message)
ebd8d4e8 36858
8b095871
IC
36859 var nBitsLeft = message.length * 8
36860 var nBitsTotal = message.length * 8
ebd8d4e8 36861
8b095871
IC
36862 // Add padding
36863 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
36864 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
36865 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
36866 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
36867 )
ebd8d4e8 36868
8b095871
IC
36869 for (var i = 0; i < m.length; i += 16) {
36870 processBlock(H, m, i)
ebd8d4e8
IC
36871 }
36872
8b095871
IC
36873 // swap endian
36874 for (i = 0; i < 5; i++) {
36875 // shortcut
36876 var H_i = H[i]
ebd8d4e8 36877
8b095871
IC
36878 // Swap
36879 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
36880 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
36881 }
36882
8b095871
IC
36883 var digestbytes = wordsToBytes(H)
36884 return new Buffer(digestbytes)
ebd8d4e8
IC
36885}
36886
8b095871 36887module.exports = ripemd160
ebd8d4e8 36888
8b095871
IC
36889}).call(this,require("buffer").Buffer)
36890},{"buffer":5}],72:[function(require,module,exports){
36891(function (Buffer){
36892const assert = require('assert')
36893/**
36894 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
36895 * This function takes in a data, convert it to buffer if not, and a length for recursion
36896 *
36897 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36898 * @returns {Buffer} - returns buffer of encoded data
36899 **/
36900exports.encode = function (input) {
36901 if (input instanceof Array) {
36902 var output = []
36903 for (var i = 0; i < input.length; i++) {
36904 output.push(exports.encode(input[i]))
36905 }
36906 var buf = Buffer.concat(output)
36907 return Buffer.concat([encodeLength(buf.length, 192), buf])
36908 } else {
36909 input = toBuffer(input)
36910 if (input.length === 1 && input[0] < 128) {
36911 return input
36912 } else {
36913 return Buffer.concat([encodeLength(input.length, 128), input])
36914 }
36915 }
ebd8d4e8
IC
36916}
36917
8b095871
IC
36918function safeParseInt (v, base) {
36919 if (v.slice(0, 2) === '00') {
36920 throw (new Error('invalid RLP: extra zeros'))
36921 }
ebd8d4e8 36922
8b095871 36923 return parseInt(v, base)
ebd8d4e8
IC
36924}
36925
8b095871
IC
36926function encodeLength (len, offset) {
36927 if (len < 56) {
36928 return new Buffer([len + offset])
36929 } else {
36930 var hexLength = intToHex(len)
36931 var lLength = hexLength.length / 2
36932 var firstByte = intToHex(offset + 55 + lLength)
36933 return new Buffer(firstByte + hexLength, 'hex')
36934 }
36935}
ebd8d4e8 36936
8b095871
IC
36937/**
36938 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
36939 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36940 * @returns {Array} - returns decode Array of Buffers containg the original message
36941 **/
36942exports.decode = function (input, stream) {
36943 if (!input || input.length === 0) {
36944 return new Buffer([])
36945 }
ebd8d4e8 36946
8b095871
IC
36947 input = toBuffer(input)
36948 var decoded = _decode(input)
ab78acc6 36949
8b095871
IC
36950 if (stream) {
36951 return decoded
36952 }
ebd8d4e8 36953
8b095871
IC
36954 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
36955 return decoded.data
ebd8d4e8
IC
36956}
36957
8b095871
IC
36958exports.getLength = function (input) {
36959 if (!input || input.length === 0) {
36960 return new Buffer([])
ab78acc6
IC
36961 }
36962
8b095871
IC
36963 input = toBuffer(input)
36964 var firstByte = input[0]
36965 if (firstByte <= 0x7f) {
36966 return input.length
36967 } else if (firstByte <= 0xb7) {
36968 return firstByte - 0x7f
36969 } else if (firstByte <= 0xbf) {
36970 return firstByte - 0xb6
36971 } else if (firstByte <= 0xf7) {
36972 // a list between 0-55 bytes long
36973 return firstByte - 0xbf
36974 } else {
36975 // a list over 55 bytes long
36976 var llength = firstByte - 0xf6
36977 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
36978 return llength + length
36979 }
ebd8d4e8
IC
36980}
36981
8b095871
IC
36982function _decode (input) {
36983 var length, llength, data, innerRemainder, d
36984 var decoded = []
36985 var firstByte = input[0]
ebd8d4e8 36986
8b095871
IC
36987 if (firstByte <= 0x7f) {
36988 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
36989 return {
36990 data: input.slice(0, 1),
36991 remainder: input.slice(1)
36992 }
36993 } else if (firstByte <= 0xb7) {
36994 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
36995 // The range of the first byte is [0x80, 0xb7]
36996 length = firstByte - 0x7f
ebd8d4e8 36997
8b095871
IC
36998 // set 0x80 null to 0
36999 if (firstByte === 0x80) {
37000 data = new Buffer([])
37001 } else {
37002 data = input.slice(1, length)
37003 }
ebd8d4e8 37004
8b095871
IC
37005 if (length === 2 && data[0] < 0x80) {
37006 throw new Error('invalid rlp encoding: byte must be less 0x80')
37007 }
ebd8d4e8 37008
8b095871
IC
37009 return {
37010 data: data,
37011 remainder: input.slice(length)
37012 }
37013 } else if (firstByte <= 0xbf) {
37014 llength = firstByte - 0xb6
37015 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37016 data = input.slice(llength, length + llength)
37017 if (data.length < length) {
37018 throw (new Error('invalid RLP'))
37019 }
ebd8d4e8 37020
8b095871
IC
37021 return {
37022 data: data,
37023 remainder: input.slice(length + llength)
37024 }
37025 } else if (firstByte <= 0xf7) {
37026 // a list between 0-55 bytes long
37027 length = firstByte - 0xbf
37028 innerRemainder = input.slice(1, length)
37029 while (innerRemainder.length) {
37030 d = _decode(innerRemainder)
37031 decoded.push(d.data)
37032 innerRemainder = d.remainder
37033 }
ebd8d4e8 37034
8b095871
IC
37035 return {
37036 data: decoded,
37037 remainder: input.slice(length)
37038 }
37039 } else {
37040 // a list over 55 bytes long
37041 llength = firstByte - 0xf6
37042 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37043 var totalLength = llength + length
37044 if (totalLength > input.length) {
37045 throw new Error('invalid rlp: total length is larger than the data')
37046 }
ab78acc6 37047
8b095871
IC
37048 innerRemainder = input.slice(llength, totalLength)
37049 if (innerRemainder.length === 0) {
37050 throw new Error('invalid rlp, List has a invalid length')
37051 }
ab78acc6 37052
8b095871
IC
37053 while (innerRemainder.length) {
37054 d = _decode(innerRemainder)
37055 decoded.push(d.data)
37056 innerRemainder = d.remainder
37057 }
37058 return {
37059 data: decoded,
37060 remainder: input.slice(totalLength)
37061 }
ab78acc6 37062 }
8b095871 37063}
ab78acc6 37064
8b095871
IC
37065function isHexPrefixed (str) {
37066 return str.slice(0, 2) === '0x'
ab78acc6
IC
37067}
37068
8b095871
IC
37069// Removes 0x from a given String
37070function stripHexPrefix (str) {
37071 if (typeof str !== 'string') {
37072 return str
37073 }
37074 return isHexPrefixed(str) ? str.slice(2) : str
37075}
ab78acc6 37076
8b095871
IC
37077function intToHex (i) {
37078 var hex = i.toString(16)
37079 if (hex.length % 2) {
37080 hex = '0' + hex
ab78acc6
IC
37081 }
37082
8b095871 37083 return hex
ebd8d4e8
IC
37084}
37085
8b095871
IC
37086function padToEven (a) {
37087 if (a.length % 2) a = '0' + a
37088 return a
ebd8d4e8
IC
37089}
37090
8b095871
IC
37091function intToBuffer (i) {
37092 var hex = intToHex(i)
37093 return new Buffer(hex, 'hex')
ebd8d4e8
IC
37094}
37095
8b095871
IC
37096function toBuffer (v) {
37097 if (!Buffer.isBuffer(v)) {
37098 if (typeof v === 'string') {
37099 if (isHexPrefixed(v)) {
37100 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
37101 } else {
37102 v = new Buffer(v)
37103 }
37104 } else if (typeof v === 'number') {
37105 if (!v) {
37106 v = new Buffer([])
37107 } else {
37108 v = intToBuffer(v)
37109 }
37110 } else if (v === null || v === undefined) {
37111 v = new Buffer([])
37112 } else if (v.toArray) {
37113 // converts a BN to a Buffer
37114 v = new Buffer(v.toArray())
37115 } else {
37116 throw new Error('invalid type')
37117 }
37118 }
37119 return v
ebd8d4e8
IC
37120}
37121
8b095871
IC
37122}).call(this,require("buffer").Buffer)
37123},{"assert":1,"buffer":5}],73:[function(require,module,exports){
37124'use strict'
37125module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 37126
8b095871
IC
37127},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
37128(function (Buffer){
37129'use strict'
37130var toString = Object.prototype.toString
ebd8d4e8 37131
8b095871
IC
37132// TypeError
37133exports.isArray = function (value, message) {
37134 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
37135}
37136
8b095871
IC
37137exports.isBoolean = function (value, message) {
37138 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
37139}
ebd8d4e8 37140
8b095871
IC
37141exports.isBuffer = function (value, message) {
37142 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
37143}
37144
8b095871
IC
37145exports.isFunction = function (value, message) {
37146 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
37147}
37148
8b095871
IC
37149exports.isNumber = function (value, message) {
37150 if (toString.call(value) !== '[object Number]') throw TypeError(message)
37151}
ab78acc6 37152
8b095871
IC
37153exports.isObject = function (value, message) {
37154 if (toString.call(value) !== '[object Object]') throw TypeError(message)
37155}
ebd8d4e8 37156
8b095871
IC
37157// RangeError
37158exports.isBufferLength = function (buffer, length, message) {
37159 if (buffer.length !== length) throw RangeError(message)
37160}
ebd8d4e8 37161
8b095871
IC
37162exports.isBufferLength2 = function (buffer, length1, length2, message) {
37163 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
37164}
37165
8b095871
IC
37166exports.isLengthGTZero = function (value, message) {
37167 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
37168}
37169
8b095871
IC
37170exports.isNumberInInterval = function (number, x, y, message) {
37171 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
37172}
37173
8b095871
IC
37174}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37175},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 37176(function (Buffer){
8b095871
IC
37177'use strict'
37178var bip66 = require('bip66')
37179
37180var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
37181 // begin
37182 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
37183 // private key
37184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37185 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37186 // middle
37187 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37188 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37189 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37190 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37191 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37192 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37193 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37194 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37195 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
37196 // public key
37197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37198 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37199 0x00
37200])
37201
37202var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
37203 // begin
37204 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
37205 // private key
37206 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37207 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37208 // middle
37209 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37210 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37211 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37212 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37213 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37214 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37215 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
37216 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
37217 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37218 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37219 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
37220 // public key
37221 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37222 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37225 0x00
37226])
37227
37228var ZERO_BUFFER_32 = new Buffer([
37229 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37230 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
37231])
37232
37233exports.privateKeyExport = function (privateKey, publicKey, compressed) {
37234 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
37235 privateKey.copy(result, compressed ? 8 : 9)
37236 publicKey.copy(result, compressed ? 181 : 214)
37237 return result
37238}
37239
37240exports.privateKeyImport = function (privateKey) {
37241 var length = privateKey.length
37242
37243 // sequence header
37244 var index = 0
37245 if (length < index + 1 || privateKey[index] !== 0x30) return
37246 index += 1
37247
37248 // sequence length constructor
37249 if (length < index + 1 || !(privateKey[index] & 0x80)) return
37250
37251 var lenb = privateKey[index] & 0x7f
37252 index += 1
37253 if (lenb < 1 || lenb > 2) return
37254 if (length < index + lenb) return
37255
37256 // sequence length
37257 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
37258 index += lenb
37259 if (length < index + len) return
37260
37261 // sequence element 0: version number (=1)
37262 if (length < index + 3 ||
37263 privateKey[index] !== 0x02 ||
37264 privateKey[index + 1] !== 0x01 ||
37265 privateKey[index + 2] !== 0x01) {
37266 return
37267 }
37268 index += 3
ab78acc6 37269
8b095871
IC
37270 // sequence element 1: octet string, up to 32 bytes
37271 if (length < index + 2 ||
37272 privateKey[index] !== 0x04 ||
37273 privateKey[index + 1] > 0x20 ||
37274 length < index + 2 + privateKey[index + 1]) {
37275 return
37276 }
ab78acc6 37277
8b095871 37278 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 37279}
ebd8d4e8 37280
8b095871
IC
37281exports.signatureExport = function (sigObj) {
37282 var r = Buffer.concat([new Buffer([0]), sigObj.r])
37283 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 37284
8b095871
IC
37285 var s = Buffer.concat([new Buffer([0]), sigObj.s])
37286 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 37287
8b095871
IC
37288 return bip66.encode(r.slice(posR), s.slice(posS))
37289}
ab78acc6 37290
8b095871
IC
37291exports.signatureImport = function (sig) {
37292 var r = new Buffer(ZERO_BUFFER_32)
37293 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 37294
8b095871
IC
37295 try {
37296 var sigObj = bip66.decode(sig)
37297 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
37298 if (sigObj.r.length > 32) throw new Error('R length is too long')
37299 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
37300 if (sigObj.s.length > 32) throw new Error('S length is too long')
37301 } catch (err) {
37302 return
ab78acc6
IC
37303 }
37304
8b095871
IC
37305 sigObj.r.copy(r, 32 - sigObj.r.length)
37306 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 37307
8b095871
IC
37308 return { r: r, s: s }
37309}
ab78acc6 37310
8b095871
IC
37311exports.signatureImportLax = function (sig) {
37312 var r = new Buffer(ZERO_BUFFER_32)
37313 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 37314
8b095871
IC
37315 var length = sig.length
37316 var index = 0
ab78acc6 37317
8b095871
IC
37318 // sequence tag byte
37319 if (sig[index++] !== 0x30) return
37320
37321 // sequence length byte
37322 var lenbyte = sig[index++]
37323 if (lenbyte & 0x80) {
37324 index += lenbyte - 0x80
37325 if (index > length) return
ab78acc6
IC
37326 }
37327
8b095871
IC
37328 // sequence tag byte for r
37329 if (sig[index++] !== 0x02) return
37330
37331 // length for r
37332 var rlen = sig[index++]
37333 if (rlen & 0x80) {
37334 lenbyte = rlen - 0x80
37335 if (index + lenbyte > length) return
37336 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37337 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 37338 }
8b095871
IC
37339 if (rlen > length - index) return
37340 var rindex = index
37341 index += rlen
ab78acc6 37342
8b095871
IC
37343 // sequence tag byte for s
37344 if (sig[index++] !== 0x02) return
ab78acc6 37345
8b095871
IC
37346 // length for s
37347 var slen = sig[index++]
37348 if (slen & 0x80) {
37349 lenbyte = slen - 0x80
37350 if (index + lenbyte > length) return
37351 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37352 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 37353 }
8b095871
IC
37354 if (slen > length - index) return
37355 var sindex = index
37356 index += slen
ab78acc6 37357
8b095871
IC
37358 // ignore leading zeros in r
37359 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
37360 // copy r value
37361 if (rlen > 32) return
37362 var rvalue = sig.slice(rindex, rindex + rlen)
37363 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 37364
8b095871
IC
37365 // ignore leading zeros in s
37366 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
37367 // copy s value
37368 if (slen > 32) return
37369 var svalue = sig.slice(sindex, sindex + slen)
37370 svalue.copy(s, 32 - svalue.length)
37371
37372 return { r: r, s: s }
ab78acc6
IC
37373}
37374
8b095871
IC
37375}).call(this,require("buffer").Buffer)
37376},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
37377(function (Buffer){
37378'use strict'
37379var createHash = require('create-hash')
37380var BN = require('bn.js')
37381var EC = require('elliptic').ec
37382
37383var messages = require('../messages.json')
37384
37385var ec = new EC('secp256k1')
37386var ecparams = ec.curve
37387
37388function loadCompressedPublicKey (first, xBuffer) {
37389 var x = new BN(xBuffer)
37390
37391 // overflow
37392 if (x.cmp(ecparams.p) >= 0) return null
37393 x = x.toRed(ecparams.red)
37394
37395 // compute corresponding Y
37396 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
37397 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
37398
37399 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
37400}
37401
8b095871
IC
37402function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
37403 var x = new BN(xBuffer)
37404 var y = new BN(yBuffer)
ebd8d4e8 37405
8b095871
IC
37406 // overflow
37407 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 37408
8b095871
IC
37409 x = x.toRed(ecparams.red)
37410 y = y.toRed(ecparams.red)
ebd8d4e8 37411
8b095871
IC
37412 // is odd flag
37413 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 37414
8b095871
IC
37415 // x*x*x + b = y*y
37416 var x3 = x.redSqr().redIMul(x)
37417 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 37418
8b095871 37419 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
37420}
37421
8b095871
IC
37422function loadPublicKey (publicKey) {
37423 var first = publicKey[0]
37424 switch (first) {
37425 case 0x02:
37426 case 0x03:
37427 if (publicKey.length !== 33) return null
37428 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
37429 case 0x04:
37430 case 0x06:
37431 case 0x07:
37432 if (publicKey.length !== 65) return null
37433 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
37434 default:
37435 return null
ebd8d4e8 37436 }
8b095871 37437}
ebd8d4e8 37438
8b095871
IC
37439exports.privateKeyVerify = function (privateKey) {
37440 var bn = new BN(privateKey)
37441 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
37442}
ebd8d4e8 37443
8b095871
IC
37444exports.privateKeyExport = function (privateKey, compressed) {
37445 var d = new BN(privateKey)
37446 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 37447
8b095871 37448 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
37449}
37450
8b095871
IC
37451exports.privateKeyTweakAdd = function (privateKey, tweak) {
37452 var bn = new BN(tweak)
37453 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 37454
8b095871
IC
37455 bn.iadd(new BN(privateKey))
37456 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
37457 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 37458
8b095871
IC
37459 return bn.toArrayLike(Buffer, 'be', 32)
37460}
37461
37462exports.privateKeyTweakMul = function (privateKey, tweak) {
37463 var bn = new BN(tweak)
37464 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
37465
37466 bn.imul(new BN(privateKey))
37467 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
37468
37469 return bn.toArrayLike(Buffer, 'be', 32)
37470}
37471
37472exports.publicKeyCreate = function (privateKey, compressed) {
37473 var d = new BN(privateKey)
37474 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
37475
37476 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
37477}
37478
37479exports.publicKeyConvert = function (publicKey, compressed) {
37480 var pair = loadPublicKey(publicKey)
37481 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37482
8b095871 37483 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
37484}
37485
8b095871
IC
37486exports.publicKeyVerify = function (publicKey) {
37487 return loadPublicKey(publicKey) !== null
37488}
ab78acc6 37489
8b095871
IC
37490exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
37491 var pair = loadPublicKey(publicKey)
37492 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37493
8b095871
IC
37494 tweak = new BN(tweak)
37495 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 37496
8b095871
IC
37497 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
37498}
ab78acc6 37499
8b095871
IC
37500exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
37501 var pair = loadPublicKey(publicKey)
37502 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37503
8b095871
IC
37504 tweak = new BN(tweak)
37505 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 37506
8b095871
IC
37507 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
37508}
ab78acc6 37509
8b095871
IC
37510exports.publicKeyCombine = function (publicKeys, compressed) {
37511 var pairs = new Array(publicKeys.length)
37512 for (var i = 0; i < publicKeys.length; ++i) {
37513 pairs[i] = loadPublicKey(publicKeys[i])
37514 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
37515 }
37516
8b095871
IC
37517 var point = pairs[0].pub
37518 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
37519 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 37520
8b095871
IC
37521 return new Buffer(point.encode(true, compressed))
37522}
ab78acc6 37523
8b095871
IC
37524exports.signatureNormalize = function (signature) {
37525 var r = new BN(signature.slice(0, 32))
37526 var s = new BN(signature.slice(32, 64))
37527 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37528
37529 var result = new Buffer(signature)
37530 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
37531
37532 return result
ab78acc6
IC
37533}
37534
8b095871
IC
37535exports.signatureExport = function (signature) {
37536 var r = signature.slice(0, 32)
37537 var s = signature.slice(32, 64)
37538 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37539
37540 return { r: r, s: s }
ab78acc6
IC
37541}
37542
8b095871
IC
37543exports.signatureImport = function (sigObj) {
37544 var r = new BN(sigObj.r)
37545 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
37546
37547 var s = new BN(sigObj.s)
37548 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
37549
37550 return Buffer.concat([
37551 r.toArrayLike(Buffer, 'be', 32),
37552 s.toArrayLike(Buffer, 'be', 32)
37553 ])
ab78acc6
IC
37554}
37555
8b095871
IC
37556exports.sign = function (message, privateKey, noncefn, data) {
37557 if (typeof noncefn === 'function') {
37558 var getNonce = noncefn
37559 noncefn = function (counter) {
37560 var nonce = getNonce(message, privateKey, null, data, counter)
37561 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 37562
8b095871
IC
37563 return new BN(nonce)
37564 }
ab78acc6 37565 }
ebd8d4e8 37566
8b095871
IC
37567 var d = new BN(privateKey)
37568 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 37569
8b095871
IC
37570 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
37571 return {
37572 signature: Buffer.concat([
37573 result.r.toArrayLike(Buffer, 'be', 32),
37574 result.s.toArrayLike(Buffer, 'be', 32)
37575 ]),
37576 recovery: result.recoveryParam
ebd8d4e8 37577 }
8b095871 37578}
ab78acc6 37579
8b095871
IC
37580exports.verify = function (message, signature, publicKey) {
37581 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 37582
8b095871
IC
37583 var sigr = new BN(sigObj.r)
37584 var sigs = new BN(sigObj.s)
37585 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37586 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 37587
8b095871
IC
37588 var pair = loadPublicKey(publicKey)
37589 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 37590
8b095871
IC
37591 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
37592}
ebd8d4e8 37593
8b095871
IC
37594exports.recover = function (message, signature, recovery, compressed) {
37595 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 37596
8b095871
IC
37597 var sigr = new BN(sigObj.r)
37598 var sigs = new BN(sigObj.s)
37599 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 37600
8b095871
IC
37601 try {
37602 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 37603
8b095871
IC
37604 var point = ec.recoverPubKey(message, sigObj, recovery)
37605 return new Buffer(point.encode(true, compressed))
37606 } catch (err) {
37607 throw new Error(messages.ECDSA_RECOVER_FAIL)
37608 }
ebd8d4e8
IC
37609}
37610
8b095871
IC
37611exports.ecdh = function (publicKey, privateKey) {
37612 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
37613 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
37614}
37615
8b095871
IC
37616exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
37617 var pair = loadPublicKey(publicKey)
37618 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37619
8b095871
IC
37620 var scalar = new BN(privateKey)
37621 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
37622
37623 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
37624}
37625
8b095871
IC
37626}).call(this,require("buffer").Buffer)
37627},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
37628'use strict'
37629var assert = require('./assert')
37630var der = require('./der')
37631var messages = require('./messages.json')
ab78acc6 37632
8b095871
IC
37633function initCompressedValue (value, defaultValue) {
37634 if (value === undefined) return defaultValue
ab78acc6 37635
8b095871
IC
37636 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
37637 return value
ab78acc6
IC
37638}
37639
8b095871
IC
37640module.exports = function (secp256k1) {
37641 return {
37642 privateKeyVerify: function (privateKey) {
37643 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37644 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
37645 },
ab78acc6 37646
8b095871
IC
37647 privateKeyExport: function (privateKey, compressed) {
37648 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37649 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37650
8b095871
IC
37651 compressed = initCompressedValue(compressed, true)
37652 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 37653
8b095871
IC
37654 return der.privateKeyExport(privateKey, publicKey, compressed)
37655 },
ab78acc6 37656
8b095871
IC
37657 privateKeyImport: function (privateKey) {
37658 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 37659
8b095871
IC
37660 privateKey = der.privateKeyImport(privateKey)
37661 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 37662
8b095871
IC
37663 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
37664 },
ab78acc6 37665
8b095871
IC
37666 privateKeyTweakAdd: function (privateKey, tweak) {
37667 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37668 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37669
8b095871
IC
37670 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37671 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 37672
8b095871
IC
37673 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
37674 },
ab78acc6 37675
8b095871
IC
37676 privateKeyTweakMul: function (privateKey, tweak) {
37677 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37678 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37679
8b095871
IC
37680 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37681 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 37682
8b095871
IC
37683 return secp256k1.privateKeyTweakMul(privateKey, tweak)
37684 },
ab78acc6 37685
8b095871
IC
37686 publicKeyCreate: function (privateKey, compressed) {
37687 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37688 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37689
8b095871 37690 compressed = initCompressedValue(compressed, true)
ab78acc6 37691
8b095871
IC
37692 return secp256k1.publicKeyCreate(privateKey, compressed)
37693 },
ab78acc6 37694
8b095871
IC
37695 publicKeyConvert: function (publicKey, compressed) {
37696 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37697 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37698
8b095871
IC
37699 compressed = initCompressedValue(compressed, true)
37700
37701 return secp256k1.publicKeyConvert(publicKey, compressed)
37702 },
37703
37704 publicKeyVerify: function (publicKey) {
37705 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37706 return secp256k1.publicKeyVerify(publicKey)
37707 },
37708
37709 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
37710 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37711 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37712
37713 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37714 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37715
37716 compressed = initCompressedValue(compressed, true)
37717
37718 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
37719 },
37720
37721 publicKeyTweakMul: function (publicKey, tweak, compressed) {
37722 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37723 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37724
37725 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37726 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37727
37728 compressed = initCompressedValue(compressed, true)
37729
37730 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
37731 },
37732
37733 publicKeyCombine: function (publicKeys, compressed) {
37734 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
37735 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
37736 for (var i = 0; i < publicKeys.length; ++i) {
37737 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
37738 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
37739 }
37740
8b095871 37741 compressed = initCompressedValue(compressed, true)
ab78acc6 37742
8b095871
IC
37743 return secp256k1.publicKeyCombine(publicKeys, compressed)
37744 },
ab78acc6 37745
8b095871
IC
37746 signatureNormalize: function (signature) {
37747 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37748 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37749
8b095871
IC
37750 return secp256k1.signatureNormalize(signature)
37751 },
ab78acc6 37752
8b095871
IC
37753 signatureExport: function (signature) {
37754 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37755 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37756
37757 var sigObj = secp256k1.signatureExport(signature)
37758 return der.signatureExport(sigObj)
37759 },
37760
37761 signatureImport: function (sig) {
37762 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37763 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37764
37765 var sigObj = der.signatureImport(sig)
37766 if (sigObj) return secp256k1.signatureImport(sigObj)
37767
37768 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37769 },
37770
37771 signatureImportLax: function (sig) {
37772 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37773 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37774
37775 var sigObj = der.signatureImportLax(sig)
37776 if (sigObj) return secp256k1.signatureImport(sigObj)
37777
37778 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37779 },
37780
37781 sign: function (message, privateKey, options) {
37782 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37783 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
37784
37785 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37786 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37787
37788 var data = null
37789 var noncefn = null
37790 if (options !== undefined) {
37791 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
37792
37793 if (options.data !== undefined) {
37794 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
37795 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
37796 data = options.data
37797 }
37798
37799 if (options.noncefn !== undefined) {
37800 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
37801 noncefn = options.noncefn
37802 }
ab78acc6
IC
37803 }
37804
8b095871
IC
37805 return secp256k1.sign(message, privateKey, noncefn, data)
37806 },
ab78acc6 37807
8b095871
IC
37808 verify: function (message, signature, publicKey) {
37809 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37810 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 37811
8b095871
IC
37812 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37813 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37814
8b095871
IC
37815 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37816 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37817
37818 return secp256k1.verify(message, signature, publicKey)
37819 },
ab78acc6 37820
8b095871
IC
37821 recover: function (message, signature, recovery, compressed) {
37822 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37823 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 37824
8b095871
IC
37825 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37826 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37827
8b095871
IC
37828 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
37829 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 37830
8b095871 37831 compressed = initCompressedValue(compressed, true)
ab78acc6 37832
8b095871
IC
37833 return secp256k1.recover(message, signature, recovery, compressed)
37834 },
ab78acc6 37835
8b095871
IC
37836 ecdh: function (publicKey, privateKey) {
37837 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37838 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37839
8b095871
IC
37840 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37841 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37842
8b095871
IC
37843 return secp256k1.ecdh(publicKey, privateKey)
37844 },
ab78acc6 37845
8b095871
IC
37846 ecdhUnsafe: function (publicKey, privateKey, compressed) {
37847 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37848 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37849
8b095871
IC
37850 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37851 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37852
8b095871 37853 compressed = initCompressedValue(compressed, true)
ab78acc6 37854
8b095871
IC
37855 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
37856 }
37857 }
37858}
ab78acc6 37859
8b095871
IC
37860},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
37861module.exports={
37862 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
37863 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
37864 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
37865 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
37866 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37867 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
37868 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
37869 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
37870 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
37871 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
37872 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
37873 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
37874 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
37875 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
37876 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37877 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
37878 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
37879 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
37880 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
37881 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
37882 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
37883 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
37884 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
37885 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
37886 "MSG32_TYPE_INVALID": "message should be a Buffer",
37887 "MSG32_LENGTH_INVALID": "message length is invalid",
37888 "OPTIONS_TYPE_INVALID": "options should be an Object",
37889 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
37890 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
37891 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
37892 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
37893 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
37894 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
37895 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
37896}
37897
37898},{}],79:[function(require,module,exports){
37899(function (Buffer){
37900// prototype class for hash functions
37901function Hash (blockSize, finalSize) {
37902 this._block = new Buffer(blockSize)
37903 this._finalSize = finalSize
37904 this._blockSize = blockSize
37905 this._len = 0
37906 this._s = 0
37907}
37908
37909Hash.prototype.update = function (data, enc) {
37910 if (typeof data === 'string') {
37911 enc = enc || 'utf8'
37912 data = new Buffer(data, enc)
ab78acc6
IC
37913 }
37914
8b095871
IC
37915 var l = this._len += data.length
37916 var s = this._s || 0
37917 var f = 0
37918 var buffer = this._block
ab78acc6 37919
8b095871
IC
37920 while (s < l) {
37921 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
37922 var ch = (t - f)
ab78acc6 37923
8b095871
IC
37924 for (var i = 0; i < ch; i++) {
37925 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
37926 }
37927
8b095871
IC
37928 s += ch
37929 f += ch
ab78acc6 37930
8b095871
IC
37931 if ((s % this._blockSize) === 0) {
37932 this._update(buffer)
37933 }
ab78acc6 37934 }
8b095871 37935 this._s = s
ab78acc6 37936
8b095871
IC
37937 return this
37938}
ab78acc6 37939
8b095871
IC
37940Hash.prototype.digest = function (enc) {
37941 // Suppose the length of the message M, in bits, is l
37942 var l = this._len * 8
ab78acc6 37943
8b095871
IC
37944 // Append the bit 1 to the end of the message
37945 this._block[this._len % this._blockSize] = 0x80
ab78acc6 37946
8b095871
IC
37947 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
37948 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 37949
8b095871
IC
37950 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
37951 this._update(this._block)
37952 this._block.fill(0)
37953 }
ab78acc6 37954
8b095871
IC
37955 // to this append the block which is equal to the number l written in binary
37956 // TODO: handle case where l is > Math.pow(2, 29)
37957 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 37958
8b095871 37959 var hash = this._update(this._block) || this._hash()
ebd8d4e8 37960
8b095871 37961 return enc ? hash.toString(enc) : hash
ab78acc6 37962}
ebd8d4e8 37963
8b095871
IC
37964Hash.prototype._update = function () {
37965 throw new Error('_update must be implemented by subclass')
ab78acc6 37966}
8b095871
IC
37967
37968module.exports = Hash
37969
37970}).call(this,require("buffer").Buffer)
37971},{"buffer":5}],80:[function(require,module,exports){
37972var exports = module.exports = function SHA (algorithm) {
37973 algorithm = algorithm.toLowerCase()
37974
37975 var Algorithm = exports[algorithm]
37976 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
37977
37978 return new Algorithm()
ab78acc6 37979}
ebd8d4e8 37980
8b095871
IC
37981exports.sha = require('./sha')
37982exports.sha1 = require('./sha1')
37983exports.sha224 = require('./sha224')
37984exports.sha256 = require('./sha256')
37985exports.sha384 = require('./sha384')
37986exports.sha512 = require('./sha512')
37987
37988},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
37989(function (Buffer){
37990/*
37991 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
37992 * in FIPS PUB 180-1
37993 * This source code is derived from sha1.js of the same repository.
37994 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
37995 * operation was added.
37996 */
37997
37998var inherits = require('inherits')
37999var Hash = require('./hash')
38000
38001var K = [
38002 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
38003]
38004
38005var W = new Array(80)
38006
38007function Sha () {
38008 this.init()
38009 this._w = W
38010
38011 Hash.call(this, 64, 56)
ab78acc6 38012}
ebd8d4e8 38013
8b095871 38014inherits(Sha, Hash)
ebd8d4e8 38015
8b095871
IC
38016Sha.prototype.init = function () {
38017 this._a = 0x67452301
38018 this._b = 0xefcdab89
38019 this._c = 0x98badcfe
38020 this._d = 0x10325476
38021 this._e = 0xc3d2e1f0
ebd8d4e8 38022
8b095871
IC
38023 return this
38024}
ebd8d4e8 38025
8b095871
IC
38026function rotl5 (num) {
38027 return (num << 5) | (num >>> 27)
38028}
ebd8d4e8 38029
8b095871
IC
38030function rotl30 (num) {
38031 return (num << 30) | (num >>> 2)
38032}
ebd8d4e8 38033
8b095871
IC
38034function ft (s, b, c, d) {
38035 if (s === 0) return (b & c) | ((~b) & d)
38036 if (s === 2) return (b & c) | (b & d) | (c & d)
38037 return b ^ c ^ d
38038}
ebd8d4e8 38039
8b095871
IC
38040Sha.prototype._update = function (M) {
38041 var W = this._w
ebd8d4e8 38042
8b095871
IC
38043 var a = this._a | 0
38044 var b = this._b | 0
38045 var c = this._c | 0
38046 var d = this._d | 0
38047 var e = this._e | 0
ebd8d4e8 38048
8b095871
IC
38049 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38050 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 38051
8b095871
IC
38052 for (var j = 0; j < 80; ++j) {
38053 var s = ~~(j / 20)
38054 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 38055
8b095871
IC
38056 e = d
38057 d = c
38058 c = rotl30(b)
38059 b = a
38060 a = t
38061 }
38062
38063 this._a = (a + this._a) | 0
38064 this._b = (b + this._b) | 0
38065 this._c = (c + this._c) | 0
38066 this._d = (d + this._d) | 0
38067 this._e = (e + this._e) | 0
38068}
38069
38070Sha.prototype._hash = function () {
38071 var H = new Buffer(20)
ab78acc6 38072
8b095871
IC
38073 H.writeInt32BE(this._a | 0, 0)
38074 H.writeInt32BE(this._b | 0, 4)
38075 H.writeInt32BE(this._c | 0, 8)
38076 H.writeInt32BE(this._d | 0, 12)
38077 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 38078
8b095871 38079 return H
ebd8d4e8
IC
38080}
38081
8b095871 38082module.exports = Sha
ebd8d4e8 38083
8b095871
IC
38084}).call(this,require("buffer").Buffer)
38085},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
38086(function (Buffer){
38087/*
38088 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
38089 * in FIPS PUB 180-1
38090 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
38091 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38092 * Distributed under the BSD License
38093 * See http://pajhome.org.uk/crypt/md5 for details.
38094 */
ebd8d4e8 38095
8b095871
IC
38096var inherits = require('inherits')
38097var Hash = require('./hash')
ebd8d4e8 38098
8b095871
IC
38099var K = [
38100 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
38101]
ebd8d4e8 38102
8b095871 38103var W = new Array(80)
ab78acc6 38104
8b095871
IC
38105function Sha1 () {
38106 this.init()
38107 this._w = W
ebd8d4e8 38108
8b095871
IC
38109 Hash.call(this, 64, 56)
38110}
ebd8d4e8 38111
8b095871 38112inherits(Sha1, Hash)
ebd8d4e8 38113
8b095871
IC
38114Sha1.prototype.init = function () {
38115 this._a = 0x67452301
38116 this._b = 0xefcdab89
38117 this._c = 0x98badcfe
38118 this._d = 0x10325476
38119 this._e = 0xc3d2e1f0
ebd8d4e8 38120
8b095871
IC
38121 return this
38122}
ebd8d4e8 38123
8b095871
IC
38124function rotl1 (num) {
38125 return (num << 1) | (num >>> 31)
38126}
ebd8d4e8 38127
8b095871
IC
38128function rotl5 (num) {
38129 return (num << 5) | (num >>> 27)
38130}
ebd8d4e8 38131
8b095871
IC
38132function rotl30 (num) {
38133 return (num << 30) | (num >>> 2)
38134}
ebd8d4e8 38135
8b095871
IC
38136function ft (s, b, c, d) {
38137 if (s === 0) return (b & c) | ((~b) & d)
38138 if (s === 2) return (b & c) | (b & d) | (c & d)
38139 return b ^ c ^ d
38140}
ebd8d4e8 38141
8b095871
IC
38142Sha1.prototype._update = function (M) {
38143 var W = this._w
ebd8d4e8 38144
8b095871
IC
38145 var a = this._a | 0
38146 var b = this._b | 0
38147 var c = this._c | 0
38148 var d = this._d | 0
38149 var e = this._e | 0
ebd8d4e8 38150
8b095871
IC
38151 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38152 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
38153
38154 for (var j = 0; j < 80; ++j) {
38155 var s = ~~(j / 20)
38156 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
38157
38158 e = d
38159 d = c
38160 c = rotl30(b)
38161 b = a
38162 a = t
ab78acc6
IC
38163 }
38164
8b095871
IC
38165 this._a = (a + this._a) | 0
38166 this._b = (b + this._b) | 0
38167 this._c = (c + this._c) | 0
38168 this._d = (d + this._d) | 0
38169 this._e = (e + this._e) | 0
38170}
ab78acc6 38171
8b095871
IC
38172Sha1.prototype._hash = function () {
38173 var H = new Buffer(20)
ab78acc6 38174
8b095871
IC
38175 H.writeInt32BE(this._a | 0, 0)
38176 H.writeInt32BE(this._b | 0, 4)
38177 H.writeInt32BE(this._c | 0, 8)
38178 H.writeInt32BE(this._d | 0, 12)
38179 H.writeInt32BE(this._e | 0, 16)
ab78acc6 38180
8b095871
IC
38181 return H
38182}
ab78acc6 38183
8b095871 38184module.exports = Sha1
ab78acc6 38185
8b095871
IC
38186}).call(this,require("buffer").Buffer)
38187},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
38188(function (Buffer){
38189/**
38190 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38191 * in FIPS 180-2
38192 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38193 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38194 *
38195 */
ab78acc6 38196
8b095871
IC
38197var inherits = require('inherits')
38198var Sha256 = require('./sha256')
38199var Hash = require('./hash')
ab78acc6 38200
8b095871 38201var W = new Array(64)
ab78acc6 38202
8b095871
IC
38203function Sha224 () {
38204 this.init()
ab78acc6 38205
8b095871 38206 this._w = W // new Array(64)
ebd8d4e8 38207
8b095871
IC
38208 Hash.call(this, 64, 56)
38209}
ebd8d4e8 38210
8b095871 38211inherits(Sha224, Sha256)
ebd8d4e8 38212
8b095871
IC
38213Sha224.prototype.init = function () {
38214 this._a = 0xc1059ed8
38215 this._b = 0x367cd507
38216 this._c = 0x3070dd17
38217 this._d = 0xf70e5939
38218 this._e = 0xffc00b31
38219 this._f = 0x68581511
38220 this._g = 0x64f98fa7
38221 this._h = 0xbefa4fa4
ebd8d4e8 38222
8b095871
IC
38223 return this
38224}
ab78acc6 38225
8b095871
IC
38226Sha224.prototype._hash = function () {
38227 var H = new Buffer(28)
ebd8d4e8 38228
8b095871
IC
38229 H.writeInt32BE(this._a, 0)
38230 H.writeInt32BE(this._b, 4)
38231 H.writeInt32BE(this._c, 8)
38232 H.writeInt32BE(this._d, 12)
38233 H.writeInt32BE(this._e, 16)
38234 H.writeInt32BE(this._f, 20)
38235 H.writeInt32BE(this._g, 24)
ab78acc6 38236
8b095871
IC
38237 return H
38238}
ebd8d4e8 38239
8b095871 38240module.exports = Sha224
ebd8d4e8 38241
8b095871
IC
38242}).call(this,require("buffer").Buffer)
38243},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
38244(function (Buffer){
38245/**
38246 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38247 * in FIPS 180-2
38248 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38249 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38250 *
38251 */
ebd8d4e8 38252
8b095871
IC
38253var inherits = require('inherits')
38254var Hash = require('./hash')
ab78acc6 38255
8b095871
IC
38256var K = [
38257 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
38258 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
38259 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
38260 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
38261 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
38262 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
38263 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
38264 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
38265 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
38266 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
38267 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
38268 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
38269 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
38270 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
38271 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
38272 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
38273]
ebd8d4e8 38274
8b095871 38275var W = new Array(64)
ebd8d4e8 38276
8b095871
IC
38277function Sha256 () {
38278 this.init()
ebd8d4e8 38279
8b095871 38280 this._w = W // new Array(64)
ebd8d4e8 38281
8b095871 38282 Hash.call(this, 64, 56)
ab78acc6 38283}
ebd8d4e8 38284
8b095871 38285inherits(Sha256, Hash)
ebd8d4e8 38286
8b095871
IC
38287Sha256.prototype.init = function () {
38288 this._a = 0x6a09e667
38289 this._b = 0xbb67ae85
38290 this._c = 0x3c6ef372
38291 this._d = 0xa54ff53a
38292 this._e = 0x510e527f
38293 this._f = 0x9b05688c
38294 this._g = 0x1f83d9ab
38295 this._h = 0x5be0cd19
ebd8d4e8 38296
8b095871
IC
38297 return this
38298}
ebd8d4e8 38299
8b095871
IC
38300function ch (x, y, z) {
38301 return z ^ (x & (y ^ z))
38302}
ebd8d4e8 38303
8b095871
IC
38304function maj (x, y, z) {
38305 return (x & y) | (z & (x | y))
38306}
ebd8d4e8 38307
8b095871
IC
38308function sigma0 (x) {
38309 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
38310}
ebd8d4e8 38311
8b095871
IC
38312function sigma1 (x) {
38313 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
38314}
ebd8d4e8 38315
8b095871
IC
38316function gamma0 (x) {
38317 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
38318}
ebd8d4e8 38319
8b095871
IC
38320function gamma1 (x) {
38321 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
38322}
ab78acc6 38323
8b095871
IC
38324Sha256.prototype._update = function (M) {
38325 var W = this._w
ebd8d4e8 38326
8b095871
IC
38327 var a = this._a | 0
38328 var b = this._b | 0
38329 var c = this._c | 0
38330 var d = this._d | 0
38331 var e = this._e | 0
38332 var f = this._f | 0
38333 var g = this._g | 0
38334 var h = this._h | 0
ab78acc6 38335
8b095871
IC
38336 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38337 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 38338
8b095871
IC
38339 for (var j = 0; j < 64; ++j) {
38340 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
38341 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 38342
8b095871
IC
38343 h = g
38344 g = f
38345 f = e
38346 e = (d + T1) | 0
38347 d = c
38348 c = b
38349 b = a
38350 a = (T1 + T2) | 0
ebd8d4e8
IC
38351 }
38352
8b095871
IC
38353 this._a = (a + this._a) | 0
38354 this._b = (b + this._b) | 0
38355 this._c = (c + this._c) | 0
38356 this._d = (d + this._d) | 0
38357 this._e = (e + this._e) | 0
38358 this._f = (f + this._f) | 0
38359 this._g = (g + this._g) | 0
38360 this._h = (h + this._h) | 0
ab78acc6 38361}
ebd8d4e8 38362
8b095871
IC
38363Sha256.prototype._hash = function () {
38364 var H = new Buffer(32)
ebd8d4e8 38365
8b095871
IC
38366 H.writeInt32BE(this._a, 0)
38367 H.writeInt32BE(this._b, 4)
38368 H.writeInt32BE(this._c, 8)
38369 H.writeInt32BE(this._d, 12)
38370 H.writeInt32BE(this._e, 16)
38371 H.writeInt32BE(this._f, 20)
38372 H.writeInt32BE(this._g, 24)
38373 H.writeInt32BE(this._h, 28)
38374
38375 return H
ab78acc6 38376}
ebd8d4e8 38377
8b095871 38378module.exports = Sha256
ebd8d4e8 38379
8b095871
IC
38380}).call(this,require("buffer").Buffer)
38381},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
38382(function (Buffer){
38383var inherits = require('inherits')
38384var SHA512 = require('./sha512')
38385var Hash = require('./hash')
ebd8d4e8 38386
8b095871 38387var W = new Array(160)
ebd8d4e8 38388
8b095871
IC
38389function Sha384 () {
38390 this.init()
38391 this._w = W
ab78acc6 38392
8b095871
IC
38393 Hash.call(this, 128, 112)
38394}
ab78acc6 38395
8b095871 38396inherits(Sha384, SHA512)
ebd8d4e8 38397
8b095871
IC
38398Sha384.prototype.init = function () {
38399 this._ah = 0xcbbb9d5d
38400 this._bh = 0x629a292a
38401 this._ch = 0x9159015a
38402 this._dh = 0x152fecd8
38403 this._eh = 0x67332667
38404 this._fh = 0x8eb44a87
38405 this._gh = 0xdb0c2e0d
38406 this._hh = 0x47b5481d
38407
38408 this._al = 0xc1059ed8
38409 this._bl = 0x367cd507
38410 this._cl = 0x3070dd17
38411 this._dl = 0xf70e5939
38412 this._el = 0xffc00b31
38413 this._fl = 0x68581511
38414 this._gl = 0x64f98fa7
38415 this._hl = 0xbefa4fa4
ebd8d4e8 38416
8b095871
IC
38417 return this
38418}
ebd8d4e8 38419
8b095871
IC
38420Sha384.prototype._hash = function () {
38421 var H = new Buffer(48)
ebd8d4e8 38422
8b095871
IC
38423 function writeInt64BE (h, l, offset) {
38424 H.writeInt32BE(h, offset)
38425 H.writeInt32BE(l, offset + 4)
38426 }
ebd8d4e8 38427
8b095871
IC
38428 writeInt64BE(this._ah, this._al, 0)
38429 writeInt64BE(this._bh, this._bl, 8)
38430 writeInt64BE(this._ch, this._cl, 16)
38431 writeInt64BE(this._dh, this._dl, 24)
38432 writeInt64BE(this._eh, this._el, 32)
38433 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 38434
8b095871 38435 return H
ab78acc6 38436}
ebd8d4e8 38437
8b095871
IC
38438module.exports = Sha384
38439
38440}).call(this,require("buffer").Buffer)
38441},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
38442(function (Buffer){
38443var inherits = require('inherits')
38444var Hash = require('./hash')
38445
38446var K = [
38447 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
38448 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
38449 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
38450 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
38451 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
38452 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
38453 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
38454 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
38455 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
38456 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
38457 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
38458 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
38459 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
38460 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
38461 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
38462 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
38463 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
38464 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
38465 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
38466 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
38467 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
38468 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
38469 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
38470 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
38471 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
38472 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
38473 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
38474 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
38475 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
38476 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
38477 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
38478 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
38479 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
38480 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
38481 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
38482 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
38483 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
38484 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
38485 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
38486 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
38487]
38488
38489var W = new Array(160)
ebd8d4e8 38490
8b095871
IC
38491function Sha512 () {
38492 this.init()
38493 this._w = W
ebd8d4e8 38494
8b095871 38495 Hash.call(this, 128, 112)
ab78acc6 38496}
ebd8d4e8 38497
8b095871 38498inherits(Sha512, Hash)
ebd8d4e8 38499
8b095871
IC
38500Sha512.prototype.init = function () {
38501 this._ah = 0x6a09e667
38502 this._bh = 0xbb67ae85
38503 this._ch = 0x3c6ef372
38504 this._dh = 0xa54ff53a
38505 this._eh = 0x510e527f
38506 this._fh = 0x9b05688c
38507 this._gh = 0x1f83d9ab
38508 this._hh = 0x5be0cd19
38509
38510 this._al = 0xf3bcc908
38511 this._bl = 0x84caa73b
38512 this._cl = 0xfe94f82b
38513 this._dl = 0x5f1d36f1
38514 this._el = 0xade682d1
38515 this._fl = 0x2b3e6c1f
38516 this._gl = 0xfb41bd6b
38517 this._hl = 0x137e2179
ebd8d4e8 38518
8b095871 38519 return this
ab78acc6 38520}
ebd8d4e8 38521
8b095871
IC
38522function Ch (x, y, z) {
38523 return z ^ (x & (y ^ z))
38524}
ebd8d4e8 38525
8b095871
IC
38526function maj (x, y, z) {
38527 return (x & y) | (z & (x | y))
ab78acc6 38528}
ebd8d4e8 38529
8b095871
IC
38530function sigma0 (x, xl) {
38531 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
38532}
ebd8d4e8 38533
8b095871
IC
38534function sigma1 (x, xl) {
38535 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
38536}
ab78acc6 38537
8b095871
IC
38538function Gamma0 (x, xl) {
38539 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 38540}
ebd8d4e8 38541
8b095871
IC
38542function Gamma0l (x, xl) {
38543 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
38544}
ebd8d4e8 38545
8b095871
IC
38546function Gamma1 (x, xl) {
38547 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
38548}
38549
8b095871
IC
38550function Gamma1l (x, xl) {
38551 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
38552}
38553
8b095871
IC
38554function getCarry (a, b) {
38555 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
38556}
38557
8b095871
IC
38558Sha512.prototype._update = function (M) {
38559 var W = this._w
ebd8d4e8 38560
8b095871
IC
38561 var ah = this._ah | 0
38562 var bh = this._bh | 0
38563 var ch = this._ch | 0
38564 var dh = this._dh | 0
38565 var eh = this._eh | 0
38566 var fh = this._fh | 0
38567 var gh = this._gh | 0
38568 var hh = this._hh | 0
ebd8d4e8 38569
8b095871
IC
38570 var al = this._al | 0
38571 var bl = this._bl | 0
38572 var cl = this._cl | 0
38573 var dl = this._dl | 0
38574 var el = this._el | 0
38575 var fl = this._fl | 0
38576 var gl = this._gl | 0
38577 var hl = this._hl | 0
ebd8d4e8 38578
8b095871
IC
38579 for (var i = 0; i < 32; i += 2) {
38580 W[i] = M.readInt32BE(i * 4)
38581 W[i + 1] = M.readInt32BE(i * 4 + 4)
38582 }
38583 for (; i < 160; i += 2) {
38584 var xh = W[i - 15 * 2]
38585 var xl = W[i - 15 * 2 + 1]
38586 var gamma0 = Gamma0(xh, xl)
38587 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 38588
8b095871
IC
38589 xh = W[i - 2 * 2]
38590 xl = W[i - 2 * 2 + 1]
38591 var gamma1 = Gamma1(xh, xl)
38592 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 38593
8b095871
IC
38594 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
38595 var Wi7h = W[i - 7 * 2]
38596 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 38597
8b095871
IC
38598 var Wi16h = W[i - 16 * 2]
38599 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 38600
8b095871
IC
38601 var Wil = (gamma0l + Wi7l) | 0
38602 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
38603 Wil = (Wil + gamma1l) | 0
38604 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
38605 Wil = (Wil + Wi16l) | 0
38606 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 38607
8b095871
IC
38608 W[i] = Wih
38609 W[i + 1] = Wil
38610 }
ebd8d4e8 38611
8b095871
IC
38612 for (var j = 0; j < 160; j += 2) {
38613 Wih = W[j]
38614 Wil = W[j + 1]
ebd8d4e8 38615
8b095871
IC
38616 var majh = maj(ah, bh, ch)
38617 var majl = maj(al, bl, cl)
ebd8d4e8 38618
8b095871
IC
38619 var sigma0h = sigma0(ah, al)
38620 var sigma0l = sigma0(al, ah)
38621 var sigma1h = sigma1(eh, el)
38622 var sigma1l = sigma1(el, eh)
ab78acc6 38623
8b095871
IC
38624 // t1 = h + sigma1 + ch + K[j] + W[j]
38625 var Kih = K[j]
38626 var Kil = K[j + 1]
ab78acc6 38627
8b095871
IC
38628 var chh = Ch(eh, fh, gh)
38629 var chl = Ch(el, fl, gl)
ebd8d4e8 38630
8b095871
IC
38631 var t1l = (hl + sigma1l) | 0
38632 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
38633 t1l = (t1l + chl) | 0
38634 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
38635 t1l = (t1l + Kil) | 0
38636 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
38637 t1l = (t1l + Wil) | 0
38638 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 38639
8b095871
IC
38640 // t2 = sigma0 + maj
38641 var t2l = (sigma0l + majl) | 0
38642 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 38643
8b095871
IC
38644 hh = gh
38645 hl = gl
38646 gh = fh
38647 gl = fl
38648 fh = eh
38649 fl = el
38650 el = (dl + t1l) | 0
38651 eh = (dh + t1h + getCarry(el, dl)) | 0
38652 dh = ch
38653 dl = cl
38654 ch = bh
38655 cl = bl
38656 bh = ah
38657 bl = al
38658 al = (t1l + t2l) | 0
38659 ah = (t1h + t2h + getCarry(al, t1l)) | 0
38660 }
ab78acc6 38661
8b095871
IC
38662 this._al = (this._al + al) | 0
38663 this._bl = (this._bl + bl) | 0
38664 this._cl = (this._cl + cl) | 0
38665 this._dl = (this._dl + dl) | 0
38666 this._el = (this._el + el) | 0
38667 this._fl = (this._fl + fl) | 0
38668 this._gl = (this._gl + gl) | 0
38669 this._hl = (this._hl + hl) | 0
ab78acc6 38670
8b095871
IC
38671 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
38672 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
38673 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
38674 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
38675 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
38676 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
38677 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
38678 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
38679}
38680
8b095871
IC
38681Sha512.prototype._hash = function () {
38682 var H = new Buffer(64)
ab78acc6 38683
8b095871
IC
38684 function writeInt64BE (h, l, offset) {
38685 H.writeInt32BE(h, offset)
38686 H.writeInt32BE(l, offset + 4)
38687 }
ab78acc6 38688
8b095871
IC
38689 writeInt64BE(this._ah, this._al, 0)
38690 writeInt64BE(this._bh, this._bl, 8)
38691 writeInt64BE(this._ch, this._cl, 16)
38692 writeInt64BE(this._dh, this._dl, 24)
38693 writeInt64BE(this._eh, this._el, 32)
38694 writeInt64BE(this._fh, this._fl, 40)
38695 writeInt64BE(this._gh, this._gl, 48)
38696 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 38697
8b095871 38698 return H
ebd8d4e8
IC
38699}
38700
8b095871 38701module.exports = Sha512
ebd8d4e8 38702
ab78acc6 38703}).call(this,require("buffer").Buffer)
8b095871
IC
38704},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
38705var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 38706
8b095871
IC
38707/**
38708 * Removes '0x' from a given `String` is present
38709 * @param {String} str the string value
38710 * @return {String|Optional} a string by pass if necessary
38711 */
38712module.exports = function stripHexPrefix(str) {
38713 if (typeof str !== 'string') {
38714 return str;
38715 }
07ac4350 38716
8b095871
IC
38717 return isHexPrefixed(str) ? str.slice(2) : str;
38718}
07ac4350 38719
8b095871
IC
38720},{"is-hex-prefixed":64}]},{},[31])(31)
38721});</script>
8a1f452d 38722 <script>function convertRippleAdrr(address) {
38723 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
38724 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
38725 )
38726 }
38727
38728function convertRipplePriv(priv) {
38729 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2)
38730}
38731
38732</script>
ab78acc6 38733 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
38734
38735//// base.js
38736
38737/** @fileOverview Javascript cryptography implementation.
38738 *
38739 * Crush to remove comments, shorten variable names and
38740 * generally reduce transmission size.
38741 *
38742 * @author Emily Stark
38743 * @author Mike Hamburg
38744 * @author Dan Boneh
38745 */
38746
38747"use strict";
38748/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
38749/*global document, window, escape, unescape, module, require, Uint32Array */
38750
38751/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
38752var sjcl = {
38753 /** @namespace Symmetric ciphers. */
38754 cipher: {},
38755
38756 /** @namespace Hash functions. Right now only SHA256 is implemented. */
38757 hash: {},
38758
38759 /** @namespace Key exchange functions. Right now only SRP is implemented. */
38760 keyexchange: {},
38761
38762 /** @namespace Block cipher modes of operation. */
38763 mode: {},
38764
38765 /** @namespace Miscellaneous. HMAC and PBKDF2. */
38766 misc: {},
38767
38768 /**
38769 * @namespace Bit array encoders and decoders.
38770 *
38771 * @description
38772 * The members of this namespace are functions which translate between
38773 * SJCL's bitArrays and other objects (usually strings). Because it
38774 * isn't always clear which direction is encoding and which is decoding,
38775 * the method names are "fromBits" and "toBits".
38776 */
38777 codec: {},
38778
38779 /** @namespace Exceptions. */
38780 exception: {
38781 /** @constructor Ciphertext is corrupt. */
38782 corrupt: function(message) {
38783 this.toString = function() { return "CORRUPT: "+this.message; };
38784 this.message = message;
38785 },
38786
38787 /** @constructor Invalid parameter. */
38788 invalid: function(message) {
38789 this.toString = function() { return "INVALID: "+this.message; };
38790 this.message = message;
38791 },
38792
38793 /** @constructor Bug or missing feature in SJCL. @constructor */
38794 bug: function(message) {
38795 this.toString = function() { return "BUG: "+this.message; };
38796 this.message = message;
38797 },
38798
38799 /** @constructor Something isn't ready. */
38800 notReady: function(message) {
38801 this.toString = function() { return "NOT READY: "+this.message; };
38802 this.message = message;
ebd8d4e8 38803 }
80c4dd2a
IC
38804 }
38805};
38806
38807if(typeof module !== 'undefined' && module.exports){
38808 module.exports = sjcl;
38809}
38810if (typeof define === "function") {
38811 define([], function () {
38812 return sjcl;
38813 });
38814}
38815
38816
38817//// bitArray.js
38818
38819/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
38820 *
38821 * @author Emily Stark
38822 * @author Mike Hamburg
38823 * @author Dan Boneh
38824 */
38825
38826/** @namespace Arrays of bits, encoded as arrays of Numbers.
38827 *
38828 * @description
38829 * <p>
38830 * These objects are the currency accepted by SJCL's crypto functions.
38831 * </p>
38832 *
38833 * <p>
38834 * Most of our crypto primitives operate on arrays of 4-byte words internally,
38835 * but many of them can take arguments that are not a multiple of 4 bytes.
38836 * This library encodes arrays of bits (whose size need not be a multiple of 8
38837 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
38838 * array of words, 32 bits at a time. Since the words are double-precision
38839 * floating point numbers, they fit some extra data. We use this (in a private,
38840 * possibly-changing manner) to encode the number of bits actually present
38841 * in the last word of the array.
38842 * </p>
38843 *
38844 * <p>
38845 * Because bitwise ops clear this out-of-band data, these arrays can be passed
38846 * to ciphers like AES which want arrays of words.
38847 * </p>
38848 */
38849sjcl.bitArray = {
38850 /**
38851 * Array slices in units of bits.
38852 * @param {bitArray} a The array to slice.
38853 * @param {Number} bstart The offset to the start of the slice, in bits.
38854 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
38855 * slice until the end of the array.
38856 * @return {bitArray} The requested slice.
38857 */
38858 bitSlice: function (a, bstart, bend) {
38859 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
38860 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
38861 },
38862
38863 /**
38864 * Extract a number packed into a bit array.
38865 * @param {bitArray} a The array to slice.
38866 * @param {Number} bstart The offset to the start of the slice, in bits.
38867 * @param {Number} length The length of the number to extract.
38868 * @return {Number} The requested slice.
38869 */
38870 extract: function(a, bstart, blength) {
38871 // FIXME: this Math.floor is not necessary at all, but for some reason
38872 // seems to suppress a bug in the Chromium JIT.
38873 var x, sh = Math.floor((-bstart-blength) & 31);
38874 if ((bstart + blength - 1 ^ bstart) & -32) {
38875 // it crosses a boundary
38876 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
38877 } else {
38878 // within a single word
38879 x = a[bstart/32|0] >>> sh;
ebd8d4e8 38880 }
80c4dd2a
IC
38881 return x & ((1<<blength) - 1);
38882 },
38883
38884 /**
38885 * Concatenate two bit arrays.
38886 * @param {bitArray} a1 The first array.
38887 * @param {bitArray} a2 The second array.
38888 * @return {bitArray} The concatenation of a1 and a2.
38889 */
38890 concat: function (a1, a2) {
38891 if (a1.length === 0 || a2.length === 0) {
38892 return a1.concat(a2);
38893 }
38894
38895 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
38896 if (shift === 32) {
38897 return a1.concat(a2);
38898 } else {
38899 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 38900 }
80c4dd2a
IC
38901 },
38902
38903 /**
38904 * Find the length of an array of bits.
38905 * @param {bitArray} a The array.
38906 * @return {Number} The length of a, in bits.
38907 */
38908 bitLength: function (a) {
38909 var l = a.length, x;
38910 if (l === 0) { return 0; }
38911 x = a[l - 1];
38912 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
38913 },
38914
38915 /**
38916 * Truncate an array.
38917 * @param {bitArray} a The array.
38918 * @param {Number} len The length to truncate to, in bits.
38919 * @return {bitArray} A new array, truncated to len bits.
38920 */
38921 clamp: function (a, len) {
38922 if (a.length * 32 < len) { return a; }
38923 a = a.slice(0, Math.ceil(len / 32));
38924 var l = a.length;
38925 len = len & 31;
38926 if (l > 0 && len) {
38927 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
38928 }
38929 return a;
38930 },
38931
38932 /**
38933 * Make a partial word for a bit array.
38934 * @param {Number} len The number of bits in the word.
38935 * @param {Number} x The bits.
38936 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
38937 * @return {Number} The partial word.
38938 */
38939 partial: function (len, x, _end) {
38940 if (len === 32) { return x; }
38941 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
38942 },
38943
38944 /**
38945 * Get the number of bits used by a partial word.
38946 * @param {Number} x The partial word.
38947 * @return {Number} The number of bits used by the partial word.
38948 */
38949 getPartial: function (x) {
38950 return Math.round(x/0x10000000000) || 32;
38951 },
38952
38953 /**
38954 * Compare two arrays for equality in a predictable amount of time.
38955 * @param {bitArray} a The first array.
38956 * @param {bitArray} b The second array.
38957 * @return {boolean} true if a == b; false otherwise.
38958 */
38959 equal: function (a, b) {
38960 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
38961 return false;
ebd8d4e8 38962 }
80c4dd2a
IC
38963 var x = 0, i;
38964 for (i=0; i<a.length; i++) {
38965 x |= a[i]^b[i];
ebd8d4e8 38966 }
80c4dd2a
IC
38967 return (x === 0);
38968 },
38969
38970 /** Shift an array right.
38971 * @param {bitArray} a The array to shift.
38972 * @param {Number} shift The number of bits to shift.
38973 * @param {Number} [carry=0] A byte to carry in
38974 * @param {bitArray} [out=[]] An array to prepend to the output.
38975 * @private
38976 */
38977 _shiftRight: function (a, shift, carry, out) {
38978 var i, last2=0, shift2;
38979 if (out === undefined) { out = []; }
38980
38981 for (; shift >= 32; shift -= 32) {
38982 out.push(carry);
38983 carry = 0;
38984 }
38985 if (shift === 0) {
38986 return out.concat(a);
38987 }
38988
38989 for (i=0; i<a.length; i++) {
38990 out.push(carry | a[i]>>>shift);
38991 carry = a[i] << (32-shift);
38992 }
38993 last2 = a.length ? a[a.length-1] : 0;
38994 shift2 = sjcl.bitArray.getPartial(last2);
38995 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
38996 return out;
38997 },
38998
38999 /** xor a block of 4 words together.
39000 * @private
39001 */
39002 _xor4: function(x,y) {
39003 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
39004 },
39005
39006 /** byteswap a word array inplace.
39007 * (does not handle partial words)
39008 * @param {sjcl.bitArray} a word array
39009 * @return {sjcl.bitArray} byteswapped array
39010 */
39011 byteswapM: function(a) {
39012 var i, v, m = 0xff00;
39013 for (i = 0; i < a.length; ++i) {
39014 v = a[i];
39015 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 39016 }
80c4dd2a
IC
39017 return a;
39018 }
39019};
39020
39021
39022//// codecString.js
39023
39024/** @fileOverview Bit array codec implementations.
39025 *
39026 * @author Emily Stark
39027 * @author Mike Hamburg
39028 * @author Dan Boneh
39029 */
39030
39031/** @namespace UTF-8 strings */
39032sjcl.codec.utf8String = {
39033 /** Convert from a bitArray to a UTF-8 string. */
39034 fromBits: function (arr) {
39035 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
39036 for (i=0; i<bl/8; i++) {
39037 if ((i&3) === 0) {
39038 tmp = arr[i/4];
39039 }
39040 out += String.fromCharCode(tmp >>> 24);
39041 tmp <<= 8;
ebd8d4e8 39042 }
80c4dd2a
IC
39043 return decodeURIComponent(escape(out));
39044 },
39045
39046 /** Convert from a UTF-8 string to a bitArray. */
39047 toBits: function (str) {
39048 str = unescape(encodeURIComponent(str));
39049 var out = [], i, tmp=0;
39050 for (i=0; i<str.length; i++) {
39051 tmp = tmp << 8 | str.charCodeAt(i);
39052 if ((i&3) === 3) {
39053 out.push(tmp);
39054 tmp = 0;
39055 }
ebd8d4e8 39056 }
80c4dd2a
IC
39057 if (i&3) {
39058 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 39059 }
80c4dd2a
IC
39060 return out;
39061 }
39062};
39063
39064
39065//// codecHex.js
39066
39067/** @fileOverview Bit array codec implementations.
39068 *
39069 * @author Emily Stark
39070 * @author Mike Hamburg
39071 * @author Dan Boneh
39072 */
39073
39074/** @namespace Hexadecimal */
39075sjcl.codec.hex = {
39076 /** Convert from a bitArray to a hex string. */
39077 fromBits: function (arr) {
39078 var out = "", i;
39079 for (i=0; i<arr.length; i++) {
39080 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 39081 }
80c4dd2a
IC
39082 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
39083 },
39084 /** Convert from a hex string to a bitArray. */
39085 toBits: function (str) {
39086 var i, out=[], len;
39087 str = str.replace(/\s|0x/g, "");
39088 len = str.length;
39089 str = str + "00000000";
39090 for (i=0; i<str.length; i+=8) {
39091 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 39092 }
80c4dd2a
IC
39093 return sjcl.bitArray.clamp(out, len*4);
39094 }
39095};
39096
39097
39098//// sha512.js
39099
39100/** @fileOverview Javascript SHA-512 implementation.
39101 *
39102 * This implementation was written for CryptoJS by Jeff Mott and adapted for
39103 * SJCL by Stefan Thomas.
39104 *
39105 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
39106 * Released with New BSD License
39107 *
39108 * @author Emily Stark
39109 * @author Mike Hamburg
39110 * @author Dan Boneh
39111 * @author Jeff Mott
39112 * @author Stefan Thomas
39113 */
39114
39115/**
39116 * Context for a SHA-512 operation in progress.
39117 * @constructor
39118 * @class Secure Hash Algorithm, 512 bits.
39119 */
39120sjcl.hash.sha512 = function (hash) {
39121 if (!this._key[0]) { this._precompute(); }
39122 if (hash) {
39123 this._h = hash._h.slice(0);
39124 this._buffer = hash._buffer.slice(0);
39125 this._length = hash._length;
39126 } else {
39127 this.reset();
39128 }
39129};
39130
39131/**
39132 * Hash a string or an array of words.
39133 * @static
39134 * @param {bitArray|String} data the data to hash.
39135 * @return {bitArray} The hash value, an array of 16 big-endian words.
39136 */
39137sjcl.hash.sha512.hash = function (data) {
39138 return (new sjcl.hash.sha512()).update(data).finalize();
39139};
39140
39141sjcl.hash.sha512.prototype = {
39142 /**
39143 * The hash's block size, in bits.
39144 * @constant
39145 */
39146 blockSize: 1024,
39147
39148 /**
39149 * Reset the hash state.
39150 * @return this
39151 */
39152 reset:function () {
39153 this._h = this._init.slice(0);
39154 this._buffer = [];
39155 this._length = 0;
39156 return this;
39157 },
39158
39159 /**
39160 * Input several words to the hash.
39161 * @param {bitArray|String} data the data to hash.
39162 * @return this
39163 */
39164 update: function (data) {
39165 if (typeof data === "string") {
39166 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 39167 }
80c4dd2a
IC
39168 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
39169 ol = this._length,
39170 nl = this._length = ol + sjcl.bitArray.bitLength(data);
39171 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
39172 this._block(b.splice(0,32));
ebd8d4e8 39173 }
80c4dd2a
IC
39174 return this;
39175 },
39176
39177 /**
39178 * Complete hashing and output the hash value.
39179 * @return {bitArray} The hash value, an array of 16 big-endian words.
39180 */
39181 finalize:function () {
39182 var i, b = this._buffer, h = this._h;
39183
39184 // Round out and push the buffer
39185 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
39186
39187 // Round out the buffer to a multiple of 32 words, less the 4 length words.
39188 for (i = b.length + 4; i & 31; i++) {
39189 b.push(0);
ebd8d4e8 39190 }
80c4dd2a
IC
39191
39192 // append the length
39193 b.push(0);
39194 b.push(0);
39195 b.push(Math.floor(this._length / 0x100000000));
39196 b.push(this._length | 0);
39197
39198 while (b.length) {
39199 this._block(b.splice(0,32));
ebd8d4e8 39200 }
80c4dd2a
IC
39201
39202 this.reset();
39203 return h;
39204 },
39205
39206 /**
39207 * The SHA-512 initialization vector, to be precomputed.
39208 * @private
39209 */
39210 _init:[],
39211
39212 /**
39213 * Least significant 24 bits of SHA512 initialization values.
39214 *
39215 * Javascript only has 53 bits of precision, so we compute the 40 most
39216 * significant bits and add the remaining 24 bits as constants.
39217 *
39218 * @private
39219 */
39220 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
39221
39222 /*
39223 _init:
39224 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
39225 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
39226 */
39227
39228 /**
39229 * The SHA-512 hash key, to be precomputed.
39230 * @private
39231 */
39232 _key:[],
39233
39234 /**
39235 * Least significant 24 bits of SHA512 key values.
39236 * @private
39237 */
39238 _keyr:
39239 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
39240 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
39241 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
39242 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
39243 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
39244 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
39245 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
39246 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
39247 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
39248 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
39249
39250 /*
39251 _key:
39252 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
39253 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
39254 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
39255 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
39256 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
39257 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
39258 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
39259 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
39260 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
39261 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
39262 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
39263 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
39264 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
39265 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
39266 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
39267 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
39268 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
39269 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
39270 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
39271 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
39272 */
39273
39274 /**
39275 * Function to precompute _init and _key.
39276 * @private
39277 */
39278 _precompute: function () {
39279 // XXX: This code is for precomputing the SHA256 constants, change for
39280 // SHA512 and re-enable.
39281 var i = 0, prime = 2, factor;
39282
39283 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
39284 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
39285
39286 outer: for (; i<80; prime++) {
39287 for (factor=2; factor*factor <= prime; factor++) {
39288 if (prime % factor === 0) {
39289 // not a prime
39290 continue outer;
ebd8d4e8 39291 }
80c4dd2a
IC
39292 }
39293
39294 if (i<8) {
39295 this._init[i*2] = frac(Math.pow(prime, 1/2));
39296 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
39297 }
39298 this._key[i*2] = frac(Math.pow(prime, 1/3));
39299 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
39300 i++;
ebd8d4e8 39301 }
80c4dd2a
IC
39302 },
39303
39304 /**
39305 * Perform one cycle of SHA-512.
39306 * @param {bitArray} words one block of words.
39307 * @private
39308 */
39309 _block:function (words) {
39310 var i, wrh, wrl,
39311 w = words.slice(0),
39312 h = this._h,
39313 k = this._key,
39314 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
39315 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
39316 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
39317 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
39318
39319 // Working variables
39320 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
39321 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
39322 eh = h4h, el = h4l, fh = h5h, fl = h5l,
39323 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
39324
39325 for (i=0; i<80; i++) {
39326 // load up the input word for this round
39327 if (i<16) {
39328 wrh = w[i * 2];
39329 wrl = w[i * 2 + 1];
39330 } else {
39331 // Gamma0
39332 var gamma0xh = w[(i-15) * 2];
39333 var gamma0xl = w[(i-15) * 2 + 1];
39334 var gamma0h =
39335 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
39336 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
39337 (gamma0xh >>> 7);
39338 var gamma0l =
39339 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
39340 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
39341 ((gamma0xh << 25) | (gamma0xl >>> 7));
39342
39343 // Gamma1
39344 var gamma1xh = w[(i-2) * 2];
39345 var gamma1xl = w[(i-2) * 2 + 1];
39346 var gamma1h =
39347 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
39348 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
39349 (gamma1xh >>> 6);
39350 var gamma1l =
39351 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
39352 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
39353 ((gamma1xh << 26) | (gamma1xl >>> 6));
39354
39355 // Shortcuts
39356 var wr7h = w[(i-7) * 2];
39357 var wr7l = w[(i-7) * 2 + 1];
39358
39359 var wr16h = w[(i-16) * 2];
39360 var wr16l = w[(i-16) * 2 + 1];
39361
39362 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
39363 wrl = gamma0l + wr7l;
39364 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
39365 wrl += gamma1l;
39366 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
39367 wrl += wr16l;
39368 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
39369 }
39370
39371 w[i*2] = wrh |= 0;
39372 w[i*2 + 1] = wrl |= 0;
39373
39374 // Ch
39375 var chh = (eh & fh) ^ (~eh & gh);
39376 var chl = (el & fl) ^ (~el & gl);
39377
39378 // Maj
39379 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
39380 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
39381
39382 // Sigma0
39383 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
39384 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
39385
39386 // Sigma1
39387 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
39388 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
39389
39390 // K(round)
39391 var krh = k[i*2];
39392 var krl = k[i*2+1];
39393
39394 // t1 = h + sigma1 + ch + K(round) + W(round)
39395 var t1l = hl + sigma1l;
39396 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
39397 t1l += chl;
39398 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
39399 t1l += krl;
39400 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
39401 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
39402 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
39403
39404 // t2 = sigma0 + maj
39405 var t2l = sigma0l + majl;
39406 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
39407
39408 // Update working variables
39409 hh = gh;
39410 hl = gl;
39411 gh = fh;
39412 gl = fl;
39413 fh = eh;
39414 fl = el;
39415 el = (dl + t1l) | 0;
39416 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
39417 dh = ch;
39418 dl = cl;
39419 ch = bh;
39420 cl = bl;
39421 bh = ah;
39422 bl = al;
39423 al = (t1l + t2l) | 0;
39424 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
39425 }
39426
39427 // Intermediate hash
39428 h0l = h[1] = (h0l + al) | 0;
39429 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
39430 h1l = h[3] = (h1l + bl) | 0;
39431 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
39432 h2l = h[5] = (h2l + cl) | 0;
39433 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
39434 h3l = h[7] = (h3l + dl) | 0;
39435 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
39436 h4l = h[9] = (h4l + el) | 0;
39437 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
39438 h5l = h[11] = (h5l + fl) | 0;
39439 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
39440 h6l = h[13] = (h6l + gl) | 0;
39441 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
39442 h7l = h[15] = (h7l + hl) | 0;
39443 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
39444 }
39445};
39446
39447
39448//// hmac.js
39449
39450/** @fileOverview HMAC implementation.
39451 *
39452 * @author Emily Stark
39453 * @author Mike Hamburg
39454 * @author Dan Boneh
39455 */
39456
39457/** HMAC with the specified hash function.
39458 * @constructor
39459 * @param {bitArray} key the key for HMAC.
39460 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
39461 */
39462sjcl.misc.hmac = function (key, Hash) {
39463 this._hash = Hash = Hash || sjcl.hash.sha256;
39464 var exKey = [[],[]], i,
39465 bs = Hash.prototype.blockSize / 32;
39466 this._baseHash = [new Hash(), new Hash()];
39467
39468 if (key.length > bs) {
39469 key = Hash.hash(key);
39470 }
39471
39472 for (i=0; i<bs; i++) {
39473 exKey[0][i] = key[i]^0x36363636;
39474 exKey[1][i] = key[i]^0x5C5C5C5C;
39475 }
39476
39477 this._baseHash[0].update(exKey[0]);
39478 this._baseHash[1].update(exKey[1]);
39479 this._resultHash = new Hash(this._baseHash[0]);
39480};
39481
39482/** HMAC with the specified hash function. Also called encrypt since it's a prf.
39483 * @param {bitArray|String} data The data to mac.
39484 */
39485sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
39486 if (!this._updated) {
39487 this.update(data);
39488 return this.digest(data);
39489 } else {
39490 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
39491 }
39492};
39493
39494sjcl.misc.hmac.prototype.reset = function () {
39495 this._resultHash = new this._hash(this._baseHash[0]);
39496 this._updated = false;
39497};
39498
39499sjcl.misc.hmac.prototype.update = function (data) {
39500 this._updated = true;
39501 this._resultHash.update(data);
39502};
39503
39504sjcl.misc.hmac.prototype.digest = function () {
39505 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
39506
39507 this.reset();
39508
39509 return result;
39510};
39511
39512
39513//// pbkdf2.js
39514
39515
39516/** @fileOverview Password-based key-derivation function, version 2.0.
39517 *
39518 * @author Emily Stark
39519 * @author Mike Hamburg
39520 * @author Dan Boneh
39521 */
39522
39523/** Password-Based Key-Derivation Function, version 2.0.
39524 *
39525 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
39526 *
39527 * This is the method specified by RSA's PKCS #5 standard.
39528 *
39529 * @param {bitArray|String} password The password.
39530 * @param {bitArray|String} salt The salt. Should have lots of entropy.
39531 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
39532 * @param {Number} [length] The length of the derived key. Defaults to the
39533 output size of the hash function.
39534 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
39535 * @return {bitArray} the derived key.
39536 */
39537sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
39538 count = count || 1000;
39539
39540 if (length < 0 || count < 0) {
39541 throw sjcl.exception.invalid("invalid params to pbkdf2");
39542 }
39543
39544 if (typeof password === "string") {
39545 password = sjcl.codec.utf8String.toBits(password);
39546 }
39547
39548 if (typeof salt === "string") {
39549 salt = sjcl.codec.utf8String.toBits(salt);
39550 }
39551
39552 Prff = Prff || sjcl.misc.hmac;
39553
39554 var prf = new Prff(password),
39555 u, ui, i, j, k, out = [], b = sjcl.bitArray;
39556
39557 for (k = 1; 32 * out.length < (length || 1); k++) {
39558 u = ui = prf.encrypt(b.concat(salt,[k]));
39559
39560 for (i=1; i<count; i++) {
39561 ui = prf.encrypt(ui);
39562 for (j=0; j<ui.length; j++) {
39563 u[j] ^= ui[j];
39564 }
ebd8d4e8 39565 }
80c4dd2a
IC
39566
39567 out = out.concat(u);
39568 }
39569
39570 if (length) { out = b.clamp(out, length); }
39571
39572 return out;
39573};
39574
39575
39576//// sha256.js
39577
39578/** @fileOverview Javascript SHA-256 implementation.
39579 *
39580 * An older version of this implementation is available in the public
39581 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
39582 * Stanford University 2008-2010 and BSD-licensed for liability
39583 * reasons.
39584 *
39585 * Special thanks to Aldo Cortesi for pointing out several bugs in
39586 * this code.
39587 *
39588 * @author Emily Stark
39589 * @author Mike Hamburg
39590 * @author Dan Boneh
39591 */
39592
39593/**
39594 * Context for a SHA-256 operation in progress.
39595 * @constructor
39596 * @class Secure Hash Algorithm, 256 bits.
39597 */
39598sjcl.hash.sha256 = function (hash) {
39599 if (!this._key[0]) { this._precompute(); }
39600 if (hash) {
39601 this._h = hash._h.slice(0);
39602 this._buffer = hash._buffer.slice(0);
39603 this._length = hash._length;
39604 } else {
39605 this.reset();
39606 }
39607};
39608
39609/**
39610 * Hash a string or an array of words.
39611 * @static
39612 * @param {bitArray|String} data the data to hash.
39613 * @return {bitArray} The hash value, an array of 16 big-endian words.
39614 */
39615sjcl.hash.sha256.hash = function (data) {
39616 return (new sjcl.hash.sha256()).update(data).finalize();
39617};
39618
39619sjcl.hash.sha256.prototype = {
39620 /**
39621 * The hash's block size, in bits.
39622 * @constant
39623 */
39624 blockSize: 512,
39625
39626 /**
39627 * Reset the hash state.
39628 * @return this
39629 */
39630 reset:function () {
39631 this._h = this._init.slice(0);
39632 this._buffer = [];
39633 this._length = 0;
39634 return this;
39635 },
39636
39637 /**
39638 * Input several words to the hash.
39639 * @param {bitArray|String} data the data to hash.
39640 * @return this
39641 */
39642 update: function (data) {
39643 if (typeof data === "string") {
39644 data = sjcl.codec.utf8String.toBits(data);
39645 }
39646 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
39647 ol = this._length,
39648 nl = this._length = ol + sjcl.bitArray.bitLength(data);
39649 for (i = 512+ol & -512; i <= nl; i+= 512) {
39650 this._block(b.splice(0,16));
ebd8d4e8 39651 }
3af2954a 39652 return this;
80c4dd2a
IC
39653 },
39654
39655 /**
39656 * Complete hashing and output the hash value.
39657 * @return {bitArray} The hash value, an array of 8 big-endian words.
39658 */
39659 finalize:function () {
39660 var i, b = this._buffer, h = this._h;
39661
39662 // Round out and push the buffer
39663 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
39664
39665 // Round out the buffer to a multiple of 16 words, less the 2 length words.
39666 for (i = b.length + 2; i & 15; i++) {
39667 b.push(0);
39668 }
39669
39670 // append the length
39671 b.push(Math.floor(this._length / 0x100000000));
39672 b.push(this._length | 0);
39673
39674 while (b.length) {
39675 this._block(b.splice(0,16));
39676 }
39677
39678 this.reset();
39679 return h;
39680 },
39681
39682 /**
39683 * The SHA-256 initialization vector, to be precomputed.
39684 * @private
39685 */
39686 _init:[],
39687 /*
39688 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
39689 */
39690
39691 /**
39692 * The SHA-256 hash key, to be precomputed.
39693 * @private
39694 */
39695 _key:[],
39696 /*
39697 _key:
39698 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
39699 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
39700 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
39701 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
39702 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
39703 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
39704 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
39705 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
39706 */
39707
39708
39709 /**
39710 * Function to precompute _init and _key.
39711 * @private
39712 */
39713 _precompute: function () {
39714 var i = 0, prime = 2, factor;
39715
39716 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
39717
39718 outer: for (; i<64; prime++) {
39719 for (factor=2; factor*factor <= prime; factor++) {
39720 if (prime % factor === 0) {
39721 // not a prime
39722 continue outer;
ebd8d4e8 39723 }
80c4dd2a
IC
39724 }
39725
39726 if (i<8) {
39727 this._init[i] = frac(Math.pow(prime, 1/2));
39728 }
39729 this._key[i] = frac(Math.pow(prime, 1/3));
39730 i++;
ebd8d4e8 39731 }
80c4dd2a
IC
39732 },
39733
39734 /**
39735 * Perform one cycle of SHA-256.
39736 * @param {bitArray} words one block of words.
39737 * @private
39738 */
39739 _block:function (words) {
39740 var i, tmp, a, b,
39741 w = words.slice(0),
39742 h = this._h,
39743 k = this._key,
39744 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
39745 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
39746
39747 /* Rationale for placement of |0 :
39748 * If a value can overflow is original 32 bits by a factor of more than a few
39749 * million (2^23 ish), there is a possibility that it might overflow the
39750 * 53-bit mantissa and lose precision.
39751 *
39752 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
39753 * propagates around the loop, and on the hash state h[]. I don't believe
39754 * that the clamps on h4 and on h0 are strictly necessary, but it's close
39755 * (for h4 anyway), and better safe than sorry.
39756 *
39757 * The clamps on h[] are necessary for the output to be correct even in the
39758 * common case and for short inputs.
39759 */
39760 for (i=0; i<64; i++) {
39761 // load up the input word for this round
39762 if (i<16) {
39763 tmp = w[i];
39764 } else {
39765 a = w[(i+1 ) & 15];
39766 b = w[(i+14) & 15];
39767 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
39768 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
39769 w[i&15] + w[(i+9) & 15]) | 0;
39770 }
39771
39772 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
39773
39774 // shift register
39775 h7 = h6; h6 = h5; h5 = h4;
39776 h4 = h3 + tmp | 0;
39777 h3 = h2; h2 = h1; h1 = h0;
39778
39779 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
39780 }
39781
39782 h[0] = h[0]+h0 | 0;
39783 h[1] = h[1]+h1 | 0;
39784 h[2] = h[2]+h2 | 0;
39785 h[3] = h[3]+h3 | 0;
39786 h[4] = h[4]+h4 | 0;
39787 h[5] = h[5]+h5 | 0;
39788 h[6] = h[6]+h6 | 0;
39789 h[7] = h[7]+h7 | 0;
39790 }
39791};
ea87f1d3
IC
39792</script>
39793 <script>// An extremely basic translation library
39794//
39795// Example usage:
39796//
39797// Set some html to be translated. Do this using the 'data-translate' attribute:
39798//
39799// <div data-translate>Test</div>
39800// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
39801// <input data-translate-placeholder placeholder="Example placeholder">
39802// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
39803//
39804// Obtain all the phrases to be translated via js debug console:
39805//
39806// Translate.phrasesAsJson();
39807//
39808// Use that template to translate the phrases into another language.
39809// Leave the key the same. Change the value to the new language.
39810//
39811// Create a js file to load the new phrases. In this example for Spanish,
39812// es.js will contain the following code:
39813//
39814// Translate.loadForeignPhrases("es", {
39815// "Test": "Test in Spanish",
39816// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
39817// "Example placeholder": "Example placeholder in Spanish"
39818// "Example title": "Example title in Spanish"
ea87f1d3
IC
39819// });
39820//
39821// In your UI put a listener for clicking on the Spanish button:
39822//
39823// mySpanishButton.addEventListener("click", function() {
39824// Translate.setLanguage("es");
39825// });
39826// myEnglishButton.addEventListener("click", function() {
39827// Translate.setLanguage("en");
39828// });
39829
39830Translate = new (function() {
39831
39832 var defaultLanguage = "en";
39833
39834 var allPhrases = {};
39835 allPhrases[defaultLanguage] = {};
39836
39837 // Node types
39838
39839 var text = {
39840 selector: "[data-translate]",
39841 getKey: function() {
39842 return this.textContent.trim().replace(/\s+/g, " ");
39843 },
39844 setPhrase: function(p) {
39845 this.textContent = p;
39846 },
39847 }
39848
39849 var html = {
39850 selector: "[data-translate-html]",
39851 getKey: function() {
39852 return this.innerHTML.trim().replace(/\s+/g, " ");
39853 },
39854 setPhrase: function(p) {
39855 this.innerHTML = p;
39856 },
39857 }
39858
39859 var placeholder = {
39860 selector: "[data-translate-placeholder]",
39861 getKey: function() {
39862 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
39863 },
39864 setPhrase: function(p) {
39865 this.setAttribute("placeholder", p);
39866 },
39867 }
39868
52da415f
IC
39869 var title = {
39870 selector: "[data-translate-title]",
39871 getKey: function() {
39872 return this.getAttribute("title").trim().replace(/\s+/g, " ");
39873 },
39874 setPhrase: function(p) {
39875 this.setAttribute("title", p);
39876 },
39877 }
39878
ea87f1d3
IC
39879 // Get elements to be translated
39880 var allEls = getEls(text)
39881 .concat(getEls(html))
52da415f
IC
39882 .concat(getEls(placeholder))
39883 .concat(getEls(title));
ea87f1d3
IC
39884
39885 // Provides access to phrases from a non-default language.
39886 // See phrases_en.js for example usage.
39887 this.loadForeignPhrases = function(language, phrases) {
39888 allPhrases[language] = phrases;
39889 }
39890
39891 // Displays a different language, eg "en" or "fr"
39892 this.setLanguage = function(language) {
39893 for (var i=0; i<allEls.length; i++) {
39894 var el = allEls[i];
39895 var key = el.key;
39896 if (!(language in allPhrases)) {
39897 console.log(language + " not in allPhrases");
39898 return;
39899 }
39900 if (!(key in allPhrases[language])) {
39901 console.log(language + " does not contain phrase: " + key);
39902 return;
39903 }
39904 var phrase = allPhrases[language][key];
39905 el.setPhrase(phrase);
39906 }
39907 }
39908
39909 // Converts the phrases to a key-pair json file.
39910 // This is a good way to export phrases for use in translation tools.
39911 this.phrasesAsJson = function(language) {
39912 var keys = [];
39913 for (var i=0; i<allEls.length; i++) {
39914 var el = allEls[i];
39915 var key = el.key;
39916 keys.push(key);
39917 }
39918 keys.sort();
39919 var output = {};
39920 for (var i=0; i<keys.length; i++) {
39921 var key = keys[i];
39922 var translated = "";
39923 if (language in allPhrases && key in allPhrases[language]) {
39924 translated = allPhrases[language][key];
39925 }
39926 output[key] = translated;
39927 }
39928 return JSON.stringify(output, null, 2);
39929 }
39930
39931 function getEls(nodeType) {
39932 var nodes = document.querySelectorAll(nodeType.selector);
39933 var els = [];
39934 for (var i=0; i<nodes.length; i++) {
39935 var node = nodes[i];
39936 node.getKey = nodeType.getKey;
39937 node.setPhrase = nodeType.setPhrase;
39938 node.key = node.getKey();
39939 allPhrases[defaultLanguage][node.key] = node.key;
39940 els.push(node);
39941 }
39942 return els;
39943 }
39944
39945})();
39946</script>
39947 <script>Translate.loadForeignPhrases("en",
39948{
39949 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
39950 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
39951 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
39952 "<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).",
39953 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
39954 "Account": "Account",
39955 "Address": "Address",
39956 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
39957 "BIP32 Derivation Path": "BIP32 Derivation Path",
39958 "BIP32 Extended Key": "BIP32 Extended Key",
39959 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
39960 "BIP32 Root Key": "BIP32 Root Key",
39961 "BIP39 Mnemonic": "BIP39 Mnemonic",
39962 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
39963 "BIP39 Seed": "BIP39 Seed",
39964 "Base 10": "Base 10",
39965 "Base 6": "Base 6",
39966 "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.",
39967 "Binary": "Binary",
39968 "Bitcoin Core": "Bitcoin Core",
39969 "Bits Per Event": "Bits Per Event",
39970 "Block Explorers": "Block Explorers",
39971 "Can be used with": "Can be used with",
39972 "Card": "Card",
39973 "Coin": "Coin",
39974 "Dice": "Dice",
39975 "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.",
39976 "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.",
39977 "Entropy": "Entropy",
39978 "Entropy Type": "Entropy Type",
39979 "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.",
39980 "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>.",
39981 "Event Count": "Event Count",
39982 "External / Internal": "External / Internal",
39983 "Filtered Entropy": "Filtered Entropy",
39984 "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>",
39985 "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>.",
39986 "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>.",
39987 "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>",
39988 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
39989 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
39990 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
39991 "Get the source code from the repository": "Get the source code from the repository",
39992 "Hex": "Hex",
39993 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
39994 "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.",
39995 "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.",
39996 "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.",
39997 "Libraries": "Libraries",
39998 "Mnemonic Language": "Mnemonic Language",
39999 "Mnemonic Length": "Mnemonic Length",
40000 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
40001 "More info": "More info",
40002 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
40003 "Mycelium Wallet": "Mycelium Wallet",
40004 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
40005 "Offline Usage": "Offline Usage",
40006 "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.",
40007 "Path": "Path",
40008 "Private Key": "Private Key",
40009 "Private Keys": "Private Keys",
40010 "Public Key": "Public Key",
40011 "Purpose": "Purpose",
40012 "Raw Binary": "Raw Binary",
40013 "Read more": "Read more",
40014 "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>",
40015 "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>",
40016 "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>",
40017 "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>",
40018 "Show": "Show",
40019 "Show more rows": "Show more rows",
40020 "Strength": "Strength",
40021 "Supply my own source of entropy": "Supply my own source of entropy",
40022 "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.",
40023 "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>.",
40024 "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.",
40025 "This project is 100% open-source code": "This project is 100% open-source code",
40026 "Toggle": "Toggle",
40027 "Total Bits": "Total Bits",
40028 "Use hardened addresses": "Use hardened addresses",
40029 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
40030 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
40031 "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>.",
40032 "Valid entropy values include:": "Valid entropy values include:",
40033 "Warning": "Warning",
40034 "Word Count": "Word Count",
40035 "You are not a good source of entropy.": "You are not a good source of entropy.",
40036 "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).",
40037 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
40038 "words": "words"
40039}
40040);
dc55c6b0 40041</script>
ab78acc6 40042 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 40043WORDLISTS["english"] = [
ebd8d4e8
IC
40044"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
40045"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
40046"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
40047"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
40048"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
40049"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
40050"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
40051"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
40052"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
40053"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
40054"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
40055"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
40056"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
40057"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
40058"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
40059"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
40060"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
40061"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
40062"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
40063"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
40064"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
40065"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
40066"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
40067"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
40068"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
40069"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
40070"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
40071"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
40072"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
40073"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
40074"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
40075"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
40076"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
40077"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
40078"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
40079"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
40080"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
40081"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
40082"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
40083"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
40084"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
40085"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
40086"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
40087"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
40088"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
40089"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
40090"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
40091"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
40092"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
40093"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
40094"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
40095"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
40096"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
40097"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
40098"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
40099"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
40100"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
40101"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
40102"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
40103"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
40104"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
40105"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
40106"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
40107"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
40108"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
40109"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
40110"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
40111"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
40112"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
40113"film","filter","final","find","fine","finger","finish","fire","firm","first",
40114"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
40115"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
40116"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
40117"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
40118"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
40119"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
40120"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
40121"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
40122"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
40123"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
40124"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
40125"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
40126"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
40127"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
40128"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
40129"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
40130"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
40131"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
40132"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
40133"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
40134"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
40135"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
40136"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
40137"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
40138"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
40139"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
40140"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
40141"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
40142"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
40143"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
40144"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
40145"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
40146"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
40147"liar","liberty","library","license","life","lift","light","like","limb","limit",
40148"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
40149"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
40150"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
40151"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
40152"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
40153"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
40154"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
40155"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
40156"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
40157"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
40158"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
40159"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
40160"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
40161"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
40162"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
40163"network","neutral","never","news","next","nice","night","noble","noise","nominee",
40164"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
40165"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
40166"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
40167"oil","okay","old","olive","olympic","omit","once","one","onion","online",
40168"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
40169"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
40170"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
40171"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
40172"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
40173"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
40174"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
40175"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
40176"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
40177"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
40178"pole","police","pond","pony","pool","popular","portion","position","possible","post",
40179"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
40180"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
40181"prize","problem","process","produce","profit","program","project","promote","proof","property",
40182"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
40183"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
40184"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
40185"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
40186"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
40187"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
40188"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
40189"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
40190"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
40191"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
40192"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
40193"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
40194"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
40195"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
40196"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
40197"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
40198"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
40199"scrub","sea","search","season","seat","second","secret","section","security","seed",
40200"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
40201"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
40202"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
40203"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
40204"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
40205"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
40206"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
40207"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
40208"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
40209"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
40210"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
40211"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
40212"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
40213"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
40214"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
40215"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
40216"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
40217"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
40218"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
40219"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
40220"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
40221"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
40222"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
40223"thank","that","theme","then","theory","there","they","thing","this","thought",
40224"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
40225"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
40226"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
40227"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
40228"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
40229"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
40230"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
40231"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
40232"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
40233"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
40234"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
40235"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
40236"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
40237"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
40238"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
40239"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
40240"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
40241"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
40242"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
40243"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
40244"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
40245"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
40246"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
40247"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
40248"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
40249</script>
40250 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40251WORDLISTS["japanese"] = [
40252"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
40253"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
40254"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
40255"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
40256"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
40257"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
40258"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
40259"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
40260"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
40261"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
40262"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
40263"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
40264"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
40265"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
40266"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
40267"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
40268"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
40269"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
40270"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
40271"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
40272"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
40273"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
40274"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
40275"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
40276"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
40277"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
40278"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
40279"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
40280"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
40281"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
40282"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
40283"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
40284"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
40285"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
40286"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
40287"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
40288"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
40289"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
40290"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
40291"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
40292"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
40293"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
40294"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
40295"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
40296"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
40297"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
40298"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
40299"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
40300"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
40301"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
40302"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
40303"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
40304"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
40305"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
40306"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
40307"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
40308"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
40309"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
40310"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
40311"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
40312"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
40313"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
40314"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
40315"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
40316"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
40317"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
40318"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
40319"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
40320"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
40321"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
40322"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
40323"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
40324"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
40325"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
40326"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
40327"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
40328"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
40329"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
40330"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
40331"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
40332"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
40333"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
40334"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
40335"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
40336"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
40337"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
40338"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
40339"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
40340"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
40341"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
40342"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
40343"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
40344"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
40345"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
40346"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
40347"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
40348"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
40349"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
40350"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
40351"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
40352"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
40353"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
40354"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
40355"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
40356"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
40357"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
40358"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
40359"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
40360"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
40361"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
40362"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
40363"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
40364"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
40365"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
40366"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
40367"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
40368"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
40369"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
40370"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
40371"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
40372"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
40373"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
40374"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
40375"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
40376"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
40377"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
40378"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
40379"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
40380"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
40381"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
40382"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
40383"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
40384"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
40385"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
40386"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
40387"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
40388"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
40389"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
40390"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
40391"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
40392"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
40393"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
40394"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
40395"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
40396"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
40397"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
40398"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
40399"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
40400"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
40401"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
40402"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
40403"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
40404"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
40405"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
40406"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
40407"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
40408"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
40409"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
40410"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
40411"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
40412"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
40413"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
40414"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
40415"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
40416"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
40417"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
40418"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
40419"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
40420"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
40421"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
40422"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
40423"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
40424"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
40425"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
40426"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
40427"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
40428"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
40429"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
40430"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
40431"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
40432"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
40433"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
40434"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
40435"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
40436"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
40437"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
40438"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
40439"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
40440"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
40441"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
40442"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
40443"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
40444"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
40445"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
40446"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
40447"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
40448"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
40449"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
40450"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
40451"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
40452"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
40453"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
40454"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
40455"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
40456"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
40457</script>
40458 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40459WORDLISTS["spanish"] = [
40460"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
40461"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
40462"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
40463"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
40464"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
40465"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
40466"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
40467"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
40468"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
40469"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
40470"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
40471"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
40472"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
40473"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
40474"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
40475"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
40476"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
40477"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
40478"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
40479"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
40480"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
40481"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
40482"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
40483"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
40484"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
40485"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
40486"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
40487"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
40488"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
40489"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
40490"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
40491"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
40492"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
40493"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
40494"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
40495"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
40496"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
40497"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
40498"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
40499"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
40500"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
40501"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
40502"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
40503"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
40504"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
40505"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
40506"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
40507"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
40508"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
40509"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
40510"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
40511"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
40512"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
40513"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
40514"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
40515"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
40516"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
40517"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
40518"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
40519"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
40520"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
40521"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
40522"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
40523"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
40524"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
40525"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
40526"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
40527"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
40528"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
40529"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
40530"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
40531"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
40532"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
40533"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
40534"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
40535"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
40536"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
40537"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
40538"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
40539"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
40540"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
40541"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
40542"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
40543"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
40544"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
40545"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
40546"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
40547"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
40548"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
40549"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
40550"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
40551"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
40552"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
40553"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
40554"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
40555"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
40556"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
40557"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
40558"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
40559"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
40560"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
40561"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
40562"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
40563"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
40564"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
40565"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
40566"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
40567"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
40568"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
40569"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
40570"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
40571"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
40572"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
40573"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
40574"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
40575"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
40576"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
40577"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
40578"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
40579"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
40580"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
40581"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
40582"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
40583"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
40584"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
40585"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
40586"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
40587"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
40588"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
40589"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
40590"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
40591"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
40592"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
40593"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
40594"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
40595"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
40596"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
40597"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
40598"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
40599"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
40600"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
40601"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
40602"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
40603"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
40604"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
40605"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
40606"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
40607"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
40608"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
40609"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
40610"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
40611"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
40612"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
40613"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
40614"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
40615"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
40616"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
40617"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
40618"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
40619"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
40620"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
40621"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
40622"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
40623"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
40624"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
40625"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
40626"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
40627"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
40628"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
40629"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
40630"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
40631"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
40632"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
40633"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
40634"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
40635"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
40636"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
40637"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
40638"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
40639"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
40640"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
40641"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
40642"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
40643"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
40644"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
40645"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
40646"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
40647"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
40648"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
40649"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
40650"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
40651"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
40652"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
40653"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
40654"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
40655"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
40656"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
40657"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
40658"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
40659"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
40660"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
40661"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
40662"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
40663"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
40664"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
40665</script>
40666 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40667WORDLISTS["chinese_simplified"] = [
40668"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
40669"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
40670"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
40671"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
40672"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
40673"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
40674"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
40675"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
40676"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
40677"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
40678"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
40679"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
40680"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
40681"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
40682"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
40683"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
40684"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
40685"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
40686"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
40687"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
40688"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
40689"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
40690"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
40691"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
40692"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
40693"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
40694"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
40695"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
40696"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
40697"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
40698"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
40699"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
40700"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
40701"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
40702"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
40703"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
40704"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
40705"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
40706"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
40707"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
40708"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
40709"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
40710"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
40711"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
40712"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
40713"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
40714"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
40715"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
40716"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
40717"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
40718"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
40719"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
40720"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
40721"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
40722"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
40723"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
40724"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
40725"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
40726"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
40727"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
40728"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
40729"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
40730"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
40731"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
40732"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
40733"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
40734"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
40735"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
40736"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
40737"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
40738"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
40739"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
40740"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
40741"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
40742"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
40743"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
40744"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
40745"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
40746"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
40747"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
40748"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
40749"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
40750"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
40751"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
40752"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
40753"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
40754"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
40755"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
40756"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
40757"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
40758"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
40759"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
40760"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
40761"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
40762"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
40763"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
40764"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
40765"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
40766"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
40767"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
40768"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
40769"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
40770"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
40771"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
40772"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
40773"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
40774"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
40775"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
40776"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
40777"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
40778"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
40779"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
40780"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
40781"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
40782"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
40783"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
40784"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
40785"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
40786"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
40787"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
40788"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
40789"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
40790"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
40791"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
40792"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
40793"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
40794"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
40795"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
40796"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
40797"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
40798"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
40799"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
40800"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
40801"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
40802"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
40803"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
40804"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
40805"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
40806"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
40807"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
40808"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
40809"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
40810"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
40811"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
40812"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
40813"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
40814"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
40815"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
40816"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
40817"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
40818"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
40819"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
40820"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
40821"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
40822"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
40823"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
40824"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
40825"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
40826"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
40827"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
40828"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
40829"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
40830"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
40831"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
40832"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
40833"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
40834"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
40835"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
40836"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
40837"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
40838"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
40839"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
40840"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
40841"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
40842"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
40843"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
40844"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
40845"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
40846"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
40847"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
40848"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
40849"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
40850"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
40851"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
40852"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
40853"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
40854"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
40855"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
40856"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
40857"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
40858"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
40859"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
40860"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
40861"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
40862"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
40863"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
40864"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
40865"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
40866"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
40867"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
40868"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
40869"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
40870"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
40871"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
40872"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
40873</script>
40874 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40875WORDLISTS["chinese_traditional"] = [
40876"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
40877"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
40878"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
40879"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
40880"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
40881"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
40882"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
40883"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
40884"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
40885"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
40886"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
40887"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
40888"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
40889"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
40890"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
40891"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
40892"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
40893"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
40894"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
40895"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
40896"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
40897"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
40898"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
40899"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
40900"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
40901"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
40902"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
40903"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
40904"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
40905"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
40906"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
40907"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
40908"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
40909"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
40910"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
40911"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
40912"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
40913"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
40914"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
40915"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
40916"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
40917"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
40918"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
40919"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
40920"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
40921"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
40922"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
40923"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
40924"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
40925"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
40926"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
40927"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
40928"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
40929"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
40930"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
40931"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
40932"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
40933"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
40934"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
40935"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
40936"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
40937"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
40938"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
40939"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
40940"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
40941"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
40942"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
40943"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
40944"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
40945"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
40946"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
40947"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
40948"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
40949"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
40950"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
40951"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
40952"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
40953"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
40954"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
40955"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
40956"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
40957"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
40958"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
40959"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
40960"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
40961"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
40962"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
40963"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
40964"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
40965"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
40966"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
40967"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
40968"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
40969"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
40970"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
40971"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
40972"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
40973"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
40974"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
40975"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
40976"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
40977"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
40978"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
40979"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
40980"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
40981"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
40982"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
40983"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
40984"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
40985"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
40986"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
40987"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
40988"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
40989"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
40990"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
40991"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
40992"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
40993"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
40994"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
40995"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
40996"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
40997"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
40998"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
40999"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
41000"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
41001"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
41002"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
41003"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
41004"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
41005"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
41006"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
41007"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
41008"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
41009"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
41010"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
41011"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
41012"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
41013"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
41014"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
41015"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
41016"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
41017"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
41018"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
41019"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
41020"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
41021"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
41022"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
41023"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
41024"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
41025"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
41026"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
41027"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
41028"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
41029"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
41030"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
41031"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
41032"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
41033"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
41034"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
41035"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
41036"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
41037"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
41038"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
41039"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
41040"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
41041"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
41042"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
41043"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
41044"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
41045"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
41046"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
41047"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
41048"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
41049"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
41050"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
41051"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
41052"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
41053"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
41054"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
41055"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
41056"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
41057"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
41058"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
41059"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
41060"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
41061"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
41062"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
41063"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
41064"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
41065"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
41066"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
41067"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
41068"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
41069"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
41070"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
41071"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
41072"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
41073"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
41074"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
41075"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
41076"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
41077"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
41078"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
41079"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
41080"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
41081</script>
41082 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
41083WORDLISTS["french"] = [
41084"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
41085"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
41086"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
41087"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
41088"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
41089"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
41090"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
41091"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
41092"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
41093"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
41094"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
41095"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
41096"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
41097"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
41098"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
41099"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
41100"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
41101"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
41102"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
41103"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
41104"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
41105"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
41106"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
41107"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
41108"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
41109"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
41110"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
41111"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
41112"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
41113"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
41114"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
41115"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
41116"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
41117"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
41118"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
41119"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
41120"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
41121"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
41122"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
41123"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
41124"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
41125"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
41126"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
41127"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
41128"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
41129"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
41130"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
41131"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
41132"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
41133"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
41134"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
41135"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
41136"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
41137"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
41138"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
41139"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
41140"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
41141"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
41142"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
41143"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
41144"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
41145"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
41146"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
41147"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
41148"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
41149"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
41150"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
41151"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
41152"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
41153"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
41154"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
41155"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
41156"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
41157"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
41158"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
41159"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
41160"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
41161"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
41162"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
41163"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
41164"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
41165"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
41166"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
41167"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
41168"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
41169"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
41170"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
41171"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
41172"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
41173"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
41174"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
41175"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
41176"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
41177"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
41178"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
41179"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
41180"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
41181"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
41182"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
41183"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
41184"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
41185"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
41186"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
41187"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
41188"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
41189"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
41190"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
41191"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
41192"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
41193"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
41194"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
41195"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
41196"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
41197"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
41198"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
41199"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
41200"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
41201"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
41202"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
41203"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
41204"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
41205"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
41206"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
41207"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
41208"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
41209"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
41210"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
41211"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
41212"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
41213"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
41214"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
41215"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
41216"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
41217"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
41218"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
41219"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
41220"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
41221"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
41222"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
41223"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
41224"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
41225"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
41226"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
41227"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
41228"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
41229"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
41230"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
41231"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
41232"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
41233"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
41234"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
41235"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
41236"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
41237"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
41238"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
41239"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
41240"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
41241"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
41242"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
41243"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
41244"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
41245"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
41246"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
41247"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
41248"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
41249"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
41250"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
41251"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
41252"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
41253"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
41254"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
41255"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
41256"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
41257"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
41258"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
41259"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
41260"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
41261"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
41262"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
41263"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
41264"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
41265"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
41266"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
41267"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
41268"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
41269"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
41270"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
41271"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
41272"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
41273"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
41274"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
41275"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
41276"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
41277"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
41278"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
41279"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
41280"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
41281"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
41282"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
41283"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
41284"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
41285"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
41286"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
41287"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
41288"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
41289</script>
41290 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
41291WORDLISTS["italian"] = [
41292"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
41293"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
41294"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
41295"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
41296"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
41297"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
41298"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
41299"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
41300"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
41301"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
41302"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
41303"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
41304"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
41305"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
41306"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
41307"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
41308"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
41309"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
41310"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
41311"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
41312"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
41313"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
41314"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
41315"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
41316"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
41317"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
41318"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
41319"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
41320"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
41321"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
41322"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
41323"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
41324"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
41325"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
41326"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
41327"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
41328"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
41329"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
41330"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
41331"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
41332"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
41333"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
41334"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
41335"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
41336"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
41337"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
41338"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
41339"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
41340"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
41341"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
41342"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
41343"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
41344"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
41345"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
41346"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
41347"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
41348"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
41349"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
41350"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
41351"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
41352"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
41353"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
41354"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
41355"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
41356"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
41357"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
41358"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
41359"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
41360"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
41361"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
41362"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
41363"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
41364"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
41365"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
41366"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
41367"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
41368"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
41369"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
41370"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
41371"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
41372"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
41373"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
41374"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
41375"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
41376"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
41377"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
41378"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
41379"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
41380"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
41381"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
41382"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
41383"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
41384"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
41385"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
41386"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
41387"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
41388"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
41389"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
41390"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
41391"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
41392"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
41393"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
41394"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
41395"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
41396"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
41397"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
41398"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
41399"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
41400"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
41401"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
41402"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
41403"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
41404"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
41405"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
41406"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
41407"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
41408"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
41409"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
41410"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
41411"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
41412"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
41413"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
41414"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
41415"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
41416"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
41417"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
41418"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
41419"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
41420"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
41421"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
41422"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
41423"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
41424"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
41425"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
41426"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
41427"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
41428"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
41429"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
41430"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
41431"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
41432"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
41433"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
41434"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
41435"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
41436"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
41437"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
41438"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
41439"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
41440"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
41441"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
41442"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
41443"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
41444"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
41445"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
41446"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
41447"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
41448"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
41449"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
41450"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
41451"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
41452"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
41453"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
41454"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
41455"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
41456"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
41457"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
41458"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
41459"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
41460"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
41461"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
41462"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
41463"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
41464"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
41465"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
41466"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
41467"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
41468"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
41469"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
41470"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
41471"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
41472"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
41473"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
41474"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
41475"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
41476"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
41477"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
41478"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
41479"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
41480"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
41481"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
41482"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
41483"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
41484"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
41485"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
41486"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
41487"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
41488"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
41489"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
41490"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
41491"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
41492"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
41493"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
41494"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
41495"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
41496"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 41497</script>
ab78acc6 41498 <script>/*
3af2954a
IC
41499 * Copyright (c) 2013 Pavol Rusnak
41500 *
41501 * Permission is hereby granted, free of charge, to any person obtaining a copy of
41502 * this software and associated documentation files (the "Software"), to deal in
41503 * the Software without restriction, including without limitation the rights to
41504 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
41505 * of the Software, and to permit persons to whom the Software is furnished to do
41506 * so, subject to the following conditions:
41507 *
41508 * The above copyright notice and this permission notice shall be included in all
41509 * copies or substantial portions of the Software.
41510 *
41511 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41512 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41513 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
41514 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
41515 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
41516 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41517 */
41518
41519/*
41520 * Javascript port from python by Ian Coleman
41521 *
80c4dd2a
IC
41522 * Requires code from sjcl
41523 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
41524 */
41525
41526var Mnemonic = function(language) {
41527
41528 var PBKDF2_ROUNDS = 2048;
41529 var RADIX = 2048;
41530
41531 var self = this;
41532 var wordlist = [];
41533
80c4dd2a
IC
41534 var hmacSHA512 = function(key) {
41535 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
41536 this.encrypt = function() {
41537 return hasher.encrypt.apply(hasher, arguments);
41538 };
41539 };
41540
3af2954a
IC
41541 function init() {
41542 wordlist = WORDLISTS[language];
41543 if (wordlist.length != RADIX) {
41544 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
41545 throw err;
41546 }
41547 }
41548
41549 self.generate = function(strength) {
41550 strength = strength || 128;
41551 var r = strength % 32;
41552 if (r > 0) {
41553 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
41554 }
41555 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
41556 if (!hasStrongCrypto) {
41557 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
41558 }
41559 var buffer = new Uint8Array(strength / 8);
41560 var data = crypto.getRandomValues(buffer);
41561 return self.toMnemonic(data);
41562 }
41563
80c4dd2a
IC
41564 self.toMnemonic = function(byteArray) {
41565 if (byteArray.length % 4 > 0) {
41566 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
41567 }
41568
41569 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
41570 var data = byteArrayToWordArray(byteArray);
41571 var hash = sjcl.hash.sha256.hash(data);
41572 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
41573
41574 // b is a binary string, eg '00111010101100...'
41575 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
41576 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
41577 //
41578 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
41579 // c = bin(int(h, 16))[2:].zfill(256)
41580 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
41581 var a = byteArrayToBinaryString(byteArray);
41582 var c = zfill(hexStringToBinaryString(h), 256);
41583 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
41584 // b = line1 + line2
41585 var b = a + d;
41586
41587 var result = [];
41588 var blen = b.length / 11;
41589 for (var i=0; i<blen; i++) {
41590 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
41591 result.push(wordlist[idx]);
41592 }
0515eeec 41593 return self.joinWords(result);
3af2954a
IC
41594 }
41595
41596 self.check = function(mnemonic) {
0515eeec 41597 var mnemonic = self.splitWords(mnemonic);
18abe53b 41598 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
41599 return false
41600 }
41601 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
41602 var idx = [];
41603 for (var i=0; i<mnemonic.length; i++) {
41604 var word = mnemonic[i];
41605 var wordIndex = wordlist.indexOf(word);
41606 if (wordIndex == -1) {
41607 return false;
41608 }
41609 var binaryIndex = zfill(wordIndex.toString(2), 11);
41610 idx.push(binaryIndex);
41611 }
41612 var b = idx.join('');
41613 var l = b.length;
41614 //d = b[:l / 33 * 32]
41615 //h = b[-l / 33:]
41616 var d = b.substring(0, l / 33 * 32);
41617 var h = b.substring(l - l / 33, l);
41618 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 41619 var nd = binaryStringToWordArray(d);
3af2954a 41620 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
41621 var ndHash = sjcl.hash.sha256.hash(nd);
41622 var ndHex = sjcl.codec.hex.fromBits(ndHash);
41623 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
41624 var nh = ndBstr.substring(0,l/33);
41625 return h == nh;
41626 }
41627
41628 self.toSeed = function(mnemonic, passphrase) {
41629 passphrase = passphrase || '';
599fb39e
IC
41630 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
41631 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
41632 passphrase = self.normalizeString(passphrase)
41633 passphrase = "mnemonic" + passphrase;
599fb39e 41634 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
41635 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
41636 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
41637 var hashHex = sjcl.codec.hex.fromBits(result);
41638 return hashHex;
3af2954a
IC
41639 }
41640
0515eeec
IC
41641 self.splitWords = function(mnemonic) {
41642 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
41643 }
41644
41645 self.joinWords = function(words) {
41646 // Set space correctly depending on the language
41647 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
41648 var space = " ";
41649 if (language == "japanese") {
41650 space = "\u3000"; // ideographic space
41651 }
41652 return words.join(space);
41653 }
41654
3af2954a
IC
41655 self.normalizeString = function(str) {
41656 if (typeof str.normalize == "function") {
41657 return str.normalize("NFKD");
41658 }
41659 else {
41660 // TODO decide how to handle this in the future.
41661 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
41662 return str;
41663 }
41664 }
41665
80c4dd2a
IC
41666 function byteArrayToWordArray(data) {
41667 var a = [];
41668 for (var i=0; i<data.length/4; i++) {
41669 v = 0;
41670 v += data[i*4 + 0] << 8 * 3;
41671 v += data[i*4 + 1] << 8 * 2;
41672 v += data[i*4 + 2] << 8 * 1;
41673 v += data[i*4 + 3] << 8 * 0;
41674 a.push(v);
41675 }
41676 return a;
41677 }
41678
3af2954a
IC
41679 function byteArrayToBinaryString(data) {
41680 var bin = "";
41681 for (var i=0; i<data.length; i++) {
41682 bin += zfill(data[i].toString(2), 8);
41683 }
41684 return bin;
41685 }
41686
80c4dd2a
IC
41687 function hexStringToBinaryString(hexString) {
41688 binaryString = "";
41689 for (var i=0; i<hexString.length; i++) {
41690 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
41691 }
41692 return binaryString;
41693 }
41694
41695 function binaryStringToWordArray(binary) {
41696 var aLen = binary.length / 32;
41697 var a = [];
41698 for (var i=0; i<aLen; i++) {
41699 var valueStr = binary.substring(0,32);
3af2954a 41700 var value = parseInt(valueStr, 2);
80c4dd2a
IC
41701 a.push(value);
41702 binary = binary.slice(32);
3af2954a 41703 }
80c4dd2a 41704 return a;
3af2954a
IC
41705 }
41706
41707 // Pad a numeric string on the left with zero digits until the given width
41708 // is reached.
41709 // Note this differs to the python implementation because it does not
41710 // handle numbers starting with a sign.
41711 function zfill(source, length) {
41712 source = source.toString();
41713 while (source.length < length) {
41714 source = '0' + source;
41715 }
41716 return source;
41717 }
41718
41719 init();
ebd8d4e8 41720
3af2954a 41721}
dc55c6b0 41722</script>
95f04905
IC
41723 <script>/*
41724 JavaScript BigInteger library version 0.9.1
41725 http://silentmatt.com/biginteger/
18abe53b 41726
95f04905
IC
41727 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
41728 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
41729 Licensed under the MIT license.
c6624d51 41730
95f04905
IC
41731 Support for arbitrary internal representation base was added by
41732 Vitaly Magerya.
41733*/
18abe53b 41734
95f04905
IC
41735/*
41736 File: biginteger.js
18abe53b 41737
95f04905 41738 Exports:
18abe53b 41739
95f04905
IC
41740 <BigInteger>
41741*/
41742(function(exports) {
41743"use strict";
41744/*
41745 Class: BigInteger
41746 An arbitrarily-large integer.
18abe53b 41747
95f04905
IC
41748 <BigInteger> objects should be considered immutable. None of the "built-in"
41749 methods modify *this* or their arguments. All properties should be
41750 considered private.
18abe53b 41751
95f04905
IC
41752 All the methods of <BigInteger> instances can be called "statically". The
41753 static versions are convenient if you don't already have a <BigInteger>
41754 object.
18abe53b 41755
95f04905 41756 As an example, these calls are equivalent.
18abe53b 41757
95f04905
IC
41758 > BigInteger(4).multiply(5); // returns BigInteger(20);
41759 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 41760
95f04905
IC
41761 > var a = 42;
41762 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
41763*/
c6624d51 41764
95f04905 41765var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
41766
41767/*
41768 Constructor: BigInteger()
41769 Convert a value to a <BigInteger>.
41770
41771 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
41772 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
41773 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
41774 without a radix argument.
41775
41776 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
41777 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
41778 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
41779 > var n3 = BigInteger(n2); // Return n2, unchanged
41780
41781 The constructor form only takes an array and a sign. *n* must be an
41782 array of numbers in little-endian order, where each digit is between 0
41783 and BigInteger.base. The second parameter sets the sign: -1 for
41784 negative, +1 for positive, or 0 for zero. The array is *not copied and
41785 may be modified*. If the array contains only zeros, the sign parameter
41786 is ignored and is forced to zero.
41787
41788 > new BigInteger([5], -1): create a new BigInteger with value -5
41789
41790 Parameters:
41791
41792 n - Value to convert to a <BigInteger>.
41793
41794 Returns:
41795
41796 A <BigInteger> value.
41797
41798 See Also:
41799
41800 <parse>, <BigInteger>
41801*/
41802function BigInteger(n, s, token) {
41803 if (token !== CONSTRUCT) {
41804 if (n instanceof BigInteger) {
41805 return n;
41806 }
41807 else if (typeof n === "undefined") {
41808 return ZERO;
41809 }
41810 return BigInteger.parse(n);
41811 }
41812
41813 n = n || []; // Provide the nullary constructor for subclasses.
41814 while (n.length && !n[n.length - 1]) {
41815 --n.length;
41816 }
41817 this._d = n;
41818 this._s = n.length ? (s || 1) : 0;
41819}
41820
41821BigInteger._construct = function(n, s) {
41822 return new BigInteger(n, s, CONSTRUCT);
41823};
41824
41825// Base-10 speedup hacks in parse, toString, exp10 and log functions
41826// require base to be a power of 10. 10^7 is the largest such power
41827// that won't cause a precision loss when digits are multiplied.
41828var BigInteger_base = 10000000;
41829var BigInteger_base_log10 = 7;
41830
41831BigInteger.base = BigInteger_base;
41832BigInteger.base_log10 = BigInteger_base_log10;
41833
41834var ZERO = new BigInteger([], 0, CONSTRUCT);
41835// Constant: ZERO
41836// <BigInteger> 0.
41837BigInteger.ZERO = ZERO;
41838
41839var ONE = new BigInteger([1], 1, CONSTRUCT);
41840// Constant: ONE
41841// <BigInteger> 1.
41842BigInteger.ONE = ONE;
41843
41844var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
41845// Constant: M_ONE
41846// <BigInteger> -1.
41847BigInteger.M_ONE = M_ONE;
41848
41849// Constant: _0
41850// Shortcut for <ZERO>.
41851BigInteger._0 = ZERO;
41852
41853// Constant: _1
41854// Shortcut for <ONE>.
41855BigInteger._1 = ONE;
41856
41857/*
41858 Constant: small
41859 Array of <BigIntegers> from 0 to 36.
41860
41861 These are used internally for parsing, but useful when you need a "small"
41862 <BigInteger>.
41863
41864 See Also:
41865
41866 <ZERO>, <ONE>, <_0>, <_1>
41867*/
41868BigInteger.small = [
41869 ZERO,
41870 ONE,
41871 /* Assuming BigInteger_base > 36 */
41872 new BigInteger( [2], 1, CONSTRUCT),
41873 new BigInteger( [3], 1, CONSTRUCT),
41874 new BigInteger( [4], 1, CONSTRUCT),
41875 new BigInteger( [5], 1, CONSTRUCT),
41876 new BigInteger( [6], 1, CONSTRUCT),
41877 new BigInteger( [7], 1, CONSTRUCT),
41878 new BigInteger( [8], 1, CONSTRUCT),
41879 new BigInteger( [9], 1, CONSTRUCT),
41880 new BigInteger([10], 1, CONSTRUCT),
41881 new BigInteger([11], 1, CONSTRUCT),
41882 new BigInteger([12], 1, CONSTRUCT),
41883 new BigInteger([13], 1, CONSTRUCT),
41884 new BigInteger([14], 1, CONSTRUCT),
41885 new BigInteger([15], 1, CONSTRUCT),
41886 new BigInteger([16], 1, CONSTRUCT),
41887 new BigInteger([17], 1, CONSTRUCT),
41888 new BigInteger([18], 1, CONSTRUCT),
41889 new BigInteger([19], 1, CONSTRUCT),
41890 new BigInteger([20], 1, CONSTRUCT),
41891 new BigInteger([21], 1, CONSTRUCT),
41892 new BigInteger([22], 1, CONSTRUCT),
41893 new BigInteger([23], 1, CONSTRUCT),
41894 new BigInteger([24], 1, CONSTRUCT),
41895 new BigInteger([25], 1, CONSTRUCT),
41896 new BigInteger([26], 1, CONSTRUCT),
41897 new BigInteger([27], 1, CONSTRUCT),
41898 new BigInteger([28], 1, CONSTRUCT),
41899 new BigInteger([29], 1, CONSTRUCT),
41900 new BigInteger([30], 1, CONSTRUCT),
41901 new BigInteger([31], 1, CONSTRUCT),
41902 new BigInteger([32], 1, CONSTRUCT),
41903 new BigInteger([33], 1, CONSTRUCT),
41904 new BigInteger([34], 1, CONSTRUCT),
41905 new BigInteger([35], 1, CONSTRUCT),
41906 new BigInteger([36], 1, CONSTRUCT)
41907];
41908
41909// Used for parsing/radix conversion
41910BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
41911
41912/*
41913 Method: toString
41914 Convert a <BigInteger> to a string.
41915
41916 When *base* is greater than 10, letters are upper case.
41917
41918 Parameters:
41919
41920 base - Optional base to represent the number in (default is base 10).
41921 Must be between 2 and 36 inclusive, or an Error will be thrown.
41922
41923 Returns:
41924
41925 The string representation of the <BigInteger>.
41926*/
41927BigInteger.prototype.toString = function(base) {
41928 base = +base || 10;
41929 if (base < 2 || base > 36) {
41930 throw new Error("illegal radix " + base + ".");
41931 }
41932 if (this._s === 0) {
41933 return "0";
41934 }
41935 if (base === 10) {
41936 var str = this._s < 0 ? "-" : "";
41937 str += this._d[this._d.length - 1].toString();
41938 for (var i = this._d.length - 2; i >= 0; i--) {
41939 var group = this._d[i].toString();
41940 while (group.length < BigInteger_base_log10) group = '0' + group;
41941 str += group;
41942 }
41943 return str;
41944 }
41945 else {
41946 var numerals = BigInteger.digits;
41947 base = BigInteger.small[base];
41948 var sign = this._s;
41949
41950 var n = this.abs();
41951 var digits = [];
41952 var digit;
41953
41954 while (n._s !== 0) {
41955 var divmod = n.divRem(base);
41956 n = divmod[0];
41957 digit = divmod[1];
41958 // TODO: This could be changed to unshift instead of reversing at the end.
41959 // Benchmark both to compare speeds.
41960 digits.push(numerals[digit.valueOf()]);
41961 }
41962 return (sign < 0 ? "-" : "") + digits.reverse().join("");
41963 }
41964};
41965
41966// Verify strings for parsing
41967BigInteger.radixRegex = [
41968 /^$/,
41969 /^$/,
41970 /^[01]*$/,
41971 /^[012]*$/,
41972 /^[0-3]*$/,
41973 /^[0-4]*$/,
41974 /^[0-5]*$/,
41975 /^[0-6]*$/,
41976 /^[0-7]*$/,
41977 /^[0-8]*$/,
41978 /^[0-9]*$/,
41979 /^[0-9aA]*$/,
41980 /^[0-9abAB]*$/,
41981 /^[0-9abcABC]*$/,
41982 /^[0-9a-dA-D]*$/,
41983 /^[0-9a-eA-E]*$/,
41984 /^[0-9a-fA-F]*$/,
41985 /^[0-9a-gA-G]*$/,
41986 /^[0-9a-hA-H]*$/,
41987 /^[0-9a-iA-I]*$/,
41988 /^[0-9a-jA-J]*$/,
41989 /^[0-9a-kA-K]*$/,
41990 /^[0-9a-lA-L]*$/,
41991 /^[0-9a-mA-M]*$/,
41992 /^[0-9a-nA-N]*$/,
41993 /^[0-9a-oA-O]*$/,
41994 /^[0-9a-pA-P]*$/,
41995 /^[0-9a-qA-Q]*$/,
41996 /^[0-9a-rA-R]*$/,
41997 /^[0-9a-sA-S]*$/,
41998 /^[0-9a-tA-T]*$/,
41999 /^[0-9a-uA-U]*$/,
42000 /^[0-9a-vA-V]*$/,
42001 /^[0-9a-wA-W]*$/,
42002 /^[0-9a-xA-X]*$/,
42003 /^[0-9a-yA-Y]*$/,
42004 /^[0-9a-zA-Z]*$/
42005];
42006
42007/*
42008 Function: parse
42009 Parse a string into a <BigInteger>.
42010
42011 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
42012 *base* is not provided, it will be guessed based on the leading characters
42013 of *s* as follows:
42014
42015 - "0x" or "0X": *base* = 16
42016 - "0c" or "0C": *base* = 8
42017 - "0b" or "0B": *base* = 2
42018 - else: *base* = 10
42019
42020 If no base is provided, or *base* is 10, the number can be in exponential
42021 form. For example, these are all valid:
42022
42023 > BigInteger.parse("1e9"); // Same as "1000000000"
42024 > BigInteger.parse("1.234*10^3"); // Same as 1234
42025 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
42026
42027 If any characters fall outside the range defined by the radix, an exception
42028 will be thrown.
42029
42030 Parameters:
42031
42032 s - The string to parse.
42033 base - Optional radix (default is to guess based on *s*).
42034
42035 Returns:
42036
42037 a <BigInteger> instance.
42038*/
42039BigInteger.parse = function(s, base) {
42040 // Expands a number in exponential form to decimal form.
42041 // expandExponential("-13.441*10^5") === "1344100";
42042 // expandExponential("1.12300e-1") === "0.112300";
42043 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
42044 function expandExponential(str) {
42045 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
42046
42047 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
42048 c = +c;
42049 var l = c < 0;
42050 var i = n.length + c;
42051 x = (l ? n : f).length;
42052 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
42053 var z = (new Array(c + 1)).join("0");
42054 var r = n + f;
42055 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
42056 });
42057 }
42058
42059 s = s.toString();
42060 if (typeof base === "undefined" || +base === 10) {
42061 s = expandExponential(s);
42062 }
42063
42064 var prefixRE;
42065 if (typeof base === "undefined") {
42066 prefixRE = '0[xcb]';
42067 }
42068 else if (base == 16) {
42069 prefixRE = '0x';
42070 }
42071 else if (base == 8) {
42072 prefixRE = '0c';
42073 }
42074 else if (base == 2) {
42075 prefixRE = '0b';
42076 }
42077 else {
42078 prefixRE = '';
42079 }
42080 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
42081 if (parts) {
42082 var sign = parts[1] || "+";
42083 var baseSection = parts[2] || "";
42084 var digits = parts[3] || "";
42085
42086 if (typeof base === "undefined") {
42087 // Guess base
42088 if (baseSection === "0x" || baseSection === "0X") { // Hex
42089 base = 16;
42090 }
42091 else if (baseSection === "0c" || baseSection === "0C") { // Octal
42092 base = 8;
42093 }
42094 else if (baseSection === "0b" || baseSection === "0B") { // Binary
42095 base = 2;
42096 }
42097 else {
42098 base = 10;
42099 }
42100 }
42101 else if (base < 2 || base > 36) {
42102 throw new Error("Illegal radix " + base + ".");
42103 }
42104
42105 base = +base;
42106
42107 // Check for digits outside the range
42108 if (!(BigInteger.radixRegex[base].test(digits))) {
42109 throw new Error("Bad digit for radix " + base);
42110 }
42111
42112 // Strip leading zeros, and convert to array
42113 digits = digits.replace(/^0+/, "").split("");
42114 if (digits.length === 0) {
42115 return ZERO;
42116 }
42117
42118 // Get the sign (we know it's not zero)
42119 sign = (sign === "-") ? -1 : 1;
42120
42121 // Optimize 10
42122 if (base == 10) {
42123 var d = [];
42124 while (digits.length >= BigInteger_base_log10) {
42125 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
42126 }
42127 d.push(parseInt(digits.join(''), 10));
42128 return new BigInteger(d, sign, CONSTRUCT);
42129 }
42130
42131 // Do the conversion
42132 var d = ZERO;
42133 base = BigInteger.small[base];
42134 var small = BigInteger.small;
42135 for (var i = 0; i < digits.length; i++) {
42136 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
42137 }
42138 return new BigInteger(d._d, sign, CONSTRUCT);
42139 }
42140 else {
42141 throw new Error("Invalid BigInteger format: " + s);
42142 }
42143};
42144
42145/*
42146 Function: add
42147 Add two <BigIntegers>.
42148
42149 Parameters:
42150
42151 n - The number to add to *this*. Will be converted to a <BigInteger>.
42152
42153 Returns:
42154
42155 The numbers added together.
42156
42157 See Also:
42158
42159 <subtract>, <multiply>, <quotient>, <next>
42160*/
42161BigInteger.prototype.add = function(n) {
42162 if (this._s === 0) {
42163 return BigInteger(n);
42164 }
42165
42166 n = BigInteger(n);
42167 if (n._s === 0) {
42168 return this;
42169 }
42170 if (this._s !== n._s) {
42171 n = n.negate();
42172 return this.subtract(n);
42173 }
42174
42175 var a = this._d;
42176 var b = n._d;
42177 var al = a.length;
42178 var bl = b.length;
42179 var sum = new Array(Math.max(al, bl) + 1);
42180 var size = Math.min(al, bl);
42181 var carry = 0;
42182 var digit;
42183
42184 for (var i = 0; i < size; i++) {
42185 digit = a[i] + b[i] + carry;
42186 sum[i] = digit % BigInteger_base;
42187 carry = (digit / BigInteger_base) | 0;
42188 }
42189 if (bl > al) {
42190 a = b;
42191 al = bl;
42192 }
42193 for (i = size; carry && i < al; i++) {
42194 digit = a[i] + carry;
42195 sum[i] = digit % BigInteger_base;
42196 carry = (digit / BigInteger_base) | 0;
42197 }
42198 if (carry) {
42199 sum[i] = carry;
42200 }
42201
42202 for ( ; i < al; i++) {
42203 sum[i] = a[i];
42204 }
42205
42206 return new BigInteger(sum, this._s, CONSTRUCT);
42207};
42208
42209/*
42210 Function: negate
42211 Get the additive inverse of a <BigInteger>.
42212
42213 Returns:
42214
42215 A <BigInteger> with the same magnatude, but with the opposite sign.
42216
42217 See Also:
42218
42219 <abs>
42220*/
42221BigInteger.prototype.negate = function() {
42222 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
42223};
42224
42225/*
42226 Function: abs
42227 Get the absolute value of a <BigInteger>.
42228
42229 Returns:
42230
42231 A <BigInteger> with the same magnatude, but always positive (or zero).
42232
42233 See Also:
42234
42235 <negate>
42236*/
42237BigInteger.prototype.abs = function() {
42238 return (this._s < 0) ? this.negate() : this;
42239};
42240
42241/*
42242 Function: subtract
42243 Subtract two <BigIntegers>.
42244
42245 Parameters:
42246
42247 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
42248
42249 Returns:
42250
42251 The *n* subtracted from *this*.
42252
42253 See Also:
42254
42255 <add>, <multiply>, <quotient>, <prev>
42256*/
42257BigInteger.prototype.subtract = function(n) {
42258 if (this._s === 0) {
42259 return BigInteger(n).negate();
42260 }
42261
42262 n = BigInteger(n);
42263 if (n._s === 0) {
42264 return this;
42265 }
42266 if (this._s !== n._s) {
42267 n = n.negate();
42268 return this.add(n);
42269 }
42270
42271 var m = this;
42272 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
42273 if (this._s < 0) {
42274 m = new BigInteger(n._d, 1, CONSTRUCT);
42275 n = new BigInteger(this._d, 1, CONSTRUCT);
42276 }
42277
42278 // Both are positive => a - b
42279 var sign = m.compareAbs(n);
42280 if (sign === 0) {
42281 return ZERO;
42282 }
42283 else if (sign < 0) {
42284 // swap m and n
42285 var t = n;
42286 n = m;
42287 m = t;
42288 }
42289
42290 // a > b
42291 var a = m._d;
42292 var b = n._d;
42293 var al = a.length;
42294 var bl = b.length;
42295 var diff = new Array(al); // al >= bl since a > b
42296 var borrow = 0;
42297 var i;
42298 var digit;
42299
42300 for (i = 0; i < bl; i++) {
42301 digit = a[i] - borrow - b[i];
42302 if (digit < 0) {
42303 digit += BigInteger_base;
42304 borrow = 1;
42305 }
42306 else {
42307 borrow = 0;
42308 }
42309 diff[i] = digit;
42310 }
42311 for (i = bl; i < al; i++) {
42312 digit = a[i] - borrow;
42313 if (digit < 0) {
42314 digit += BigInteger_base;
42315 }
42316 else {
42317 diff[i++] = digit;
42318 break;
42319 }
42320 diff[i] = digit;
42321 }
42322 for ( ; i < al; i++) {
42323 diff[i] = a[i];
42324 }
42325
42326 return new BigInteger(diff, sign, CONSTRUCT);
42327};
42328
42329(function() {
42330 function addOne(n, sign) {
42331 var a = n._d;
42332 var sum = a.slice();
42333 var carry = true;
42334 var i = 0;
42335
42336 while (true) {
42337 var digit = (a[i] || 0) + 1;
42338 sum[i] = digit % BigInteger_base;
42339 if (digit <= BigInteger_base - 1) {
42340 break;
42341 }
42342 ++i;
42343 }
42344
42345 return new BigInteger(sum, sign, CONSTRUCT);
42346 }
42347
42348 function subtractOne(n, sign) {
42349 var a = n._d;
42350 var sum = a.slice();
42351 var borrow = true;
42352 var i = 0;
42353
42354 while (true) {
42355 var digit = (a[i] || 0) - 1;
42356 if (digit < 0) {
42357 sum[i] = digit + BigInteger_base;
42358 }
42359 else {
42360 sum[i] = digit;
42361 break;
42362 }
42363 ++i;
42364 }
42365
42366 return new BigInteger(sum, sign, CONSTRUCT);
42367 }
42368
42369 /*
42370 Function: next
42371 Get the next <BigInteger> (add one).
42372
42373 Returns:
42374
42375 *this* + 1.
42376
42377 See Also:
42378
42379 <add>, <prev>
42380 */
42381 BigInteger.prototype.next = function() {
42382 switch (this._s) {
42383 case 0:
42384 return ONE;
42385 case -1:
42386 return subtractOne(this, -1);
42387 // case 1:
42388 default:
42389 return addOne(this, 1);
42390 }
42391 };
42392
42393 /*
42394 Function: prev
42395 Get the previous <BigInteger> (subtract one).
42396
42397 Returns:
42398
42399 *this* - 1.
42400
42401 See Also:
42402
42403 <next>, <subtract>
42404 */
42405 BigInteger.prototype.prev = function() {
42406 switch (this._s) {
42407 case 0:
42408 return M_ONE;
42409 case -1:
42410 return addOne(this, -1);
42411 // case 1:
42412 default:
42413 return subtractOne(this, 1);
42414 }
42415 };
42416})();
42417
42418/*
42419 Function: compareAbs
42420 Compare the absolute value of two <BigIntegers>.
42421
42422 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
42423
42424 Parameters:
42425
42426 n - The number to compare to *this*. Will be converted to a <BigInteger>.
42427
42428 Returns:
42429
42430 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
42431
42432 See Also:
42433
42434 <compare>, <abs>
42435*/
42436BigInteger.prototype.compareAbs = function(n) {
42437 if (this === n) {
42438 return 0;
42439 }
42440
42441 if (!(n instanceof BigInteger)) {
42442 if (!isFinite(n)) {
42443 return(isNaN(n) ? n : -1);
42444 }
42445 n = BigInteger(n);
42446 }
42447
42448 if (this._s === 0) {
42449 return (n._s !== 0) ? -1 : 0;
42450 }
42451 if (n._s === 0) {
42452 return 1;
42453 }
42454
42455 var l = this._d.length;
42456 var nl = n._d.length;
42457 if (l < nl) {
42458 return -1;
42459 }
42460 else if (l > nl) {
42461 return 1;
42462 }
42463
42464 var a = this._d;
42465 var b = n._d;
42466 for (var i = l-1; i >= 0; i--) {
42467 if (a[i] !== b[i]) {
42468 return a[i] < b[i] ? -1 : 1;
42469 }
42470 }
42471
42472 return 0;
42473};
42474
42475/*
42476 Function: compare
42477 Compare two <BigIntegers>.
42478
42479 Parameters:
42480
42481 n - The number to compare to *this*. Will be converted to a <BigInteger>.
42482
42483 Returns:
42484
42485 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
42486
42487 See Also:
42488
42489 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
42490*/
42491BigInteger.prototype.compare = function(n) {
42492 if (this === n) {
42493 return 0;
42494 }
42495
42496 n = BigInteger(n);
42497
42498 if (this._s === 0) {
42499 return -n._s;
42500 }
42501
42502 if (this._s === n._s) { // both positive or both negative
42503 var cmp = this.compareAbs(n);
42504 return cmp * this._s;
42505 }
42506 else {
42507 return this._s;
42508 }
42509};
42510
42511/*
42512 Function: isUnit
42513 Return true iff *this* is either 1 or -1.
42514
42515 Returns:
42516
42517 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
42518
42519 See Also:
42520
42521 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
42522 <BigInteger.ONE>, <BigInteger.M_ONE>
42523*/
42524BigInteger.prototype.isUnit = function() {
42525 return this === ONE ||
42526 this === M_ONE ||
42527 (this._d.length === 1 && this._d[0] === 1);
42528};
42529
42530/*
42531 Function: multiply
42532 Multiply two <BigIntegers>.
42533
42534 Parameters:
42535
42536 n - The number to multiply *this* by. Will be converted to a
42537 <BigInteger>.
42538
42539 Returns:
42540
42541 The numbers multiplied together.
42542
42543 See Also:
42544
42545 <add>, <subtract>, <quotient>, <square>
42546*/
42547BigInteger.prototype.multiply = function(n) {
42548 // TODO: Consider adding Karatsuba multiplication for large numbers
42549 if (this._s === 0) {
42550 return ZERO;
42551 }
42552
42553 n = BigInteger(n);
42554 if (n._s === 0) {
42555 return ZERO;
42556 }
42557 if (this.isUnit()) {
42558 if (this._s < 0) {
42559 return n.negate();
42560 }
42561 return n;
42562 }
42563 if (n.isUnit()) {
42564 if (n._s < 0) {
42565 return this.negate();
42566 }
42567 return this;
42568 }
42569 if (this === n) {
42570 return this.square();
42571 }
42572
42573 var r = (this._d.length >= n._d.length);
42574 var a = (r ? this : n)._d; // a will be longer than b
42575 var b = (r ? n : this)._d;
42576 var al = a.length;
42577 var bl = b.length;
42578
42579 var pl = al + bl;
42580 var partial = new Array(pl);
42581 var i;
42582 for (i = 0; i < pl; i++) {
42583 partial[i] = 0;
42584 }
42585
42586 for (i = 0; i < bl; i++) {
42587 var carry = 0;
42588 var bi = b[i];
42589 var jlimit = al + i;
42590 var digit;
42591 for (var j = i; j < jlimit; j++) {
42592 digit = partial[j] + bi * a[j - i] + carry;
42593 carry = (digit / BigInteger_base) | 0;
42594 partial[j] = (digit % BigInteger_base) | 0;
42595 }
42596 if (carry) {
42597 digit = partial[j] + carry;
42598 carry = (digit / BigInteger_base) | 0;
42599 partial[j] = digit % BigInteger_base;
42600 }
42601 }
42602 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
42603};
42604
42605// Multiply a BigInteger by a single-digit native number
42606// Assumes that this and n are >= 0
42607// This is not really intended to be used outside the library itself
42608BigInteger.prototype.multiplySingleDigit = function(n) {
42609 if (n === 0 || this._s === 0) {
42610 return ZERO;
42611 }
42612 if (n === 1) {
42613 return this;
42614 }
42615
42616 var digit;
42617 if (this._d.length === 1) {
42618 digit = this._d[0] * n;
42619 if (digit >= BigInteger_base) {
42620 return new BigInteger([(digit % BigInteger_base)|0,
42621 (digit / BigInteger_base)|0], 1, CONSTRUCT);
42622 }
42623 return new BigInteger([digit], 1, CONSTRUCT);
42624 }
42625
42626 if (n === 2) {
42627 return this.add(this);
42628 }
42629 if (this.isUnit()) {
42630 return new BigInteger([n], 1, CONSTRUCT);
42631 }
42632
42633 var a = this._d;
42634 var al = a.length;
42635
42636 var pl = al + 1;
42637 var partial = new Array(pl);
42638 for (var i = 0; i < pl; i++) {
42639 partial[i] = 0;
42640 }
42641
42642 var carry = 0;
42643 for (var j = 0; j < al; j++) {
42644 digit = n * a[j] + carry;
42645 carry = (digit / BigInteger_base) | 0;
42646 partial[j] = (digit % BigInteger_base) | 0;
42647 }
42648 if (carry) {
42649 partial[j] = carry;
42650 }
42651
42652 return new BigInteger(partial, 1, CONSTRUCT);
42653};
42654
42655/*
42656 Function: square
42657 Multiply a <BigInteger> by itself.
42658
42659 This is slightly faster than regular multiplication, since it removes the
42660 duplicated multiplcations.
42661
42662 Returns:
42663
42664 > this.multiply(this)
42665
42666 See Also:
42667 <multiply>
42668*/
42669BigInteger.prototype.square = function() {
42670 // Normally, squaring a 10-digit number would take 100 multiplications.
42671 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
42672 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
42673 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
42674
42675 if (this._s === 0) {
42676 return ZERO;
42677 }
42678 if (this.isUnit()) {
42679 return ONE;
42680 }
42681
42682 var digits = this._d;
42683 var length = digits.length;
42684 var imult1 = new Array(length + length + 1);
42685 var product, carry, k;
42686 var i;
42687
42688 // Calculate diagonal
42689 for (i = 0; i < length; i++) {
42690 k = i * 2;
42691 product = digits[i] * digits[i];
42692 carry = (product / BigInteger_base) | 0;
42693 imult1[k] = product % BigInteger_base;
42694 imult1[k + 1] = carry;
42695 }
42696
42697 // Calculate repeating part
42698 for (i = 0; i < length; i++) {
42699 carry = 0;
42700 k = i * 2 + 1;
42701 for (var j = i + 1; j < length; j++, k++) {
42702 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
42703 carry = (product / BigInteger_base) | 0;
42704 imult1[k] = product % BigInteger_base;
42705 }
42706 k = length + i;
42707 var digit = carry + imult1[k];
42708 carry = (digit / BigInteger_base) | 0;
42709 imult1[k] = digit % BigInteger_base;
42710 imult1[k + 1] += carry;
42711 }
42712
42713 return new BigInteger(imult1, 1, CONSTRUCT);
42714};
42715
42716/*
42717 Function: quotient
42718 Divide two <BigIntegers> and truncate towards zero.
42719
42720 <quotient> throws an exception if *n* is zero.
42721
42722 Parameters:
42723
42724 n - The number to divide *this* by. Will be converted to a <BigInteger>.
42725
42726 Returns:
42727
42728 The *this* / *n*, truncated to an integer.
42729
42730 See Also:
42731
42732 <add>, <subtract>, <multiply>, <divRem>, <remainder>
42733*/
42734BigInteger.prototype.quotient = function(n) {
42735 return this.divRem(n)[0];
42736};
42737
42738/*
42739 Function: divide
42740 Deprecated synonym for <quotient>.
42741*/
42742BigInteger.prototype.divide = BigInteger.prototype.quotient;
42743
42744/*
42745 Function: remainder
42746 Calculate the remainder of two <BigIntegers>.
42747
42748 <remainder> throws an exception if *n* is zero.
42749
42750 Parameters:
42751
42752 n - The remainder after *this* is divided *this* by *n*. Will be
42753 converted to a <BigInteger>.
42754
42755 Returns:
42756
42757 *this* % *n*.
42758
42759 See Also:
42760
42761 <divRem>, <quotient>
42762*/
42763BigInteger.prototype.remainder = function(n) {
42764 return this.divRem(n)[1];
42765};
42766
42767/*
42768 Function: divRem
42769 Calculate the integer quotient and remainder of two <BigIntegers>.
42770
42771 <divRem> throws an exception if *n* is zero.
42772
42773 Parameters:
42774
42775 n - The number to divide *this* by. Will be converted to a <BigInteger>.
42776
42777 Returns:
42778
42779 A two-element array containing the quotient and the remainder.
42780
42781 > a.divRem(b)
42782
42783 is exactly equivalent to
42784
42785 > [a.quotient(b), a.remainder(b)]
42786
42787 except it is faster, because they are calculated at the same time.
42788
42789 See Also:
42790
42791 <quotient>, <remainder>
42792*/
42793BigInteger.prototype.divRem = function(n) {
42794 n = BigInteger(n);
42795 if (n._s === 0) {
42796 throw new Error("Divide by zero");
42797 }
42798 if (this._s === 0) {
42799 return [ZERO, ZERO];
42800 }
42801 if (n._d.length === 1) {
42802 return this.divRemSmall(n._s * n._d[0]);
42803 }
42804
42805 // Test for easy cases -- |n1| <= |n2|
42806 switch (this.compareAbs(n)) {
42807 case 0: // n1 == n2
42808 return [this._s === n._s ? ONE : M_ONE, ZERO];
42809 case -1: // |n1| < |n2|
42810 return [ZERO, this];
42811 }
42812
42813 var sign = this._s * n._s;
42814 var a = n.abs();
42815 var b_digits = this._d;
42816 var b_index = b_digits.length;
42817 var digits = n._d.length;
42818 var quot = [];
42819 var guess;
42820
42821 var part = new BigInteger([], 0, CONSTRUCT);
42822
42823 while (b_index) {
42824 part._d.unshift(b_digits[--b_index]);
42825 part = new BigInteger(part._d, 1, CONSTRUCT);
42826
42827 if (part.compareAbs(n) < 0) {
42828 quot.push(0);
42829 continue;
42830 }
42831 if (part._s === 0) {
42832 guess = 0;
42833 }
42834 else {
42835 var xlen = part._d.length, ylen = a._d.length;
42836 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
42837 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
42838 if (part._d.length > a._d.length) {
42839 // The length of part._d can either match a._d length,
42840 // or exceed it by one.
42841 highx = (highx+1)*BigInteger_base;
42842 }
42843 guess = Math.ceil(highx/highy);
42844 }
42845 do {
42846 var check = a.multiplySingleDigit(guess);
42847 if (check.compareAbs(part) <= 0) {
42848 break;
42849 }
42850 guess--;
42851 } while (guess);
42852
42853 quot.push(guess);
42854 if (!guess) {
42855 continue;
42856 }
42857 var diff = part.subtract(check);
42858 part._d = diff._d.slice();
42859 }
42860
42861 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
42862 new BigInteger(part._d, this._s, CONSTRUCT)];
42863};
42864
42865// Throws an exception if n is outside of (-BigInteger.base, -1] or
42866// [1, BigInteger.base). It's not necessary to call this, since the
42867// other division functions will call it if they are able to.
42868BigInteger.prototype.divRemSmall = function(n) {
42869 var r;
42870 n = +n;
42871 if (n === 0) {
42872 throw new Error("Divide by zero");
42873 }
42874
42875 var n_s = n < 0 ? -1 : 1;
42876 var sign = this._s * n_s;
42877 n = Math.abs(n);
42878
42879 if (n < 1 || n >= BigInteger_base) {
42880 throw new Error("Argument out of range");
42881 }
42882
42883 if (this._s === 0) {
42884 return [ZERO, ZERO];
42885 }
42886
42887 if (n === 1 || n === -1) {
42888 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
42889 }
42890
42891 // 2 <= n < BigInteger_base
42892
42893 // divide a single digit by a single digit
42894 if (this._d.length === 1) {
42895 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
42896 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
42897 if (sign < 0) {
42898 q = q.negate();
42899 }
42900 if (this._s < 0) {
42901 r = r.negate();
42902 }
42903 return [q, r];
42904 }
42905
42906 var digits = this._d.slice();
42907 var quot = new Array(digits.length);
42908 var part = 0;
42909 var diff = 0;
42910 var i = 0;
42911 var guess;
42912
42913 while (digits.length) {
42914 part = part * BigInteger_base + digits[digits.length - 1];
42915 if (part < n) {
42916 quot[i++] = 0;
42917 digits.pop();
42918 diff = BigInteger_base * diff + part;
42919 continue;
42920 }
42921 if (part === 0) {
42922 guess = 0;
42923 }
42924 else {
42925 guess = (part / n) | 0;
42926 }
42927
42928 var check = n * guess;
42929 diff = part - check;
42930 quot[i++] = guess;
42931 if (!guess) {
42932 digits.pop();
42933 continue;
42934 }
42935
42936 digits.pop();
42937 part = diff;
42938 }
42939
42940 r = new BigInteger([diff], 1, CONSTRUCT);
42941 if (this._s < 0) {
42942 r = r.negate();
42943 }
42944 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
42945};
42946
42947/*
42948 Function: isEven
42949 Return true iff *this* is divisible by two.
42950
42951 Note that <BigInteger.ZERO> is even.
42952
42953 Returns:
42954
42955 true if *this* is even, false otherwise.
42956
42957 See Also:
42958
42959 <isOdd>
42960*/
42961BigInteger.prototype.isEven = function() {
42962 var digits = this._d;
42963 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
42964};
42965
42966/*
42967 Function: isOdd
42968 Return true iff *this* is not divisible by two.
42969
42970 Returns:
42971
42972 true if *this* is odd, false otherwise.
42973
42974 See Also:
42975
42976 <isEven>
42977*/
42978BigInteger.prototype.isOdd = function() {
42979 return !this.isEven();
42980};
42981
42982/*
42983 Function: sign
42984 Get the sign of a <BigInteger>.
42985
42986 Returns:
42987
42988 * -1 if *this* < 0
42989 * 0 if *this* == 0
42990 * +1 if *this* > 0
42991
42992 See Also:
42993
42994 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
42995*/
42996BigInteger.prototype.sign = function() {
42997 return this._s;
42998};
42999
43000/*
43001 Function: isPositive
43002 Return true iff *this* > 0.
43003
43004 Returns:
43005
43006 true if *this*.compare(<BigInteger.ZERO>) == 1.
43007
43008 See Also:
43009
43010 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
43011*/
43012BigInteger.prototype.isPositive = function() {
43013 return this._s > 0;
43014};
43015
43016/*
43017 Function: isNegative
43018 Return true iff *this* < 0.
43019
43020 Returns:
43021
43022 true if *this*.compare(<BigInteger.ZERO>) == -1.
43023
43024 See Also:
43025
43026 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
43027*/
43028BigInteger.prototype.isNegative = function() {
43029 return this._s < 0;
43030};
43031
43032/*
43033 Function: isZero
43034 Return true iff *this* == 0.
43035
43036 Returns:
43037
43038 true if *this*.compare(<BigInteger.ZERO>) == 0.
43039
43040 See Also:
43041
43042 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
43043*/
43044BigInteger.prototype.isZero = function() {
43045 return this._s === 0;
43046};
43047
43048/*
43049 Function: exp10
43050 Multiply a <BigInteger> by a power of 10.
43051
43052 This is equivalent to, but faster than
43053
43054 > if (n >= 0) {
43055 > return this.multiply(BigInteger("1e" + n));
43056 > }
43057 > else { // n <= 0
43058 > return this.quotient(BigInteger("1e" + -n));
43059 > }
43060
43061 Parameters:
43062
43063 n - The power of 10 to multiply *this* by. *n* is converted to a
43064 javascipt number and must be no greater than <BigInteger.MAX_EXP>
43065 (0x7FFFFFFF), or an exception will be thrown.
43066
43067 Returns:
43068
43069 *this* * (10 ** *n*), truncated to an integer if necessary.
43070
43071 See Also:
43072
43073 <pow>, <multiply>
43074*/
43075BigInteger.prototype.exp10 = function(n) {
43076 n = +n;
43077 if (n === 0) {
43078 return this;
43079 }
43080 if (Math.abs(n) > Number(MAX_EXP)) {
43081 throw new Error("exponent too large in BigInteger.exp10");
43082 }
43083 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
43084 if (this._s === 0) {
43085 return ZERO;
43086 }
43087 if (n > 0) {
43088 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
43089
43090 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
43091 k._d.unshift(0);
43092 }
43093 if (n == 0)
43094 return k;
43095 k._s = 1;
43096 k = k.multiplySingleDigit(Math.pow(10, n));
43097 return (this._s < 0 ? k.negate() : k);
43098 } else if (-n >= this._d.length*BigInteger_base_log10) {
43099 return ZERO;
43100 } else {
43101 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
43102
43103 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
43104 k._d.shift();
43105 }
43106 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
43107 }
43108};
43109
43110/*
43111 Function: pow
43112 Raise a <BigInteger> to a power.
43113
43114 In this implementation, 0**0 is 1.
43115
43116 Parameters:
43117
43118 n - The exponent to raise *this* by. *n* must be no greater than
43119 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
43120
43121 Returns:
43122
43123 *this* raised to the *nth* power.
43124
43125 See Also:
43126
43127 <modPow>
43128*/
43129BigInteger.prototype.pow = function(n) {
43130 if (this.isUnit()) {
43131 if (this._s > 0) {
43132 return this;
43133 }
43134 else {
43135 return BigInteger(n).isOdd() ? this : this.negate();
43136 }
43137 }
43138
43139 n = BigInteger(n);
43140 if (n._s === 0) {
43141 return ONE;
43142 }
43143 else if (n._s < 0) {
43144 if (this._s === 0) {
43145 throw new Error("Divide by zero");
43146 }
43147 else {
43148 return ZERO;
43149 }
43150 }
43151 if (this._s === 0) {
43152 return ZERO;
43153 }
43154 if (n.isUnit()) {
43155 return this;
43156 }
43157
43158 if (n.compareAbs(MAX_EXP) > 0) {
43159 throw new Error("exponent too large in BigInteger.pow");
43160 }
43161 var x = this;
43162 var aux = ONE;
43163 var two = BigInteger.small[2];
43164
43165 while (n.isPositive()) {
43166 if (n.isOdd()) {
43167 aux = aux.multiply(x);
43168 if (n.isUnit()) {
43169 return aux;
43170 }
43171 }
43172 x = x.square();
43173 n = n.quotient(two);
43174 }
43175
43176 return aux;
43177};
43178
43179/*
43180 Function: modPow
43181 Raise a <BigInteger> to a power (mod m).
43182
43183 Because it is reduced by a modulus, <modPow> is not limited by
43184 <BigInteger.MAX_EXP> like <pow>.
43185
43186 Parameters:
43187
43188 exponent - The exponent to raise *this* by. Must be positive.
43189 modulus - The modulus.
43190
43191 Returns:
43192
43193 *this* ^ *exponent* (mod *modulus*).
43194
43195 See Also:
43196
43197 <pow>, <mod>
43198*/
43199BigInteger.prototype.modPow = function(exponent, modulus) {
43200 var result = ONE;
43201 var base = this;
43202
43203 while (exponent.isPositive()) {
43204 if (exponent.isOdd()) {
43205 result = result.multiply(base).remainder(modulus);
43206 }
43207
43208 exponent = exponent.quotient(BigInteger.small[2]);
43209 if (exponent.isPositive()) {
43210 base = base.square().remainder(modulus);
43211 }
43212 }
43213
43214 return result;
43215};
43216
43217/*
43218 Function: log
43219 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
43220
43221 This is equivalent to
43222
43223 > Math.log(this.toJSValue())
43224
43225 but handles values outside of the native number range.
43226
43227 Returns:
43228
43229 log( *this* )
43230
43231 See Also:
43232
43233 <toJSValue>
43234*/
43235BigInteger.prototype.log = function() {
43236 switch (this._s) {
43237 case 0: return -Infinity;
43238 case -1: return NaN;
43239 default: // Fall through.
43240 }
43241
43242 var l = this._d.length;
43243
43244 if (l*BigInteger_base_log10 < 30) {
43245 return Math.log(this.valueOf());
43246 }
43247
43248 var N = Math.ceil(30/BigInteger_base_log10);
43249 var firstNdigits = this._d.slice(l - N);
43250 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
43251};
43252
43253/*
43254 Function: valueOf
43255 Convert a <BigInteger> to a native JavaScript integer.
43256
43257 This is called automatically by JavaScipt to convert a <BigInteger> to a
43258 native value.
43259
43260 Returns:
43261
43262 > parseInt(this.toString(), 10)
43263
43264 See Also:
43265
43266 <toString>, <toJSValue>
43267*/
43268BigInteger.prototype.valueOf = function() {
43269 return parseInt(this.toString(), 10);
43270};
43271
43272/*
43273 Function: toJSValue
43274 Convert a <BigInteger> to a native JavaScript integer.
43275
43276 This is the same as valueOf, but more explicitly named.
43277
43278 Returns:
43279
43280 > parseInt(this.toString(), 10)
43281
43282 See Also:
43283
43284 <toString>, <valueOf>
43285*/
43286BigInteger.prototype.toJSValue = function() {
43287 return parseInt(this.toString(), 10);
43288};
43289
43290var MAX_EXP = BigInteger(0x7FFFFFFF);
43291// Constant: MAX_EXP
43292// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
43293BigInteger.MAX_EXP = MAX_EXP;
43294
43295(function() {
43296 function makeUnary(fn) {
43297 return function(a) {
43298 return fn.call(BigInteger(a));
43299 };
43300 }
43301
43302 function makeBinary(fn) {
43303 return function(a, b) {
43304 return fn.call(BigInteger(a), BigInteger(b));
43305 };
43306 }
43307
43308 function makeTrinary(fn) {
43309 return function(a, b, c) {
43310 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
43311 };
43312 }
43313
43314 (function() {
43315 var i, fn;
43316 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
43317 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
43318 var trinary = ["modPow"];
43319
43320 for (i = 0; i < unary.length; i++) {
43321 fn = unary[i];
43322 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
43323 }
43324
43325 for (i = 0; i < binary.length; i++) {
43326 fn = binary[i];
43327 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
43328 }
43329
43330 for (i = 0; i < trinary.length; i++) {
43331 fn = trinary[i];
43332 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
43333 }
43334
43335 BigInteger.exp10 = function(x, n) {
43336 return BigInteger(x).exp10(n);
43337 };
43338 })();
43339})();
43340
43341exports.BigInteger = BigInteger;
43342})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
43343</script>
43344 <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){
43345var 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;
43346
43347},{}],2:[function(require,module,exports){
43348var 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;
43349
43350},{"./scoring":6}],3:[function(require,module,exports){
43351var 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(","),
43352english_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(","),
43353female_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(","),
43354us_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(","),
43355male_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;
43356
43357},{}],4:[function(require,module,exports){
43358var 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;
43359
43360},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
43361var 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;
43362
43363},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
43364var 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;
43365
43366},{"./adjacency_graphs":1}],7:[function(require,module,exports){
43367var 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;
43368
43369},{}]},{},[4])(4)
43370});
43371//# sourceMappingURL=zxcvbn.js.map
43372</script>
43373 <script>/*
43374 * Detects entropy from a string.
43375 *
43376 * Formats include:
43377 * binary [0-1]
43378 * base 6 [0-5]
43379 * dice 6 [1-6]
43380 * decimal [0-9]
43381 * hexadecimal [0-9A-F]
9e97eb76 43382 * card [A2-9TJQK][CDHS]
95f04905
IC
43383 *
43384 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
43385 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
43386 * entropy.
43387 */
43388
43389window.Entropy = new (function() {
43390
78b8d604
IC
43391 var TWO = new BigInteger(2);
43392
95f04905
IC
43393 // matchers returns an array of the matched events for each type of entropy.
43394 // eg
43395 // matchers.binary("010") returns ["0", "1", "0"]
43396 // matchers.binary("a10") returns ["1", "0"]
43397 // matchers.hex("a10") returns ["a", "1", "0"]
43398 var matchers = {
43399 binary: function(str) {
43400 return str.match(/[0-1]/gi) || [];
43401 },
43402 base6: function(str) {
43403 return str.match(/[0-5]/gi) || [];
43404 },
43405 dice: function(str) {
43406 return str.match(/[1-6]/gi) || []; // ie dice numbers
43407 },
43408 base10: function(str) {
43409 return str.match(/[0-9]/gi) || [];
43410 },
43411 hex: function(str) {
43412 return str.match(/[0-9A-F]/gi) || [];
43413 },
43414 card: function(str) {
43415 // Format is NumberSuit, eg
43416 // AH ace of hearts
43417 // 8C eight of clubs
43418 // TD ten of diamonds
43419 // JS jack of spades
43420 // QH queen of hearts
43421 // KC king of clubs
43422 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
43423 }
43424 }
43425
43426 // Convert array of cards from ["ac", "4d", "ks"]
43427 // to numbers between 0 and 51 [0, 16, 51]
43428 function convertCardsToInts(cards) {
43429 var ints = [];
43430 var values = "a23456789tjqk";
43431 var suits = "cdhs";
43432 for (var i=0; i<cards.length; i++) {
43433 var card = cards[i].toLowerCase();
43434 var value = card[0];
43435 var suit = card[1];
43436 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
43437 ints.push(asInt);
43438 }
43439 return ints;
43440 }
43441
43442 this.fromString = function(rawEntropyStr) {
43443 // Find type of entropy being used (binary, hex, dice etc)
43444 var base = getBase(rawEntropyStr);
43445 // Convert dice to base6 entropy (ie 1-6 to 0-5)
43446 // This is done by changing all 6s to 0s
43447 if (base.str == "dice") {
43448 var newParts = [];
43449 var newInts = [];
43450 for (var i=0; i<base.parts.length; i++) {
43451 var c = base.parts[i];
43452 if ("12345".indexOf(c) > -1) {
43453 newParts[i] = base.parts[i];
43454 newInts[i] = base.ints[i];
43455 }
43456 else {
43457 newParts[i] = "0";
43458 newInts[i] = 0;
43459 }
43460 }
43461 base.str = "base 6 (dice)";
43462 base.ints = newInts;
43463 base.parts = newParts;
43464 base.matcher = matchers.base6;
43465 }
43466 // Detect empty entropy
43467 if (base.parts.length == 0) {
43468 return {
43469 binaryStr: "",
43470 cleanStr: "",
43471 cleanHtml: "",
43472 base: base,
43473 };
43474 }
43475 // Convert base.ints to BigInteger.
43476 // Due to using unusual bases, eg cards of base52, this is not as simple as
43477 // using BigInteger.parse()
43478 var entropyInt = BigInteger.ZERO;
43479 for (var i=base.ints.length-1; i>=0; i--) {
43480 var thisInt = BigInteger.parse(base.ints[i]);
43481 var power = (base.ints.length - 1) - i;
43482 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
43483 entropyInt = entropyInt.add(additionalEntropy);
43484 }
43485 // Convert entropy to binary
43486 var entropyBin = entropyInt.toString(2);
43487 // If the first integer is small, it must be padded with zeros.
43488 // Otherwise the chance of the first bit being 1 is 100%, which is
43489 // obviously incorrect.
43490 // This is not perfect for non-2^n bases.
43491 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
43492 while (entropyBin.length < expectedBits) {
43493 entropyBin = "0" + entropyBin;
43494 }
94959756
IC
43495 // Calculate the number of bits per event
43496 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 43497 // Cards binary must be handled differently, since they're not replaced
9e97eb76 43498 if (base.asInt == 52) {
94959756
IC
43499 var cardEntropy = processCardEntropy(base.parts);
43500 entropyBin = cardEntropy.binaryStr;
43501 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 43502 }
95f04905
IC
43503 // Supply a 'filtered' entropy string for display purposes
43504 var entropyClean = base.parts.join("");
43505 var entropyHtml = base.parts.join("");
43506 if (base.asInt == 52) {
43507 entropyClean = base.parts.join(" ").toUpperCase();
43508 entropyClean = entropyClean.replace(/C/g, "\u2663");
43509 entropyClean = entropyClean.replace(/D/g, "\u2666");
43510 entropyClean = entropyClean.replace(/H/g, "\u2665");
43511 entropyClean = entropyClean.replace(/S/g, "\u2660");
43512 entropyHtml = base.parts.join(" ").toUpperCase();
43513 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
43514 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
43515 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
43516 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
43517 }
9e97eb76 43518 // Return the result
95f04905
IC
43519 var e = {
43520 binaryStr: entropyBin,
43521 cleanStr: entropyClean,
43522 cleanHtml: entropyHtml,
94959756 43523 bitsPerEvent: bitsPerEvent,
95f04905
IC
43524 base: base,
43525 }
43526 return e;
43527 }
43528
78b8d604
IC
43529 function getSortedDeck() {
43530 var s = [];
43531 var suits = "CDHS";
43532 var values = "A23456789TJQK";
43533 for (var i=0; i<suits.length; i++) {
43534 for (var j=0; j<values.length; j++) {
43535 s.push(values[j]+suits[i]);
43536 }
43537 }
43538 return s;
43539 }
43540
95f04905
IC
43541 function getBase(str) {
43542 // Need to get the lowest base for the supplied entropy.
43543 // This prevents interpreting, say, dice rolls as hexadecimal.
43544 var binaryMatches = matchers.binary(str);
43545 var hexMatches = matchers.hex(str);
43546 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
43547 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
43548 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
43549 return {
43550 ints: ints,
43551 parts: binaryMatches,
43552 matcher: matchers.binary,
43553 asInt: 2,
43554 str: "binary",
43555 }
43556 }
43557 var cardMatches = matchers.card(str);
43558 if (cardMatches.length >= hexMatches.length / 2) {
43559 var ints = convertCardsToInts(cardMatches);
43560 return {
43561 ints: ints,
43562 parts: cardMatches,
43563 matcher: matchers.card,
43564 asInt: 52,
43565 str: "card",
43566 }
43567 }
43568 var diceMatches = matchers.dice(str);
43569 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
43570 var ints = diceMatches.map(function(i) { return parseInt(i) });
43571 return {
43572 ints: ints,
43573 parts: diceMatches,
43574 matcher: matchers.dice,
43575 asInt: 6,
43576 str: "dice",
43577 }
43578 }
43579 var base6Matches = matchers.base6(str);
43580 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
43581 var ints = base6Matches.map(function(i) { return parseInt(i) });
43582 return {
43583 ints: ints,
43584 parts: base6Matches,
43585 matcher: matchers.base6,
43586 asInt: 6,
43587 str: "base 6",
43588 }
43589 }
43590 var base10Matches = matchers.base10(str);
43591 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
43592 var ints = base10Matches.map(function(i) { return parseInt(i) });
43593 return {
43594 ints: ints,
43595 parts: base10Matches,
43596 matcher: matchers.base10,
43597 asInt: 10,
43598 str: "base 10",
43599 }
43600 }
43601 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
43602 return {
43603 ints: ints,
43604 parts: hexMatches,
43605 matcher: matchers.hex,
43606 asInt: 16,
43607 str: "hexadecimal",
43608 }
43609 }
43610
ea87f1d3
IC
43611 // Assume cards are NOT replaced.
43612 // Additional entropy decreases as more cards are used. This means
43613 // total possible entropy is measured using n!, not base^n.
43614 // eg the second last card can be only one of two, not one of fifty two
43615 // so the added entropy for that card is only one bit at most
94959756 43616 function processCardEntropy(cards) {
ea87f1d3
IC
43617 // Track how many instances of each card have been used, and thus
43618 // how many decks are in use.
43619 var cardCounts = {};
43620 var numberOfDecks = 0;
43621 // Work out number of decks by max(duplicates)
43622 for (var i=0; i<cards.length; i++) {
43623 // Get the card that was drawn
43624 var cardLower = cards[i];
43625 var card = cardLower.toUpperCase();
43626 // Initialize the count for this card if needed
43627 if (!(card in cardCounts)) {
43628 cardCounts[card] = 0;
43629 }
43630 cardCounts[card] += 1;
43631 // See if this is max(duplicates)
43632 if (cardCounts[card] > numberOfDecks) {
43633 numberOfDecks = cardCounts[card];
43634 }
43635 }
43636 // Work out the total number of bits for this many decks
43637 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
43638 var gainedBits = 0;
43639 // Equivalent of Math.log2(factorial(52*numberOfDecks))
43640 // which becomes infinity for numberOfDecks > 4
43641 for (var i=1; i<=52*numberOfDecks; i++) {
43642 gainedBits = gainedBits + Math.log2(i);
43643 }
ea87f1d3
IC
43644 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
43645 var maxBits = gainedBits - lostBits;
43646 // Convert the drawn cards to a binary representation.
43647 // The exact technique for doing this is unclear.
43648 // See
43649 // http://crypto.stackexchange.com/a/41896
43650 // "I even doubt that this is well defined (only the average entropy
43651 // is, I believe)."
43652 // See
43653 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
43654 // "The binary representation can be the first log(permutations,2) bits
43655 // of the sha-2 hash of the normalized deck string."
43656 //
43657 // In this specific implementation, the first N bits of the hash of the
43658 // normalized cards string is being used. Uppercase, no spaces; eg
43659 // sha256("AH8DQSTC2H")
43660 var totalCards = numberOfDecks * 52;
43661 var percentUsed = cards.length / totalCards;
43662 // Calculate the average number of bits of entropy for the number of
43663 // cards drawn.
43664 var numberOfBits = Math.floor(maxBits * percentUsed);
43665 // Create a normalized string of the selected cards
43666 var normalizedCards = cards.join("").toUpperCase();
43667 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 43668 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
43669 // are used until the required number of bits is reached.
43670 var entropyBin = "";
43671 var iterations = 0;
43672 while (entropyBin.length < numberOfBits) {
434caecd 43673 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
43674 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
43675 for (var i=0; i<hashHex.length; i++) {
43676 var decimal = parseInt(hashHex[i], 16);
43677 var binary = decimal.toString(2);
43678 while (binary.length < 4) {
43679 binary = "0" + binary;
43680 }
43681 entropyBin = entropyBin + binary;
43682 }
43683 iterations = iterations + 1;
43684 }
43685 // Truncate to the appropriate number of bits.
43686 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
43687 // Get the number of bits per event
43688 bitsPerEvent = maxBits / totalCards;
43689 return {
43690 binaryStr: entropyBin,
43691 bitsPerEvent: bitsPerEvent,
43692 }
ea87f1d3
IC
43693 }
43694
95f04905
IC
43695 // Polyfill for Math.log2
43696 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
43697 Math.log2 = Math.log2 || function(x) {
43698 // The polyfill isn't good enough because of the poor accuracy of
43699 // Math.LOG2E
43700 // log2(8) gave 2.9999999999999996 which when floored causes issues.
43701 // So instead use the BigInteger library to get it right.
43702 return BigInteger.log(x) / BigInteger.log(2);
43703 };
43704
9e97eb76
IC
43705 // Depends on BigInteger
43706 function factorial(n) {
43707 if (n == 0) {
43708 return 1;
43709 }
43710 f = BigInteger.ONE;
43711 for (var i=1; i<=n; i++) {
43712 f = f.multiply(new BigInteger(i));
43713 }
43714 return f;
43715 }
43716
95f04905 43717})();
c6624d51
IC
43718</script>
43719 <script>(function() {
43720
43721 // mnemonics is populated as required by getLanguage
43722 var mnemonics = { "english": new Mnemonic("english") };
43723 var mnemonic = mnemonics["english"];
3725abb5 43724 var seed = null;
c6624d51
IC
43725 var bip32RootKey = null;
43726 var bip32ExtendedKey = null;
43727 var network = bitcoin.networks.bitcoin;
43728 var addressRowTemplate = $("#address-row-template");
43729
43730 var showIndex = true;
43731 var showAddress = true;
43732 var showPubKey = true;
43733 var showPrivKey = true;
52da415f 43734 var showQr = false;
c6624d51
IC
43735
43736 var entropyChangeTimeoutEvent = null;
43737 var phraseChangeTimeoutEvent = null;
43738 var rootKeyChangedTimeoutEvent = null;
43739
40892aba
IC
43740 var generationProcesses = [];
43741
c6624d51
IC
43742 var DOM = {};
43743 DOM.network = $(".network");
56530adc 43744 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
43745 DOM.phraseNetwork = $("#network-phrase");
43746 DOM.useEntropy = $(".use-entropy");
43747 DOM.entropyContainer = $(".entropy-container");
43748 DOM.entropy = $(".entropy");
2a6dd137
IC
43749 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
43750 DOM.entropyType = DOM.entropyContainer.find(".type");
43751 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
43752 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
43753 DOM.entropyBits = DOM.entropyContainer.find(".bits");
43754 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
43755 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
43756 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
43757 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
43758 DOM.phrase = $(".phrase");
43759 DOM.passphrase = $(".passphrase");
43760 DOM.generateContainer = $(".generate-container");
43761 DOM.generate = $(".generate");
43762 DOM.seed = $(".seed");
43763 DOM.rootKey = $(".root-key");
43764 DOM.extendedPrivKey = $(".extended-priv-key");
43765 DOM.extendedPubKey = $(".extended-pub-key");
43766 DOM.bip32tab = $("#bip32-tab");
43767 DOM.bip44tab = $("#bip44-tab");
43768 DOM.bip32panel = $("#bip32");
43769 DOM.bip44panel = $("#bip44");
43770 DOM.bip32path = $("#bip32-path");
43771 DOM.bip44path = $("#bip44-path");
43772 DOM.bip44purpose = $("#bip44 .purpose");
43773 DOM.bip44coin = $("#bip44 .coin");
43774 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
43775 DOM.bip44accountXprv = $("#bip44 .account-xprv");
43776 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 43777 DOM.bip44change = $("#bip44 .change");
18abe53b 43778 DOM.generatedStrength = $(".generate-container .strength");
c6624d51
IC
43779 DOM.hardenedAddresses = $(".hardened-addresses");
43780 DOM.addresses = $(".addresses");
43781 DOM.rowsToAdd = $(".rows-to-add");
43782 DOM.more = $(".more");
43783 DOM.feedback = $(".feedback");
43784 DOM.tab = $(".derivation-type a");
43785 DOM.indexToggle = $(".index-toggle");
43786 DOM.addressToggle = $(".address-toggle");
43787 DOM.publicKeyToggle = $(".public-key-toggle");
43788 DOM.privateKeyToggle = $(".private-key-toggle");
43789 DOM.languages = $(".languages a");
e00964cc 43790 DOM.qrContainer = $(".qr-container");
52da415f 43791 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
43792 DOM.qrImage = DOM.qrContainer.find(".qr-image");
43793 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
43794 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
43795
43796 function init() {
43797 // Events
43798 DOM.network.on("change", networkChanged);
56530adc 43799 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
43800 DOM.useEntropy.on("change", setEntropyVisibility);
43801 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 43802 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
43803 DOM.phrase.on("input", delayedPhraseChanged);
43804 DOM.passphrase.on("input", delayedPhraseChanged);
43805 DOM.generate.on("click", generateClicked);
43806 DOM.more.on("click", showMore);
43807 DOM.rootKey.on("input", delayedRootKeyChanged);
43808 DOM.bip32path.on("input", calcForDerivationPath);
43809 DOM.bip44purpose.on("input", calcForDerivationPath);
43810 DOM.bip44coin.on("input", calcForDerivationPath);
43811 DOM.bip44account.on("input", calcForDerivationPath);
43812 DOM.bip44change.on("input", calcForDerivationPath);
43813 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
43814 DOM.hardenedAddresses.on("change", calcForDerivationPath);
43815 DOM.indexToggle.on("click", toggleIndexes);
43816 DOM.addressToggle.on("click", toggleAddresses);
43817 DOM.publicKeyToggle.on("click", togglePublicKeys);
43818 DOM.privateKeyToggle.on("click", togglePrivateKeys);
43819 DOM.languages.on("click", languageChanged);
e00964cc 43820 setQrEvents(DOM.showQrEls);
c6624d51
IC
43821 disableForms();
43822 hidePending();
43823 hideValidationError();
43824 populateNetworkSelect();
56530adc 43825 populateClientSelect();
c6624d51
IC
43826 }
43827
43828 // Event handlers
43829
43830 function networkChanged(e) {
43831 var networkIndex = e.target.value;
43832 networks[networkIndex].onSelect();
43833 if (seed != null) {
43834 phraseChanged();
43835 }
43836 else {
43837 rootKeyChanged();
43838 }
43839 }
43840
56530adc
IC
43841 function bip32ClientChanged(e) {
43842 var clientIndex = DOM.bip32Client.val();
43843 if (clientIndex == "custom") {
43844 DOM.bip32path.prop("readonly", false);
43845 }
43846 else {
43847 DOM.bip32path.prop("readonly", true);
43848 clients[clientIndex].onSelect();
43849 if (seed != null) {
43850 phraseChanged();
43851 }
43852 else {
43853 rootKeyChanged();
43854 }
43855 }
43856 }
43857
c6624d51
IC
43858 function setEntropyVisibility() {
43859 if (isUsingOwnEntropy()) {
43860 DOM.entropyContainer.removeClass("hidden");
43861 DOM.generateContainer.addClass("hidden");
43862 DOM.phrase.prop("readonly", true);
43863 DOM.entropy.focus();
43864 entropyChanged();
43865 }
43866 else {
43867 DOM.entropyContainer.addClass("hidden");
43868 DOM.generateContainer.removeClass("hidden");
43869 DOM.phrase.prop("readonly", false);
18abe53b 43870 hidePending();
c6624d51
IC
43871 }
43872 }
43873
43874 function delayedPhraseChanged() {
43875 hideValidationError();
43876 showPending();
43877 if (phraseChangeTimeoutEvent != null) {
43878 clearTimeout(phraseChangeTimeoutEvent);
43879 }
43880 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
43881 }
43882
43883 function phraseChanged() {
43884 showPending();
43885 hideValidationError();
43886 setMnemonicLanguage();
43887 // Get the mnemonic phrase
43888 var phrase = DOM.phrase.val();
43889 var errorText = findPhraseErrors(phrase);
43890 if (errorText) {
43891 showValidationError(errorText);
43892 return;
43893 }
43894 // Calculate and display
43895 var passphrase = DOM.passphrase.val();
43896 calcBip32RootKeyFromSeed(phrase, passphrase);
43897 calcForDerivationPath();
43898 hidePending();
43899 }
43900
43901 function delayedEntropyChanged() {
43902 hideValidationError();
43903 showPending();
43904 if (entropyChangeTimeoutEvent != null) {
43905 clearTimeout(entropyChangeTimeoutEvent);
43906 }
43907 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
43908 }
43909
43910 function entropyChanged() {
18abe53b
IC
43911 // If blank entropy, clear mnemonic, addresses, errors
43912 if (DOM.entropy.val().trim().length == 0) {
43913 clearDisplay();
2a6dd137 43914 clearEntropyFeedback();
18abe53b
IC
43915 DOM.phrase.val("");
43916 showValidationError("Blank entropy");
43917 return;
43918 }
43919 // Get the current phrase to detect changes
43920 var phrase = DOM.phrase.val();
43921 // Set the phrase from the entropy
c6624d51 43922 setMnemonicFromEntropy();
18abe53b
IC
43923 // Recalc addresses if the phrase has changed
43924 var newPhrase = DOM.phrase.val();
43925 if (newPhrase != phrase) {
43926 if (newPhrase.length == 0) {
43927 clearDisplay();
43928 }
43929 else {
43930 phraseChanged();
43931 }
43932 }
43933 else {
43934 hidePending();
43935 }
c6624d51
IC
43936 }
43937
43938 function delayedRootKeyChanged() {
43939 // Warn if there is an existing mnemonic or passphrase.
43940 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
43941 if (!confirm("This will clear existing mnemonic and passphrase")) {
43942 DOM.rootKey.val(bip32RootKey);
43943 return
43944 }
43945 }
43946 hideValidationError();
43947 showPending();
43948 // Clear existing mnemonic and passphrase
43949 DOM.phrase.val("");
43950 DOM.passphrase.val("");
43951 seed = null;
43952 if (rootKeyChangedTimeoutEvent != null) {
43953 clearTimeout(rootKeyChangedTimeoutEvent);
43954 }
43955 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
43956 }
43957
43958 function rootKeyChanged() {
43959 showPending();
43960 hideValidationError();
43961 // Validate the root key TODO
43962 var rootKeyBase58 = DOM.rootKey.val();
43963 var errorText = validateRootKey(rootKeyBase58);
43964 if (errorText) {
43965 showValidationError(errorText);
43966 return;
43967 }
43968 // Calculate and display
43969 calcBip32RootKeyFromBase58(rootKeyBase58);
43970 calcForDerivationPath();
c6624d51
IC
43971 }
43972
43973 function calcForDerivationPath() {
43974 showPending();
ba3cb9ec 43975 clearAddressesList();
c6624d51
IC
43976 hideValidationError();
43977 // Get the derivation path
43978 var derivationPath = getDerivationPath();
43979 var errorText = findDerivationPathErrors(derivationPath);
43980 if (errorText) {
43981 showValidationError(errorText);
43982 return;
43983 }
20083ab9
IC
43984 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
43985 if (bip44TabSelected()) {
43986 displayBip44Info();
43987 }
c6624d51
IC
43988 displayBip32Info();
43989 hidePending();
43990 }
43991
43992 function generateClicked() {
43993 if (isUsingOwnEntropy()) {
43994 return;
43995 }
43996 clearDisplay();
43997 showPending();
43998 setTimeout(function() {
43999 setMnemonicLanguage();
44000 var phrase = generateRandomPhrase();
44001 if (!phrase) {
44002 return;
44003 }
44004 phraseChanged();
44005 }, 50);
44006 }
44007
44008 function languageChanged() {
44009 setTimeout(function() {
44010 setMnemonicLanguage();
44011 if (DOM.phrase.val().length > 0) {
44012 var newPhrase = convertPhraseToNewLanguage();
44013 DOM.phrase.val(newPhrase);
44014 phraseChanged();
44015 }
44016 else {
44017 DOM.generate.trigger("click");
44018 }
44019 }, 50);
44020 }
44021
44022 function toggleIndexes() {
44023 showIndex = !showIndex;
44024 $("td.index span").toggleClass("invisible");
44025 }
44026
44027 function toggleAddresses() {
44028 showAddress = !showAddress;
44029 $("td.address span").toggleClass("invisible");
44030 }
44031
44032 function togglePublicKeys() {
44033 showPubKey = !showPubKey;
44034 $("td.pubkey span").toggleClass("invisible");
44035 }
44036
44037 function togglePrivateKeys() {
44038 showPrivKey = !showPrivKey;
44039 $("td.privkey span").toggleClass("invisible");
44040 }
44041
44042 // Private methods
44043
44044 function generateRandomPhrase() {
44045 if (!hasStrongRandom()) {
44046 var errorText = "This browser does not support strong randomness";
44047 showValidationError(errorText);
44048 return;
44049 }
18abe53b 44050 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
44051 var strength = numWords / 3 * 32;
44052 var words = mnemonic.generate(strength);
44053 DOM.phrase.val(words);
44054 return words;
44055 }
44056
44057 function calcBip32RootKeyFromSeed(phrase, passphrase) {
44058 seed = mnemonic.toSeed(phrase, passphrase);
44059 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
44060 }
44061
44062 function calcBip32RootKeyFromBase58(rootKeyBase58) {
44063 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
44064 }
44065
44066 function calcBip32ExtendedKey(path) {
0a1f0259
IC
44067 // Check there's a root key to derive from
44068 if (!bip32RootKey) {
44069 return bip32RootKey;
44070 }
20083ab9 44071 var extendedKey = bip32RootKey;
c6624d51
IC
44072 // Derive the key from the path
44073 var pathBits = path.split("/");
ebd8d4e8
IC
44074 for (var i=0; i<pathBits.length; i++) {
44075 var bit = pathBits[i];
44076 var index = parseInt(bit);
44077 if (isNaN(index)) {
44078 continue;
44079 }
44080 var hardened = bit[bit.length-1] == "'";
ba3cb9ec
IC
44081 var isPriv = "privKey" in extendedKey;
44082 var invalidDerivationPath = hardened && !isPriv;
44083 if (invalidDerivationPath) {
44084 extendedKey = null;
44085 }
44086 else if (hardened) {
20083ab9 44087 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
44088 }
44089 else {
20083ab9 44090 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
44091 }
44092 }
20083ab9 44093 return extendedKey
ebd8d4e8
IC
44094 }
44095
44096 function showValidationError(errorText) {
44097 DOM.feedback
44098 .text(errorText)
44099 .show();
44100 }
44101
44102 function hideValidationError() {
44103 DOM.feedback
44104 .text("")
44105 .hide();
44106 }
44107
44108 function findPhraseErrors(phrase) {
ebd8d4e8 44109 // Preprocess the words
783981de 44110 phrase = mnemonic.normalizeString(phrase);
0515eeec 44111 var words = phraseToWordArray(phrase);
18abe53b
IC
44112 // Detect blank phrase
44113 if (words.length == 0) {
44114 return "Blank mnemonic";
44115 }
563e401a 44116 // Check each word
0515eeec
IC
44117 for (var i=0; i<words.length; i++) {
44118 var word = words[i];
44119 var language = getLanguage();
44120 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
44121 console.log("Finding closest match to " + word);
44122 var nearestWord = findNearestWord(word);
44123 return word + " not in wordlist, did you mean " + nearestWord + "?";
44124 }
44125 }
ebd8d4e8 44126 // Check the words are valid
0515eeec 44127 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
44128 var isValid = mnemonic.check(properPhrase);
44129 if (!isValid) {
44130 return "Invalid mnemonic";
44131 }
44132 return false;
44133 }
44134
efe41586
IC
44135 function validateRootKey(rootKeyBase58) {
44136 try {
44137 bitcoin.HDNode.fromBase58(rootKeyBase58);
44138 }
44139 catch (e) {
44140 return "Invalid root key";
44141 }
44142 return "";
44143 }
44144
38523d36 44145 function getDerivationPath() {
20083ab9 44146 if (bip44TabSelected()) {
38523d36
IC
44147 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
44148 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
44149 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
44150 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
44151 var path = "m/";
44152 path += purpose + "'/";
44153 path += coin + "'/";
44154 path += account + "'/";
44155 path += change;
44156 DOM.bip44path.val(path);
44157 var derivationPath = DOM.bip44path.val();
44158 console.log("Using derivation path from BIP44 tab: " + derivationPath);
44159 return derivationPath;
44160 }
20083ab9 44161 else if (bip32TabSelected()) {
38523d36
IC
44162 var derivationPath = DOM.bip32path.val();
44163 console.log("Using derivation path from BIP32 tab: " + derivationPath);
44164 return derivationPath;
44165 }
44166 else {
44167 console.log("Unknown derivation path");
44168 }
44169 }
44170
ebd8d4e8 44171 function findDerivationPathErrors(path) {
30c9e79d
IC
44172 // TODO is not perfect but is better than nothing
44173 // Inspired by
44174 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
44175 // and
44176 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
44177 var maxDepth = 255; // TODO verify this!!
44178 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
44179 if (path[0] != "m") {
44180 return "First character must be 'm'";
44181 }
44182 if (path.length > 1) {
44183 if (path[1] != "/") {
44184 return "Separator must be '/'";
44185 }
44186 var indexes = path.split("/");
44187 if (indexes.length > maxDepth) {
44188 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
44189 }
44190 for (var depth = 1; depth<indexes.length; depth++) {
44191 var index = indexes[depth];
44192 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
44193 if (invalidChars.length > 0) {
44194 return "Invalid characters " + invalidChars + " found at depth " + depth;
44195 }
44196 var indexValue = parseInt(index.replace("'", ""));
44197 if (isNaN(depth)) {
44198 return "Invalid number at depth " + depth;
44199 }
44200 if (indexValue > maxIndexValue) {
44201 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
44202 }
44203 }
44204 }
0a1f0259
IC
44205 // Check root key exists or else derivation path is useless!
44206 if (!bip32RootKey) {
44207 return "No root key";
44208 }
ba3cb9ec
IC
44209 // Check no hardened derivation path when using xpub keys
44210 var hardened = path.indexOf("'") > -1;
44211 var isXpubkey = !("privKey" in bip32RootKey);
44212 if (hardened && isXpubkey) {
44213 return "Hardened derivation path is invalid with xpub key";
44214 }
ebd8d4e8
IC
44215 return false;
44216 }
44217
20083ab9
IC
44218 function displayBip44Info() {
44219 // Get the derivation path for the account
44220 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
44221 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
44222 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
44223 var path = "m/";
44224 path += purpose + "'/";
44225 path += coin + "'/";
44226 path += account + "'/";
44227 // Calculate the account extended keys
44228 var accountExtendedKey = calcBip32ExtendedKey(path);
44229 var accountXprv = accountExtendedKey.toBase58();
44230 var accountXpub = accountExtendedKey.toBase58(false);
44231 // Display the extended keys
44232 DOM.bip44accountXprv.val(accountXprv);
44233 DOM.bip44accountXpub.val(accountXpub);
44234 }
44235
ebd8d4e8
IC
44236 function displayBip32Info() {
44237 // Display the key
73161a92 44238 DOM.seed.val(seed);
ebd8d4e8
IC
44239 var rootKey = bip32RootKey.toBase58();
44240 DOM.rootKey.val(rootKey);
ba3cb9ec
IC
44241 var xprvkeyB58 = "NA";
44242 if (bip32ExtendedKey.privKey) {
44243 xprvkeyB58 = bip32ExtendedKey.toBase58();
44244 }
44245 var extendedPrivKey = xprvkeyB58;
ebd8d4e8
IC
44246 DOM.extendedPrivKey.val(extendedPrivKey);
44247 var extendedPubKey = bip32ExtendedKey.toBase58(false);
44248 DOM.extendedPubKey.val(extendedPubKey);
44249 // Display the addresses and privkeys
44250 clearAddressesList();
44251 displayAddresses(0, 20);
44252 }
44253
44254 function displayAddresses(start, total) {
40892aba
IC
44255 generationProcesses.push(new (function() {
44256
44257 var rows = [];
44258
44259 this.stop = function() {
44260 for (var i=0; i<rows.length; i++) {
44261 rows[i].shouldGenerate = false;
44262 }
44263 }
44264
44265 for (var i=0; i<total; i++) {
44266 var index = i + start;
44267 rows.push(new TableRow(index));
44268 }
44269
44270 })());
80c4dd2a
IC
44271 }
44272
44273 function TableRow(index) {
44274
40892aba
IC
44275 var self = this;
44276 this.shouldGenerate = true;
1975bfbc
IC
44277 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
44278
80c4dd2a
IC
44279 function init() {
44280 calculateValues();
44281 }
44282
44283 function calculateValues() {
44284 setTimeout(function() {
40892aba
IC
44285 if (!self.shouldGenerate) {
44286 return;
44287 }
1975bfbc
IC
44288 var key = "";
44289 if (useHardenedAddresses) {
44290 key = bip32ExtendedKey.deriveHardened(index);
44291 }
44292 else {
44293 key = bip32ExtendedKey.derive(index);
44294 }
80c4dd2a 44295 var address = key.getAddress().toString();
ba3cb9ec
IC
44296 var privkey = "NA";
44297 if (key.privKey) {
44298 privkey = key.privKey.toWIF(network);
44299 }
1b12b2f5 44300 var pubkey = key.pubKey.toHex();
38523d36 44301 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
44302 if (useHardenedAddresses) {
44303 indexText = indexText + "'";
44304 }
8b095871
IC
44305 // Ethereum values are different
44306 if (networks[DOM.network.val()].name == "Ethereum") {
44307 var privKeyBuffer = key.privKey.d.toBuffer();
44308 privkey = privKeyBuffer.toString('hex');
44309 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
44310 var hexAddress = addressBuffer.toString('hex');
44311 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
44312 address = ethUtil.addHexPrefix(checksumAddress);
8b095871 44313 }
8a1f452d 44314 // Ripple values are different
44315 if (networks[DOM.network.val()].name == "Ripple") {
44316 privkey = convertRipplePriv(privkey);
44317 address = convertRippleAdrr(address);
44318 }
1b12b2f5 44319 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 44320 }, 50)
ebd8d4e8 44321 }
80c4dd2a
IC
44322
44323 init();
44324
ebd8d4e8
IC
44325 }
44326
44327 function showMore() {
44328 var start = DOM.addresses.children().length;
44329 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
44330 if (isNaN(rowsToAdd)) {
44331 rowsToAdd = 20;
44332 DOM.rowsToAdd.val("20");
44333 }
44334 if (rowsToAdd > 200) {
44335 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
44336 msg += "Do you want to continue?";
44337 if (!confirm(msg)) {
44338 return;
44339 }
44340 }
ebd8d4e8 44341 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
44342 }
44343
44344 function clearDisplay() {
44345 clearAddressesList();
44346 clearKey();
44347 hideValidationError();
44348 }
44349
44350 function clearAddressesList() {
44351 DOM.addresses.empty();
40892aba
IC
44352 stopGenerating();
44353 }
44354
44355 function stopGenerating() {
44356 while (generationProcesses.length > 0) {
44357 var generation = generationProcesses.shift();
44358 generation.stop();
44359 }
ebd8d4e8
IC
44360 }
44361
44362 function clearKey() {
44363 DOM.rootKey.val("");
44364 DOM.extendedPrivKey.val("");
44365 DOM.extendedPubKey.val("");
44366 }
44367
1b12b2f5 44368 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 44369 var row = $(addressRowTemplate.html());
80c4dd2a
IC
44370 // Elements
44371 var indexCell = row.find(".index span");
44372 var addressCell = row.find(".address span");
1b12b2f5 44373 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
44374 var privkeyCell = row.find(".privkey span");
44375 // Content
ae30fed8 44376 indexCell.text(indexText);
80c4dd2a 44377 addressCell.text(address);
1b12b2f5 44378 pubkeyCell.text(pubkey);
80c4dd2a
IC
44379 privkeyCell.text(privkey);
44380 // Visibility
44381 if (!showIndex) {
44382 indexCell.addClass("invisible");
44383 }
44384 if (!showAddress) {
44385 addressCell.addClass("invisible");
44386 }
1b12b2f5
IC
44387 if (!showPubKey) {
44388 pubkeyCell.addClass("invisible");
44389 }
80c4dd2a 44390 if (!showPrivKey) {
6d628db7 44391 privkeyCell.addClass("invisible");
80c4dd2a 44392 }
ebd8d4e8 44393 DOM.addresses.append(row);
e00964cc
IC
44394 var rowShowQrEls = row.find("[data-show-qr]");
44395 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
44396 }
44397
44398 function hasStrongRandom() {
44399 return 'crypto' in window && window['crypto'] !== null;
44400 }
44401
44402 function disableForms() {
44403 $("form").on("submit", function(e) {
44404 e.preventDefault();
44405 });
44406 }
44407
ebd8d4e8
IC
44408 function parseIntNoNaN(val, defaultVal) {
44409 var v = parseInt(val);
44410 if (isNaN(v)) {
44411 return defaultVal;
44412 }
44413 return v;
44414 }
44415
44416 function showPending() {
44417 DOM.feedback
44418 .text("Calculating...")
44419 .show();
44420 }
44421
563e401a 44422 function findNearestWord(word) {
0515eeec
IC
44423 var language = getLanguage();
44424 var words = WORDLISTS[language];
563e401a
IC
44425 var minDistance = 99;
44426 var closestWord = words[0];
44427 for (var i=0; i<words.length; i++) {
44428 var comparedTo = words[i];
6ea15134
IC
44429 if (comparedTo.indexOf(word) == 0) {
44430 return comparedTo;
44431 }
563e401a
IC
44432 var distance = Levenshtein.get(word, comparedTo);
44433 if (distance < minDistance) {
44434 closestWord = comparedTo;
44435 minDistance = distance;
44436 }
44437 }
44438 return closestWord;
44439 }
44440
ebd8d4e8
IC
44441 function hidePending() {
44442 DOM.feedback
44443 .text("")
44444 .hide();
44445 }
44446
ab78acc6
IC
44447 function populateNetworkSelect() {
44448 for (var i=0; i<networks.length; i++) {
44449 var network = networks[i];
44450 var option = $("<option>");
44451 option.attr("value", i);
44452 option.text(network.name);
44453 DOM.phraseNetwork.append(option);
44454 }
44455 }
44456
56530adc
IC
44457 function populateClientSelect() {
44458 for (var i=0; i<clients.length; i++) {
44459 var client = clients[i];
44460 var option = $("<option>");
44461 option.attr("value", i);
44462 option.text(client.name);
44463 DOM.bip32Client.append(option);
44464 }
44465 }
44466
0515eeec
IC
44467 function getLanguage() {
44468 var defaultLanguage = "english";
44469 // Try to get from existing phrase
44470 var language = getLanguageFromPhrase();
44471 // Try to get from url if not from phrase
44472 if (language.length == 0) {
44473 language = getLanguageFromUrl();
44474 }
44475 // Default to English if no other option
44476 if (language.length == 0) {
44477 language = defaultLanguage;
44478 }
44479 return language;
44480 }
44481
44482 function getLanguageFromPhrase(phrase) {
44483 // Check if how many words from existing phrase match a language.
44484 var language = "";
44485 if (!phrase) {
44486 phrase = DOM.phrase.val();
44487 }
44488 if (phrase.length > 0) {
44489 var words = phraseToWordArray(phrase);
44490 var languageMatches = {};
44491 for (l in WORDLISTS) {
44492 // Track how many words match in this language
44493 languageMatches[l] = 0;
44494 for (var i=0; i<words.length; i++) {
44495 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
44496 if (wordInLanguage) {
44497 languageMatches[l]++;
44498 }
44499 }
44500 // Find languages with most word matches.
44501 // This is made difficult due to commonalities between Chinese
44502 // simplified vs traditional.
44503 var mostMatches = 0;
44504 var mostMatchedLanguages = [];
44505 for (var l in languageMatches) {
44506 var numMatches = languageMatches[l];
44507 if (numMatches > mostMatches) {
44508 mostMatches = numMatches;
44509 mostMatchedLanguages = [l];
44510 }
44511 else if (numMatches == mostMatches) {
44512 mostMatchedLanguages.push(l);
44513 }
44514 }
44515 }
44516 if (mostMatchedLanguages.length > 0) {
44517 // Use first language and warn if multiple detected
44518 language = mostMatchedLanguages[0];
44519 if (mostMatchedLanguages.length > 1) {
44520 console.warn("Multiple possible languages");
44521 console.warn(mostMatchedLanguages);
44522 }
44523 }
44524 }
44525 return language;
44526 }
44527
44528 function getLanguageFromUrl() {
c6624d51
IC
44529 for (var language in WORDLISTS) {
44530 if (window.location.hash.indexOf(language) > -1) {
44531 return language;
44532 }
44533 }
44534 return "";
0515eeec
IC
44535 }
44536
44537 function setMnemonicLanguage() {
44538 var language = getLanguage();
44539 // Load the bip39 mnemonic generator for this language if required
44540 if (!(language in mnemonics)) {
44541 mnemonics[language] = new Mnemonic(language);
44542 }
44543 mnemonic = mnemonics[language];
44544 }
44545
44546 function convertPhraseToNewLanguage() {
44547 var oldLanguage = getLanguageFromPhrase();
44548 var newLanguage = getLanguageFromUrl();
44549 var oldPhrase = DOM.phrase.val();
44550 var oldWords = phraseToWordArray(oldPhrase);
44551 var newWords = [];
44552 for (var i=0; i<oldWords.length; i++) {
44553 var oldWord = oldWords[i];
44554 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
44555 var newWord = WORDLISTS[newLanguage][index];
44556 newWords.push(newWord);
44557 }
44558 newPhrase = wordArrayToPhrase(newWords);
44559 return newPhrase;
44560 }
44561
44562 // TODO look at jsbip39 - mnemonic.splitWords
44563 function phraseToWordArray(phrase) {
44564 var words = phrase.split(/\s/g);
44565 var noBlanks = [];
44566 for (var i=0; i<words.length; i++) {
44567 var word = words[i];
44568 if (word.length > 0) {
44569 noBlanks.push(word);
44570 }
44571 }
44572 return noBlanks;
44573 }
44574
44575 // TODO look at jsbip39 - mnemonic.joinWords
44576 function wordArrayToPhrase(words) {
44577 var phrase = words.join(" ");
44578 var language = getLanguageFromPhrase(phrase);
44579 if (language == "japanese") {
44580 phrase = words.join("\u3000");
44581 }
44582 return phrase;
44583 }
44584
c6624d51
IC
44585 function isUsingOwnEntropy() {
44586 return DOM.useEntropy.prop("checked");
44587 }
44588
44589 function setMnemonicFromEntropy() {
2a6dd137 44590 clearEntropyFeedback();
18abe53b 44591 // Get entropy value
c6624d51 44592 var entropyStr = DOM.entropy.val();
18abe53b 44593 // Work out minimum base for entropy
c6624d51 44594 var entropy = Entropy.fromString(entropyStr);
18abe53b 44595 if (entropy.binaryStr.length == 0) {
c6624d51
IC
44596 return;
44597 }
44598 // Show entropy details
18abe53b
IC
44599 showEntropyFeedback(entropy);
44600 // Use entropy hash if not using raw entropy
44601 var bits = entropy.binaryStr;
44602 var mnemonicLength = DOM.entropyMnemonicLength.val();
44603 if (mnemonicLength != "raw") {
44604 // Get bits by hashing entropy with SHA256
44605 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
44606 var hex = sjcl.codec.hex.fromBits(hash);
44607 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 44608 while (bits.length % 256 != 0) {
18abe53b
IC
44609 bits = "0" + bits;
44610 }
44611 // Truncate hash to suit number of words
44612 mnemonicLength = parseInt(mnemonicLength);
44613 var numberOfBits = 32 * mnemonicLength / 3;
44614 bits = bits.substring(0, numberOfBits);
c6624d51 44615 }
c6624d51 44616 // Discard trailing entropy
18abe53b 44617 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
44618 var start = bits.length - bitsToUse;
44619 var binaryStr = bits.substring(start);
c6624d51
IC
44620 // Convert entropy string to numeric array
44621 var entropyArr = [];
18abe53b
IC
44622 for (var i=0; i<binaryStr.length / 8; i++) {
44623 var byteAsBits = binaryStr.substring(i*8, i*8+8);
44624 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
44625 entropyArr.push(entropyByte)
44626 }
44627 // Convert entropy array to mnemonic
44628 var phrase = mnemonic.toMnemonic(entropyArr);
44629 // Set the mnemonic in the UI
44630 DOM.phrase.val(phrase);
44631 }
44632
2a6dd137
IC
44633 function clearEntropyFeedback() {
44634 DOM.entropyStrength.text("...");
18abe53b 44635 DOM.entropyType.text("");
2a6dd137
IC
44636 DOM.entropyWordCount.text("0");
44637 DOM.entropyEventCount.text("0");
44638 DOM.entropyBitsPerEvent.text("0");
44639 DOM.entropyBits.text("0");
44640 DOM.entropyFiltered.html("&nbsp;");
44641 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
44642 }
44643
18abe53b 44644 function showEntropyFeedback(entropy) {
9e97eb76 44645 var numberOfBits = entropy.binaryStr.length;
18abe53b 44646 var strength = "extremely weak";
9e97eb76 44647 if (numberOfBits >= 64) {
18abe53b
IC
44648 strength = "very weak";
44649 }
9e97eb76 44650 if (numberOfBits >= 96) {
18abe53b
IC
44651 strength = "weak";
44652 }
9e97eb76 44653 if (numberOfBits >= 128) {
18abe53b
IC
44654 strength = "strong";
44655 }
9e97eb76 44656 if (numberOfBits >= 160) {
18abe53b
IC
44657 strength = "very strong";
44658 }
9e97eb76 44659 if (numberOfBits >= 192) {
18abe53b
IC
44660 strength = "extremely strong";
44661 }
44662 // If time to crack is less than one day, and password is considered
44663 // strong or better based on the number of bits, rename strength to
44664 // 'easily cracked'.
95f04905
IC
44665 try {
44666 var z = zxcvbn(entropy.base.parts.join(""));
44667 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
44668 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
44669 strength = "easily cracked";
44670 if (z.feedback.warning != "") {
44671 strength = strength + " - " + z.feedback.warning;
44672 };
44673 }
18abe53b 44674 }
95f04905
IC
44675 catch (e) {
44676 strength = "unknown";
44677 console.log("Error detecting entropy strength with zxcvbn:");
44678 console.log(e);
44679 }
95f04905 44680 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 44681 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 44682 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 44683 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 44684 DOM.entropyType.text(entropyTypeStr);
18abe53b
IC
44685 DOM.entropyStrength.text(strength);
44686 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 44687 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
44688 DOM.entropyWordCount.text(wordCount);
44689 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 44690 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
44691 }
44692
44693 function getEntropyTypeStr(entropy) {
44694 var typeStr = entropy.base.str;
44695 // Add some detail if these are cards
44696 if (entropy.base.asInt == 52) {
44697 var cardDetail = []; // array of message strings
44698 // Detect duplicates
44699 var dupes = [];
44700 var dupeTracker = {};
44701 for (var i=0; i<entropy.base.parts.length; i++) {
44702 var card = entropy.base.parts[i];
9e97eb76
IC
44703 var cardUpper = card.toUpperCase();
44704 if (cardUpper in dupeTracker) {
95f04905
IC
44705 dupes.push(card);
44706 }
9e97eb76 44707 dupeTracker[cardUpper] = true;
95f04905
IC
44708 }
44709 if (dupes.length > 0) {
44710 var dupeWord = "duplicates";
44711 if (dupes.length == 1) {
44712 dupeWord = "duplicate";
44713 }
44714 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
44715 if (dupes.length > 3) {
44716 msg += "...";
44717 }
44718 cardDetail.push(msg);
44719 }
44720 // Detect full deck
44721 var uniqueCards = [];
44722 for (var uniqueCard in dupeTracker) {
44723 uniqueCards.push(uniqueCard);
44724 }
44725 if (uniqueCards.length == 52) {
44726 cardDetail.unshift("full deck");
44727 }
9e97eb76
IC
44728 // Detect missing cards
44729 var values = "A23456789TJQK";
44730 var suits = "CDHS";
44731 var missingCards = [];
44732 for (var i=0; i<suits.length; i++) {
44733 for (var j=0; j<values.length; j++) {
44734 var card = values[j] + suits[i];
44735 if (!(card in dupeTracker)) {
44736 missingCards.push(card);
44737 }
44738 }
44739 }
44740 // Display missing cards if six or less, ie clearly going for full deck
44741 if (missingCards.length > 0 && missingCards.length <= 6) {
44742 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
44743 if (missingCards.length > 3) {
44744 msg += "...";
44745 }
44746 cardDetail.push(msg);
44747 }
95f04905
IC
44748 // Add card details to typeStr
44749 if (cardDetail.length > 0) {
44750 typeStr += " (" + cardDetail.join(", ") + ")";
44751 }
44752 }
44753 return typeStr;
44754 }
44755
e00964cc
IC
44756 function setQrEvents(els) {
44757 els.on("mouseenter", createQr);
44758 els.on("mouseleave", destroyQr);
44759 els.on("click", toggleQr);
44760 }
44761
44762 function createQr(e) {
44763 var content = e.target.textContent || e.target.value;
44764 if (content) {
44765 var size = 130;
44766 DOM.qrImage.qrcode({width: size, height: size, text: content});
44767 if (!showQr) {
52da415f
IC
44768 DOM.qrHider.addClass("hidden");
44769 }
44770 else {
44771 DOM.qrHider.removeClass("hidden");
e00964cc
IC
44772 }
44773 DOM.qrContainer.removeClass("hidden");
44774 }
44775 }
44776
44777 function destroyQr() {
44778 DOM.qrImage.text("");
44779 DOM.qrContainer.addClass("hidden");
44780 }
44781
44782 function toggleQr() {
44783 showQr = !showQr;
52da415f 44784 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
44785 DOM.qrHint.toggleClass("hidden");
44786 }
44787
20083ab9
IC
44788 function bip44TabSelected() {
44789 return DOM.bip44tab.hasClass("active");
44790 }
44791
44792 function bip32TabSelected() {
44793 return DOM.bip32tab.hasClass("active");
44794 }
44795
ab78acc6
IC
44796 var networks = [
44797 {
44798 name: "Bitcoin",
44799 onSelect: function() {
44800 network = bitcoin.networks.bitcoin;
44801 DOM.bip44coin.val(0);
ab78acc6
IC
44802 },
44803 },
44804 {
44805 name: "Bitcoin Testnet",
44806 onSelect: function() {
44807 network = bitcoin.networks.testnet;
44808 DOM.bip44coin.val(1);
ab78acc6
IC
44809 },
44810 },
44811 {
52d589ea 44812 name: "CLAM",
ab78acc6 44813 onSelect: function() {
52d589ea
IC
44814 network = bitcoin.networks.clam;
44815 DOM.bip44coin.val(23);
ab78acc6
IC
44816 },
44817 },
44818 {
44819 name: "Dogecoin",
44820 onSelect: function() {
44821 network = bitcoin.networks.dogecoin;
44822 DOM.bip44coin.val(3);
44823 },
44824 },
d5dc92fd 44825 {
52d589ea 44826 name: "DASH",
d5dc92fd 44827 onSelect: function() {
52d589ea
IC
44828 network = bitcoin.networks.dash;
44829 DOM.bip44coin.val(5);
d5dc92fd
IC
44830 },
44831 },
44832 {
52d589ea 44833 name: "Ethereum",
d5dc92fd 44834 onSelect: function() {
52d589ea
IC
44835 network = bitcoin.networks.bitcoin;
44836 DOM.bip44coin.val(60);
d5dc92fd
IC
44837 },
44838 },
f88fab20 44839 {
44840 name: "GAME",
44841 onSelect: function() {
44842 network = bitcoin.networks.game;
44843 DOM.bip44coin.val(101);
44844 },
44845 },
a3baa26e 44846 {
52d589ea 44847 name: "Jumbucks",
a3baa26e 44848 onSelect: function() {
52d589ea
IC
44849 network = bitcoin.networks.jumbucks;
44850 DOM.bip44coin.val(26);
a3baa26e
IC
44851 },
44852 },
44853 {
52d589ea 44854 name: "Litecoin",
a3baa26e 44855 onSelect: function() {
52d589ea
IC
44856 network = bitcoin.networks.litecoin;
44857 DOM.bip44coin.val(2);
a3baa26e
IC
44858 },
44859 },
44860 {
52d589ea 44861 name: "Namecoin",
a3baa26e 44862 onSelect: function() {
52d589ea
IC
44863 network = bitcoin.networks.namecoin;
44864 DOM.bip44coin.val(7);
a3baa26e
IC
44865 },
44866 },
5c434a8a 44867 {
52d589ea 44868 name: "Peercoin",
5c434a8a 44869 onSelect: function() {
52d589ea
IC
44870 network = bitcoin.networks.peercoin;
44871 DOM.bip44coin.val(6);
5c434a8a
CM
44872 },
44873 },
8a1f452d 44874 {
44875 name: "Ripple",
44876 onSelect: function() {
44877 network = bitcoin.networks.bitcoin;
44878 DOM.bip44coin.val(144);
44879 },
44880 },
5493efc3 44881 {
52d589ea 44882 name: "ShadowCash",
5493efc3 44883 onSelect: function() {
52d589ea
IC
44884 network = bitcoin.networks.shadow;
44885 DOM.bip44coin.val(35);
5493efc3 44886 },
44887 },
07ac4350 44888 {
52d589ea 44889 name: "ShadowCash Testnet",
07ac4350 44890 onSelect: function() {
52d589ea
IC
44891 network = bitcoin.networks.shadowtn;
44892 DOM.bip44coin.val(1);
07ac4350 44893 },
44894 },
01e81e53
GH
44895 {
44896 name: "Slimcoin",
44897 onSelect: function() {
44898 network = bitcoin.networks.slimcoin;
44899 DOM.bip44coin.val(63);
44900 },
44901 },
44902 {
44903 name: "Slimcoin Testnet",
44904 onSelect: function() {
44905 network = bitcoin.networks.slimcointn;
44906 DOM.bip44coin.val(111);
44907 },
44908 },
07ac4350 44909 {
52d589ea 44910 name: "Viacoin",
07ac4350 44911 onSelect: function() {
52d589ea
IC
44912 network = bitcoin.networks.viacoin;
44913 DOM.bip44coin.val(14);
07ac4350 44914 },
44915 },
8b095871 44916 {
52d589ea 44917 name: "Viacoin Testnet",
8b095871 44918 onSelect: function() {
52d589ea
IC
44919 network = bitcoin.networks.viacointestnet;
44920 DOM.bip44coin.val(1);
8b095871
IC
44921 },
44922 },
ab78acc6
IC
44923 ]
44924
56530adc
IC
44925 var clients = [
44926 {
44927 name: "Bitcoin Core",
44928 onSelect: function() {
44929 DOM.bip32path.val("m/0'/0'");
44930 DOM.hardenedAddresses.prop('checked', true);
44931 },
44932 },
44933 {
44934 name: "blockchain.info",
44935 onSelect: function() {
44936 DOM.bip32path.val("m/44'/0'/0'");
44937 DOM.hardenedAddresses.prop('checked', false);
44938 },
44939 },
44940 {
44941 name: "MultiBit HD",
44942 onSelect: function() {
44943 DOM.bip32path.val("m/0'/0");
44944 DOM.hardenedAddresses.prop('checked', false);
44945 },
44946 }
44947 ]
44948
ebd8d4e8
IC
44949 init();
44950
44951})();
dc55c6b0 44952</script>
ebd8d4e8
IC
44953 </body>
44954</html>